Hello guys today I would like to offer you a little routine for asm
change the status of a pokemon of our team ^^
first of all we need to know where is the offset required in this case:
offset_stato: 030043B0
Between each pokemon status distance themselves 100 bytes
this is the routine that we will use :
.thumb
.align 2
push {r0-r1,lr}
ldr r0, .8000 /*variabile 8000*/
ldrh r0,[r0]
ldr r1,.100 /*interval between the bytes status in pokemon team*/
mul r1,r0
ldr r0, .pokemon_data /*byte team pokemon status*/
add r0, r0, r1
mov r1, #0x80 /*poisong status*/
strb r1,[r0]
pop {r0-r1,pc}
So here we load the value "100" in r1 and then multiply it with r0 ( the var 8000)
because we did ? to choose the pokemon you want to change the status ^^
first of all we need to set the var 8000 with the number of pokemon to infect for example, the 2 pokemon in team
setvar 0x8000 0x1 ( -1 we have to do to place in the team : C)
we said that the bytes of the team move away from each other by 100 bytes then the routine will multiply 1 by 100
1 * 100 = 100
then adds +100 to pokemon_data and we will have the offset of the state of 2 pokemon ^^
(it's a slightly convoluted reasoning x'D I hope you understand otherwise leave a comment )
ldr r0 , . pokemon_data
add r0 , r0 , r1
as I said before, the routine loads the pokemon_data and the sum of the product of the variable * 100.
sum pokemon_data + product and puts everything in r0
mov r1 , # 0x80
strb r1, [ r0 ]
we r1 in the value of 80 ( he was poisoned ), and finally save the byte :)
Finally here's a sample script:
Excellent work, did not know what was the direction of the states, thank you very much, I hope you continue making more progress in the ASM, keep it up
Es un buen tutorial andrea y muy util para cambiarle el status a un pokemon de tu equipo.
Pero desde mi punto de vista la rutina asm se podria mejorar, poniendo condicionales y agregando mas variables.
Por ejemplo:
Var 8000 = nº pokemon afectados por el estado (1-6)
Var 8001 = a partir de que slot (1-6) se empiezan a afectar pokes.
Var 8002 = estado que afecte al pokemon.
La rutina se alargaria un poco debido a los cmp para controlar las variables, pero seria mas factible no crees?
Es una rutina bastante sencilla, lo más importante es saber las direcciones y espacios. De todos modos me parece un aporte muy bueno.
Falta decir algo muy importante, pero. ¿Para qué base es esto?
sub r2, r2, #0x80
sub r2, r2, #0x80
cmp r2, #0x0
beq fine
b loop
this is important part of routine :)
so the var 8002 it's stored in the r2 and we setting with:
number of pokemon *100
the comand sub subtract 100 (80+80) to var 8002 and avery loop infect a pokemon :)
fine:
pop {r0-r3,pc}
end of routine x'D
example of script:
to infect one pokemon:
setvar 0x8000 0x4 /fourth pokemon in the team
setvar 0x8001 0x80 /poisong state
callasm 0x700001
Avevo già visto questa tua routine :)
Complimenti col tempo sei diventato un grandissimo hacker
-----
I had already seen this your routine :)
Congratulations eventually you become a great hacker