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.
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:
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:
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:
Y también puedo hacer que existan ambas evoluciones:
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:
Y tampoco debéis olvidar las comas después de cada evolución, aunque sea la última.
Espero que os sea útil. ¡Saludos!
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. (
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}},
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}}
Código:
[SPECIES_MANKEY] = {{EVO_LEVEL, 28, SPECIES_PRIMEAPE},
{EVO_TRADE_ITEM, ITEM_POTION, SPECIES_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}},
Espero que os sea útil. ¡Saludos!
Última edición: