Ancer
Usuario de oro
Hola se que @Lunos ya subió pero solo para esmerald es decir no para fire red,pero quería hacerlo para fire red y me tome el tiempo para adaptarlo(no es mucho,fue fácil) y darle un toque especial
bueno comencemos
Aqui cambiaremos la [xxx] por la flag que queramos yo como en el original usare 200
en la [x] usare 2 ustedes puedes usar el que quieran menos 0
la compilamos e insertamos en la ROM(no olviden donde la insertaron)
ahora vamos a hacer estos cambios
Esto lo realismos con HxD
muy importante no pegar sino cambiar es decir no Ctrl+V sino ctrl+B
Y cambiamos xx xx xx por donde pusimos la rutina si es 876543 pon 43 65 87
Ahora viene el toque
abrimos la ROM con Gen3Tool y vamos a el item b6 que es el repartir exp,y le ponemos como si fuera un KEY ITEM y en TYPE lo cambiamos a USE OF SELECT le damos salvar y lo cerramos
lo siguiente sera con XSE y compilamos este script
lo que queda es que usen este tutorial también de @Lunos para que un objeto use el script llamado Activar un Script usando un Objeto
recuerden cambiar el offset de objeto después de seguir ese tutorial
si todo salio bien tienen lo mas parecido al repartir experiencia de las ultimas generaciones
creditos para @Lunos y a @BluRose
bueno comencemos
Código:
.align 2
.thumb
no_crash:
ldr r0, [r5]
mov r1, r0
add r1, #0x53
ldrb r0, [r1]
flag_check:
push {r0-r2}
ldr r0, flag_number
ldr r2, flag_routine
push {r1-r3}
bl linker
pop {r1-r3}
cmp r0, #0x1
bne routine_off
pop {r0-r2}
main:
push {r3-r6}
ldr r6, slot_var
ldrb r3, [r6]
ldr r4, is_egg_party
mov r5, #0x64
mul r5, r5, r3
ldrb r4, [r4, r5]
cmp r4, #0x6
beq pokemonIsEgg
mov r2, #0x1
b update_slot
pokemonIsEgg:
mov r2, #0x0
update_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:
pop {r0-r2}
mov r2, #0x1
and r2, r0
b return
linker:
bx r2
.align 2
flag_number:
.word 0x00000200
flag_routine:
.word 0x0806E708 +1
slot_var:
.word 0x0202703C + (0x800C * 2)
is_egg_party:
.word 0x020241F4 + 0x13
return_dir:
.word 0x08021C40 + 1
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
Aqui cambiaremos la [xxx] por la flag que queramos yo como en el original usare 200
en la [x] usare 2 ustedes puedes usar el que quieran menos 0
la compilamos e insertamos en la ROM(no olviden donde la insertaron)
ahora vamos a hacer estos cambios
offset 04A4BE cd""mbiamos a 02 21
offset 04A634 cambiamos a 01 20
offset 04A58A cambiamos a C0 46 00 4A 10 47 XX XX XX 08 04 BC
offset 04A634 cambiamos a 01 20
offset 04A58A cambiamos a C0 46 00 4A 10 47 XX XX XX 08 04 BC
muy importante no pegar sino cambiar es decir no Ctrl+V sino ctrl+B
Y cambiamos xx xx xx por donde pusimos la rutina si es 876543 pon 43 65 87
Ahora viene el toque
abrimos la ROM con Gen3Tool y vamos a el item b6 que es el repartir exp,y le ponemos como si fuera un KEY ITEM y en TYPE lo cambiamos a USE OF SELECT le damos salvar y lo cerramos
lo siguiente sera con XSE y compilamos este script
Código:
#dynamic 0x800000
'---------------
#org @start
lock
faceplayer
msgbox @string1 MSG_YESNO '"Quieres darle experienciana todos..."
compare LASTRESULT 0x1
if 0x1 goto @snippet1
if 0x0 goto @snippet2
release
end
'---------------
#org @snippet1
setflag 0xaqui va la flash que usaron
msgbox @string2 MSG_NORMAL '"Iniciando."
end
'---------------
#org @snippet2
clearflag 0xaqui igual
msgbox @string3 MSG_NORMAL '"Apagando"
end
'---------
' Strings
'---------
#org @#string1
= Introducción
#org @#string2
= Mensaje tras prenderlo.
#org @#string3
= Mensaje tras apagarlo.
recuerden cambiar el offset de objeto después de seguir ese tutorial
si todo salio bien tienen lo mas parecido al repartir experiencia de las ultimas generaciones
creditos para @Lunos y a @BluRose
Última edición: