Buenas noches. Lo primero decir que esta es la primera vez en mi vida que pregunto algo en un foro, por lo que si esto no va aquí o no está bien planteado espero que un moderador lo mueva o haga lo conveniente.
Llevo desde Noviembre modificando el Pokemon Esmeralda version Española (si, soy masoca ) y hace unos dias he empezado a crear mis propias rutinas.
Pongo la rutina y explico mi problema:
.thumb
.align 2
main:
push {r0-r1,lr}
ldrb r0, .sprite_posx
ldrb r1, .var_800D
strb r0, [r1]
pop {r0-r1,pc}
.align 2
.sprite_posx: .word 0x02020694
.var_800D: .word 0x020375F0
".var_800D" creo que no haga falta explicar que es la direccion de esa variable en la RAM.
".sprite_posx" hace referencia a un offset en la RAM que contiene un byte (a mi parecer) con la posicion de un sprite en pantalla, en mi caso, un sprite de piedra que se mueve con "fuerza". Sea o no sea, me vale como referente para lo que quiero hacer asi que tampoco hay que darle mas vueltas jejeje.
Lo que quiero es que coja el valor del byte que contenga el offset "sprite_posx" y lo meta en el offset ".var_800D" para que apartir de ahi lo pueda administrar un script.
El problema es que no puedo guardar el valor que contiene el offset ".sprite_posx" en ".var_800D", ya que cuando ejecuto la rutina este guarda el valor "94" en el offset de ".var_800D" en vez del valor que contiene el offset, es decir:
-Interpreta "sprite_posx" como valor hexadecimal en vez de como offset y coge el ultimo byte ("94") de 0x02020694
-Mete el byte 0x94 como valor para el offset "var_800D".
NOTA: funciona si solo cargo un offset en un registro, un valor hex en otro registro y lo guardo, es decir:
ldrb r0, .sprite_posx
mov r1, #0xAD
strb r1, [r0]
Por lo que entiendo que lo que en verdad hace es guardar el valor como tal del registro y no el que tenga el offset guardado en ese registro.
La finalidad es saber si la piedra esta en una posicion del mapa concreta (un agujero) y hacer que desaparezca. Tambien se donde encontrar el referente a la posicion "y" en la RAM y tengo otra rutina mas desarrollada (que tampoco funciona xD) pero para poder explicarme mejor he puesto esta que es lo mismo pero simplificada.
Lo mas seguro es que no haya entendido bien algunos conceptos, y por eso me esta dando problemas. Lo he podido hacer con scripts y 20 compare farbytetobyte, pero quiero hacerlo en rutina para poder utilizarla en mas mapas sin tener que copiar el mismo script.
Se que alomejor no esta bien planteado, pero a mi me vale y solo pido que me ayuden si es posible a como guardar valores entre offsets.
Bueno, creo que he expuesto todo lo que he ido averiguando para intentar afinar lo mas posible la explicacion a mi problema.
MUCHISIMAS GRACIAS a quien se tome la molestia de leer esta biblia y aun más a quien intente ayudarme a solucionarlo.
Un saludo gente!
Llevo desde Noviembre modificando el Pokemon Esmeralda version Española (si, soy masoca ) y hace unos dias he empezado a crear mis propias rutinas.
Pongo la rutina y explico mi problema:
.thumb
.align 2
main:
push {r0-r1,lr}
ldrb r0, .sprite_posx
ldrb r1, .var_800D
strb r0, [r1]
pop {r0-r1,pc}
.align 2
.sprite_posx: .word 0x02020694
.var_800D: .word 0x020375F0
".var_800D" creo que no haga falta explicar que es la direccion de esa variable en la RAM.
".sprite_posx" hace referencia a un offset en la RAM que contiene un byte (a mi parecer) con la posicion de un sprite en pantalla, en mi caso, un sprite de piedra que se mueve con "fuerza". Sea o no sea, me vale como referente para lo que quiero hacer asi que tampoco hay que darle mas vueltas jejeje.
Lo que quiero es que coja el valor del byte que contenga el offset "sprite_posx" y lo meta en el offset ".var_800D" para que apartir de ahi lo pueda administrar un script.
El problema es que no puedo guardar el valor que contiene el offset ".sprite_posx" en ".var_800D", ya que cuando ejecuto la rutina este guarda el valor "94" en el offset de ".var_800D" en vez del valor que contiene el offset, es decir:
-Interpreta "sprite_posx" como valor hexadecimal en vez de como offset y coge el ultimo byte ("94") de 0x02020694
-Mete el byte 0x94 como valor para el offset "var_800D".
NOTA: funciona si solo cargo un offset en un registro, un valor hex en otro registro y lo guardo, es decir:
ldrb r0, .sprite_posx
mov r1, #0xAD
strb r1, [r0]
Por lo que entiendo que lo que en verdad hace es guardar el valor como tal del registro y no el que tenga el offset guardado en ese registro.
La finalidad es saber si la piedra esta en una posicion del mapa concreta (un agujero) y hacer que desaparezca. Tambien se donde encontrar el referente a la posicion "y" en la RAM y tengo otra rutina mas desarrollada (que tampoco funciona xD) pero para poder explicarme mejor he puesto esta que es lo mismo pero simplificada.
Lo mas seguro es que no haya entendido bien algunos conceptos, y por eso me esta dando problemas. Lo he podido hacer con scripts y 20 compare farbytetobyte, pero quiero hacerlo en rutina para poder utilizarla en mas mapas sin tener que copiar el mismo script.
Se que alomejor no esta bien planteado, pero a mi me vale y solo pido que me ayuden si es posible a como guardar valores entre offsets.
Bueno, creo que he expuesto todo lo que he ido averiguando para intentar afinar lo mas posible la explicacion a mi problema.
MUCHISIMAS GRACIAS a quien se tome la molestia de leer esta biblia y aun más a quien intente ayudarme a solucionarlo.
Un saludo gente!