Registrarse

[Essentials] Cómo oscurecer a tus Pokémon.

Sulphur Alchemist

Usuario de platino
Buenas, soy nuevo aquí y hace poco añadí (después de experimentar mucho con el programa) la posibilidad de capturar Pokémon salvajes y convertirlos en Pokémon Oscuros al hacerlo con una Pokéball en especial (como la 4º película, la Negra Ball), así como la posibilidad de elegir a un Pokémon de tu equipo para oscurecerlo e incluso invertir el proceso disminuyendo al mínimo su oscuridad.

Yo uso la versión de Essentials 17.1

Bien, vamos por partes:

NEGRA BALL
La Negra Ball o Dark Ball, es una Pokéball especial que hace que cualquier Pokémon que sea atrapado con ella se convierta en un Pokémon Oscuro automáticamente.

¿Cómo lo hacemos?

Lo primero es crear su icono correspondiente, el icono que tendrá en la mochila, cuya imagen yo llamé: "itemDARKBALL".

itemDARKBALL.png


Esta imagen la alojé en la carpeta: "Graphics/Icons", y la inserté en RPG Maker XP con la opción de insertar.

Hice el icono de la ball para colocarlo en los datos del Pokémon que hayas capturado con ella bajo el nombre de "icon_ball_25", y la guardé en la carpeta "Graphics/Pictures/Summary".

icon_ball_25.png


También hice el icono de cómo se vería la Negra Ball cuando el jugador la tirase para atrapar un Pokémon; dibujé las imagenes usando una Pokéball normal de plantilla y las nombré como: "ball_25" y "ball_25_open".

Sus imágenes las alojé en la carpeta: "Graphics/Pictures", las inserté dentro de RPG Maker XP con la opción de insertar y luego las alojé dentro de la carpeta: "Graphics/Pictures/Battle".

ball_25.png
ball_25_open.png


Una vez ya tenemos alojadas e insertadas todas las imágenes, vamos a proceder a definir el item en la carpeta PBS, abriendo el documento "items".

PHP:
577,DARKBALL,Negra Ball,Negra Balls,3,0,Una Pokéball especial diseñada por el Team Rocket que oscurece el corazón de los Pokémon.,0,2,3,
Nota: Yo le he puesto el número 577 pero ese número puede variar como queráis mientras no esté repetido. Yo tenía 576 items en mi proyecto y la Negra Ball ha sido mi última implantación.

Una vez hemos definido el item, aún no está acabado ya que hay que definirlo también en la sección de scripts:

En la sección: "PItem_PokeBalls" la definimos como una PokéBall más, yo añadí también la Beast Ball de la 7ª generación. El caso es que tiene que quedar la última y colocarle una coma a la anterior, si no, dará error.

Código:
$BallTypes={
   24=>:BEASTBALL,
   25=>:DARKBALL
}
En la misma sección, bajamos y abajo del todo añadimos lo siguiente:

Código:
BallHandlers::OnCatch.add(:DARKBALL,proc{|ball,battle,pokemon|
pokemon.makeShadow
pokemon.iv=[31,31,31,31,31,31]
})
Con este código (pokemon.makeShadow) he hecho que cuando se atrape a un Pokémon salvaje con una Negra Ball, lo convierta en pokémon oscuro automáticamente, yo, además le he añadido la opción de que todos los Pokémon salvajes atrapados por la Negra Ball tengan sus IV's al máximo, y por eso, debajo del primer código he añadido: pokemon.iv=[31,31,31,31,31,31]. Pero esto ya es opcional.

Con esto, la Negra Ball tiene el ratio de una Pokéball normal, es decir, los Pokémon se pueden escapar, pero yo le he añadido la capacidad de ser como una Masterball y para ello he añadido este código debajo:

Código:
BallHandlers::IsUnconditional.add(:DARKBALL,proc{|ball,battle,battler|
   next true
})
Bien, pues con esto, ya tenemos añadida la Negra Ball en nuestro proyecto de RPG Maker.

Máquina de Oscuridad
Esta máquina oscurece el corazón del Pokémon que tú elijas, esto es mucho más sencillo de hacer que la Negra Ball.

Sólo hay que crear un evento como en la imagen siguiente y estará listo para usar. Te permite elegir el Pokémon de tu equipo que quieras oscurecer.

Máquina de Oscuridad.png


Máquina de Oscuridad (invertida)
En mi proyecto he incluido la posibilidad de invertir el proceso de oscuridad y usar esa misma máquina para hacer que la barra de oscuridad baje a 0 de golpe, para ello, sólo hay que añadir esta página al evento de la primera máquina:

Máquina de Oscuridad invertida.png


Tan sólo es cambiar dos scripts y listo.

Por último me gustaría presentaros algo, y es una Piedra Oscura.

Piedra Oscura
La Piedra Oscura es un objeto que permite evolucionar a cualquier Pokémon Oscuro (sea el que sea) a su última etapa de un golpe, por ejemplo, haría evolucionar a Bulbasaur Oscuro en un Venusaur Oscuro sin pasar por la etapa intermedia. Para crearla lo haremos de la siguiente forma.

Lo primero es dibujar (en mi caso sólo usé el icono del Ámbar Viejo y lo puse en negro) el icono como en el caso de la Negra Ball, nombrarlo, en mi caso lo nombré como: "itemDARKSTONE". Y añadirlo a la carpeta: "Graphics/Icons".

itemDARKSTONE.png


Lo siguiente es definirlo en el archivo "items" de la carpeta PBS:

PHP:
580,DARKSTONE,Piedra Oscura,Piedras Oscuras,1,1200,Una piedra peculiar que hace que los Pokémon Oscuros evolucionen. Es de color girsáceo.,1,0,13,
Y por último es definirla en los scripts de la siguiente manera:

En la sección PItems_Items la definimos como un objeto a parte de las piedras evolutivas normales con el siguiente código:

Código:
def pbIsDarkStone?(item)
  return $ItemData[item] && $ItemData[item][ITEMTYPE]==13
end
Y en la sección Pokemon_ShadowPokemon la definimos como si fuera una piedra evolutiva más, pero sólo se podrá usar con los Pokémon Oscuros.

Código:
ItemHandlers::UseOnPokemon.addIf(proc{|item| pbIsDarkStone?(item)},
   proc{|item,pokemon,scene|
     if !pokemon.isShadow?
       next true
     end
     newspecies=pbCheckEvolution(pokemon,item)
     if newspecies<=0
       scene.pbDisplay(_INTL("No tendrá ningún efecto."))
       next false
     else
       pbFadeOutInWithMusic(99999){
          evo=PokemonEvolutionScene.new
          evo.pbStartScreen(pokemon,newspecies)
          evo.pbEvolution(false)
          evo.pbEndScreen
          if scene.is_a?(PokemonBag_Scene)
            scene.pbRefreshAnnotations(proc{|p| pbCheckEvolution(p,item)>0 })
            scene.pbRefresh
          end
       }
       next true
     end
})
Por último, para que el Pokémon Oscuro pueda evolucionar, creamos una nueva condición de evolución en la sección Pokemon_Evolution:

Código:
  ItemDark          = 36

EVONAMES=["Unknown",
     "Happiness","HappinessDay","HappinessNight","Level","Trade",
     "TradeItem","Item","AttackGreater","AtkDefEqual","DefenseGreater",
     "Silcoon","Cascoon","Ninjask","Shedinja","Beauty",
     "ItemMale","ItemFemale","DayHoldItem","NightHoldItem","HasMove",
     "HasInParty","LevelMale","LevelFemale","Location","TradeSpecies",
     "LevelDay","LevelNight","LevelDarkInParty","LevelRain","HappinessMoveType",
     "Custom1","Custom2","Custom3","Custom4","Custom5",[COLOR="Red"]"ItemDark"[/COLOR],"RadioWave"
  ]

  # 0 = no parameter
  # 1 = Positive integer
[COLOR="red"]  # 2 = Item internal name[/COLOR]
  # 3 = Move internal name
  # 4 = Species internal name
  # 5 = Type internal name
  EVOPARAM=[0,    # Unknown (do not use)
     0,0,0,1,0,   # Happiness, HappinessDay, HappinessNight, Level, Trade
     2,2,1,1,1,   # TradeItem, Item, AttackGreater, AtkDefEqual, DefenseGreater
     1,1,1,1,1,   # Silcoon, Cascoon, Ninjask, Shedinja, Beauty
     2,2,2,2,3,   # ItemMale, ItemFemale, DayHoldItem, NightHoldItem, HasMove
     4,1,1,1,4,   # HasInParty, LevelMale, LevelFemale, Location, TradeSpecies
     1,1,1,1,5,   # LevelDay, LevelNight, LevelDarkInParty, LevelRain, HappinessMoveType
     1,1,1,1,1,   # Custom 1-5
     2,1          # ItemDark, RadioWave
  ]
end
Y ya en la misma sección buscamos pbMiniCheckEvolutionItem y añadimos nuestra nuevo método de evolución con item:

Código:
def pbMiniCheckEvolutionItem(pokemon,evonib,level,poke,item)
  # Checks for when an item is used on the Pokémon (e.g. an evolution stone)
  case evonib
  when PBEvolution::Item
    return poke if level==item
  when PBEvolution::ItemMale
    return poke if level==item && pokemon.isMale?
  when PBEvolution::ItemFemale
    return poke if level==item && pokemon.isFemale?
  when PBEvolution::ItemDark
    return poke if level==item && pokemon.isShadow?
  end
  return -1
end
Seguidamente agregamos lo siguiente a la sección PItems_Item:

Código:
    if pbIsEvolutionStone?(item)
      annot=[]
      for pkmn in $Trainer.party
        elig=(pbCheckEvolution(pkmn,item)>0)
        annot.push(elig ? _INTL("PUEDE") : _INTL("NO PUEDE"))
      end
    end
    if pbIsDarkStone?(item)
      annot=[]
      for pkmn in $Trainer.party
        elig=(pbCheckEvolution(pkmn,item)>0)
        annot.push(elig ? _INTL("PUEDE") : _INTL("NO PUEDE"))
      end
    end
Esto sirve para que el juego diga si se puede o no usar la Piedra Oscura con un Pokémon.

Lo que quedaría por hacer es ir al archivo PBS de pokemon y modificar las condiciones de evolución para que surta efecto, os pongo un ejemplo:

PHP:
#-------------------------------
[1]
Name=Bulbasaur
InternalName=BULBASAUR
Type1=GRASS
Type2=POISON
BaseStats=45,49,49,45,65,65
GenderRate=FemaleOneEighth
GrowthRate=Parabolic
BaseEXP=64
EffortPoints=0,0,0,0,1,0
Rareness=45
Happiness=70
Abilities=OVERGROW
HiddenAbility=CHLOROPHYLL
Moves=1,TACKLE,3,GROWL,7,LEECHSEED,9,VINEWHIP,13,POISONPOWDER,13,SLEEPPOWDER,15,TAKEDOWN,19,RAZORLEAF,21,SWEETSCENT,25,GROWTH,27,DOUBLEEDGE,31,WORRYSEED,33,SYNTHESIS,37,SEEDBOMB
EggMoves=AMNESIA,CHARM,CURSE,ENDURE,GIGADRAIN,GRASSWHISTLE,INGRAIN,LEAFSTORM,MAGICALLEAF,NATUREPOWER,PETALDANCE,POWERWHIP,SKULLBASH,SLUDGE
Compatibility=Monster,Grass
StepsToHatch=5355
Height=0.7
Weight=6.9
Color=Green
Shape=8
Habitat=Grassland
RegionalNumbers=1,0,1,231
Kind=Seed
Pokedex=Bulbasaur can be seen napping in bright sunlight. There is a seed on its back. By soaking up the sun's rays, the seed grows progressively larger.
BattlerPlayerY=27
BattlerEnemyY=31
BattlerAltitude=0
Evolutions=IVYSAUR,Level,16,VENUSAUR,ItemDark,DARKSTONE
Con esto nuestro Bulbasaur Oscuro debería ser capaz de evolucionar en un Venusaur Oscuro.

Y ya está, espero que os sirva de algo todo esto y siento mucho el lenguaje poco técnico que tengo.

Un saludo.

EDITO: Hay un pequeño detalle que se me olvidó de la Piedra Oscura, cuando se usa no pone si el item puede o no usarse en un Pokémon. Para que te lo ponga, simplemente agregamos lo siguiente a la sección PItems_Item:

Código:
    if pbIsEvolutionStone?(item)
      annot=[]
      for pkmn in $Trainer.party
        elig=(pbCheckEvolution(pkmn,item)>0)
        annot.push(elig ? _INTL("PUEDE") : _INTL("NO PUEDE"))
      end
    end
    if pbIsDarkStone?(item)
      annot=[]
      for pkmn in $Trainer.party
        elig=(pbCheckEvolution(pkmn,item)>0)
        annot.push(elig ? _INTL("PUEDE") : _INTL("NO PUEDE"))
      end
    end
Yo la he añadido justo debajo de las Piedras Evolutivas, tal como está en el código que he mostrado.

Perdón por las molestias.

PD: Dejo también este pequeño detalle más arriba, donde la sección donde explico la Piedra oscura.

EDITO 2: He vuelto a colocar imágenes y he añadido el icono que se muestra de la Negra Ball en los datos de un Pokémon.
 

Adjuntos

Última edición:

LeixerSnow

Desarrollador de Pokemon Shadow Rupture
Guau, la verdad es que nunca me ha llamado la atención la parte de scripts pero esto si me ha interesado. Varias partes:

1-Está bien explicado poniendo todos sus puntos y variedades, además del uso de fotos para ayudar a la comprensión.
2-Para los scripts has puesto código para también ayudar a la comprensión junto con las partes más importantes señaladas.
3-Un buen lenguaje y buena explicación, por lo que te tengo que felicitar (ya que no siempre se encuentra un post bien explicado y elaborado).

Asique muy buen aporte, sigue así y que todo siga bien. ~~~Xaoo~~~
 
Arriba