Vai al commento

ROUTINE ASM: Cambiare lo stato di un pokemon in squadra


Post raccomandati

Salve a tutti ragazzi oggi vorrei proporvi una piccola routine asm per 
cambiare lo stato di un pokemon della nostra squadra ^^
prima di tutto dobbiamo sapere dove si trova l'offset desiderato in questo caso:
offset_stato: 030043B0
Bulbapedia the best :3
Tra ogni pokemon dellai byte inserenti ad essi si distanziano di 100 byte
questa è la routine che utilizzeremo:

.thumb
.align 2
 
push {r0-r1,lr}
ldr r0, .8000 /*variabile 8000*/
ldrh r0,[r0]
ldr r1,.100   /*interallo byte tra i pokemon in squadra*/
mul r1,r0
ldr r0, .pokemon_data /*dati inerenti al pokemon in squadra*/
add r0, r0, r1
mov r1, #0x80 /*stato avvelenato*/
strb r1,[r0]
pop {r0-r1,pc}
 
.align 2
.pokemon_data:
             .word 0x030043B0
.8000:
             .word 0x0202e8c4
.100:
             .word 0x00000100

ma analizziamo per bene ogni parte:

ldr r0, .8000
ldrh r0,[r0]
salvo la var 8000 in r0

ldr r1,.100
mul r1,r0
allora qua carichiamo il valore "100" in r1 e successivamente lo moltiplichiamo con r0 (la var 8000) 
perchè lo abbiamo fatto? per scegliere il pokemon da cambiare lo stato ^^
prima di tutto dobbiamo settare la var 8000 con il numero del pokemon da contagiare per esempio il 2 pokemon in squadra 
setvar 0x8000 0x1 (dobbiamo fare -1 al posto in squadra :C)
abbiamo detto che i byte della squadra si distanziano tra di loro di 100 byte quindi la routine moltiplichera 1 con 100
1*100=100
successivamente aggiunge +100 al pokemon_data e avremo l'offset dello stato del 2 pokemon ^^
(è un ragionamento leggermente contorto x'D spero abbiate capito altrimenti lasciate un commento)

ldr r0, .pokemon_data
add r0, r0, r1
come ho detto in precedenza la routine carica il pokemon_data e lo somma al prodotto della variabile * 100 .
somma pokemon_data + prodotto e mette tutto in r0

mov r1, #0x80 
strb r1,[r0]
mettiamo in r1 il valore 80 (stato avvelenato) e infine salviamo il byte :)
per finire ecco un esempio di script:

#dynamic 0x800000
#org @inizio
lock
setvar 0x8000 0x1
callasm 0xoffset + 1
release
end

Se avete domande o dubbi non esitate a chiedere ^^

 

Link al commento
Condividi su altre piattaforme

Grazie karim <3 


Cmq l'asm è il linguaggio di programmazione delle rom, si possono creare eventi che con i normali tool come xse per esempio non è possibile fare al momento :/


ci sono alcuni tutorial in giro su come inserirle (compreso il mio fatto alcuni giorni fa) e alcune che spiegano i vari comandi ^^


è abbastanza complesso se sei alle prime armi non ti consiglio di provare :/


Link al commento
Condividi su altre piattaforme

gia che ci sono vi posto la routine compilata cosi vi basta semplicemente inserirla nella rom con un hex editor:
 

03 B5 05 48 00 88 05 49 41 43 02 48 40 18 80 21 01 70 03 BD B0 43 00 03 C4 E8 02 02 00 01 00 00

80 21
80 21 corrisponde al nostro mov r1, #0x80 quindi per modificare lo stato del pokemon per esempio dobbiamo cambiare il byte 80 ^^
 
qua ci sono riportati i vary byte dello stato:
addormentato: 01
scottatura: 10
congelamento: 20
paralizzato: 40
 
Se avete problemi chiedete nei commenti ^^

 

Link al commento
Condividi su altre piattaforme

Archiviata

La discussione è ora archiviata e chiusa ad ulteriori risposte.

Visitatore
Questa discussione è stata chiusa, non è possibile aggiungere nuove risposte.
  • Utenti nella discussione   0 utenti

    • Nessun utente registrato sta visualizzando questa pagina.
×
×
  • Crea...