Primero que nada, creditos a Hackmew, ya que en su tutorial de ASM, me facilitó estos datos, y gracias a el trasteando los offsets, pude averiguar que se podia hacer eso.
Bien, iremos a la direccion 0x02024EA4, alli encontraremos lo siguiente:
02024EA4 - 02024EAB= Nombre protagonista. (en hexadecimal, para saber cada caracter usar la tabla.tbl) (8 BYTES)
02024EAC = Genero (00 si eres chico, 01 si eres chica, otros bytes otros minis, surf, bici..etc.) (1 BYTE)
02024EAD = ???? (Por investigar) (1 BYTE)
02024EAE - 02024EAF = Trainer ID (2 BYTES)
02024EB0-02024EB1 = Secret ID (2 BYTES)
02024EB2-02024EB3 = Horas jugadas (2 BYTES)
02024EB4 = Minutos jugados (1 BYTE)
02024EB5 = Segundos jugados (1 BYTE)
02024EB6 = Frames (1 BYTE)
02024EB7 = ???? (1 BYTE)
02024EB8-02024EB9 = OPCIONES (2 BYTES)
¿Que podemos modificar de ahí?
Cualquier cosa con WBTO, o con ASM. (Para unas cosas recomendaria asm y para otras wbto, por ejemplo para que te den un poke u otro dependiendo de si tu trainer id es par o impar.. usaria ASM, o para hacer un evento una vez transcurridas "X" horas de juego.. y usaria WBTO para cambio de mini, o para cambiarle el nombre al protagonista.)
Pero bueno, yo no he venido aqui a explicaros nada de eso, vamos a lo que nos interesa, EL CAMBIO DE MINI
Para ello empezaremos asi:
Empezamos nueva partida y elegimos boy en la eleccion de sexo, en la direccion 02024EAC, nos encontraremos "00" y si elegimos "girl" nos encontraremos "01", este byte conforme lo cambiamos obtendremos un mini u otro, por ejemplo el "02" es la bicicleta, creo recordar...
Por ende, podriamos usar este pequeño dato, para hacer el cambio de mini.
¿Como lo hariamos?
writebytetooffset 0x1 0x02024EAC
warp 0xbanco 0xmapeado 0xwarp 0x0 0x0
(El WBTO, escribe un byte para determinar que mini eres -sexo en realidad- y el warp es la unica manera que he visto hasta ahora de refrescar la pantalla completamente, ya que los fadescreen, o el special del setmaptile no funcionan..)
Con ese pequeño script, ahora mismo de haber elegido al chico, manejariamos a la chica.
(Si no usamos el minisprite de la chica en el juego, estaria libre, no supondría ningun problema. Así tendriamos dos minis diferentes para hacer dos roles distintos, con todo distinto.)
¿Cuando hay un problema?
Cuando el minisprite de la chica está ocupada -porque en nuestro juego hay chico y chica-, y tenemos que buscar otro mini, -por ejemplo el niño pequeño que creo que es "2F"-, al refrescar la pantalla por primera vez -entrando por un warp- CONTROLARIAMOS AL NIÑO PEQUEÑO!! pero el problema viene, cuando nos metemos en el menu pokemon o alguno de estos, ya que se refresca de nuevo la pantalla -de otra manera- y el mini vuelve a ser nuestro protagonista inicial, PERO si observamos en la direccion 02024EAC, el byte sigue igual que el que pusimos, por lo tanto para solucionar este problema habria que refrescar de nuevo la pantalla.
Pero como eso sería muy costoso, ¿qué tal si buscamos otra solucion mas adecuada a tener que estar refrescando la pantalla cada 2x3?
¿LA solucion a ese problema?
Se me ocurren 2:
(Por orden de preferencia, ya que uno de los problemas sucede tanto si vas a cambiar al mini de chica, como a otro...)
1)
Editar el evento de "warp" sin tener que verse los "flashes" previos, i asi se refresque completamente la pantalla.
2)
Evitar que se presione el boton start, mientras tengamos el control de dicho mini. (en caso de haber chico y chica y tengamos que usar otro mini, como el del niño pequeño)
Tengo una breve idea, y es usando el I/O comprobar que se presiona el "BOTON START" pase algo que te lo impida, -mediante un script de nivel de los que se ejecutan al abrir el menú..-
O cancelar la interrupcion de "start" brevemente con asm, algo más dificultoso...
-proximamente haré una investigacion sobre ello y haber que pasa, vosotros tambien podeis ayudarme, buscando alguna manera de que en el I/O, el byte que hace que sea START, no se produzca, o alguna otra manera que evite la entrada al menu pkmn