diff options
-rw-r--r-- | arm9/asm/unk_0204B0A0.s | 302 | ||||
-rw-r--r-- | arm9/src/unk_0204B0A0.c | 198 | ||||
-rw-r--r-- | include/sav_system_info.h | 2 | ||||
-rw-r--r-- | include/unk_0204B0A0.h | 25 |
4 files changed, 225 insertions, 302 deletions
diff --git a/arm9/asm/unk_0204B0A0.s b/arm9/asm/unk_0204B0A0.s deleted file mode 100644 index a78c13d0..00000000 --- a/arm9/asm/unk_0204B0A0.s +++ /dev/null @@ -1,302 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_0204B0F8 -FUN_0204B0F8: ; 0x0204B0F8 - push {r4-r5, lr} - sub sp, #0x1c - add r5, r0, #0x0 - ldr r0, [r5, #0xc] - bl Sav2_SysInfo_RTC_get - add r4, r0, #0x0 - ldr r0, [r4, #0x0] - cmp r0, #0x0 - beq _0204B12A - add r0, sp, #0xc - add r1, sp, #0x0 - bl GF_RTC_CopyDateTime - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, sp, #0xc - bl FUN_0204B130 - add r0, r5, #0x0 - add r1, r4, #0x0 - add r2, sp, #0xc - add r3, sp, #0x0 - bl FUN_0204B158 -_0204B12A: - add sp, #0x1c - pop {r4-r5, pc} - .balign 4 - - thumb_func_start FUN_0204B130 -FUN_0204B130: ; 0x0204B130 - push {r4-r6, lr} - add r6, r0, #0x0 - add r5, r1, #0x0 - add r0, r2, #0x0 - bl RTC_ConvertDateToDay - ldr r1, [r5, #0x20] - add r4, r0, #0x0 - cmp r4, r1 - bhs _0204B148 - str r4, [r5, #0x20] - pop {r4-r6, pc} -_0204B148: - cmp r4, r1 - bls _0204B156 - add r0, r6, #0x0 - sub r1, r4, r1 - bl FUN_0204B1DC - str r4, [r5, #0x20] -_0204B156: - pop {r4-r6, pc} - - thumb_func_start FUN_0204B158 -FUN_0204B158: ; 0x0204B158 - push {r4-r7, lr} - sub sp, #0xc - add r4, r2, #0x0 - str r0, [sp, #0x0] - add r6, r3, #0x0 - add r5, r1, #0x0 - add r0, r4, #0x0 - add r1, r6, #0x0 - bl RTC_ConvertDateTimeToSecond - str r1, [sp, #0x8] - add r1, r5, #0x0 - add r7, r0, #0x0 - add r0, r5, #0x4 - add r1, #0x14 - bl RTC_ConvertDateTimeToSecond - add r2, r1, #0x0 - sub r1, r7, r0 - ldr r1, [sp, #0x8] - sbc r1, r2 - bge _0204B19C - add r2, r5, #0x4 - ldmia r4!, {r0-r1} - stmia r2!, {r0-r1} - ldmia r4!, {r0-r1} - stmia r2!, {r0-r1} - ldmia r6!, {r0-r1} - add r5, #0x14 - stmia r5!, {r0-r1} - ldr r0, [r6, #0x0] - add sp, #0xc - str r0, [r5, #0x0] - pop {r4-r7, pc} -_0204B19C: - ldr r1, [sp, #0x8] - sub r0, r7, r0 - sbc r1, r2 - mov r2, #0x3c - mov r3, #0x0 - str r1, [sp, #0x8] - bl _ll_sdiv - add r7, r0, #0x0 - cmp r7, #0x0 - ble _0204B1D8 - add r0, r5, #0x0 - add r1, r7, #0x0 - bl FUN_02023884 - ldr r0, [sp, #0x0] - add r1, r7, #0x0 - add r2, r6, #0x0 - bl FUN_0204B270 - add r2, r5, #0x4 - ldmia r4!, {r0-r1} - stmia r2!, {r0-r1} - ldmia r4!, {r0-r1} - stmia r2!, {r0-r1} - ldmia r6!, {r0-r1} - add r5, #0x14 - stmia r5!, {r0-r1} - ldr r0, [r6, #0x0] - str r0, [r5, #0x0] -_0204B1D8: - add sp, #0xc - pop {r4-r7, pc} - - thumb_func_start FUN_0204B1DC -FUN_0204B1DC: ; 0x0204B1DC - push {r4-r6, lr} - add r4, r1, #0x0 - add r5, r0, #0x0 - bl ScriptEnvironment_GetSav2Ptr - add r1, r4, #0x0 - bl FUN_02025A60 - add r0, r5, #0x0 - bl FUN_0203959C - ldr r0, [r5, #0xc] - add r1, r4, #0x0 - bl FUN_02060344 - ldr r0, [r5, #0xc] - bl FUN_0202881C - add r1, r4, #0x0 - bl FUN_02028754 - ldr r0, [r5, #0xc] - bl FUN_0202A9B0 - add r6, r0, #0x0 - ldr r0, [r5, #0xc] - bl FUN_0202881C - bl FUN_020287A4 - add r1, r0, #0x0 - add r0, r6, #0x0 - bl FUN_0202A988 - ldr r0, [r5, #0xc] - bl SavArray_PlayerParty_get - add r1, r4, #0x0 - bl Party_UpdatePokerus - ldr r0, [r5, #0xc] - bl SavArray_Flags_get - add r6, r0, #0x0 - bl FUN_0205F594 - cmp r0, r4 - ble _0204B244 - sub r0, r0, r4 - lsl r0, r0, #0x10 - lsr r1, r0, #0x10 - b _0204B246 -_0204B244: - mov r1, #0x0 -_0204B246: - add r0, r6, #0x0 - bl FUN_0205F5A4 - lsl r1, r4, #0x10 - ldr r0, [r5, #0xc] - lsr r1, r1, #0x10 - bl FUN_0205F618 - ldr r0, [r5, #0xc] - bl FUN_0205F668 - ldr r0, [r5, #0xc] - bl FUN_0206007C - ldr r0, [r5, #0xc] - bl FUN_02029AFC - bl FUN_02029C08 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_0204B270 -FUN_0204B270: ; 0x0204B270 - push {r4-r6, lr} - add r5, r0, #0x0 - add r4, r1, #0x0 - add r6, r2, #0x0 - bl FUN_0204B3D0 - ldr r0, [r5, #0xc] - add r1, r4, #0x0 - bl FUN_0202A9D0 - add r0, r5, #0x0 - bl FUN_0204B33C - add r2, r0, #0x0 - ldr r0, [r5, #0xc] - add r1, r4, #0x0 - bl FUN_02025B60 - ldr r0, [r5, #0xc] - bl FUN_02022504 - ldr r2, [r6, #0x4] - add r1, r4, #0x0 - bl FUN_0202B3C4 - pop {r4-r6, pc} - - thumb_func_start Script_GetTimeOfDay -Script_GetTimeOfDay: ; 0x0204B2A4 - push {r3, lr} - ldr r0, [r0, #0xc] - bl Sav2_SysInfo_RTC_get - ldr r0, [r0, #0x14] - bl GF_RTC_GetTimeOfDayByHour - pop {r3, pc} - - thumb_func_start Script_GetMonth -Script_GetMonth: ; 0x0204B2B4 - push {r3, lr} - ldr r0, [r0, #0xc] - bl Sav2_SysInfo_RTC_get - ldr r0, [r0, #0x8] - pop {r3, pc} - - thumb_func_start Script_GetDay -Script_GetDay: ; 0x0204B2C0 - push {r3, lr} - ldr r0, [r0, #0xc] - bl Sav2_SysInfo_RTC_get - ldr r0, [r0, #0xc] - pop {r3, pc} - - thumb_func_start Script_GetWeekday -Script_GetWeekday: ; 0x0204B2CC - push {r3, lr} - ldr r0, [r0, #0xc] - bl Sav2_SysInfo_RTC_get - ldr r0, [r0, #0x10] - pop {r3, pc} - - thumb_func_start Script_GetHour -Script_GetHour: ; 0x0204B2D8 - push {r3, lr} - ldr r0, [r0, #0xc] - bl Sav2_SysInfo_RTC_get - ldr r0, [r0, #0x14] - pop {r3, pc} - - thumb_func_start Script_GetMinute -Script_GetMinute: ; 0x0204B2E4 - push {r3, lr} - ldr r0, [r0, #0xc] - bl Sav2_SysInfo_RTC_get - ldr r0, [r0, #0x18] - pop {r3, pc} - - thumb_func_start Script_SavRTC_x24toDateTime -Script_SavRTC_x24toDateTime: ; 0x0204B2F0 - push {r3-r5, lr} - ldr r0, [r0, #0xc] - add r5, r1, #0x0 - add r4, r2, #0x0 - bl Sav2_SysInfo_RTC_get - add r3, r0, #0x0 - ldr r2, [r3, #0x24] - ldr r3, [r3, #0x28] - add r0, r5, #0x0 - add r1, r4, #0x0 - bl RTC_ConvertSecondToDateTime - pop {r3-r5, pc} - - thumb_func_start Script_SavRTC_x2CtoDateTime -Script_SavRTC_x2CtoDateTime: ; 0x0204B30C - push {r3-r5, lr} - ldr r0, [r0, #0xc] - add r5, r1, #0x0 - add r4, r2, #0x0 - bl Sav2_SysInfo_RTC_get - add r3, r0, #0x0 - ldr r2, [r3, #0x2c] - ldr r3, [r3, #0x30] - add r0, r5, #0x0 - add r1, r4, #0x0 - bl RTC_ConvertSecondToDateTime - pop {r3-r5, pc} - - thumb_func_start Script_SavRTC_DateTimeTox2C -Script_SavRTC_DateTimeTox2C: ; 0x0204B328 - push {r4, lr} - ldr r0, [r0, #0xc] - bl Sav2_SysInfo_RTC_get - add r4, r0, #0x0 - bl GF_RTC_DateTimeToSec - str r0, [r4, #0x2c] - str r1, [r4, #0x30] - pop {r4, pc} - - thumb_func_start FUN_0204B33C -FUN_0204B33C: ; 0x0204B33C - push {r3, lr} - ldr r0, [r0, #0xc] - bl Sav2_SysInfo_RTC_get - bl FUN_02023874 - pop {r3, pc} - .balign 4 diff --git a/arm9/src/unk_0204B0A0.c b/arm9/src/unk_0204B0A0.c new file mode 100644 index 00000000..15a9111d --- /dev/null +++ b/arm9/src/unk_0204B0A0.c @@ -0,0 +1,198 @@ +#include "global.h" +#include "event_data.h" +#include "unk_0204B0A0.h" +#include "unk_0205FA2C.h" + +extern void GF_RTC_CopyDateTime(struct RTCDate* date, struct RTCTime* time); +extern void FUN_02029C08(void*); +extern void FUN_0202B3C4(void*, s32, u32); +extern u8 GF_RTC_GetTimeOfDayByHour(u32 hour); +extern s64 GF_RTC_DateTimeToSec(void); +extern void* FUN_02029AFC(struct SaveBlock2* sav2); +extern void* FUN_02022504(struct SaveBlock2* sav2); +extern void FUN_02025B60(struct SaveBlock2* sav2, s32, BOOL); +extern BOOL FUN_0205F668(struct SaveBlock2* sav2); +extern void FUN_0202A9D0(struct SaveBlock2* sav2, s32); +extern BOOL FUN_0205F618(struct SaveBlock2* sav2, u16); +extern void FUN_0204B3D0(struct UnkSavStruct80*, s32); +extern void FUN_0205F5A4(struct ScriptState* state, u16); +extern s32 FUN_0205F594(struct ScriptState* state); +extern void FUN_0202A988(void*, u32); +extern void* FUN_0202A9B0(struct SaveBlock2* sav2); +extern void FUN_02060344(struct SaveBlock2* sav2, s32); +extern void FUN_0203959C(struct UnkSavStruct80*); +extern void FUN_02025A60(struct SaveBlock2* sav2, s32); +extern struct SaveBlock2* ScriptEnvironment_GetSav2Ptr(struct UnkSavStruct80*); + +THUMB_FUNC void FUN_0204B0F8(struct UnkSavStruct80* unk) +{ + RTCDate date; + RTCTime time; + + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + if (rtc_info->field_00 != 0) + { + GF_RTC_CopyDateTime(&date, &time); + FUN_0204B130(unk, rtc_info, &date); + FUN_0204B158(unk, rtc_info, &date, &time); + } +} + +THUMB_FUNC void FUN_0204B130(struct UnkSavStruct80* unk, struct UnkSaveStruct_0202376C_sub* rtc_info, struct RTCDate* date) +{ + u32 days = (u32)RTC_ConvertDateToDay(date); + u32 days_since_nitro_epoch = (u32)rtc_info->daysSinceNitroEpoch; + + if (days < days_since_nitro_epoch) + { + rtc_info->daysSinceNitroEpoch = (s32)days; + } + else if (days > days_since_nitro_epoch) + { + FUN_0204B1DC(unk, (s32)(days - days_since_nitro_epoch)); + rtc_info->daysSinceNitroEpoch = (s32)days; + } +} + +THUMB_FUNC void FUN_0204B158(struct UnkSavStruct80* unk, struct UnkSaveStruct_0202376C_sub* rtc_info, struct RTCDate* date, struct RTCTime* time) +{ + s64 unk1 = RTC_ConvertDateTimeToSecond(date, time); + s64 unk2 = RTC_ConvertDateTimeToSecond(&rtc_info->date, &rtc_info->time); + + if (unk2 > unk1) + { + rtc_info->date = *date; + rtc_info->time = *time; + return; + } + + s32 minutes = (s32)((unk1 - unk2) / 60); + if (minutes > 0) + { + FUN_02023884(rtc_info, (u32)minutes); + FUN_0204B270(unk, minutes, time); + + rtc_info->date = *date; + rtc_info->time = *time; + } +} + +THUMB_FUNC void FUN_0204B1DC(struct UnkSavStruct80* unk, s32 a1) +{ + struct SaveBlock2* sav2 = ScriptEnvironment_GetSav2Ptr(unk); + FUN_02025A60(sav2, a1); + FUN_0203959C(unk); + FUN_02060344(unk->saveBlock2, a1); + + void* unk_sav_ptr1 = FUN_0202881C(unk->saveBlock2); + FUN_02028754(unk_sav_ptr1, (u32)a1); + + void* unk_sav_ptr2 = FUN_0202A9B0(unk->saveBlock2); + unk_sav_ptr1 = FUN_0202881C(unk->saveBlock2); + u32 unk1 = FUN_020287A4(unk_sav_ptr1); + FUN_0202A988(unk_sav_ptr2, unk1); + + struct PlayerParty* party = SavArray_PlayerParty_get(unk->saveBlock2); + Party_UpdatePokerus(party, a1); + + struct ScriptState* state = SavArray_Flags_get(unk->saveBlock2); + s32 unk2 = FUN_0205F594(state); + + u16 unk3; + if (unk2 > a1) + { + unk3 = (u16)(unk2 - a1); + } + else + { + unk3 = 0; + } + + FUN_0205F5A4(state, unk3); + FUN_0205F618(unk->saveBlock2, (u16)a1); + FUN_0205F668(unk->saveBlock2); + FUN_0206007C(unk->saveBlock2); + + void* unk_sav_ptr3 = FUN_02029AFC(unk->saveBlock2); + FUN_02029C08(unk_sav_ptr3); +} + +THUMB_FUNC void FUN_0204B270(struct UnkSavStruct80* unk, s32 a1, struct RTCTime* time) +{ + FUN_0204B3D0(unk, a1); + FUN_0202A9D0(unk->saveBlock2, a1); + BOOL unk_bool = FUN_0204B33C(unk); + FUN_02025B60(unk->saveBlock2, a1, unk_bool); + void* unk_sav_ptr = FUN_02022504(unk->saveBlock2); + FUN_0202B3C4(unk_sav_ptr, a1, time->minute); +} + +THUMB_FUNC u32 Script_GetTimeOfDay(struct UnkSavStruct80* unk) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + return GF_RTC_GetTimeOfDayByHour(rtc_info->time.hour); +} + +THUMB_FUNC u32 Script_GetMonth(struct UnkSavStruct80* unk) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + return rtc_info->date.month; +} + +THUMB_FUNC u32 Script_GetDay(struct UnkSavStruct80* unk) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + return rtc_info->date.day; +} + +THUMB_FUNC RTCWeek Script_GetWeekday(struct UnkSavStruct80* unk) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + return rtc_info->date.week; +} + +THUMB_FUNC u32 Script_GetHour(struct UnkSavStruct80* unk) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + return rtc_info->time.hour; +} + +THUMB_FUNC u32 Script_GetMinute(struct UnkSavStruct80* unk) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + return rtc_info->time.minute; +} + +THUMB_FUNC void Script_SavRTC_x24toDateTime(struct UnkSavStruct80* unk, struct RTCDate* date, struct RTCTime* time) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + RTC_ConvertSecondToDateTime(date, time, rtc_info->secondsSinceNitroEpoch); +} + +THUMB_FUNC void Script_SavRTC_x2CtoDateTime(struct UnkSavStruct80* unk, struct RTCDate* date, struct RTCTime* time) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + RTC_ConvertSecondToDateTime(date, time, rtc_info->field_2C); +} + +THUMB_FUNC void Script_SavRTC_DateTimeTox2C(struct UnkSavStruct80* unk) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + rtc_info->field_2C = GF_RTC_DateTimeToSec(); +} + +THUMB_FUNC BOOL FUN_0204B33C(struct UnkSavStruct80* unk) +{ + struct UnkSaveStruct_0202376C_sub* rtc_info = Sav2_SysInfo_RTC_get(unk->saveBlock2); + + return FUN_02023874(rtc_info); +} diff --git a/include/sav_system_info.h b/include/sav_system_info.h index 696cfe07..bded91f7 100644 --- a/include/sav_system_info.h +++ b/include/sav_system_info.h @@ -3,6 +3,8 @@ #include "RTC_api.h" +struct SaveBlock2; + struct UnkSaveStruct_0202376C_sub { /* 0x00 */ u32 field_00; diff --git a/include/unk_0204B0A0.h b/include/unk_0204B0A0.h new file mode 100644 index 00000000..8d37e354 --- /dev/null +++ b/include/unk_0204B0A0.h @@ -0,0 +1,25 @@ +#ifndef POKEDIAMOND_UNK_0204B0A0_H +#define POKEDIAMOND_UNK_0204B0A0_H + +#include "RTC_api.h" +#include "RTC_convert.h" +#include "sav_system_info.h" +#include "script.h" + +void FUN_0204B0F8(struct UnkSavStruct80* unk); +void FUN_0204B130(struct UnkSavStruct80* unk, struct UnkSaveStruct_0202376C_sub* rtc_info, struct RTCDate* date); +void FUN_0204B158(struct UnkSavStruct80* unk, struct UnkSaveStruct_0202376C_sub* rtc_info, struct RTCDate* date, struct RTCTime* time); +void FUN_0204B1DC(struct UnkSavStruct80* unk, s32 a1); +void FUN_0204B270(struct UnkSavStruct80* unk, s32 a1, struct RTCTime* time); +u32 Script_GetTimeOfDay(struct UnkSavStruct80* unk); +u32 Script_GetMonth(struct UnkSavStruct80* unk); +u32 Script_GetDay(struct UnkSavStruct80* unk); +RTCWeek Script_GetWeekday(struct UnkSavStruct80* unk); +u32 Script_GetHour(struct UnkSavStruct80* unk); +u32 Script_GetMinute(struct UnkSavStruct80* unk); +void Script_SavRTC_x24toDateTime(struct UnkSavStruct80* unk, struct RTCDate* date, struct RTCTime* time); +void Script_SavRTC_x2CtoDateTime(struct UnkSavStruct80* unk, struct RTCDate* date, struct RTCTime* time); +void Script_SavRTC_DateTimeTox2C(struct UnkSavStruct80* unk); +BOOL FUN_0204B33C(struct UnkSavStruct80* unk); + +#endif |