Hola de nuevo, pues el dia de ayer puse una guia que contenía las flags y variables que son seguras de usar y las que definitivamente no son seguras, dicha referencia causó molestia en muchos al ver la limitadísima cantidad disponible.
Pero gracias al genio Jambo51 podemos repuntear el bloque de RAM usada por estas para tener muchas mas flags y variables, asi que empecemos.
Recuerda,
Estamos manipulando la RAM, por lo cual si o siTODAS las partidas (.sav) que tengas deben ser reiniciadas.
¿Que Necesitamos?
-Una ROM de Fire Red (Are you kidding f*ck me?)
-
Extensión de Memoria RAM de JPAN o tener la Pokedex extendida con G3HS.
- Un cerebro funcionando (Obligatorio)
Ahora si empezemos
Hacer las Flags 0x900-0x18FF usables:
Rutina de Flags:
Código:
.text
.align 2
.thumb
.thumb_func
.global flaggethack
main:
mov r0, #0x9
lsl r0, r0, #0x8
cmp r4, r0
blt normal
mov r0, #0x19
lsl r0, r0, #0x8
cmp r4, r0
bge noget
mov r0, #0x9
lsl r0, r0, #0x8
sub r4, r4, r0
add r6, r4, #0x0
str r4, [sp, #0x0]
ldr r0, memoryblock
lsr r1, r6, #0x3
add r0, r0, r1
exit: pop {r4-r6}
pop {r1}
bx r1
normal: ldr r0, normalmemoryblock
ldr r0, [r0, #0x0]
there: lsr r1, r6, #0x3
mov r3, #0xEE
lsl r3, r3, #0x4
add r1, r1, r3
add r0, r0, r1
b exit
noget: add r0, r4, #0x0
b there
.align
memoryblock: .word 0x0203C000
normalmemoryblock: .word 0x03005008
Ya sabes que sigue, ensambla la rutina y ponla en alguna offset libre que termine en 0, 4, 8 o C y anota su puntero. Ahora dirigete a 0x6E5D6 y escribe lo siguiente:
Código:
01 48 00 47 00 00 XX XX XX 08
Creo que ya sabemos de sobra que en las XX va el puntero permutado a la rutina +1.
Una vez hecho esto las flags entre 0x900 - 0x18FF (inclusive) quedan seguras de usar para lo que se nos pegue la gana.
NOTA: Esta rutina CORTA TODO ACCESO de flags fuera del rango 0x0 - 0x18FF. En pocas palabras, estas simplemente dejan de funcionar ya que la nueva rutina corta todo acceso a flags con mala asignación de RAM.
Ahora, las variables!
Hacer Variables 0x5000-0x51FF usables:
Rutina de Variables:
Código:
.text
.align 2
.thumb
.thumb_func
.global varflaghackone
main:
mov r2, #0x40
lsl r2, r2, #0x8
cmp r4, r2
blt exit
mov r2, #0x41
lsl r2, r2, #0x8
cmp r4, r2
blt normal
mov r2, #0x50
lsl r2, r2, #0x8
cmp r4, r2
blt exit
lsl r2, r4, #0x10
cmp r2, #0x0
blt alt
mov r2, #0x52
lsl r2, r2, #0x8
cmp r4, r2
bge exit
ldr r0, memoryblock
mov r2, #0x50
lsl r2, r2, #0x8
sub r4, r4, r2
lsl r4, r4, #0x1
add r0, r0, r4
exit2: pop {r4-r6}
pop {r1}
bx r1
exit: mov r0, #0x0
b exit2
normal: ldr r0, return
bx r0
alt: ldr r0, return2
bx r0
.align
memoryblock: .word 0x0203C200
return: .word 0x0806E473
return2: .word 0x0806E50D
Después de ensamblada hacemos lo mismo que con las flags, solo que ahora nos iremos a 0x6E45C y escribimos lo siguiente:
(No volveré a explicar las XX)
Ya insertada la rutina podremos usar las variables entre 0x5000 and 0x51FF (inclusive) sin ningun problema!
NOTA: Esta rutina tambien corta todo acceso de variables fuera del rango seguro, para evitar que otros comandos las usen.
El rango seguro es:
0x4000 - 0x40FF
0x5000 - 0x51FF
0x8000 - 0x8016
Debes estar enterado que no puedes usar una sola extensión, o extiendes flags y variables, o nada, de lo contrario no funcionará la extensión
Si la memoria RAM que se usa en ambas rutinas ya las tienes ocupada puedes repuntearla a otros bloques de RAM libre.
En pocas palabras, ahora tenemos 0x1000 nuevas flags y 0x200 variables nuevas, y ahora si, con esto ya puedes ponerte a gastar flags y variables como si no hubiera mañana (?)
Es todo, saludos!!!