inv_gba
Thread Id: 28984
Thread Name: [FR][ASM] Forzar evolución
#0
eing 12479
Bueno, dado que no soy de investigar FR, y no tengo más ganas de continuar con la investigación, os dejo la investigación que inicié.

Para forzar un pokémon a evolucionar solo hace falta compilar esta rutina, y ya está.

.thumb
.align 2

main:
push {r0-r4,lr}
ldr r1,.poke
mov r2,#0x1
ldr r3,.slot
mov r4,r1
bl evolucion
pop {r0-r4,pc}

evolucion:
push {r0}
ldr r0, .R_evolucion
mov r10,r0
pop {r0}
bx r10

.align 2
.poke: .word 0x30 @pokémon al que evoluciona
.slot: .word 0x0 @Slot
.R_evolucion: .word 0x080cdda9 @Rutina hace evolucionarComo veis, el poke y el slot están prefijados, pero podeis editarlo, a modo de que chequeis antes en que pokemon debe evolucionar, de una tabla o que se yo.. y el slot, editar la rutina para que lo lea desde la var LASTRESULT.

Ah, después de evolucionar se queda la pantalla negra, habeis de hacer el return, que es lo que me faltó, pero me da una pereza terrible, y prefiero seguir con lo que realmente me interesa que es el PRHE y mi hack.
Que yo creo, que encontrando el offset de la rutina de evolución, vale.

Ea, un saludico.
#1
Dani_SR_17 28493
¿Nadie comenta? Pues es muy útil y se agradece mucho que lo compartas aunque este incompleto, seras..., a ver si aprendo ya algo de ASM y termino de retocarlo, aunque supongo que me las podré apañar.
#2
G0LD_ZTHVARD0X! 27515
Veo que al igual que las rutinas ASM de GBC estas deben regresar al punto inicial tras ejecutarse, voy a probar a compilar la rutina y ver si funciona bien

Solo una duda ¿es necesario que el pokemon a evolucionar y la evolucion esten prefijados o es posible que sea algun pokemon del equipo que llevas?
#3
Dani_SR_17 28493
Iniciado por Franco1
Veo que al igual que las rutinas ASM de GBC estas deben regresar al punto inicial tras ejecutarse, voy a probar a compilar la rutina y ver si funciona bien

Solo una duda ¿es necesario que el pokemon a evolucionar y la evolucion esten prefijados o es posible que sea algun pokemon del equipo que llevas?


Lo que debes prefijar es el slot del equipo que quieres evolucionar. Por eso hay que tener algo de cuidado y asegurarte de que llevas al Poke que quieres evolucionar, y posteriormente ver en que slot esta.
O eso he entendido.
#4
eing 12479
Iniciado por Franco1
Veo que al igual que las rutinas ASM de GBC estas deben regresar al punto inicial tras ejecutarse, voy a probar a compilar la rutina y ver si funciona bien

Solo una duda ¿es necesario que el pokemon a evolucionar y la evolucion esten prefijados o es posible que sea algun pokemon del equipo que llevas?


Podría ejecutar un warp via asm tras la ejecucion de la funcion "evoluciona", y volver al mapa, recogido previamente via script. (En fr supongo que en la ram tambien están los datos de banco actual, mapa, posicion x e y del player)
Pero es es algo que me daria mas faena de la que tengo -Prhe- y no me apetece hacerlo como dije.
Pero bueno, al menos ahí esta la rutina que era lo necesario, ya los checks se pueden hacer con la cantidad de scripts que hay para fr para checkar un pokemon.
Y la rutina solo es editarla añadiendo donde carga el slot cambiarlo por la var, y despies de cargar la var hacer un ldrb rx,[rx,0x0] y ya está!
Porque evolucionar evolucionara en el que pongais en otra variable -usando lo mismo que arriba pero en poke ^^-
#5
Megascep_9 Kuchiki 28187
Alguien me podría decir como agrego en dichoso ''return''?

Necesito esta rutina, pero no se nada de ASM, solo insertar :(