Mikelan98
WaH used to be a bigger place...
Como me da a mí que mi era ya acabó hace algún tiempo, y después de las muchas insistencias de Rafa, hoy escribo este post (que quisiera haber escrito mucho antes pero la pereza no me ha permitido hacerlo) para revelar los secretos mejor guardados de mi investigaciones.
Antes que nada, aviso de que este post está dirigido hacia gente que ya ha manoseado el ASM en 4ª generación alguna vez. Si no estás familiarizado con nada de la programación ASM, te invito amablemente a que ahorres tiempo de tu vida volviendo al índice de WaH y buscando tutoriales de iniciación al bello arte del ensamblador. No me parece justo que alguien sin conocimientos aproveche mi trabajo, pues no lo publico para que se juegue sino para que se continúe.
He modificado más de 50 subrutinas o valores aislados en todo el arm9, por lo que no merece la pena escribir un tutorial sobre todo lo que he hecho, porque es trabajo que he desarrollado durante 2 años y tendría que llorar sangre para explicároslo.
Aquí tenéis el arm9 modificado junto con los overlays (unos están modificados y otros no, pasarlo por WinMerge si queréis saber cuáles son)
802
Podéis extraer tanto código como queráis para adaptarlo al arm9 de vuestra ROM, pero tenéis que darme créditos necesaria y obligatoriamente. Si me robáis rutinas sin acreditarme, moveré hilos para asegurarme de que no se sepa más de vosotros en WaH ¬¬
Y las cosas a tener en cuenta para continuar de desarrollar lo que ya está hecho. Por cierto, no os voy a pasar los archivos de recursos gráficos (narcs de los sprites o iconos) porque eso lo podéis hacer vosotros manualmente.
OVERWORLDS DE LOS POKÉMON
En 0x000FEBD2 se encuentra la primera "tabla" o "lista" que creé. El primer halfword corresponde al overworld de Bulbasaur (los overworlds se encuentran en el narc 0/8/1). Eso quiere decir que el archivo 0x129 en el narc es el minisprite de Bulbasaur. El segundo halfword corresponde a Ivysaur y así sucesivamente.
Mi código, cuando lo descubráis, veréis que lo que hace es "poner" a todos los Pokémon como si fueran Bulbasaur, y sólo en el último momento, cambia los gráficos del overworld.
Cosas a tener en cuenta:
No os tenéis que rallar por estos números (porque ya los adapté yo) si seguís la misma estructura que tengo yo en el narc 0/8/1: todos los Pokémon empiezan a aparecer en el ID 0x129 y por parejas macho/hembra y por orden. En el caso de que un Pokémon tenga forma alternativa, la pareja va después de la forma original. Por ejemplo:
Misdreavus M
Misdreavus H
Unown A
Unown A
Unown B
Unown B
Unown C
Unown C
...
Unown !
Unown !
Wobbuffet M
Wobbuffet H
Siempre hay que tener en cuenta que una cosa es la estructura de la tabla en el arm9 y otra es la estructura del narc que tiene los recursos gráficos.
Por cierto, no sé si tuve en cuenta las megaevoluciones a la hora de crear la tabla, en cuyo caso ya sabéis, Venusaur tendría 2 parejas distintas, Charizard 3 parejas distintas...
COSAS QUE MEJORAR: La subrutina que hace que los Pokémon gigantes se encerraran en sus PokéBall al entrar en edificios la desactivé, pero quedó buggeada porque realmente hice una chapuza de bypass. Esto hizo que ahora, en edificios, cada vez que reseteas la pantalla el Pokémon entra o sale de la PokéBall, y además, al salir de edificios, el Pokémon siempre tiene la animación de salir de ella.
ICONOS
Nada del otro mundo, el código tiene implementadas 2 anti-limitaciones que hacían que los iconos de números a partir del 493 se viesen como (?). Sin embargo, una de ellas ha jodido los colores de los iconos de Unown, que cambian de paleta dependiendo del número límite.
Por lo demás, en el narc 0/2/0, que es el de los gráficos para los iconos, 50 iconos después de Arceus (o sea, empezando por el archivo nº 551) está el de Victini, Snivy y en adelante. Hay que tener en cuenta que después del icono de Arceus están algunos de formas alternativas propias del juego original y son INTOCABLES (por eso Victini no es el número 494). Las formas alternativas empiezan en el archivo nº 860 y tienen la estructura de: forma original - forma alternativa 1 - (forma alternativa 2...). Sin embargo, lo de las formas alternativas lo explico a continuación, pues considero que puede caer fácilmente en desuso este modo de abordar las formas alternativas.
El número de paleta correspondientes a los iconos (recordemos que los iconos tienen que elegir 1 de entre 3 paletas posibles) creo que siguen en el mismo sitio (obviamente, ampliados para los 802 Pokémon). Aún así, os reto a continuar con los trabajos de MeroMero y hallar la (milagrosa) forma de hacer que los iconos compartan una misma paleta de 256 colores entre todos, o como mínimo, de 48 colores.
COSAS QUE MEJORAR: Lo de las paletas de las formas alternativas de Unown, uno de los ED01 lo sustituí por otro valor y eso cambió todas sus paletas. Se arreglaría simplemente eliminando la limitación en vez de cambiar el valor límite, os lo dejo a vosotros.
FORMAS ALTERNATIVAS
He perdido el offset de la tabla que rige las formas alternativas, pero aún así considero mucho mejor meter las formas alternativas como Pokémon totalmente independientes (sobre todo formas de Alola y megaevoluciones) y programar las grandes excepciones por otro lado (como Deerling, que requerirá mucho ASM).
Igualmente, hay vestigios de mi código para las formas alternativas en el narc 0/2/0 (el de los iconos), en el que después de Marshadow aparecen las formas alternativas.
Y de momento ya está, eso es lo más imprescindible para seguir investigando y desarrollando el arm9. Sólo tenéis que comparar los archivos con los originales y usar el IDA para saber qué narices es ese código.
La verdad es que siento mucho no poder explayarme contandoos cómo he hecho las cosas, pero es que de la mitad no me acuerdo y la otra mitad sería un tocho enoooooooooorme.
Conforme me vaya acordando de más apartados, los iré escribiendo en el thread. Para "expandir" realmente la PokéDex lo único que hace falta es expandir los narcs que tienen los archivos de los sprites, los datos de los Pokémon, su moveset, sus huellas...
Antes que nada, aviso de que este post está dirigido hacia gente que ya ha manoseado el ASM en 4ª generación alguna vez. Si no estás familiarizado con nada de la programación ASM, te invito amablemente a que ahorres tiempo de tu vida volviendo al índice de WaH y buscando tutoriales de iniciación al bello arte del ensamblador. No me parece justo que alguien sin conocimientos aproveche mi trabajo, pues no lo publico para que se juegue sino para que se continúe.
He modificado más de 50 subrutinas o valores aislados en todo el arm9, por lo que no merece la pena escribir un tutorial sobre todo lo que he hecho, porque es trabajo que he desarrollado durante 2 años y tendría que llorar sangre para explicároslo.
Aquí tenéis el arm9 modificado junto con los overlays (unos están modificados y otros no, pasarlo por WinMerge si queréis saber cuáles son)
802
Podéis extraer tanto código como queráis para adaptarlo al arm9 de vuestra ROM, pero tenéis que darme créditos necesaria y obligatoriamente. Si me robáis rutinas sin acreditarme, moveré hilos para asegurarme de que no se sepa más de vosotros en WaH ¬¬
Y las cosas a tener en cuenta para continuar de desarrollar lo que ya está hecho. Por cierto, no os voy a pasar los archivos de recursos gráficos (narcs de los sprites o iconos) porque eso lo podéis hacer vosotros manualmente.
OVERWORLDS DE LOS POKÉMON
En 0x000FEBD2 se encuentra la primera "tabla" o "lista" que creé. El primer halfword corresponde al overworld de Bulbasaur (los overworlds se encuentran en el narc 0/8/1). Eso quiere decir que el archivo 0x129 en el narc es el minisprite de Bulbasaur. El segundo halfword corresponde a Ivysaur y así sucesivamente.
Mi código, cuando lo descubráis, veréis que lo que hace es "poner" a todos los Pokémon como si fueran Bulbasaur, y sólo en el último momento, cambia los gráficos del overworld.
Cosas a tener en cuenta:
- Los overworlds tienen diferenciación entre macho y hembra. Cuando es hembra el Pokémon que acompaña al prota en el juego, mi código lo detecta le suma al overworld +1, lo que permite que, por ejemplo, 0x129 corresponda a Bulbasaur macho y 0x12A a Bulbasaur hembra. Es por ello que los halfwords tienen valores, en su mayoría, de 2 en 2, y el narc 0/8/1 se estructure por parejas (Bulbasaur M/Bulbasaur H/Ivysaur M/Ivysaur H...).
- Cuando los Pokémon no pueden tener género, se le suma +2, por lo que el valor que tenemos que escribir en el halfword es el número del archivo - 2. Esto implica que, por ejemplo, Snorlax y Articuno compartan el mismo número, con la diferencia de que a Articuno el juego le sumará +2 a la hora de coger el overworld del narc, debido a que no tiene género.
- A las formas alternativas se le van sumando +2 por cada forma.
- El número interno de Victini no es 494 sino 544, motivo por el cual después del halfword de Arceus hay 50 FF FF's hasta llegar al de Victini.
- Números de overworld superiores a 0x700 creo que era (y si no, simplemente mirad cuál corresponde a Steelix) son para los Pokémon gigantes.
No os tenéis que rallar por estos números (porque ya los adapté yo) si seguís la misma estructura que tengo yo en el narc 0/8/1: todos los Pokémon empiezan a aparecer en el ID 0x129 y por parejas macho/hembra y por orden. En el caso de que un Pokémon tenga forma alternativa, la pareja va después de la forma original. Por ejemplo:
Misdreavus M
Misdreavus H
Unown A
Unown A
Unown B
Unown B
Unown C
Unown C
...
Unown !
Unown !
Wobbuffet M
Wobbuffet H
Siempre hay que tener en cuenta que una cosa es la estructura de la tabla en el arm9 y otra es la estructura del narc que tiene los recursos gráficos.
Por cierto, no sé si tuve en cuenta las megaevoluciones a la hora de crear la tabla, en cuyo caso ya sabéis, Venusaur tendría 2 parejas distintas, Charizard 3 parejas distintas...
COSAS QUE MEJORAR: La subrutina que hace que los Pokémon gigantes se encerraran en sus PokéBall al entrar en edificios la desactivé, pero quedó buggeada porque realmente hice una chapuza de bypass. Esto hizo que ahora, en edificios, cada vez que reseteas la pantalla el Pokémon entra o sale de la PokéBall, y además, al salir de edificios, el Pokémon siempre tiene la animación de salir de ella.
ICONOS
Nada del otro mundo, el código tiene implementadas 2 anti-limitaciones que hacían que los iconos de números a partir del 493 se viesen como (?). Sin embargo, una de ellas ha jodido los colores de los iconos de Unown, que cambian de paleta dependiendo del número límite.
Por lo demás, en el narc 0/2/0, que es el de los gráficos para los iconos, 50 iconos después de Arceus (o sea, empezando por el archivo nº 551) está el de Victini, Snivy y en adelante. Hay que tener en cuenta que después del icono de Arceus están algunos de formas alternativas propias del juego original y son INTOCABLES (por eso Victini no es el número 494). Las formas alternativas empiezan en el archivo nº 860 y tienen la estructura de: forma original - forma alternativa 1 - (forma alternativa 2...). Sin embargo, lo de las formas alternativas lo explico a continuación, pues considero que puede caer fácilmente en desuso este modo de abordar las formas alternativas.
El número de paleta correspondientes a los iconos (recordemos que los iconos tienen que elegir 1 de entre 3 paletas posibles) creo que siguen en el mismo sitio (obviamente, ampliados para los 802 Pokémon). Aún así, os reto a continuar con los trabajos de MeroMero y hallar la (milagrosa) forma de hacer que los iconos compartan una misma paleta de 256 colores entre todos, o como mínimo, de 48 colores.
COSAS QUE MEJORAR: Lo de las paletas de las formas alternativas de Unown, uno de los ED01 lo sustituí por otro valor y eso cambió todas sus paletas. Se arreglaría simplemente eliminando la limitación en vez de cambiar el valor límite, os lo dejo a vosotros.
FORMAS ALTERNATIVAS
He perdido el offset de la tabla que rige las formas alternativas, pero aún así considero mucho mejor meter las formas alternativas como Pokémon totalmente independientes (sobre todo formas de Alola y megaevoluciones) y programar las grandes excepciones por otro lado (como Deerling, que requerirá mucho ASM).
Igualmente, hay vestigios de mi código para las formas alternativas en el narc 0/2/0 (el de los iconos), en el que después de Marshadow aparecen las formas alternativas.
Y de momento ya está, eso es lo más imprescindible para seguir investigando y desarrollando el arm9. Sólo tenéis que comparar los archivos con los originales y usar el IDA para saber qué narices es ese código.
La verdad es que siento mucho no poder explayarme contandoos cómo he hecho las cosas, pero es que de la mitad no me acuerdo y la otra mitad sería un tocho enoooooooooorme.
Conforme me vaya acordando de más apartados, los iré escribiendo en el thread. Para "expandir" realmente la PokéDex lo único que hace falta es expandir los narcs que tienen los archivos de los sprites, los datos de los Pokémon, su moveset, sus huellas...
Última edición: