Registrarse

[Otros] E | Tutor de movimientos personalizado

kakarotto

Leyenda de WaH
Hola a todos.
Este es mi primer tutorial en la comunidad de Wah y me gustaría aportar algo que puede ser interesante y a la par incentivar el rom hacking de emerald, pues no en vano coincidimos que es el rom por excelencia para hackear.

Para este tutorial necesitaremos:
HxD (O tu programa de edición hexadecimal favorito)

Este tutorial tiene dos "caminos", el primer camino sin repointear y el segundo repointeando.

SIN REPUNTEAR
-------------------
Quizás es el método más "seguro" y no tienes que complicarte mucho la cabeza.
Tan sólo basta con buscar el offset 61500C y comprobar el formato de los bytes (05 00 0E 00...) de los cuales 05 es MEGAPUÑO y 0E es DANZA ESPADA. Si necesitas saber que byte es cada ataque, consúltalo en el documento STD_ATTACKS.rbh de XSD.

Una vez cambiado los bytes a tu gusto ( hasta 30 bytes puedes cambiar ) habrás comprobado la posición (o index) de cada byte. Es decir 05 (MEGAPUÑO) está en el index 0, 0E (DANZA ESPADA) en el index 1 y así sucesivamente.

Esto lo necesitamos más que nada para hacer el script en emerald:
Código:
setvar 0x8005 0xINDEX //Sustituir la palabra INDEX por la posición. 
special 0x1DD //Este es el special que se ejecuta para esta labor.
waitstate       //El waitstate es requerido para que el script funcione.
Es un script que va directamente a la función para su comprobación.

Tan sólo queda probar ingame para comprobar que todo funciona a la perfección.
REPUNTEANDO
------------------
Esta opción es un poco más "PROFESIONAL", aunque con algún inconveniente...

Buscamos el offset 61500C y comprobamos una tabla de datos tal como (05 00 0E 00..) 05 sería MEGAPUÑO y 0E DANZA ESPADA.. y así sucesivamente.

Para más información acerca de cuál byte es cada uno de los ataques, basta con revisar el document STD_ATTACK.rbh de XSD.

Una vez analizado el offset y la tabla en cuestión, debemos permutar dicha dirección para conseguir el puntero y de esta manera repuntearlo. Como bien sabéis este offset repunteado es 0C506108.

Ahora es turno de crear una nueva tabla en un espacio vacio. El formato es idéntico al original.

Escribimos en dicho espacio vacío (07 00 39 00) (tienes hasta 30 bytes y es solo un ejemplo.)

De este modo observaremos que el ataque cuyo byte es 07 está en la posición (o index) número 0, 39 en el index 1 y así sucesivamente.

Esto lo necesitaremos más que nada para construir el script correctamente:
Código:
setvar 0x8005 0xINDEX //Sustituir la palabra INDEX por la posición. 
special 0x1DD //Este es el special que se ejecuta para esta labor.
waitstate       //El waitstate es requerido para que el script funcione.
Es un script que va directamente a la función para su comprobación.

Para que todo funcione deberás cambiar el puntero original por el nuevo puntero donde se creó la tabla.
Es decir, si creaste la tabla en el offset E59B30, pues sustituye el nuevo puntero 309BE508 por 0C506108 (En total hay que sustituir tres punteros iguales).

Con esto tan sólo queda probarlo ingame y ver que todo funciona perfectamente aunque hay un pequeño inconveniente... (Ver al final del post )
He aquí unos pequeños "inconvenientes" de este tutorial...
Al repuntear la tabla para crear una a tu gusto, te "cargas" las series de rutinas que controlan el byte que determina si un pokémon puede aprender un movimiento o no.

(No estoy seguro si esto influye en las MT que puede aprender, creo que no influye para nada)

Es decir, si repunteas la tabla harás posible que cualquier pokémon pueda aprender cualquier movimiento.

Lo digo como "pequeño inconveniente" pues puedes sacarle partido a esto y hacer algún pokemon con movimientos "ilegales", rememorar los Pikachu con SURF o VUELO o bien hacerlo más "legal" y hacer una comprobación si el pokemon elegido es MEW y acto seguido aprendería cualquier ataque ( ya que MEW es el único poke que legalmente puede aprender cualquier movimiento ).

También destacar que si has leído este tutorial detenidamente te hayan surgido algún tipo de inquietud, aqui van las respuestas...

¿Con ASM podría incluir mas movimientos por tutor?
Sí. Con ASM podrías hacerlo indefinido pero esto requiere conocimientos más amplios. Aqui hay un tutorial de interes aunque deberás estar familiarizados con la instalacion y utilizacion de herramientas de desarrollador ( hay un tuto de kaiser muy bueno )

Link: https://www.pokecommunity.com/showthread.php?p=9460683


He cambiado un byte de un ataque por el byte de un ataque de tipo agua pero mi pokémon de fuego puede aprender dicho movimiento ¿Por Qué?
Simplemente porque la rutina que controla la compatibilidad de los ataques que puede aprender dicho pokémon de tipo fuego no ha sido alterada ( en caso de que no se haya repunteado). En este caso la solución al problema sería abrir la rom con PGE de Gamer2020, ir a la opción de "Pokemon Editor"
y quitar o añadir el tick del ataque en cuestión


¿Usando PGE podré ver mi tabla de movimientos por tutor personalizada?
Sí pero tendrás que acceder al archivo "roms.ini" y cambiar dos parámetros: Uno de ellos sería el offset donde apunta la nueva tabla y cambiar el parámetro que indica el máximo nº de movimientos ( por defecto está en 32 ).

¿Y si añado nuevos ataques de 4 generación en adelante podré usarlos de esta forma como método "especial"?
La verdad no sabría decirte. Supongo que sí pero desconozco el método.
Lamentablemente no sabría dar una respuesta a esto. Quizá algún experto en este tema podría darte una solución.





Y con esto doy por finalizado el tutorial. No he incluido imágenes pues considero que es un tutorial fácil de entender y seguir. Si necesitáis imágenes tan sólo basta con que me las pidáis.

Un saludo.
 
Última edición:

MichaKing

Grafista avanzado
Respuesta: EM | Tutor de movimientos personalizado sin ASM

¡Guau Amigo! el tutorial por lo que puedo ver es muy bueno, y sobre todo cuando hay tan poca investigación y aportes para Emerald comparado con FireRed. Siempre es bueno ver como poco a poco se va avanzando; y hacer un Tutor de Movimientos Personalizado abre muchas más posibilidades a la hora de darle variedad a un hack.

-¡Saludos! :D
 

Kaiser de Emperana

Called in hand
Re: EM | Tutor de movimientos personalizado sin ASM

Está bueno el tuto. Pero no entiendo el inconveniente. ¿Por qué un pokemon podría aprender cualquier cosa? Repuntearlo sin expandir y editarlo en el lugar debería de funcionar igual.

Y por cierto. Para expandir los tutores...
 

kakarotto

Leyenda de WaH
Re: EM | Tutor de movimientos personalizado sin ASM

Está bueno el tuto. Pero no entiendo el inconveniente. ¿Por qué un pokemon podría aprender cualquier cosa? Repuntearlo sin expandir y editarlo en el lugar debería de funcionar igual.

Y por cierto. Para expandir los tutores...
Gracias por el tutorial de dizzy. No obstante, el objetivo es hacerlo mas ameno sin ASM, igual se agradece.

Digamos que la rutina que controla la compatibilidad de los ataques es un tanto compleja. Si repunteas la tabla en otro offset haras que todos los ataques aprendidos por tutor sean accesibles. Haz la prueba, pon el byte 39 que es SURF y hazle enseñar a Charmeleon. Este podrá. Sin embargo si no repunteas y haces los cambios necesarios en PGE no hay ningun problema ;)
 
Arriba