Registrarse

R - Problema con rutina ASM

Estado
Cerrado para nuevas respuestas.

Adke

weeeh
Seguí el tuto de Andrea de cambiar el status de los pokes y creo que lo hice todo bien y como decía pero al ejecutar el script con el callasm me da un huevo malo donde debería estar el pokemon envenenado

No sé que estoy haciendo mal... Bueno espero que podáis ayudarme

PD: puse el offset +1 asi que no es eso
 

Javi4315

Babyface
Miembro de honor
¿A qué te refieres con el status? Entiendo que a si está envenenado, quemado, etc. Pero si no es eso, corrígeme. En caso de que sea eso, esa parte no forma parte de los datos encriptados, por lo que no afecta al checksum ni hace falta desencriptar para editarlo. Así que la rutina estaría mal.

Lo que tendrías que hacer es postear la rutina que estás utilizando y decir qué base estás utilizando.
 

Adke

weeeh
Javi4315♪;275757 dijo:
¿A qué te refieres con el status? Entiendo que a si está envenenado, quemado, etc. Pero si no es eso, corrígeme. En caso de que sea eso, esa parte no forma parte de los datos encriptados, por lo que no afecta al checksum ni hace falta desencriptar para editarlo. Así que la rutina estaría mal.

Lo que tendrías que hacer es postear la rutina que estás utilizando y decir qué base estás utilizando.
Si, el status me refiero a si esta envenenado, congelado, etc

El código que usé es este:
Código:
.thumb
.align 2

push {r0-r3,lr}
ldr r2, .8002 /*variabile 8002*/
ldrh r2,[r2]
cmp r2, #0x0 /*control var 8002 if it's 0*/
beq parte2
b loop

parte2:
ldr r0, .8000 /*variabile 8000*/
ldrh r0,[r0]
ldr r1,.100 /*interval byte between pokemon team*/
mul r1,r0
ldr r0, .pokemon_data /*offset state*/
add r0, r0, r1
ldr r1, .8001 /*save state*/
strb r1,[r0]
b fine

loop:
ldr r2, .8002 /*variabile 8002*/
ldrh r2,[r2]
ldr r3,.100 /*interval byte between pokemon team*/
mul r3,r2
ldr r0, .pokemon_data /*offset state*/
add r0, r0, r3
ldr r1, .8001 /*save state*/
strb r1,[r0]
sub r2, r2, #0x80 /*tolgo 80*/
sub r2, r2, #0x80 /*tolgo 80*/
cmp r2, #0x0 /*controllo che la var 8002 non sia 0*/
beq fine
b loop

fine:
pop {r0-r3,pc}

.align 2
.pokemon_data:
.word 0x030043B0
.8000:
.word 0x0202e8c4
.8001:
.word 0x0202e8c6
.8002:
.word 0x0202e8c8
.100:
.word 0x00000100
Uso de base Ruby (la R del titulo es de Ruby xD)

¿Qué estoy haciendo mal? Y si no se hace así, ¿cómo se haría?


PD: mensaje nº100 :blush:
 

Javi4315

Babyface
Miembro de honor
¿por qué utilizas tantas variables y una rutina tan larga?

Me explico. Sólo necesitas dos variables, una para el slot y otra para el estado. Entonces tienes que multiplicar el slot por 100 que son los bytes que ocupa un poke y sumárselos al offset inicial para determinar el offset donde escribir el estado. Y ya sólo escribir ahí el estado.

¿La rutina la has escrito tú o es de internet?
 

Adke

weeeh
Javi4315♪;275766 dijo:
¿por qué utilizas tantas variables y una rutina tan larga?

Me explico. Sólo necesitas dos variables, una para el slot y otra para el estado. Entonces tienes que multiplicar el slot por 100 que son los bytes que ocupa un poke y sumárselos al offset inicial para determinar el offset donde escribir el estado. Y ya sólo escribir ahí el estado.

¿La rutina la has escrito tú o es de internet?
La rutina es una que hizo Andrea y esta en WaH, este es el link: http://whackahack.com/foro/t-23495/gba-otros-routine-asm-change-status-of-pokemon
 

Javi4315

Babyface
Miembro de honor
Ah, vale, ¿Y por qué no utilizas la del primer post? La que estás usando se supone que está más ordenada, pero para, por ejemplo, envenenar a un pokémon del equipo, sobraría con la primera.
 

Adke

weeeh
Javi4315♪;275774 dijo:
Ah, vale, ¿Y por qué no utilizas la del primer post? La que estás usando se supone que está más ordenada, pero para, por ejemplo, envenenar a un pokémon del equipo, sobraría con la primera.
Sigue sin funcionarme, me convierte el último pokemon en un Bad Egg.
Puse la 1ª rutina exactamente igual y siguiendo el tutorial al pie de la letra pero nada :(
 
Estado
Cerrado para nuevas respuestas.
Arriba