Registrarse

[pokeruby] Evoluciones

Laquin

Usuario mítico
¡Buenas! Os traigo otro tutorial más de Pokeruby. Os enseñaré a cambiar las evoluciones de los Pokémon.

Para esto, estaremos usando el archivo evolution.h, el cual se encuentra en src/data/pokemon/. Sin embargo, también estaría bien que tuvierais abierto pokemon.h (que se encuentra en include/) e items.h y species.h (ambos se encuentran en include/constants/), puesto que voy a explicar ciertas cosas de estos.

Empecemos por los tipos de evolución. Hay 15 tipos de evolución. Sí, yo también pensaba que eran menos, aunque muchos de ellos tienen bastante relación.
Si entramos en pokemon.h y vamos a la línea 485, vemos definidas varias constantes, que son justamente los tipos de evolución que hay. Si bien el código tiene comentarios escritos, estos están puestos en inglés, por lo que he decidido traducirlos. (Mañana tengo examen de inglés, ¿esto cuenta como estudio?) De hecho, podéis copiar el código que os dejo aquí y reemplazarlo por el que venía en inglés. Al ser comentarios, no va a tener ningún efecto en la compilación, no os preocupéis.

Código:
#define EVO_FRIENDSHIP       0x0001 // Si el pokémon sube de nivel con una amistad ≥ 220
#define EVO_FRIENDSHIP_DAY   0x0002 // Si el pokémon sube de nivel de día con una amistad ≥ 220
#define EVO_FRIENDSHIP_NIGHT 0x0003 // Si el pokémon sube de nivel de noche con una amistad ≥ 220
#define EVO_LEVEL            0x0004 // Si el pokémon llega al nivel especificado
#define EVO_TRADE            0x0005 // Si el pokémon es intercambiado
#define EVO_TRADE_ITEM       0x0006 // Si el pokémon es intercambiado mientras lleva el objeto especificado
#define EVO_ITEM             0x0007 // Si el objeto especificado es usado en el pokémon
#define EVO_LEVEL_ATK_GT_DEF 0x0008 // Si el pokémon llega al nivel especificado con ataque > defensa
#define EVO_LEVEL_ATK_EQ_DEF 0x0009 // Si el pokémon llega al nivel especificado con ataque = defensa
#define EVO_LEVEL_ATK_LT_DEF 0x000a // Si el pokémon llega al nivel especificado con ataque < defensa
#define EVO_LEVEL_SILCOON    0x000b // Si el pokémon llega al nivel especificado con una personalidad de Silcoon
#define EVO_LEVEL_CASCOON    0x000c // Si el pokémon llega al nivel especificado con una personalidad de Cascoon
#define EVO_LEVEL_NINJASK    0x000d // Si el pokémon llega al nivel especificado (valor especial para Ninjask)
#define EVO_LEVEL_SHEDINJA   0x000e // Si el pokémon llega al nivel especificado (valor especial para Shedinja)
#define EVO_BEAUTY           0x000f // Si el pokémon sube de nivel con una belleza ≥ valor especificado

Bien, ahora sabemos cuáles son los tipos de evolución. Vayamos a evolution.h. Vemos una estructura con todas las evoluciones de los distintos pokémon del juego. Y vemos cómo hay pokémon que tienen más de una evolución, incluso de distinto tipo algunos. (Por ejemplo, Eevee). ¿Qué nos falta hacer? Pues experimentar un poco. Veis que todos siguen la misma sintaxis:
Código:
Pokémon1 = {{TipoDeEvolución, Valor, Pokémon2}},
Donde Pokémon1 es el pokémon que tenemos antes de evolucionarlo, y Pokémon2 es el que recibimos al hacerlo. (Véase species.h).
El valor dependerá del tipo de evolución, el cual lo acabamos de ver:

  • Si el tipo es EVO_FRIENDSHIP, EVO_FRIENDSHIP_DAY o EVO_FRIENDSHIP_NIGHT, el valor será 0, puesto que el tipo de evolución ya implica que evolucionará al tener una amistad de 220 o más.
  • Si el tipo es EVO_LEVEL, EVO_LEVEL_ATK_GT_DEF, EVO_LEVEL_ATK_EQ_DEF, EVO_LEVEL_ATK_LT_DEF, EVO_LEVEL_SILCOON, EVO_LEVEL_CASCOON, EVO_LEVEL_NINJASK o EVO_LEVEL_SHEDINJA, el valor será el nivel que tenga que tener el pokémon para evolucionar.
  • Si el tipo es EVO_TRADE, el valor será 0.
  • Si el tipo es EVO_TRADE_ITEM o EVO_ITEM, el valor será el ID del objeto que tenga que tener el pokémon para evolucionar. (Véase items.h).
  • Si el tipo es EVO_BEAUTY, el valor serán los puntos de belleza que tenga que tener el pokémon para evolucionar.

Por ejemplo, si yo quiero hacer que Mankey evolucione a Alakazam por intercambio y solo si tiene una poción, buscaría [SPECIES_MANKEY] en el archivo evolution.h, quitaría su evolución original y pondría la mía. Pero, como ya expliqué aquí, no me gusta borrar el código, así que lo convertiremos en un comentario:
Código:
[SPECIES_MANKEY]     //= {{EVO_LEVEL, 28, SPECIES_PRIMEAPE}},
					 = {{EVO_TRADE_ITEM, ITEM_POTION, SPECIES_ALAKAZAM}}
Y también puedo hacer que existan ambas evoluciones:
Código:
[SPECIES_MANKEY]     = {{EVO_LEVEL, 28, SPECIES_PRIMEAPE},
					 {EVO_TRADE_ITEM, ITEM_POTION, SPECIES_ALAKAZAM}},
De esta manera, al llegar al nivel 28, evolucionará a Primeape. Pero si antes de que llegue a ese nivel hacemos un intercambio mientras lleva una poción, va a evolucionar a Alakazam.
NOTA: Tened cuidado con las llaves:
Abrimos dos llaves y cerramos dos.
Código:
[Pokémon] = {{Evolución}},
Abrimos dos llaves, cerramos una al final de la primera evolución, abrimos una en la siguiente evolución, y continuamos igual hasta llegar a la última, donde cerramos dos llaves.
Código:
[Pokémon] = {{Evolución1}, {Evolución2}},
[Pokémon] = {{Evolución1}, {Evolución2}, {Evolución3}},
Y tampoco debéis olvidar las comas después de cada evolución, aunque sea la última.

Espero que os sea útil. ¡Saludos!
 
Última edición:

KleinStudio

Un plato es un plato
Miembro del equipo
Webmaster
Respuesta: Pokeruby | Evoluciones

esto tambien se le podria aplicar a fire red?
En un futuro probablemente sí, a pokefirered todavía le queda bastante más para estar en el mismo estado que pokeruby, pero partiendo de que técnicamente son la misma base (modificada) seguramente las cosas básicas no estarán modificadas, y en el caso de que lo estén dudo que sea algo completamente diferente.
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Estoy leyendo todos los tutos de Pokeruby que hay en el foro (afortunadamente no son muchos y no da tanta pereza leerlos) y me he maravillado de la facilidad que presenta respecto a los métodos convencionales.

Lo cierto es que me he interesado en esto de Pokeruby y en breve me pondré yo también me pondré a investigar sobre esto, muchas gracias por el tuto @Laquin ;)
 
Arriba