tuts_nds
Thread Id: 29257
Thread Name: [Tutorial HGSS] Reinsertar la evolución de Leafeon, Glaceon, Magnezone y Probopass
#0
Mikelan4315♪ 17505
Sí, amigos. De la mano de Sharks/MeroMero, hoy vamos a restaurar el código que hacía evolucionar a ciertos Pokémon al subirlos de nivel en un lugar específico. Más concretamente, Eevee en Glaceon y Leafeon, Magneton en Magnezone y Nosepass en Probopass.

Lamentablemente, el código para evolucionar a estos Pokémon fue completamente destruido en HGSS, por lo que no hay forma de obtener a estos cuatro Pokémon en un juego original, si no es intercambiándolos de DP/Pt.

Este es el código para la evolución en lugares concretos (proviene de Pokémon Platino, por cierto):

07 4B 00 22 19 88 88 42 04 D1 50 1C 41 00 04 48
40 5A 70 47 92 1C 1B 1D YY 2A F3 D3 00 20 70 47
XX XX XX XX


XX XX XX XX es el offset para los siguientes datos:

81 01 1A 00 CB 00 19 00 CF 00 18 00 D0 00 18 00
D1 00 18 00 D2 00 18 00 D3 00 18 00 D4 00 18 00
D5 00 18 00 D6 00 18 00 D7 00 18 00 D8 00 18 00
D9 00 18 00 DA 00 18 00 DB 00 18 00 DC 00 18 00
DD 00 18 00 FE 01 18 00 FF 01 18 00 48 02 18 00
49 02 18 00


El formato es MM MM EE EE

MM MM es el número del header (cabezal) del lugar.
EE EE es el método de evolución que ocupará.


Por ejemplo, los primeros 4 bytes serán leídos así:

81 01 => 01 81 => Cabezal 385, que es la Ruta 217 (exterior)
1A 00 => 00 1A => Método de evolución nº 26, que es el usado para que Eevee evolucione en Glaceon.

Por tanto, si subes de nivel a Eevee en la Ruta 217, evolucionará a Glaceon.

YY es el total de evoluciones relacionadas con un mapa/cabezal, multiplicado por 2. Este tipo de evolución, como habréis observado, utiliza 4 bytes por cada mapa que sea utilizado para la evolución, y en total son 84 bytes.

84/4 = 21

¡Recuerda multiplicarlo por 2!

21*2 = 42

42 es 2A en hexadecimal, por lo que en Pokémon Platino será YY = 2A.

Así es como la rutina es vista:





Parece ser que parte de la función todavía puede ser reconstruida:





¿Cómo vamos a restaurar el código?

Nota: Sólo para la versión española


Paso 1:
Abre tu ROM de Pokémon Oro HeartGold o Plata SoulSilver.

Paso 2:
Descomprime el arm9.bin.

Paso 3:
Ahora vamos a buscar un lugar donde escribir nuestro nuevo código. Podemos usar los espacios FF FF, que están en blanco. ¿Por qué no el offset 0x11027C?




Paso 4:
Copia en ese offset el siguiente código:

07 4B 00 22 19 88 88 42 04 D1 50 1C 41 00 04 48
40 5A 70 47 92 1C 1B 1D 12 2A F3 D3 00 20 70 47
E8 02 11 02






Paso 5:
También vamos a tener que crear los nuevos datos donde se relacionan los cabezales con la evolución. Para ello, vamos a suponer los siguientes lugares:

Eevee en Leafeon: Bosque Verde [1 cabezal]
Eevee en Glaceon: Islas Espuma (las zonas de la cueva que están heladas) [5 cabezales]
Magneton en Magnezone y Nosepass en Probopass: Ruta 10 y la Central Energía [3 cabezales]

Eso hace 9 mapas en total, es decir, 36 bytes (36/4*2=18 ; 18 = 0x12 => YY = 12). Copia este código en el offset 0x1102E8:

92 00 1A 00 C5 01 1A 00 C6 01 1A 00 C7 01 1A 00
C8 01 1A 00 93 00 19 00 12 00 18 00 84 01 18 00
D3 01 18 00



Paso 6:
Hay un problema, y es que hay 3 rutinas que usan una unión en rama al código "mapa-evolución", por lo que hay que modificar los pointers:

En el address 0x3CDFC, cambia FEF702FC por D3F03EFA
En el address 0x51E54, cambia E9F7D6FB por BEF012FA
En el address 0x81E66, cambia B9F7CDFB por 8EF009FA


Before


After


Paso 7:
Guarda el arm9.bin modificado y cierra el editor hexadecimal.

Paso 8:
Vuelve a comprimir el arm9 en la ROM con CrystalTile2.
#1
Dani_SR_17 28493
Un gran tutorial, muy útil para los que hackear en DS.
Además, muy bien explicado con imágenes, un gran aporte.

Quizás un día me anime y pruebe a hackear un poco en DS.