Registrarse

[Otros] RF | Insertar RTC y el sistema DNS en Rojo Fuego

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
.

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.)


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



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



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 seleccionamos 12B(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é.



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:

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
Ya compilada:
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
Ya compilada:

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:
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.




No olviden guardar los cambios!
 
Última edición por un moderador:

aiki

right now I'm sleeping.
Exelente aporte!

Me molesta un poco que aportes como este pasen desapercibidos y casi nadie comente, pues, esto nos da la ventaja de poder hacer más cosas en Roms Españolas, espero sigas aportando. 😮 (y)
 

aiki

right now I'm sleeping.
Hay un problema con el DNS, esto pasa tanto en la ROM inglesa como en la española, lo que sucede es que hay una especie de "parpadeo", que, durante un fotograma se cambian las paletas a como se verían sin el sistema DNS. Esto scede cuando se ejecuta alguna warp, también cuando lanzas la pokéball en el sistema de batalla, etc...

Hace un tiempo @Samu arregló este error para las ROMs:

-Fire Red

-Ruby

-Emerald

[Gráficos] Arreglar el 'parpadeo' del DNS en los warp

Pienso, lo digo como una propuesta y/o consejo, que deberías investigar como hacer lo mismo para el nuevo sistema DNS en Rom española.

Saludos!!
 

Vent

グラフィックの神
Me gustó mucho este tutorial, aunque yo no trabajo con RF, igual es un gran aporte. Sigue así y saludos!
 

Acimut

Profesional de WaH
Hay un problema con el DNS, esto pasa tanto en la ROM inglesa como en la española, lo que sucede es que hay una especie de "parpadeo", que, durante un fotograma se cambian las paletas a como se verían sin el sistema DNS. Esto scede cuando se ejecuta alguna warp, también cuando lanzas la pokéball en el sistema de batalla, etc...

Hace un tiempo @Samu arregló este error para las ROMs:

-Fire Red

-Ruby

-Emerald

[Gráficos] Arreglar el 'parpadeo' del DNS en los warp

Pienso, lo digo como una propuesta y/o consejo, que deberías investigar como hacer lo mismo para el nuevo sistema DNS en Rom española.

Saludos!!
Que tal!
El offset correspondiente a Rojo Fuego sería 0x0706B2 y los bytes a cambiar serían los mismos:
00 00 00 00 00 00 00 00 FF F7 F7 FE

He de confirmar que, esto en sí no soluciona el bug de los warp.
Aunque no sé si te sea de ayuda, igualmente dejo estas notas, en base al tutorial de Samu que adjuntaste:
Código:
FireRed
0x0000000008070588                BeginNormalPaletteFade
0x0000000008070474                TransferPlttBuffer
BeginNormalPaletteFade    0x070588
Offset:    0x07067A
Bytes:    00 00 00 00 00 00 00 00 FF F7 F7 FE
//FF F7 F7 FE = bl 08070474    salto al offset de TransferPlttBuffer

bytes originales:
    12 48 A0 21 C9 04 11 4A 73 F1 6F FA
//73 F1 6F FA = bl 081e3b64 CpuSet.
================================================
RojoFuego
BeginNormalPaletteFade    0x0705C0
Offset:    0x0706B2
Bytes:    00 00 00 00 00 00 00 00 FF F7 F7 FE
//FF F7 F7 FE = bl 080704AC    salto al offset de TransferPlttBuffer en RojoFuego

bytes originales:
    12 48 A0 21 C9 04 11 4A 72 F1 15 FE
//72 F1 15 FE =bl 081e32e8 CpuSet RojoFuego

Edit 06/12/2020:
Había olvidado por completo traer la solución para los warp, así como otra cosilla que había hecho hace algún tiempo.

Hace unos meses @Versekr Dark nos regaló un enlace al post de la web italiana de cómo solucionar el problemas de los warp justo aquí.
También me tomo la molestia de poner los cambios correspondientes en el siguiente spoiler.
Pero vayamos al grano, habiendo ingresado el DNS a B00000 aplique éstas variaciones:
- En el offset B00076 reemplace 00 29 D9 D1 con 01 29 D9 D0
- En el offset B00082 reemplace 02 28 26 DC con 1E 28 26 D0

Como bonus, hace medio año hice una modificación a la rutina d&n, haciendo que pase un día en 6 horas, además de aplicar un degradado a los filtros cada minuto que pasa durante el cambio del estado del día (se ve el cambio del filtro poco a poco). Y no, no cambia el día en la RAM, si en tu dispositivo es lunes, en la RAM sigue siendo es lunes hasta que sea martes (? no se si me entiendan.

Si insertaron en DNS en 0xB00000 en el offset 0xAFFC34 pegar lo siguiente:
FF B4 B4 48 81 79 C3 79 B3 48 00 29 1F D0 01 29 75 D0 04 29 74 D0 05 29 1F D0 06 29 17 D0 07 29 6D D0 0A 29 6C D0 0B 29 17 D0 0C 29 0F D0 0D 29 65 D0 10 29 64 D0 11 29 0F D0 12 29 07 D0 13 29 5D D0 16 29 5C D0 17 29 07 D0 03 E0 FF BC A4 4A 00 21 08 E0 A1 4A 02 21 05 E0 A1 4A 05 21 02 E0 9F 4A 04 21 FF E7 DF E1 9E 4A 00 21 FB E7 9E 4A 00 21 F8 E7 9D 4A 00 21 F5 E7 9D 4A 00 21 F2 E7 9C 4A 00 21 EF E7 9C 4A 00 21 EC E7 9B 4A 00 21 E9 E7 9B 4A 00 21 E6 E7 9A 4A 01 21 E3 E7 9A 4A 01 21 E0 E7 99 4A 01 21 DD E7 99 4A 01 21 DA E7 98 4A 01 21 D7 E7 97 4A 01 21 D4 E7 96 4A 01 21 D1 E7 96 4A 01 21 CE E7 95 4A 01 21 CB E7 95 4A 01 21 C8 E7 94 4A 01 21 C5 E7 94 4A 01 21 C2 E7 93 4A 01 21 BF E7 93 4A 01 21 BC E7 92 4A 01 21 B9 E7 92 4A 01 21 B6 E7 91 4A 01 21 B3 E7 0F E0 4D E0 90 4A 01 21 AE E7 8F 4A 01 21 AB E7 8F 4A 01 21 A8 E7 8E 4A 01 21 A5 E7 70 4A 01 21 A2 E7 0F 2B 94 DB 0F 2B A2 D0 10 2B A0 D0 11 2B A1 D0 12 2B A2 D0 13 2B A3 D0 14 2B A4 D0 15 2B A5 D0 16 2B A6 D0 17 2B A7 D0 18 2B A8 D0 19 2B A9 D0 1A 2B AA D0 1B 2B AB D0 1C 2B AC D0 1D 2B AD D0 1E 2B AE D0 1F 2B AF D0 20 2B B0 D0 21 2B B1 D0 22 2B B2 D0 23 2B B3 D0 24 2B B4 D0 25 2B B5 D0 26 2B B6 D0 27 2B B7 D0 28 2B BA D0 29 2B BB D0 2A 2B BC D0 2B 2B BD D0 2C 2B BE D0 5A E7 0F 2B 3C DB 0F 2B 3B D0 10 2B 3C D0 11 2B 3D D0 12 2B 3E D0 13 2B 3F D0 14 2B 40 D0 15 2B 41 D0 16 2B 42 D0 17 2B 43 D0 18 2B 44 D0 19 2B 45 D0 1A 2B 46 D0 1B 2B 47 D0 1C 2B 48 D0 1D 2B 49 D0 1E 2B 4A D0 1F 2B 4B D0 20 2B 4C D0 21 2B 4D D0 22 2B 4E D0 23 2B 4F D0 24 2B 50 D0 25 2B 51 D0 26 2B 52 D0 27 2B 53 D0 28 2B 54 D0 29 2B 55 D0 2A 2B 56 D0 2B 2B 57 D0 2C 2B 58 D0 21 E7 1A E7 4D 4A 03 21 20 E7 4C 4A 03 21 1D E7 4C 4A 03 21 1A E7 4B 4A 03 21 17 E7 4B 4A 03 21 14 E7 4A 4A 03 21 11 E7 4A 4A 03 21 0E E7 49 4A 03 21 0B E7 49 4A 03 21 08 E7 48 4A 03 21 05 E7 48 4A 03 21 02 E7 47 4A 03 21 FF E6 47 4A 03 21 FC E6 46 4A 03 21 F9 E6 46 4A 03 21 F6 E6 45 4A 04 21 F3 E6 45 4A 04 21 F0 E6 44 4A 04 21 ED E6 44 4A 04 21 EA E6 43 4A 04 21 E7 E6 43 4A 04 21 E4 E6 42 4A 04 21 E1 E6 42 4A 04 21 DE E6 41 4A 04 21 DB E6 41 4A 04 21 D8 E6 40 4A 04 21 D5 E6 40 4A 04 21 D2 E6 3F 4A 04 21 CF E6 3F 4A 04 21 CC E6 3E 4A 04 21 C9 E6 C0 46 3C 55 00 03 00 C0 03 02 FF 7F FF 7F 00 7C 00 7C 00 74 00 74 00 6C 00 6C 00 64 00 64 00 4C 00 4C 00 44 00 44 00 40 00 40 00 3C 00 3C 00 38 00 38 00 30 00 30 00 18 00 18 00 10 00 10 43 08 43 08 A6 14 A6 14 16 4A 16 4A 37 4E 37 4E 78 4E 78 4E B9 4E B9 4E FB 4A FB 4A 3C 4B 3C 4B 7D 4B 7D 4B BE 4B BE 4B FF 47 FF 47 FF 4F FF 4F FF 57 FF 57 FF 5F FF 5F FF 67 FF 67 FF 6F FF 6F FF 77 FF 77 DF 77 DF 77 BF 6F BF 6F 9F 67 9F 67 7F 5F 7F 5F 5F 57 5F 57 3F 4F 3F 4F 1F 47 1F 47 DF 32 DF 32 9F 22 9F 22 5F 12 5F 12 3F 0A 3F 0A FE 11 FE 11 19 31 19 31 F9 34 F9 34 F8 38 F8 38 D7 3C D7 3C 97 40 97 40 97 44 97 44 B7 40 B7 40 B6 44 B6 44 95 4C 95 4C 74 54 74 54 73 5C 73 5C 52 64 52 64 31 6C 31 6C 10 74 10 74 10 78 10 78 05 7C 05 7C 03 7C 03 7C 01 7C 01 7C 18 E6
Obvio tienen que tener libre el espacio desde 0xAFFC34 hasta 0xB00000. Funciona tanto para fire red como para rojo fuego.
 
Última edición:

Ryurs

Usuario de oro
Edit 06/12/2020:
Había olvidado por completo traer la solución para los warp, así como otra cosilla que había hecho hace algún tiempo.

Hace unos meses @Versekr Dark nos regaló un enlace al post de la web italiana de cómo solucionar el problemas de los warp justo aquí.
También me tomo la molestia de poner los cambios correspondientes en el siguiente spoiler.
Pero vayamos al grano, habiendo ingresado el DNS a B00000 aplique éstas variaciones:
- En el offset B00076 reemplace 00 29 D9 D1 con 01 29 D9 D0
- En el offset B00082 reemplace 02 28 26 DC con 1E 28 26 D0
Perdona, pero parece que esa solución funciona a medias, sigo teniendo problemas en los warps que involucran flechas.

Reemplazando esos bytes que pones, el error sigue apareciendo la primera vez que pasas por ellos (por los warps con flechas), y luego ya no vuelve a pasar en sucesivas veces (a no ser que resetees el juego, que volverá a pasar), aunque hay veces que entras en algún edificio, y el error vuelve a persistir, por lo que no es ni mucho menos una solución definitiva.

Quizás el problema solo pasa en la rom en la que trabajo yo, que es el Esmeralda en español (BPES).
 

Ryurs

Usuario de oro
Es lo mas probable, en fire red y en rojo fuego no he vuelto a tener el problema de los warp.
Es una lástima, puesto que los bytes "antiguos" a cambiar coincidían en ambas rom (rojo fuego y esmeralda), y pensé que resultaría.

El caso es que sí que es un poco curioso que sí no cambias esos bytes el problema ocurre casi siempre o siempre, y cambiándolos pasa la mitad de veces, es decir, de alguna forma sí que se involucra y toca algo.

Seguiré intentando cosas a ver si soy capaz de solucionarlo.
 

Kertra

Usuario de oro
The bug with the warp arrows appears when we leave building A and then go to building B. When the exit from building A disappears from view, all pallets change to the day pallet. However, if the exit from building A is still in view and we go to building B, the warp arrows work properly and the pallets do not change. Sorry that I'm writing in English, I come from Poland and today I discovered why this is happening, but I still have no idea how to fix it.
 
Arriba