31-07-2023, 05:44 PM
La routine è valida per Pokémon Fire Red (U) v.1.0, se volete convertirla anche per altre versioni aggiungerò gli offset nella guida finale.
Ho fatto una prova molto veloce, mettendo insieme le routine di jiangzhengwenjzw e di Blah.
La routine che ho creato permette di scegliere quale pokémon in squadra evolvere attraverso la var 8004.
Per scegliere la specie del pokémon è possibile utilizzare il metodo indicato da MAIDEN e quindi verificare la presenza di una certa specie. Oppure, in alternativa, è possibile utilizzare lo special 0x9F (scelta di un pokémon nel menù squadra).
Il pokémon scelto sarà evoluto, tramite la sua consueta evoluzione, senza dover impostare altro. Saranno conservate tutte le caratteristiche di quel pokémon (nickname, abilità, etc).
Per utilizzarla dovrete impostare un semplice script con un callasm. Ricordatevi che in qualche modo DEVE essere impostata la var 8004, quindi a mali estremi mettete un setvar.
BUG per il momento presenti:
1) se si prova ad evolvere un pokémon giunto all'ultima evoluzione, il gioco si blocca;
2) nel caso di più evoluzioni (es. eevee), sarà scelta sempre la prima evoluzione.
Negli aggiornamenti della routine risolverò questi due problemi.
Vi lascio la routine:
Ho fatto una prova molto veloce, mettendo insieme le routine di jiangzhengwenjzw e di Blah.
La routine che ho creato permette di scegliere quale pokémon in squadra evolvere attraverso la var 8004.
Per scegliere la specie del pokémon è possibile utilizzare il metodo indicato da MAIDEN e quindi verificare la presenza di una certa specie. Oppure, in alternativa, è possibile utilizzare lo special 0x9F (scelta di un pokémon nel menù squadra).
Il pokémon scelto sarà evoluto, tramite la sua consueta evoluzione, senza dover impostare altro. Saranno conservate tutte le caratteristiche di quel pokémon (nickname, abilità, etc).
Per utilizzarla dovrete impostare un semplice script con un callasm. Ricordatevi che in qualche modo DEVE essere impostata la var 8004, quindi a mali estremi mettete un setvar.
BUG per il momento presenti:
1) se si prova ad evolvere un pokémon giunto all'ultima evoluzione, il gioco si blocca;
2) nel caso di più evoluzioni (es. eevee), sarà scelta sempre la prima evoluzione.
Negli aggiornamenti della routine risolverò questi due problemi.
Vi lascio la routine:
Codice:
.text
.align 2
.thumb
.thumb_func
main:
push {r0-r7, lr}
ldr r0, =0x020370C0 @calculate address of Pokemon we want to evolve
ldrh r0, [r0]
mov r4, r0
mov r1, #0x64
mul r0, r0, r1
ldr r1, =(0x2024284)
add r0, r0, r1
mov r7, r0
mov r1, #0xB
ldr r3, =(0x803FBE8 +1) @get current species, prior to evolving
bl linker
ldr r5, =0x020370C0
strh r0, [r5]
bl getEvolvedForm @check what species it evolves into
ldr r6, =0x020370C2
strh r0, [r6]
ldr r0, =0x300537C
ldr r1, =0x80568E1
str r1, [r0]
ldr r0, =0x020370C0
ldrh r1, [r0, #2]
mov r2, #1
mov r3, r4
ldr r4, =0x80cdda9 @animazione
bl bx_r4
b end
getEvolvedForm:
mov r1, #0x28 @calculate the evolution of a species
mul r1, r1, r0
ldr r3, = (0x8259754)
add r1, r3, r1
ldrh r0, [r1, #0x4] @evolution
bx lr
end:
pop {r0-r7, pc}
linker:
bx r3
bx_r4: bx r4
.align 2