Holi. El dia de hoy les presento dos maneras de implementar el efecto Exp. All.
¿Que es el Exp. All? Pues es un objeto introducido en Pokémon R/B que, al tenerlo en la mochila, le otorga puntos de experiencia a los Pokémon que tengamos en el equipo. El efecto fue cambiado posteriormente en la segunda generación pero mas o menos volvió a su estado original con la salida de Pokémon X/Y para la Nintendo 3DS.
Ese es el efecto que hoy les enseñaré a implementar en sus ROMs de Pokémon Emerald.
Esto lo haremos asi, habrán dos versiones, una que utiliza ASM y otra que no.
Elijan la que mas les guste.
Antes de empezar tocan los creditos- Hoy van para @BluRose por haber compartido el metodo sin ASM justo aqui y para @Samu por haber hecho una versión que usa ASM, que la posteó justo aqui.
Dicho eso, empecemos.
Versión Sin ASM
Versión Con ASM
Y eso fue todo.
¿Que es el Exp. All? Pues es un objeto introducido en Pokémon R/B que, al tenerlo en la mochila, le otorga puntos de experiencia a los Pokémon que tengamos en el equipo. El efecto fue cambiado posteriormente en la segunda generación pero mas o menos volvió a su estado original con la salida de Pokémon X/Y para la Nintendo 3DS.
Ese es el efecto que hoy les enseñaré a implementar en sus ROMs de Pokémon Emerald.
Esto lo haremos asi, habrán dos versiones, una que utiliza ASM y otra que no.
Elijan la que mas les guste.
Antes de empezar tocan los creditos- Hoy van para @BluRose por haber compartido el metodo sin ASM justo aqui y para @Samu por haber hecho una versión que usa ASM, que la posteó justo aqui.
Dicho eso, empecemos.
Versión Sin ASM
Requisitos:
-ROM de Pokémon Emerald (USA).
-Editor hexadecimal a preferencia (como siempre, yo usaré HxD)
Instrucciones:
1) Abriremos nuestra ROM de Pokémon Emerald en nuestro editor hexadecimal y haremos los siguientes cambios:
*En el offset 4A4BE escribiremos "02 21"
*En el offset 4A594 escribiremos "01 22"
*En el offset 4A634 escribiremos "01 20"
2) Guardamos y probamos.
Aqui una muestra del resultado
Aclaración:
Al ser esto una especie de port, esta implementación tiene los mismos inconvenientes que los cambios de byte para Fire Red, los mas notables siendo que los huevos pokémon pueden ganar experiencia, subir niveles y aprender ataques, y que no necesitas tener el Exp. Share para que el efecto actue.
-ROM de Pokémon Emerald (USA).
-Editor hexadecimal a preferencia (como siempre, yo usaré HxD)
Instrucciones:
1) Abriremos nuestra ROM de Pokémon Emerald en nuestro editor hexadecimal y haremos los siguientes cambios:
*En el offset 4A4BE escribiremos "02 21"
*En el offset 4A594 escribiremos "01 22"
*En el offset 4A634 escribiremos "01 20"
2) Guardamos y probamos.
Aqui una muestra del resultado
Aclaración:
Al ser esto una especie de port, esta implementación tiene los mismos inconvenientes que los cambios de byte para Fire Red, los mas notables siendo que los huevos pokémon pueden ganar experiencia, subir niveles y aprender ataques, y que no necesitas tener el Exp. Share para que el efecto actue.
Versión Con ASM
Requisitos:
-ROM de Pokémon Emerald
-Editor hexadecimal a preferencia (como siempre, yo usaré HxD)
-Editor de texto a preferencia (como siempre, yo usaré Notepad)
-El Compilador de HackMew
Instrucciones:
1) Copiaremos la siguiente rutina ASM y la pegaremos en un archivo de texto:
2) En las Lineas 83 y 87 modificaremos [XXX] y [X].
-[XXX] lo reemplazaremos por una flag vacia (yo usaré 200)
-[X] lo reemplazaremos por un numero a placer excepto el 0 (yo usaré el 2).
3) Descargamos y extraemos el compilador de HackMew el cual enlacé ahi arriba
4) Guardamos el archivo de texto dentro de la carpeta del compilador con un nombre sencillo de recordar y procedemos a hacer Shift + Click Derecho > Abrir Ventana de Comandos Aqui en algun espacio vacio dentro de la carpeta
5) En la ventana escribiremos: thumb (nombredelarchivo).txt y presionamos Enter.
Ejemplo: thumb expall.txt
Esto creará un archivo .bin con el mismo nombre que tiene nuestro archivo de texto.
Esa es la rutina ASM compilada.
6) Abrimos el archivo .bin con nuestro editor hexadecimal favorito y pulsamos Ctrl+A/E (seleccionar todo) y Ctrl+C (copiar)
7) Ahora abriremos nuestra ROM de Pokémon Emerald, iremos a un offset con espacio vacio dentro de nuestra ROM y pulsaremos Ctrl+B.
Como siempre digo, mas vale prevenir que lamentar. Les sugiero usar un offset que termine en 0, 4, 8 o C. Yo usaré el E3CF80.
8) Aun en nuestro editor hexadecimal, haremos las siguientes modificaciones:
-En el offset 04A4BE escribiremos: 02 21
-En el offset 04A634 escribiremos: 01 20
-En el offset 04A58A escribiremos: C0 46 00 4A 10 47 XX XX XX 08 04 BC
Nota: XX XX XX = Offset donde pusimos la rutina ASM durante el Paso 7, convertido en un pointer, +1.
Ejemplo: Como dije, yo dejé la rutina en E3CF80. E3CF80+1=E3CF81. Y si pasamos eso a pointer, queda 81 CF E3 08
9) Guardar y probar.
Aqui el resultado:
-ROM de Pokémon Emerald
-Editor hexadecimal a preferencia (como siempre, yo usaré HxD)
-Editor de texto a preferencia (como siempre, yo usaré Notepad)
-El Compilador de HackMew
Instrucciones:
1) Copiaremos la siguiente rutina ASM y la pegaremos en un archivo de texto:
Código:
.thumb
.align 2
/****** NEW GEN EXP SHARE + EGG EXP FIX *******
Es necesario realizar las siguientes ediciones en el rom:
- Ve a 0x0804A4BE y escribe los bytes "02 21"
- Ve a 0x0804A634 y escribe los bytes "01 20"
- Ve a 0x0804A58A y escribe lo siguiente:
"C0 46 00 4A 10 47 [XX+1 XX XX 08] 04 BC"
siendo [XX+1 XX XX 08] el pointer permutado a esta rutina
************************************************
Es también importante recalcar que debéis escoger el flag que
vais a utilizar para activar/desactivar la rutina.
De la misma forma debéis escoger una variable que utilizará
está rutina para almacenar un valor de control.
************************************************
************************************************
************************************************
Créditos a BluRose & Lunos *********************
************************************************
************************************************/
no_crash:
ldr r0, [r5]
mov r1, r0
add r1, #0x53
ldrb r0, [r1]
flag_check: @Se encarga de comprobar si hemos activado el flag
push {r0-r2}
ldr r0, flag_number
ldr r2, flag_routine
push {r1-r3}
bl linker
pop {r1-r3}
cmp r0, #0x1 @Compara el flag con 0x1 (activado)
bne routine_off
pop {r0-r2}
main:
@Comprobar el slot y guardarlo en una variable.
push {r3-r6}
ldr r6, slot_var @Carga en r3 el slot del pokemon
ldrb r3, [r6]
ldr r4, is_egg_party
mov r5, #0x64
mul r5, r5, r3 @Calcula las posiciones a avanzar
ldrb r4, [r4, r5] @Carga en r4 el byte egg/not
cmp r4, #0x6
beq pokemonIsEgg
mov r2, #0x1
b update_slot
pokemonIsEgg:
mov r2, #0x0 @Establece r2 en 0 (no ganará exp)
update_slot: @Actualiza y resetea el valor del slot
add r3, #0x1
cmp r3, #0x6
bne end
mov r3, #0x0
end:
strh r3, [r6]
pop {r3-r6}
return:
push {r2}
ldr r2, return_dir
bx r2
routine_off: @Ejecuta las instrucciones "originales"
pop {r0-r2}
mov r2, #0x1
and r2, r0
b return
linker:
bx r2
.align 2
flag_number:
.word 0x00000[XXX] @Elige el numero del flag
flag_routine:
.word 0x0809D790 +1 @Rutina que checkea el flag
slot_var: @Escoge una variable temporal (no uses la 0x8000,
.word 0x020275D6 + (0x800[X] * 2) @el juego la utiliza al inicializar combates dobles
is_egg_party:
.word 0x020244EC + 0x13 @Byte que comprueba si es un huevo
return_dir:
.word 0x0804A592 + 1 @Dirección de retorno a la rutina
-[XXX] lo reemplazaremos por una flag vacia (yo usaré 200)
-[X] lo reemplazaremos por un numero a placer excepto el 0 (yo usaré el 2).
3) Descargamos y extraemos el compilador de HackMew el cual enlacé ahi arriba
4) Guardamos el archivo de texto dentro de la carpeta del compilador con un nombre sencillo de recordar y procedemos a hacer Shift + Click Derecho > Abrir Ventana de Comandos Aqui en algun espacio vacio dentro de la carpeta
5) En la ventana escribiremos: thumb (nombredelarchivo).txt y presionamos Enter.
Ejemplo: thumb expall.txt
Esto creará un archivo .bin con el mismo nombre que tiene nuestro archivo de texto.
Esa es la rutina ASM compilada.
6) Abrimos el archivo .bin con nuestro editor hexadecimal favorito y pulsamos Ctrl+A/E (seleccionar todo) y Ctrl+C (copiar)
7) Ahora abriremos nuestra ROM de Pokémon Emerald, iremos a un offset con espacio vacio dentro de nuestra ROM y pulsaremos Ctrl+B.
Como siempre digo, mas vale prevenir que lamentar. Les sugiero usar un offset que termine en 0, 4, 8 o C. Yo usaré el E3CF80.
8) Aun en nuestro editor hexadecimal, haremos las siguientes modificaciones:
-En el offset 04A4BE escribiremos: 02 21
-En el offset 04A634 escribiremos: 01 20
-En el offset 04A58A escribiremos: C0 46 00 4A 10 47 XX XX XX 08 04 BC
Nota: XX XX XX = Offset donde pusimos la rutina ASM durante el Paso 7, convertido en un pointer, +1.
Ejemplo: Como dije, yo dejé la rutina en E3CF80. E3CF80+1=E3CF81. Y si pasamos eso a pointer, queda 81 CF E3 08
9) Guardar y probar.
Aqui el resultado:
Y eso fue todo.
Última edición: