diff options
-rw-r--r-- | asm/play_time.s | 137 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/play_time.c | 67 | ||||
-rw-r--r-- | sym_bss.txt | 5 |
4 files changed, 70 insertions, 141 deletions
diff --git a/asm/play_time.s b/asm/play_time.s deleted file mode 100644 index 41d0f6239..000000000 --- a/asm/play_time.s +++ /dev/null @@ -1,137 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start PlayTimeCounter_Reset -PlayTimeCounter_Reset: @ 8054814 - ldr r1, _08054830 @ =gUnknown_3000E7C - movs r0, 0 - strb r0, [r1] - ldr r2, _08054834 @ =gSaveBlock2Ptr - ldr r3, [r2] - movs r1, 0 - movs r0, 0 - strh r0, [r3, 0xE] - strb r1, [r3, 0x10] - ldr r0, [r2] - strb r1, [r0, 0x11] - ldr r0, [r2] - strb r1, [r0, 0x12] - bx lr - .align 2, 0 -_08054830: .4byte gUnknown_3000E7C -_08054834: .4byte gSaveBlock2Ptr - thumb_func_end PlayTimeCounter_Reset - - thumb_func_start PlayTimeCounter_Start -PlayTimeCounter_Start: @ 8054838 - push {lr} - ldr r1, _08054854 @ =gUnknown_3000E7C - movs r0, 0x1 - strb r0, [r1] - ldr r0, _08054858 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrh r1, [r0, 0xE] - ldr r0, _0805485C @ =0x000003e7 - cmp r1, r0 - bls _08054850 - bl PlayTimeCounter_SetToMax -_08054850: - pop {r0} - bx r0 - .align 2, 0 -_08054854: .4byte gUnknown_3000E7C -_08054858: .4byte gSaveBlock2Ptr -_0805485C: .4byte 0x000003e7 - thumb_func_end PlayTimeCounter_Start - - thumb_func_start sub_8054860 -sub_8054860: @ 8054860 - ldr r1, _08054868 @ =gUnknown_3000E7C - movs r0, 0 - strb r0, [r1] - bx lr - .align 2, 0 -_08054868: .4byte gUnknown_3000E7C - thumb_func_end sub_8054860 - - thumb_func_start PlayTimeCounter_Update -PlayTimeCounter_Update: @ 805486C - push {lr} - ldr r0, _080548C8 @ =gUnknown_3000E7C - ldrb r0, [r0] - cmp r0, 0x1 - bne _080548C4 - ldr r2, _080548CC @ =gSaveBlock2Ptr - ldr r0, [r2] - ldrb r1, [r0, 0x12] - adds r1, 0x1 - movs r3, 0 - strb r1, [r0, 0x12] - ldr r1, [r2] - ldrb r0, [r1, 0x12] - cmp r0, 0x3B - bls _080548C4 - strb r3, [r1, 0x12] - ldr r0, [r2] - ldrb r1, [r0, 0x11] - adds r1, 0x1 - strb r1, [r0, 0x11] - ldr r1, [r2] - ldrb r0, [r1, 0x11] - cmp r0, 0x3B - bls _080548C4 - strb r3, [r1, 0x11] - ldr r0, [r2] - ldrb r1, [r0, 0x10] - adds r1, 0x1 - strb r1, [r0, 0x10] - ldr r1, [r2] - ldrb r0, [r1, 0x10] - cmp r0, 0x3B - bls _080548C4 - strb r3, [r1, 0x10] - ldr r0, [r2] - ldrh r1, [r0, 0xE] - adds r1, 0x1 - strh r1, [r0, 0xE] - lsls r1, 16 - ldr r0, _080548D0 @ =0x03e70000 - cmp r1, r0 - bls _080548C4 - bl PlayTimeCounter_SetToMax -_080548C4: - pop {r0} - bx r0 - .align 2, 0 -_080548C8: .4byte gUnknown_3000E7C -_080548CC: .4byte gSaveBlock2Ptr -_080548D0: .4byte 0x03e70000 - thumb_func_end PlayTimeCounter_Update - - thumb_func_start PlayTimeCounter_SetToMax -PlayTimeCounter_SetToMax: @ 80548D4 - ldr r1, _080548F0 @ =gUnknown_3000E7C - movs r0, 0x2 - strb r0, [r1] - ldr r2, _080548F4 @ =gSaveBlock2Ptr - ldr r3, [r2] - ldr r0, _080548F8 @ =0x000003e7 - strh r0, [r3, 0xE] - movs r1, 0x3B - strb r1, [r3, 0x10] - ldr r0, [r2] - strb r1, [r0, 0x11] - ldr r0, [r2] - strb r1, [r0, 0x12] - bx lr - .align 2, 0 -_080548F0: .4byte gUnknown_3000E7C -_080548F4: .4byte gSaveBlock2Ptr -_080548F8: .4byte 0x000003e7 - thumb_func_end PlayTimeCounter_SetToMax - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index f88050c17..a44810372 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -87,7 +87,7 @@ SECTIONS { asm/pokeball.o(.text); src/load_save.o(.text); asm/trade.o(.text); - asm/play_time.o(.text); + src/play_time.o(.text); asm/new_game.o(.text); asm/overworld.o(.text); src/fieldmap.o(.text); diff --git a/src/play_time.c b/src/play_time.c new file mode 100644 index 000000000..cb70a57c4 --- /dev/null +++ b/src/play_time.c @@ -0,0 +1,67 @@ +#include "play_time.h" + +static IWRAM_DATA u8 sPlayTimeCounterState; + +enum +{ + STOPPED, + RUNNING, + MAXED_OUT, +}; + +void PlayTimeCounter_Reset(void) +{ + sPlayTimeCounterState = STOPPED; + + gSaveBlock2Ptr->playTimeHours = 0; + gSaveBlock2Ptr->playTimeMinutes = 0; + gSaveBlock2Ptr->playTimeSeconds = 0; + gSaveBlock2Ptr->playTimeVBlanks = 0; +} + +void PlayTimeCounter_Start(void) +{ + sPlayTimeCounterState = RUNNING; + + if (gSaveBlock2Ptr->playTimeHours > 999) + PlayTimeCounter_SetToMax(); +} + +void PlayTimeCounter_Stop(void) +{ + sPlayTimeCounterState = STOPPED; +} + +void PlayTimeCounter_Update(void) +{ + if (sPlayTimeCounterState == RUNNING) + { + gSaveBlock2Ptr->playTimeVBlanks++; + if (gSaveBlock2Ptr->playTimeVBlanks > 59) + { + gSaveBlock2Ptr->playTimeVBlanks = 0; + gSaveBlock2Ptr->playTimeSeconds++; + if (gSaveBlock2Ptr->playTimeSeconds > 59) + { + gSaveBlock2Ptr->playTimeSeconds = 0; + gSaveBlock2Ptr->playTimeMinutes++; + if (gSaveBlock2Ptr->playTimeMinutes > 59) + { + gSaveBlock2Ptr->playTimeMinutes = 0; + gSaveBlock2Ptr->playTimeHours++; + if (gSaveBlock2Ptr->playTimeHours > 999) + PlayTimeCounter_SetToMax(); + } + } + } + } +} + +void PlayTimeCounter_SetToMax(void) +{ + sPlayTimeCounterState = MAXED_OUT; + gSaveBlock2Ptr->playTimeHours = 999; + gSaveBlock2Ptr->playTimeMinutes = 59; + gSaveBlock2Ptr->playTimeSeconds = 59; + gSaveBlock2Ptr->playTimeVBlanks = 59; +} diff --git a/sym_bss.txt b/sym_bss.txt index 603da6ddb..efe0940fa 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -65,9 +65,8 @@ gUnknown_3000E6C: @ 3000E6C gUnknown_3000E78: @ 3000E78 .space 0x4 -gUnknown_3000E7C: @ 3000E7C - .space 0x4 - + .include "src/play_time.o" + .align 2 gUnknown_3000E80: @ 3000E80 .space 0x4 |