Objetivo: Emular/trasladar el tutor de movimiento(s) de Pokémon Crystal a Pokémon Gold & Silver.
Conocimentos previos: Gracias al desensamble de Crystal sabemos que el tutor de movimientos ocupa numero 0x83 del comando "special" (0xF).
Meta a corto plazo: A pesar de contar con toda la documentación para poder trasladar el tutor de movimientos de Crystal a Gold&silver, es mucho trabajo tener que adaptar y buscar todas las rutinas necesarias, por eso propongo una forma diferente de hacer los tutores, no mediante ASM, si no mediante Scripts (o la mezcla de ambos).
Usando la documentación del compendio de Tauwasser y la documentación Ram de KBC podemos escribir datos en la Ram y enseñarle movimientos a nuestros pokemon pero con algunas limitaciones.
Los movimientos a enseñar deberan ser "genericos", es decir, aquellos movimientos que los pueden aprender todos los pokemon con excepcion de Caterpie, Metapod, Weedle, Kakuna, Magikarp, Ditto, Unown, Wobbuffet, Smeargle,como Curse o Double Team, esto con el fin de simplificar la tarea y de paso ahorrar espacio en las TM.
Los movimientos que cuentan con estas caracteristicas son:
- Curse
- Double Team
- Frustration
- Hidden Power
- Mimic
- Protect
- Rest
- Return
- Sleep Talk
- Substitute
- Toxic
NOTA: Con un poco de trabajo extra podemos comprobar si el pokemon posee sexo y hacer un tutor para Attract.
El primer paso para el script es comprobar que el pokemon seleccionado NO sea uno de los anteriores mencionados y para ello podemos usar el comando "special" con su variable 0x4C, el cual abre el menu del pokemon y pone en la RAM de los scripts ($D173) el numero del pokemon y el nombre en la MEMORY1 ($CF91).
De ahi aplicamos tantos "if equal" como sean necesarios para indicar que el pokemon NO puede aprender el movimiento.
#org 0x000000
special 0x4C
if != 0x1B 0xYYXX ' 0xXXYYZZ
if != 0x1C ETC.
...
Segun Tauwasser, el special 0x4C devuelve 2 resultados, en la RAM el No. del pokemon seleccionado y en la MEMORY1 el nombre del pokemon. Tengo la teoria de que devuelve un tercer valor en $D006 (o $D005) , que vendría siendo el lugar en la party del pokémon seleccionado, de ser asi, nos podria ahorrar mucho trabajo de ASM.
Después de toda la comprobación, en el caso de que el pokemon SI pueda aprender el movimiento podemos partir de dos vertientes:
- 1.- Que mediante ASM se haga un checkeo del 4to, 3er y 2do movimiento (DA2F, DA2E y DA2D en el caso del primer pokemon, por ejemplo) para ver si algun espacio esta libre y escribir el movimiento. En caso de no haber espacio advertir que el ultimo movimiento se va sobreescribir*
- 2.-Que se habra una caja de texto preguntando que movimiento queremos que se reemplaze, pero ojo, la caja de texto no tendria los nombres de los movimientos, si no solo el texto de "movimiento 1", "movimiento n", etc.*
*Estos metodos propuestos no son tan profesionales, pero hasta no conocer como trabajan las TM al momento de sobrescribir movimientos, no podemos hacer nada mas.
Para escribir el movmiento del pokemon, solo hace falta hacer ramificaciones de scripts ayudados del comando "copyvartobyte", el cual escribe el index/valor del movimiento en la memoria Ram correspondiente de cada pokemon y de sus PP.
Lo mas importante de esta metodologia debe ser su versatildiad. El script debe estar hecho de tal forma que interactue con las variables, de esa forma podremos estar usando el mismo script (con 3jump) una y otra vez con tan solo estar cambiando las variables de cada movimiento.
Dentro de poco voy a publicar un borrador del script para un mejor entendimiento.
PD: Quizas los novatos no entienda muy bien de lo que hablo, pero tan pronto aprendan a hacer scripts en GBC les sera muy facil relacionar los terminos.
Saludos!