Acimut
Profesional de WaH
Hoy les voy a enseñar a insertar el sistema RTC, DAN y Seasons para Rojo Fuego!
Sí, leyeron bien, para la ROM en español BPRS.
Este es mi primer tutorial, espero pronto traer más contenido para la ROM española.
Lo que necesitaremos:
La herramienta DNS v2.0 de prime-dialga aka prime.
Un editor Hexadecimal (yo usaré HxD)
Una ROM inglesa Fire Red 1.0 (BPRE)
Una ROM española Rojo Fuego (BPRS)
Un compilador ASM (opcional)
Aviso:
Los números que uso en este tutorial están en sistema hexadecimal.
No olviden guardar los cambios!
Sí, leyeron bien, para la ROM en español BPRS.
Este es mi primer tutorial, espero pronto traer más contenido para la ROM española.
Lo que necesitaremos:
La herramienta DNS v2.0 de prime-dialga aka prime.
Un editor Hexadecimal (yo usaré HxD)
Una ROM inglesa Fire Red 1.0 (BPRE)
Una ROM española Rojo Fuego (BPRS)
Un compilador ASM (opcional)
Aviso:
Los números que uso en este tutorial están en sistema hexadecimal.
Recuerden que un puntero "apunta" a una dirección de memoria.
Para conseguir un puntero si tenemos un hipotético offset 3A0, hay que ponerle ceros al inicio hasta que tenga 6 digitos 0003A0, luego lo dividimos en pares 00 03 A0, le damos la vuelta al orden (permutamos) A0 03 00 y le ponemos un 08 al final (indica que estamos apuntando a la ROM). Nuestro puntero quedaría A0 03 00 08
Otro ejemplo: si necesito el puntero a la rutina Seasons +F5, tomo el offset donde tengo la rutina, en mi caso B00200 + F5 = B002F5, separamos B0 02 F5, lo permutamos y le agregamos un 08 al final = F5 02 B0 08 este sería mi puntero. (Nótese que este offset ya tiene 6 dígitos.)
Para conseguir un puntero si tenemos un hipotético offset 3A0, hay que ponerle ceros al inicio hasta que tenga 6 digitos 0003A0, luego lo dividimos en pares 00 03 A0, le damos la vuelta al orden (permutamos) A0 03 00 y le ponemos un 08 al final (indica que estamos apuntando a la ROM). Nuestro puntero quedaría A0 03 00 08
Otro ejemplo: si necesito el puntero a la rutina Seasons +F5, tomo el offset donde tengo la rutina, en mi caso B00200 + F5 = B002F5, separamos B0 02 F5, lo permutamos y le agregamos un 08 al final = F5 02 B0 08 este sería mi puntero. (Nótese que este offset ya tiene 6 dígitos.)
Con la herramienta DNS instalar el sistema RTC (Real Time Clock), DAN (Day and Night) y si lo desean, Seasons, en la ROM inglesa con las configuraciones de su preferencia. Asegurate que los mismos offset en ambas ROMs sean espacios libres (si usan ROMs limpias, los valores por defecto deberían estar disponibles).
Importante: Anotar los offset donde instalan las rutinas.
Para este ejemplo usaré los offset que trae por defecto la herramienta.
Offset Rutina RCT: B01000
Offset Rutina DAN: B00000
Offset Rutina Seasons: B00200
Headeroffset: B00400
Importante: Anotar los offset donde instalan las rutinas.
Para este ejemplo usaré los offset que trae por defecto la herramienta.
Offset Rutina RCT: B01000
Offset Rutina DAN: B00000
Offset Rutina Seasons: B00200
Headeroffset: B00400
Abrimos la ROM inglesa y la española con nuestro editor Hexadecimal.
En la ROM inglesa nos desplazamos al offset de la rutina RTC y seleccionamos 3D0 bytes, copiamos y pegamos en el mismo offset en la ROM española.
En la ROM española buscar y reemplazar estos bytes en la rutina RTC:
2D 04 00 08 por 29 04 00 08
30 35 00 03 por 80 34 00 03
En la ROM española nos vamos al offset 41A y escribimos los siguientes bytes:
01 4B 18 47 00 00 XX XX XX XX
Donde XX XX XX XX es el puntero a la rutina RTC +1.
Para este ejemplo, uso el offset por defecto para el RTC B01000 + 1 = B01001. Convertido a puntero quedaría 01 10 B0 08 entonces los bytes que usaré son:
01 4B 18 47 00 00 01 10 B0 08
En la ROM inglesa nos desplazamos al offset de la rutina RTC y seleccionamos 3D0 bytes, copiamos y pegamos en el mismo offset en la ROM española.
En la ROM española buscar y reemplazar estos bytes en la rutina RTC:
2D 04 00 08 por 29 04 00 08
30 35 00 03 por 80 34 00 03
En la ROM española nos vamos al offset 41A y escribimos los siguientes bytes:
01 4B 18 47 00 00 XX XX XX XX
Donde XX XX XX XX es el puntero a la rutina RTC +1.
Para este ejemplo, uso el offset por defecto para el RTC B01000 + 1 = B01001. Convertido a puntero quedaría 01 10 B0 08 entonces los bytes que usaré son:
01 4B 18 47 00 00 01 10 B0 08
Continuamos con la ROM inglesa y la española en nuestro editor Hexadecimal.
En la ROM inglesa nos desplazamos al offset de la rutina DAN y seleccionamos12B(corrijo, no lo había notado antes) 12C bytes, copiamos y pegamos en el mismo offset en la ROM española.
En la ROM española buscar y reemplazar estos bytes en la rutina DAN:
9B 04 07 08 por D3 04 07 08
En la ROM española nos vamos al offset 704CE y ponemos 08 47
Luego nos vamos al offset 70500 y escribimos los siguientes bytes:
YY YY YY YY
Donde YY YY YY YY es el puntero a la rutina DAN +1.
Para este ejemplo, uso el offset por defecto para el DAN B00000 + 1 = B00001. Convertido a puntero quedaría 01 00 B0 08 y son los bytes que usaré.
En la ROM inglesa nos desplazamos al offset de la rutina DAN y seleccionamos
En la ROM española buscar y reemplazar estos bytes en la rutina DAN:
9B 04 07 08 por D3 04 07 08
En la ROM española nos vamos al offset 704CE y ponemos 08 47
Luego nos vamos al offset 70500 y escribimos los siguientes bytes:
YY YY YY YY
Donde YY YY YY YY es el puntero a la rutina DAN +1.
Para este ejemplo, uso el offset por defecto para el DAN B00000 + 1 = B00001. Convertido a puntero quedaría 01 00 B0 08 y son los bytes que usaré.
Créditos a Jambo51 por las rutinas.
El código ASM los saqué de Aquí:
En Rojo Fuego, compilamos y pegamos la siguientes rutinas en un espacio libre, específicamente en un offset alineado (offset terminados en 0, 4, 8 o C).
Espeon:
Ya compilada:
Umbreon:
Ya compilada:
Para este caso he puesto las rutinas en el offset FFF000 y FFF020 respectivamente.
Ahora nos vamos a los siguientes offset y ponemos los punteros de las rutinas:
42EB4 ponemos el puntero a la rutina de Espeon
42EB8 ponemos el puntero a la rutina de Umbreon
En mi caso sería: 00 F0 FF 08 y 20 F0 FF 08
El código ASM los saqué de Aquí:
En Rojo Fuego, compilamos y pegamos la siguientes rutinas en un espacio libre, específicamente en un offset alineado (offset terminados en 0, 4, 8 o C).
Espeon:
Código:
.text
.align 2
.thumb
.thumb_func
.global espeonevocheck
main:
ldr r1, time
ldrb r1, [r1, #0x0]
cmp r1, #0x4
bge no
cmp r1, #0x1
blt no
ldr r1, happinesscheck
bx r1
no: ldr r0, exit
bx r0
.align
time: .word 0x0203c000
happinesscheck: .word 0x08042EED
exit: .word 0x08042FFD
04 49 09 78 04 29 03 DA 01 29 01 DB 02 49 08 47 02 48 00 47 00 C0 03 02 ED 2E 04 08 FD 2F 04 08
Umbreon:
Código:
.text
.align 2
.thumb
.thumb_func
.global umbreonevocheck
main:
ldr r1, time
ldrb r1, [r1, #0x0]
cmp r1, #0x4
bge yes
cmp r1, #0x1
blt yes
ldr r0, exit
bx r0
yes:
ldr r1, happinesscheck
bx r1
.align
time: .word 0x0203c000
happinesscheck: .word 0x08042EED
exit: .word 0x08042FFD
04 49 09 78 04 29 03 DA 01 29 01 DB 03 48 00 47 01 49 08 47 00 C0 03 02 ED 2E 04 08 FD 2F 04 08
Para este caso he puesto las rutinas en el offset FFF000 y FFF020 respectivamente.
Ahora nos vamos a los siguientes offset y ponemos los punteros de las rutinas:
42EB4 ponemos el puntero a la rutina de Espeon
42EB8 ponemos el puntero a la rutina de Umbreon
En mi caso sería: 00 F0 FF 08 y 20 F0 FF 08
Seguimos con la ROM inglesa y la española en nuestro editor Hexadecimal.
En la ROM inglesa nos desplazamos al offset de la rutina Seasons y seleccionamos 154 bytes, copiamos y pegamos en el mismo offset en la ROM española.
Ahora vamos al inicio de la rutina Season, seleccionamos 120 bytes, y en los siguientes 34 bytes (son los últimos) deberemos reemplazarlos por los siguientes bytes:
Ahora es necesario ir a los correspondientes offset y realizar los cambios por los nuevos bytes:
Offset: 5916A
Nuevo: 00 00 00 49 08 47 XX XX XX XX puntero a la rutina Seasons +99
ej.: 00 00 00 49 08 47 99 02 B0 08
Offset: 5918C
Nuevo: 00 49 08 47 XX XX XX XX puntero a la rutina Seasons +E5
ej.: 00 49 08 47 E5 02 B0 08
Offset: 59B29
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +5F
ej.: 49 08 47 5F 02 B0 08
Offset: 59B3D
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +AB
ej.: 49 08 47 AB 02 B0 08
Offset: 59B65
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +6F
ej.: 49 08 47 6F 02 B0 08
Offset: 59B75
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +BB
ej.: 49 08 47 BB 02 B0 08
Offset: 5AA44
Nuevo: 00 49 08 47 XX XX XX XX puntero a la rutina Seasons +F5
ej.: 00 49 08 47 F5 02 B0 08
Offset: 70079
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +7F
ej.: 49 08 47 7F 02 B0 08
Offset: 700B5
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +CB
ej.: 49 08 47 CB 02 B0 08
En la ROM inglesa nos desplazamos al offset de la rutina Seasons y seleccionamos 154 bytes, copiamos y pegamos en el mismo offset en la ROM española.
Ahora vamos al inicio de la rutina Season, seleccionamos 120 bytes, y en los siguientes 34 bytes (son los últimos) deberemos reemplazarlos por los siguientes bytes:
31 9B 05 08 6D 9B 05 08 87 00 07 08 8B 00 07 08 75 91 05 08 45 9B 05 08 7D 9B 05 08 C3 00 07 08 C7 00 07 08 95 91 05 08 7F 02 00 00 59 AA 05 08 61 AA 05 08
Ahora es necesario ir a los correspondientes offset y realizar los cambios por los nuevos bytes:
Offset: 5916A
Nuevo: 00 00 00 49 08 47 XX XX XX XX puntero a la rutina Seasons +99
ej.: 00 00 00 49 08 47 99 02 B0 08
Offset: 5918C
Nuevo: 00 49 08 47 XX XX XX XX puntero a la rutina Seasons +E5
ej.: 00 49 08 47 E5 02 B0 08
Offset: 59B29
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +5F
ej.: 49 08 47 5F 02 B0 08
Offset: 59B3D
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +AB
ej.: 49 08 47 AB 02 B0 08
Offset: 59B65
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +6F
ej.: 49 08 47 6F 02 B0 08
Offset: 59B75
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +BB
ej.: 49 08 47 BB 02 B0 08
Offset: 5AA44
Nuevo: 00 49 08 47 XX XX XX XX puntero a la rutina Seasons +F5
ej.: 00 49 08 47 F5 02 B0 08
Offset: 70079
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +7F
ej.: 49 08 47 7F 02 B0 08
Offset: 700B5
Nuevo: 49 08 47 XX XX XX XX puntero a la rutina Seasons +CB
ej.: 49 08 47 CB 02 B0 08
En la Rom española, nos dirigimos al offset del Headeroffset.
Aquí ponemos este mismo offset permutado + 3.
En mi caso sería B00400 + 3 = B00403 y permutado sería 03 04 B0 08.
Aquí ponemos este mismo offset permutado + 3.
En mi caso sería B00400 + 3 = B00403 y permutado sería 03 04 B0 08.
No olviden guardar los cambios!
Última edición por un moderador: