summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-06-26 08:16:33 +0800
committerjiangzhengwenjz <jiangzhengwenjzw@qq.com>2019-06-26 08:16:51 +0800
commitb5ebf7074daac6b9aed33d07cda992dc6da06ebe (patch)
tree05a46e58fbbae7470d5ccd6e17366b03fa6b3830
parentbf81005d44a64cd69002f48dabcfd1fc65cd2e7d (diff)
finished play_time
-rw-r--r--asm/play_time.s137
-rw-r--r--ld_script.txt2
-rw-r--r--src/play_time.c67
-rw-r--r--sym_bss.txt5
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