Registrarse

[Rutina] R&FR| ASM | Msgbox Efecto "pensamientos" y efecto default

Javi4315

Babyface
Miembro de honor
Sí, puedes cambiar la variable.
Para ello asigna un script así:

#org 0xoffset
setvar 0xvar 0x1234
end

Entonces una vez compilado y asignado a un mini, procedemos a hablar con él.
Tras hablar con él, vamos en el emulador a cheats -> search cheats for cheats.
Se nos abrirá una ventania y pon que sea busqueda igual, y en formato 16 bits. Busca el valor 1234.

Entonces te saldrá una direccion o varias.
(Si son varias comprueba cual es la de la var, haciendo cambios con el visual viewer)
Una vez encontrada, ya solo hemos de cambiar los siguientes bytes de nuestra rutina. (Los que están en negrita, cambiarlos por la direccion de nuestra var, y acordarse de que sea permutado el offset).

09 B4 0D 48 00 88 00 28 0A D0 0C 48 0C 4B 03 80 0D 48 5F 23 03 70 09 BC 0D 49 40 18 02 BC 08 47 06 48 08 4B 03 80 08 48 00 23 03 70 09 BC 07 49 40 18 02 BC 08 47 C0 46 C0 70 03 02 00 00 00 04 61 61 00 00 60 7F 00 00 12 00 00 04 EC 1D 47 08 10 3A 9F 08
Como siempre, Fire Red fastidiando con la ram. A partir de la variable 0x8000 son estáticas, pero las demás (0x3800 - 0x7FFF) son dinámica (es decir, se mueven continuamente de sitio. Así que ese método no funciona porque las localizarás para ese momento exacto, pero se moverán y las perderás de nuevo.

Le he hecho una rutina a Sayer para arreglarlo:

.align 2
.thumb

push {r0-r3,lr}
ldr r0, .pointer
ldrh r1, [r0,#0x2]
ldrh r2, [r0]
ldr r0, =0x4FFF
ldr r3, =0x3800
sub r0, r0, r3
ldr r3, =0x2
mul r0, r3
add r2, r2, r0
ldr r3, =0x10000
mul r1, r3
add r0, r1, r2
pop {r0-r3,pc}

.pointer: .word 0x03005008
Lo que hace es localizar la variable que pongas en la parte que está en negrita (recuerdo, desde la 0x3800 hasta la 0x7FFF) y guardarla en r0. De ese modo, si se integra en la rutina de Eing, puedes usar la variable que quieras:

.align 2
.thumb

init:
push {r0,r3}
ldr r0, .pointer
ldrh r1, [r0,#0x2]
ldrh r2, [r0]
ldr r0, =0x4FFF
ldr r3, =0x3800
sub r0, r0, r3
ldr r3, =0x2
mul r0, r3
add r2, r2, r0
ldr r3, =0x10000
mul r1, r3
add r0, r1, r2
b main

main:
ldrh r0, [r0,#0x0]
cmp r0, #0x0
beq normal
ldr r0,.dispcnt
ldrh r3, .dispcntv
strh r3,[r0]
ldr r0, .textbox_pos
mov r3, #0x5f
strb r3,[r0]
pop {r0,r3}
ldr r1, .black_box
add r0,r0,r1
pop {r1}
bx r1

normal:
ldr r0,.dispcnt
ldrh r3, .dispcntvn
strh r3,[r0]
ldr r0, .textbox_pos
mov r3, #0x0
strb r3,[r0]
pop {r0,r3}
ldr r1, .normal_msgbox
add r0,r0,r1
pop {r1}
bx r1


.align 2
.dispcnt: .word 0x04000000
.dispcntv: .word 0x00006161
.dispcntvn: .word 0x00007f60
.textbox_pos: .word 0x04000012
.normal_msgbox: .word 0x08471dec
.black_box: .word 0x089F3A10
.pointer: .word 0x03005008
Compilada quedaría así:

Código:
09 B4 19 48 41 88 02 88 18 48 19 4B C0 1A 02 23 58 43 12 18 17 4B 59 43 88 18 FF E7 00 88 00 28 0A D0 0B 48 0B 4B 03 80 0C 48 5F 23 03 70 09 BC 0C 49 40 18 02 BC 08 47 05 48 07 4B 03 80 07 48 00 23 03 70 09 BC 06 49 40 18 02 BC 08 47 C0 46 00 00 00 04 61 61 00 00 60 7F 00 00 12 00 00 04 EC 1D 47 08 10 3A 9F 08 08 50 00 03 FF 4F 00 00 00 38 00 00 00 00 01 00
Si se busca al final de la rutina, estará el "FF4F" que corresponde a la variable 0x4FFF permutada. Se puede cambiar por la variable que se quiera siempre que sea segura para evitar problemas (permutada, claro).
 

eing

Miembro de honor
Miembro de honor
Javi4315♪;250225 dijo:
Como siempre, Fire Red fastidiando con la ram. A partir de la variable 0x8000 son estáticas, pero las demás (0x3800 - 0x7FFF) son dinámica (es decir, se mueven continuamente de sitio. Así que ese método no funciona porque las localizarás para ese momento exacto, pero se moverán y las perderás de nuevo.

Le he hecho una rutina a Sayer para arreglarlo:



Lo que hace es localizar la variable que pongas en la parte que está en negrita (recuerdo, desde la 0x3800 hasta la 0x7FFF) y guardarla en r0. De ese modo, si se integra en la rutina de Eing, puedes usar la variable que quieras:



Compilada quedaría así:

Código:
09 B4 19 48 41 88 02 88 18 48 19 4B C0 1A 02 23 58 43 12 18 17 4B 59 43 88 18 FF E7 00 88 00 28 0A D0 0B 48 0B 4B 03 80 0C 48 5F 23 03 70 09 BC 0C 49 40 18 02 BC 08 47 05 48 07 4B 03 80 07 48 00 23 03 70 09 BC 06 49 40 18 02 BC 08 47 C0 46 00 00 00 04 61 61 00 00 60 7F 00 00 12 00 00 04 EC 1D 47 08 10 3A 9F 08 08 50 00 03 FF 4F 00 00 00 38 00 00 00 00 01 00
Si se busca al final de la rutina, estará el "FF4F" que corresponde a la variable 0x4FFF permutada. Se puede cambiar por la variable que se quiera siempre que sea segura para evitar problemas (permutada, claro).
Veo que vas aprendiendo nada mal.. Aunque no te lo tomes a mal pero desde mi punto de vista es innecesario la parte que adjuntaste, dado que se alarga la rutina para cargar y buscar una variable que el mismo dom hacker puede buscar por si solo y acortarla. Esa idea vendria bien para otros datos qje en cierto modo no puedas buscar o no se pueda editar tan directo como la variable .
O para la gente que es vaga y le da pereza buscar la variable y asignarle la doreccion a r0..
Pero bue, para gustos los colores .. D:
 

Cheve

MoonLover~
Miembro de honor
Hola @eing xd

Estuve probando la rutina para FR, y, de hecho, funciona, pero por alguna razón, me bugea la mochila y la parte de la introducción que nos habla de los botones xD

Sinceramente me parece que el problema está en lo que se reemplaza en 0x08150448.

Por si te aburres, ya sabes que hacer xDD
 

eing

Miembro de honor
Miembro de honor
Hola @eing xd

Estuve probando la rutina para FR, y, de hecho, funciona, pero por alguna razón, me bugea la mochila y la parte de la introducción que nos habla de los botones xD

Sinceramente me parece que el problema está en lo que se reemplaza en 0x08150448.

Por si te aburres, ya sabes que hacer xDD
Lo cierto es que ese bug le ocurre a algunas personas solo.
Podria ser porque usan fr distintos imagino o algo por el estilo..
Y bueno ya mirare de editarla, y ver que es hehe

Gracias por el reporte, pero ya tenia alguna noticia de ello pero no lo he arreglado por dejadez xd
 
Disculpa una pregunta de novato
como llego a este offset?? 08150448
como lo busco en hxd?
y una pregunta mas, que msgbox pongo en el script? el 0x6??
 
Arriba