Buenas, gente! Hoy vengo aquí postar una información poco conocida, que yo encontré por puro acaso, hace muy tiempo!
Como deberéis saber, yo trabajo con Emerald principalmente! Y por acaso estaba mirando los comandos de la rom y descubrí algo sobre el comando 0x2E, el ResetVars.
En FireRed, ese comando hace lo que dice: Pone el valor 0x0 en las vars 0x8000, 0x8001, 0x8002.
Pero en Ruby/Sapphire y Emerald, las cosas ya no son tan sencillas...
No fue al acaso que llame el resetvars de comando "temporal"...
Bueno yo sé que mucha gente utiliza el sistema Dia y Noche, pero bueno, lo que este comando hace es poner el tiempo del reloj en las vars 8000 8001 y 8002!
Eso mismo!
Cuando hacen resetvars, lo que las variables pasan a tener es el siguiente:
Variables:
8000 -> Horas
8001 -> Minutos
8002 -> Segundos
Esto claro según el reloj al inicio del juego, no según el DNS.
[spoiler=Ruby]
08066344 @ =============== S U B R O U T I N E =======================================
08066344
08066344
08066344 s2E_Get_Time_in_Vars: @ DATA XREF: ROM:Cmd_tableo
08066344 PUSH {LR}
08066346 BL time_update
0806634A LDR R2, =Var_8000
0806634C LDR R1, =word_3004038
0806634E MOVS R0, #2
08066350 LDRSB R0, [R1,R0]
08066352 STRH R0, [R2]
08066354 LDR R2, =Var_8001
08066356 MOVS R0, #3
08066358 LDRSB R0, [R1,R0]
0806635A STRH R0, [R2]
0806635C LDR R2, =Var_8002
0806635E MOVS R0, #4
08066360 LDRSB R0, [R1,R0]
08066362 STRH R0, [R2]
08066364 MOVS R0, #0
08066366 POP {R1}
08066368 BX R1
08066368 @ End of function s2E_Get_time_in_vars
08066368
08066368 @ ---------------------------------------------------------------------------
Piensen que el offset 0x03004038 es donde estan grabados los dias, horas, minutos y segundos del reloj, no del tiempo de juego!
08099E1C @ =============== S U B R O U T I N E =======================================
08099E1C
08099E1C
08099E1C s2E_get_time_to_vars_x800x: @ DATA XREF: ROM:081DB734o
08099E1C PUSH {LR}
08099E1E BL time_update
08099E22 LDR R2, =var_8000
08099E24 LDR R1, =Internal_Clock_Data_HEX
08099E26 MOVS R0, #Internal_Clock_RTC.hours
08099E28 LDRSB R0, [R1,R0]
08099E2A STRH R0, [R2]
08099E2C LDR R2, =var_8001
08099E2E MOVS R0, #Internal_Clock_RTC.minutes
08099E30 LDRSB R0, [R1,R0]
08099E32 STRH R0, [R2]
08099E34 LDR R2, =var_8002
08099E36 MOVS R0, #Internal_Clock_RTC.seconds
08099E38 LDRSB R0, [R1,R0]
08099E3A STRH R0, [R2]
08099E3C MOVS R0, #0
08099E3E POP {R1}
08099E40 BX R1
08099E40 @ End of function s2E_get_time_to_vars_x800x
08099E40
08099E40 @ ---------------------------------------------------------------------------
Piensen que el offset 0x03005CF8 es donde estan grabados los dias, horas, minutos y segundos del reloj, no del tiempo de juego!
Como ya dije en el antiguo foro, es super sencillo este comando y permite hacer algo que mucha gente no consigue hacer, poner en tres variables el tiempo actual del juego.
Esto puede ser muy útil para comparar la hora para algún evento en concreto o incluso para mostrarlas en un txtbox con tres buffers diferentes indicando la hora actual del juego.
¡Gran descubrimiento! ¡Muchas gracias!
Saludos!
A ver, en teoría el comando es sencillísimo y también tiene mucha utilidad pero el problema es que no le encuentro un uso en un hack que sea "creativo" aunque se me acaba de ocurrir algo.
Molaría hacer postecitos tipo esto:
Que al pulsar A te indiquen la hora y luego ya si eso depende el tiempo que haya en el mapa podríamos poner grados diferentes, como esta puede haber muchas más ideas creativas ^^
Aunque, si va ligado a la hora del reloj, el único problema es que a mi (y a muchos) la hora o se nos congela o va mal.
La idea de Ck me encanta y eso si molaría, que un poste te diga la hora cuando estés jugando al juego.
Sonicarvalho de seguro aquí a muchos le sirve el código y
tu trabajo ASM es impresionante, cada vez vas aprendiendo
y nos traes una gran aportación.