Author Id: 17505 Author Name: Mikelan4315♪ Post Content: 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: [IMG]http://nsmbhd.net/file/6308d94f94e5d50f9bd8/CodePt.png[/IMG] Parece ser que parte de la función todavía puede ser reconstruida: [IMG]http://nsmbhd.net/file/646343040ba79ffd0966/CodeHGSS.png[/IMG] ¿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? [IMG]http://nsmbhd.net/file/2894be16b0c6e33dd124/code.png[/IMG] 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 [IMG]http://nsmbhd.net/file/a4843d6bc733df54537d/code2.png[/IMG] [IMG]http://nsmbhd.net/file/4c268ba7f01c3ab909b7/CodeHGSS%20fix.png[/IMG] 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 [IMG]http://nsmbhd.net/file/93dcaf1015a3b583de3f/code3.png[/IMG] 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 [IMG]http://nsmbhd.net/file/0d7a2f9a37f8a425a58c/Before.png[/IMG] After [IMG]http://nsmbhd.net/file/1da6586d01b4396b6dd1/After.png[/IMG] Paso 7: Guarda el arm9.bin modificado y cierra el editor hexadecimal. Paso 8: Vuelve a comprimir el arm9 en la ROM con CrystalTile2.