summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2017-07-21 22:20:07 -0500
committerGitHub <noreply@github.com>2017-07-21 22:20:07 -0500
commit5652108d9916f4fd614586536070e834c883cc67 (patch)
tree2c306c42fcc92151c3995206906880044116d9de
parent68e47a6fa0b56451223c22dc9a759534c988db5b (diff)
parent9236732e50fc8ee5cd0fc56dbf2181ea2748782a (diff)
Merge pull request #376 from drifloony/reset_rtc_screen
decompile reset_rtc_screen
-rw-r--r--asm/reset_rtc_screen.s1300
-rw-r--r--ld_script.txt2
-rw-r--r--src/reset_rtc_screen.c496
3 files changed, 497 insertions, 1301 deletions
diff --git a/asm/reset_rtc_screen.s b/asm/reset_rtc_screen.s
deleted file mode 100644
index 2fbc559c8..000000000
--- a/asm/reset_rtc_screen.s
+++ /dev/null
@@ -1,1300 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SpriteCB_ResetRtcCusor0
-SpriteCB_ResetRtcCusor0: @ 806A480
- push {lr}
- adds r3, r0, 0
- ldr r2, _0806A4B0 @ =gTasks
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0xC
- ldrsh r1, [r0, r2]
- movs r2, 0x30
- ldrsh r0, [r3, r2]
- cmp r1, r0
- beq _0806A596
- strh r1, [r3, 0x30]
- subs r0, r1, 0x1
- cmp r0, 0x5
- bhi _0806A596
- lsls r0, 2
- ldr r1, _0806A4B4 @ =_0806A4B8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0806A4B0: .4byte gTasks
-_0806A4B4: .4byte _0806A4B8
- .align 2, 0
-_0806A4B8:
- .4byte _0806A4D0
- .4byte _0806A4F4
- .4byte _0806A518
- .4byte _0806A53C
- .4byte _0806A566
- .4byte _0806A590
-_0806A4D0:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0x1
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x41
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x35
- b _0806A55E
-_0806A4F4:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0x1
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x41
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x56
- b _0806A55E
-_0806A518:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0x1
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x41
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x6B
- b _0806A55E
-_0806A53C:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0x1
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x41
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x80
-_0806A55E:
- strh r0, [r3, 0x20]
- movs r0, 0x44
- strh r0, [r3, 0x22]
- b _0806A596
-_0806A566:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0x2
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x42
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x9B
- strh r0, [r3, 0x20]
- movs r0, 0x50
- strh r0, [r3, 0x22]
- b _0806A596
-_0806A590:
- adds r0, r3, 0
- bl DestroySprite
-_0806A596:
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_ResetRtcCusor0
-
- thumb_func_start SpriteCB_ResetRtcCusor1
-SpriteCB_ResetRtcCusor1: @ 806A59C
- push {lr}
- adds r3, r0, 0
- ldr r2, _0806A5CC @ =gTasks
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0xC
- ldrsh r1, [r0, r2]
- movs r2, 0x30
- ldrsh r0, [r3, r2]
- cmp r1, r0
- beq _0806A696
- strh r1, [r3, 0x30]
- subs r0, r1, 0x1
- cmp r0, 0x5
- bhi _0806A696
- lsls r0, 2
- ldr r1, _0806A5D0 @ =_0806A5D4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0806A5CC: .4byte gTasks
-_0806A5D0: .4byte _0806A5D4
- .align 2, 0
-_0806A5D4:
- .4byte _0806A5EC
- .4byte _0806A610
- .4byte _0806A634
- .4byte _0806A658
- .4byte _0806A682
- .4byte _0806A690
-_0806A5EC:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x40
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x35
- b _0806A67A
-_0806A610:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x40
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x56
- b _0806A67A
-_0806A634:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x40
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x6B
- b _0806A67A
-_0806A658:
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- adds r1, r3, 0
- adds r1, 0x2A
- movs r0, 0
- strb r0, [r1]
- subs r2, 0x12
- ldrb r1, [r2]
- subs r0, 0x40
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x80
-_0806A67A:
- strh r0, [r3, 0x20]
- movs r0, 0x5C
- strh r0, [r3, 0x22]
- b _0806A696
-_0806A682:
- adds r0, r3, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- b _0806A696
-_0806A690:
- adds r0, r3, 0
- bl DestroySprite
-_0806A696:
- pop {r0}
- bx r0
- thumb_func_end SpriteCB_ResetRtcCusor1
-
- thumb_func_start ResetRtcScreen_CreateCursor
-ResetRtcScreen_CreateCursor: @ 806A69C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _0806A70C @ =gUnknown_083764BC
- bl LoadSpritePalette
- ldr r0, _0806A710 @ =gSpriteTemplate_83764E8
- mov r8, r0
- movs r1, 0x35
- movs r2, 0x44
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r6, _0806A714 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r6, 0
- adds r4, 0x1C
- adds r2, r0, r4
- ldr r1, _0806A718 @ =SpriteCB_ResetRtcCusor0
- str r1, [r2]
- adds r0, r6
- strh r5, [r0, 0x2E]
- ldr r1, _0806A71C @ =0x0000ffff
- strh r1, [r0, 0x30]
- mov r0, r8
- movs r1, 0x35
- movs r2, 0x44
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r4
- ldr r1, _0806A720 @ =SpriteCB_ResetRtcCusor1
- str r1, [r4]
- adds r0, r6
- strh r5, [r0, 0x2E]
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0, 0x30]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806A70C: .4byte gUnknown_083764BC
-_0806A710: .4byte gSpriteTemplate_83764E8
-_0806A714: .4byte gSprites
-_0806A718: .4byte SpriteCB_ResetRtcCusor0
-_0806A71C: .4byte 0x0000ffff
-_0806A720: .4byte SpriteCB_ResetRtcCusor1
- thumb_func_end ResetRtcScreen_CreateCursor
-
- thumb_func_start ResetRtcScreen_FreeCursorPalette
-ResetRtcScreen_FreeCursorPalette: @ 806A724
- push {lr}
- ldr r0, _0806A734 @ =gUnknown_083764BC
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .align 2, 0
-_0806A734: .4byte gUnknown_083764BC
- thumb_func_end ResetRtcScreen_FreeCursorPalette
-
- thumb_func_start ResetRtcScreen_HideChooseTimeWindow
-ResetRtcScreen_HideChooseTimeWindow: @ 806A738
- push {lr}
- movs r0, 0x3
- movs r1, 0x8
- movs r2, 0x19
- movs r3, 0xB
- bl MenuZeroFillWindowRect
- pop {r0}
- bx r0
- thumb_func_end ResetRtcScreen_HideChooseTimeWindow
-
- thumb_func_start ResetRtcScreen_PrintTime
-ResetRtcScreen_PrintTime: @ 806A74C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r0
- adds r0, r2, 0
- adds r4, r3, 0
- ldr r6, [sp, 0x24]
- ldr r2, [sp, 0x28]
- mov r9, r2
- mov r2, r10
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 24
- lsrs r4, 24
- lsls r6, 24
- lsrs r6, 24
- mov r1, r9
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- ldr r7, _0806A83C @ =gStringVar4
- ldr r1, _0806A840 @ =0x00002710
- bl __umodsi3
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r4, 0
- movs r1, 0x18
- bl __umodsi3
- mov r8, r0
- mov r2, r8
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- adds r0, r6, 0
- movs r1, 0x3C
- bl __umodsi3
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- mov r0, r9
- movs r1, 0x3C
- bl __umodsi3
- mov r9, r0
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r4, _0806A844 @ =gStringVar1
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x18
- movs r3, 0x1
- bl sub_8072C44
- adds r0, r7, 0
- adds r1, r4, 0
- bl StringCopy
- adds r7, r0, 0
- ldr r1, _0806A848 @ =gOtherText_Day
- bl StringCopy
- adds r7, r0, 0
- adds r0, r4, 0
- mov r1, r8
- movs r2, 0x12
- movs r3, 0x1
- bl sub_8072C44
- adds r0, r7, 0
- adds r1, r4, 0
- bl StringCopy
- adds r7, r0, 0
- ldr r4, _0806A84C @ =gUnknown_08376500
- adds r1, r4, 0
- bl StringCopy
- adds r7, r0, 0
- adds r1, r6, 0
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r7, r0, 0
- adds r1, r4, 0
- bl StringCopy
- adds r7, r0, 0
- mov r1, r9
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, _0806A83C @ =gStringVar4
- mov r1, r10
- ldr r2, [sp]
- bl MenuPrint
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806A83C: .4byte gStringVar4
-_0806A840: .4byte 0x00002710
-_0806A844: .4byte gStringVar1
-_0806A848: .4byte gOtherText_Day
-_0806A84C: .4byte gUnknown_08376500
- thumb_func_end ResetRtcScreen_PrintTime
-
- thumb_func_start ResetRtcScreen_ShowChooseTimeWindow
-ResetRtcScreen_ShowChooseTimeWindow: @ 806A850
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x8
- adds r6, r0, 0
- mov r8, r1
- adds r4, r2, 0
- adds r5, r3, 0
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x3
- movs r1, 0x8
- movs r2, 0x19
- movs r3, 0xB
- bl MenuDrawTextWindow
- ldr r0, _0806A8A8 @ =gOtherText_OK
- movs r1, 0x14
- movs r2, 0x9
- bl MenuPrint
- str r4, [sp]
- str r5, [sp, 0x4]
- movs r0, 0x4
- movs r1, 0x9
- adds r2, r6, 0
- mov r3, r8
- bl ResetRtcScreen_PrintTime
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806A8A8: .4byte gOtherText_OK
- thumb_func_end ResetRtcScreen_ShowChooseTimeWindow
-
- thumb_func_start ResetRtcScreen_MoveTimeUpDown
-ResetRtcScreen_MoveTimeUpDown: @ 806A8AC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r3, 16
- lsrs r3, 16
- adds r1, r3, 0
- movs r0, 0x80
- ands r0, r3
- cmp r0, 0
- beq _0806A8C6
- ldrh r0, [r4]
- subs r0, 0x1
- b _0806A8E0
-_0806A8C6:
- movs r0, 0x40
- ands r0, r3
- cmp r0, 0
- beq _0806A8D4
- ldrh r0, [r4]
- adds r0, 0x1
- b _0806A8FE
-_0806A8D4:
- movs r0, 0x20
- ands r0, r3
- cmp r0, 0
- beq _0806A8EE
- ldrh r0, [r4]
- subs r0, 0xA
-_0806A8E0:
- strh r0, [r4]
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, r5
- bge _0806A90A
- strh r2, [r4]
- b _0806A90A
-_0806A8EE:
- movs r0, 0x10
- ands r1, r0
- cmp r1, 0
- bne _0806A8FA
- movs r0, 0
- b _0806A90C
-_0806A8FA:
- ldrh r0, [r4]
- adds r0, 0xA
-_0806A8FE:
- strh r0, [r4]
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, r2
- ble _0806A90A
- strh r5, [r4]
-_0806A90A:
- movs r0, 0x1
-_0806A90C:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ResetRtcScreen_MoveTimeUpDown
-
- thumb_func_start Task_ResetRtc_3
-Task_ResetRtc_3: @ 806A914
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0806A928 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x1
- strh r0, [r1, 0x8]
- bx lr
- .align 2, 0
-_0806A928: .4byte gTasks
- thumb_func_end Task_ResetRtc_3
-
- thumb_func_start Task_ResetRtc_2
-Task_ResetRtc_2: @ 806A92C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl ResetRtcScreen_HideChooseTimeWindow
- bl ResetRtcScreen_FreeCursorPalette
- ldr r1, _0806A950 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806A954 @ =Task_ResetRtc_3
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0806A950: .4byte gTasks
-_0806A954: .4byte Task_ResetRtc_3
- thumb_func_end Task_ResetRtc_2
-
- thumb_func_start Task_ResetRtc_1
-Task_ResetRtc_1: @ 806A958
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r7, r0, 3
- ldr r0, _0806A99C @ =gTasks + 0x8
- mov r8, r0
- adds r5, r7, r0
- ldrb r4, [r5, 0x4]
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- ldr r1, _0806A9A0 @ =gUnknown_08376420 - 0xC
- adds r2, r0, r1
- ldr r1, _0806A9A4 @ =gMain
- ldrh r3, [r1, 0x2E]
- movs r0, 0x2
- ands r0, r3
- mov r12, r1
- cmp r0, 0
- beq _0806A9AC
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, _0806A9A8 @ =Task_ResetRtc_2
- str r1, [r0]
- movs r0, 0
- strh r0, [r5, 0x2]
- movs r0, 0x6
- b _0806A9CC
- .align 2, 0
-_0806A99C: .4byte gTasks + 0x8
-_0806A9A0: .4byte gUnknown_08376420 - 0xC
-_0806A9A4: .4byte gMain
-_0806A9A8: .4byte Task_ResetRtc_2
-_0806A9AC:
- movs r0, 0x10
- ands r0, r3
- cmp r0, 0
- beq _0806A9BA
- ldrb r0, [r2, 0x7]
- cmp r0, 0
- bne _0806A9CC
-_0806A9BA:
- mov r3, r12
- ldrh r1, [r3, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0806A9D6
- ldrb r0, [r2, 0x6]
- cmp r0, 0
- beq _0806A9D6
-_0806A9CC:
- strh r0, [r5, 0x4]
- movs r0, 0x5
- bl PlaySE
- b _0806AA58
-_0806A9D6:
- cmp r4, 0x5
- bne _0806AA24
- mov r0, r12
- ldrh r1, [r0, 0x2E]
- movs r4, 0x1
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _0806AA58
- ldr r1, _0806AA18 @ =gLocalTime
- ldrh r0, [r5, 0x6]
- strh r0, [r1]
- ldrh r0, [r5, 0x8]
- strb r0, [r1, 0x2]
- ldrh r0, [r5, 0xA]
- strb r0, [r1, 0x3]
- ldrh r0, [r5, 0xC]
- strb r0, [r1, 0x4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0806AA1C @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, _0806AA20 @ =Task_ResetRtc_2
- str r1, [r0]
- strh r4, [r5, 0x2]
- movs r0, 0x6
- strh r0, [r5, 0x4]
- b _0806AA58
- .align 2, 0
-_0806AA18: .4byte gLocalTime
-_0806AA1C: .4byte gTasks
-_0806AA20: .4byte Task_ResetRtc_2
-_0806AA24:
- ldrb r0, [r2]
- lsls r0, 1
- adds r0, r5, r0
- ldrh r1, [r2, 0x2]
- ldrh r2, [r2, 0x4]
- mov r3, r12
- ldrh r4, [r3, 0x30]
- movs r3, 0xC0
- ands r3, r4
- bl ResetRtcScreen_MoveTimeUpDown
- cmp r0, 0
- beq _0806AA58
- movs r0, 0x5
- bl PlaySE
- ldrh r2, [r5, 0x6]
- ldrb r3, [r5, 0x8]
- ldrb r0, [r5, 0xA]
- str r0, [sp]
- ldrb r0, [r5, 0xC]
- str r0, [sp, 0x4]
- movs r0, 0x4
- movs r1, 0x9
- bl ResetRtcScreen_PrintTime
-_0806AA58:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end Task_ResetRtc_1
-
- thumb_func_start Task_ResetRtc_0
-Task_ResetRtc_0: @ 806AA64
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r6, r5, 2
- adds r6, r5
- lsls r6, 3
- ldr r0, _0806AACC @ =gTasks + 0x8
- mov r8, r0
- adds r4, r6, r0
- movs r0, 0
- strh r0, [r4]
- ldr r3, _0806AAD0 @ =gLocalTime
- ldrh r0, [r3]
- strh r0, [r4, 0x6]
- movs r1, 0x2
- ldrsb r1, [r3, r1]
- strh r1, [r4, 0x8]
- movs r2, 0x3
- ldrsb r2, [r3, r2]
- strh r2, [r4, 0xA]
- ldrb r3, [r3, 0x4]
- lsls r3, 24
- asrs r3, 24
- strh r3, [r4, 0xC]
- ldrh r0, [r4, 0x6]
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- bl ResetRtcScreen_ShowChooseTimeWindow
- adds r0, r5, 0
- bl ResetRtcScreen_CreateCursor
- movs r0, 0x2
- strh r0, [r4, 0x4]
- movs r0, 0x8
- negs r0, r0
- add r8, r0
- add r6, r8
- ldr r0, _0806AAD4 @ =Task_ResetRtc_1
- str r0, [r6]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0806AACC: .4byte gTasks + 0x8
-_0806AAD0: .4byte gLocalTime
-_0806AAD4: .4byte Task_ResetRtc_1
- thumb_func_end Task_ResetRtc_0
-
- thumb_func_start CB2_InitResetRtcScreen
-CB2_InitResetRtcScreen: @ 806AAD8
- push {r4-r7,lr}
- sub sp, 0x4
- movs r0, 0x80
- lsls r0, 19
- movs r4, 0
- strh r4, [r0]
- movs r0, 0
- bl SetVBlankCallback
- movs r2, 0xA0
- lsls r2, 19
- mov r0, sp
- strh r4, [r0]
- ldr r1, _0806AB94 @ =0x040000d4
- str r0, [r1]
- str r2, [r1, 0x4]
- ldr r0, _0806AB98 @ =0x81000200
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0xC0
- lsls r2, 19
- movs r3, 0xC0
- lsls r3, 9
- mov r4, sp
- movs r6, 0
- movs r5, 0x80
- lsls r5, 5
- ldr r7, _0806AB9C @ =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_0806AB16:
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r5
- subs r3, r5
- cmp r3, r5
- bhi _0806AB16
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0
- movs r1, 0x80
- bl ResetOamRange
- bl LoadOam
- bl remove_some_task
- bl dp12_8087EA4
- bl ResetSpriteData
- bl ResetTasks
- bl ResetPaletteFade
- ldr r4, _0806ABA0 @ =gWindowConfig_81E6CE4
- adds r0, r4, 0
- bl SetUpWindowConfig
- adds r0, r4, 0
- bl InitMenuWindow
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0x88
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _0806ABA4 @ =VBlankCB_ResetRtcScreen
- bl SetVBlankCallback
- ldr r0, _0806ABA8 @ =CB2_ResetRtcScreen
- bl SetMainCallback2
- ldr r0, _0806ABAC @ =Task_ResetRtcScreen
- movs r1, 0x50
- bl CreateTask
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806AB94: .4byte 0x040000d4
-_0806AB98: .4byte 0x81000200
-_0806AB9C: .4byte 0x81000800
-_0806ABA0: .4byte gWindowConfig_81E6CE4
-_0806ABA4: .4byte VBlankCB_ResetRtcScreen
-_0806ABA8: .4byte CB2_ResetRtcScreen
-_0806ABAC: .4byte Task_ResetRtcScreen
- thumb_func_end CB2_InitResetRtcScreen
-
- thumb_func_start CB2_ResetRtcScreen
-CB2_ResetRtcScreen: @ 806ABB0
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end CB2_ResetRtcScreen
-
- thumb_func_start VBlankCB_ResetRtcScreen
-VBlankCB_ResetRtcScreen: @ 806ABC8
- push {lr}
- bl ProcessSpriteCopyRequests
- bl LoadOam
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end VBlankCB_ResetRtcScreen
-
- thumb_func_start ResetRtcScreen_ShowMessage
-ResetRtcScreen_ShowMessage: @ 806ABDC
- push {r4,lr}
- adds r4, r0, 0
- bl MenuDisplayMessageBox
- adds r0, r4, 0
- movs r1, 0x2
- movs r2, 0xF
- bl MenuPrint
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ResetRtcScreen_ShowMessage
-
- thumb_func_start Task_ShowResetRtcPrompt
-Task_ShowResetRtcPrompt: @ 806ABF4
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0806AC14 @ =gTasks + 0x8
- adds r4, r0, r1
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0806AC18
- cmp r0, 0x1
- beq _0806AC80
- b _0806ACC4
- .align 2, 0
-_0806AC14: .4byte gTasks + 0x8
-_0806AC18:
- bl MenuZeroFillScreen
- movs r0, 0
- movs r1, 0
- movs r2, 0x14
- movs r3, 0xA
- bl MenuDrawTextWindow
- ldr r0, _0806AC98 @ =gSystemText_PresentTime
- movs r1, 0x1
- movs r2, 0x1
- bl MenuPrint
- ldr r0, _0806AC9C @ =gLocalTime
- ldrh r2, [r0]
- ldrb r3, [r0, 0x2]
- ldrb r1, [r0, 0x3]
- str r1, [sp]
- ldrb r0, [r0, 0x4]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x3
- bl ResetRtcScreen_PrintTime
- ldr r0, _0806ACA0 @ =gSystemText_PreviousTime
- movs r1, 0x1
- movs r2, 0x5
- bl MenuPrint
- ldr r1, _0806ACA4 @ =gSaveBlock2
- adds r0, r1, 0
- adds r0, 0xA0
- ldrh r2, [r0]
- adds r0, 0x2
- ldrb r3, [r0]
- adds r0, 0x1
- ldrb r0, [r0]
- str r0, [sp]
- adds r0, r1, 0
- adds r0, 0xA4
- ldrb r0, [r0]
- str r0, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0x7
- bl ResetRtcScreen_PrintTime
- ldr r0, _0806ACA8 @ =gSystemText_ResetRTCPrompt
- bl ResetRtcScreen_ShowMessage
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0806AC80:
- ldr r0, _0806ACAC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0806ACB0
- adds r0, r5, 0
- bl DestroyTask
- bl DoSoftReset
- b _0806ACC4
- .align 2, 0
-_0806AC98: .4byte gSystemText_PresentTime
-_0806AC9C: .4byte gLocalTime
-_0806ACA0: .4byte gSystemText_PreviousTime
-_0806ACA4: .4byte gSaveBlock2
-_0806ACA8: .4byte gSystemText_ResetRTCPrompt
-_0806ACAC: .4byte gMain
-_0806ACB0:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0806ACC4
- movs r0, 0x5
- bl PlaySE
- adds r0, r5, 0
- bl DestroyTask
-_0806ACC4:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end Task_ShowResetRtcPrompt
-
- thumb_func_start Task_ResetRtcScreen
-Task_ResetRtcScreen: @ 806ACCC
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _0806ACF4 @ =gTasks + 0x8
- adds r5, r0, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x6
- bls _0806ACE8
- b _0806AEC4
-_0806ACE8:
- lsls r0, 2
- ldr r1, _0806ACF8 @ =_0806ACFC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0806ACF4: .4byte gTasks + 0x8
-_0806ACF8: .4byte _0806ACFC
- .align 2, 0
-_0806ACFC:
- .4byte _0806AD18
- .4byte _0806AD34
- .4byte _0806AD80
- .4byte _0806ADD8
- .4byte _0806AE5C
- .4byte _0806AE8C
- .4byte _0806AEAE
-_0806AD18:
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0806AD30 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0x1
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0x1
- strh r0, [r5]
- b _0806AEC4
- .align 2, 0
-_0806AD30: .4byte 0x0000ffff
-_0806AD34:
- ldr r0, _0806AD5C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0806AD42
- b _0806AEC4
-_0806AD42:
- ldr r0, _0806AD60 @ =gSaveFileStatus
- ldrh r0, [r0]
- cmp r0, 0
- beq _0806AD4E
- cmp r0, 0x2
- bne _0806AD68
-_0806AD4E:
- ldr r0, _0806AD64 @ =gSystemText_NoSaveFileNoTime
- bl ResetRtcScreen_ShowMessage
- movs r0, 0x5
- strh r0, [r5]
- b _0806AEC4
- .align 2, 0
-_0806AD5C: .4byte gPaletteFade
-_0806AD60: .4byte gSaveFileStatus
-_0806AD64: .4byte gSystemText_NoSaveFileNoTime
-_0806AD68:
- bl RtcCalcLocalTime
- ldr r0, _0806AD7C @ =Task_ShowResetRtcPrompt
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x2]
- b _0806ADFC
- .align 2, 0
-_0806AD7C: .4byte Task_ShowResetRtcPrompt
-_0806AD80:
- ldr r2, _0806ADC4 @ =gTasks
- movs r0, 0x2
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrb r0, [r0, 0x4]
- cmp r0, 0x1
- bne _0806AD96
- b _0806AEC4
-_0806AD96:
- bl MenuZeroFillScreen
- ldr r0, _0806ADC8 @ =gSystemText_PleaseResetTime
- bl ResetRtcScreen_ShowMessage
- ldr r2, _0806ADCC @ =gLocalTime
- ldr r0, _0806ADD0 @ =gSaveBlock2
- adds r0, 0xA0
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- ldr r0, _0806ADD4 @ =Task_ResetRtc_0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0x2]
- movs r0, 0x3
- strh r0, [r5]
- b _0806AEC4
- .align 2, 0
-_0806ADC4: .4byte gTasks
-_0806ADC8: .4byte gSystemText_PleaseResetTime
-_0806ADCC: .4byte gLocalTime
-_0806ADD0: .4byte gSaveBlock2
-_0806ADD4: .4byte Task_ResetRtc_0
-_0806ADD8:
- ldr r2, _0806AE04 @ =gTasks
- movs r0, 0x2
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r1, r0, r2
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _0806AEC4
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _0806AE08
- ldrb r0, [r5, 0x2]
- bl DestroyTask
-_0806ADFC:
- movs r0, 0x2
- strh r0, [r5]
- b _0806AEC4
- .align 2, 0
-_0806AE04: .4byte gTasks
-_0806AE08:
- ldrb r0, [r5, 0x2]
- bl DestroyTask
- bl RtcReset
- ldr r4, _0806AE4C @ =gLocalTime
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r1, 0x2
- ldrsb r1, [r4, r1]
- movs r2, 0x3
- ldrsb r2, [r4, r2]
- movs r3, 0x4
- ldrsb r3, [r4, r3]
- bl RtcCalcLocalTimeOffset
- ldr r2, _0806AE50 @ =gSaveBlock2
- adds r2, 0xA0
- ldr r0, [r4]
- ldr r1, [r4, 0x4]
- str r0, [r2]
- str r1, [r2, 0x4]
- ldr r0, _0806AE54 @ =0x00004040
- ldrh r1, [r4]
- bl VarSet
- bl DisableResetRTC
- ldr r0, _0806AE58 @ =gSystemText_ClockResetDataSave
- bl ResetRtcScreen_ShowMessage
- movs r0, 0x4
- strh r0, [r5]
- b _0806AEC4
- .align 2, 0
-_0806AE4C: .4byte gLocalTime
-_0806AE50: .4byte gSaveBlock2
-_0806AE54: .4byte 0x00004040
-_0806AE58: .4byte gSystemText_ClockResetDataSave
-_0806AE5C:
- movs r0, 0
- bl TrySavingData
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0806AE7C
- ldr r0, _0806AE78 @ =gSystemText_SaveCompleted
- bl ResetRtcScreen_ShowMessage
- movs r0, 0x49
- bl PlaySE
- b _0806AE88
- .align 2, 0
-_0806AE78: .4byte gSystemText_SaveCompleted
-_0806AE7C:
- ldr r0, _0806AECC @ =gSystemText_SaveFailed
- bl ResetRtcScreen_ShowMessage
- movs r0, 0x16
- bl PlaySE
-_0806AE88:
- movs r0, 0x5
- strh r0, [r5]
-_0806AE8C:
- ldr r0, _0806AED0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0806AEC4
- movs r0, 0x1
- negs r0, r0
- ldr r1, _0806AED4 @ =0x0000ffff
- str r1, [sp]
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- movs r0, 0x6
- strh r0, [r5]
-_0806AEAE:
- ldr r0, _0806AED8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0806AEC4
- adds r0, r4, 0
- bl DestroyTask
- bl DoSoftReset
-_0806AEC4:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0806AECC: .4byte gSystemText_SaveFailed
-_0806AED0: .4byte gMain
-_0806AED4: .4byte 0x0000ffff
-_0806AED8: .4byte gPaletteFade
- thumb_func_end Task_ResetRtcScreen
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/ld_script.txt b/ld_script.txt
index 5b831800f..62864adee 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -109,7 +109,7 @@ SECTIONS {
src/coord_event_weather.o(.text);
src/field_tasks.o(.text);
src/clock.o(.text);
- asm/reset_rtc_screen.o(.text);
+ src/reset_rtc_screen.o(.text);
asm/party_menu.o(.text);
src/party_menu.o(.text);
asm/party_menu.o(.text_8070968);
diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c
new file mode 100644
index 000000000..d052992ad
--- /dev/null
+++ b/src/reset_rtc_screen.c
@@ -0,0 +1,496 @@
+#include "global.h"
+#include "event_data.h"
+#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "rtc.h"
+#include "save.h"
+#include "sprite.h"
+#include "songs.h"
+#include "sound.h"
+#include "string_util.h"
+#include "strings.h"
+#include "strings2.h"
+#include "task.h"
+#include "text.h"
+#include "unknown_task.h"
+
+struct ResetRtcStruct
+{
+ /*0x0*/ u8 dataIndex;
+ /*0x2*/ u16 minVal;
+ /*0x4*/ u16 maxVal;
+ /*0x6*/ u8 left;
+ /*0x7*/ u8 right;
+ /*0x8*/ u8 unk8;
+};
+
+extern u16 gSaveFileStatus;
+
+extern struct ResetRtcStruct gUnknown_08376420[];
+extern struct SpritePalette gUnknown_083764BC;
+extern struct SpriteTemplate gSpriteTemplate_83764E8;
+extern u8 gUnknown_08376500[];
+
+void CB2_ResetRtcScreen(void);
+void VBlankCB_ResetRtcScreen(void);
+void Task_ResetRtcScreen(u8);
+
+void SpriteCB_ResetRtcCusor0(struct Sprite *sprite)
+{
+ int state = gTasks[sprite->data0].data[2];
+ if (state != sprite->data1)
+ {
+ sprite->data1 = state;
+ switch (state)
+ {
+ case 1:
+ sprite->invisible = FALSE;
+ sprite->animNum = 1;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 53;
+ sprite->pos1.y = 68;
+ break;
+ case 2:
+ sprite->invisible = FALSE;
+ sprite->animNum = 1;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 86;
+ sprite->pos1.y = 68;
+ break;
+ case 3:
+ sprite->invisible = FALSE;
+ sprite->animNum = 1;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 107;
+ sprite->pos1.y = 68;
+ break;
+ case 4:
+ sprite->invisible = FALSE;
+ sprite->animNum = 1;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 128;
+ sprite->pos1.y = 68;
+ break;
+ case 5:
+ sprite->invisible = FALSE;
+ sprite->animNum = 2;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 155;
+ sprite->pos1.y = 80;
+ break;
+ case 6:
+ DestroySprite(sprite);
+ break;
+ }
+ }
+}
+
+void SpriteCB_ResetRtcCusor1(struct Sprite *sprite)
+{
+ int state = gTasks[sprite->data0].data[2];
+ if (state != sprite->data1)
+ {
+ sprite->data1 = state;
+ switch (state)
+ {
+ case 1:
+ sprite->invisible = FALSE;
+ sprite->animNum = 0;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 53;
+ sprite->pos1.y = 92;
+ break;
+ case 2:
+ sprite->invisible = FALSE;
+ sprite->animNum = 0;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 86;
+ sprite->pos1.y = 92;
+ break;
+ case 3:
+ sprite->invisible = FALSE;
+ sprite->animNum = 0;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 107;
+ sprite->pos1.y = 92;
+ break;
+ case 4:
+ sprite->invisible = FALSE;
+ sprite->animNum = 0;
+ sprite->animDelayCounter = 0;
+ sprite->pos1.x = 128;
+ sprite->pos1.y = 92;
+ break;
+ case 5:
+ sprite->invisible = TRUE;
+ break;
+ case 6:
+ DestroySprite(sprite);
+ break;
+ }
+ }
+}
+
+void ResetRtcScreen_CreateCursor(u8 taskId)
+{
+ int spriteId;
+
+ LoadSpritePalette(&gUnknown_083764BC);
+
+ spriteId = CreateSpriteAtEnd(&gSpriteTemplate_83764E8, 53, 68, 0);
+ gSprites[spriteId].callback = SpriteCB_ResetRtcCusor0;
+ gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data1 = -1;
+
+ spriteId = CreateSpriteAtEnd(&gSpriteTemplate_83764E8, 53, 68, 0);
+ gSprites[spriteId].callback = SpriteCB_ResetRtcCusor1;
+ gSprites[spriteId].data0 = taskId;
+ gSprites[spriteId].data1 = -1;
+}
+
+void ResetRtcScreen_FreeCursorPalette(void)
+{
+ FreeSpritePaletteByTag(gUnknown_083764BC.tag);
+}
+
+void ResetRtcScreen_HideChooseTimeWindow(void)
+{
+ MenuZeroFillWindowRect(3, 8, 25, 11);
+}
+
+void ResetRtcScreen_PrintTime(u8 x, u8 y, u16 days, u8 hours, u8 minutes, u8 seconds)
+{
+ u8 *dest = gStringVar4;
+ days %= 10000;
+ hours %= 24;
+ minutes %= 60;
+ seconds %= 60;
+ sub_8072C44(gStringVar1, days, 24, 1);
+ dest = StringCopy(dest, gStringVar1);
+ dest = StringCopy(dest, gOtherText_Day);
+ sub_8072C44(gStringVar1, hours, 18, 1);
+ dest = StringCopy(dest, gStringVar1);
+ dest = StringCopy(dest, gUnknown_08376500);
+ dest = ConvertIntToDecimalStringN(dest, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ dest = StringCopy(dest, gUnknown_08376500);
+ ConvertIntToDecimalStringN(dest, seconds, STR_CONV_MODE_LEADING_ZEROS, 2);
+ MenuPrint(gStringVar4, x, y);
+}
+
+void ResetRtcScreen_ShowChooseTimeWindow(u16 days, u8 hours, u8 minutes, u8 seconds)
+{
+ MenuDrawTextWindow(3, 8, 25, 11);
+ MenuPrint(gOtherText_OK, 20, 9);
+ ResetRtcScreen_PrintTime(4, 9, days, hours, minutes, seconds);
+}
+
+bool32 ResetRtcScreen_MoveTimeUpDown(s16 *val, int minVal, int maxVal, u16 keys)
+{
+ if (keys & DPAD_DOWN)
+ {
+ (*val)--;
+ if (*val < minVal)
+ *val = maxVal;
+ }
+ else if (keys & DPAD_UP)
+ {
+ (*val)++;
+ if (*val > maxVal)
+ *val = minVal;
+ }
+ else if (keys & DPAD_LEFT)
+ {
+ *val -= 10;
+ if (*val < minVal)
+ *val = maxVal;
+ }
+ else if (keys & DPAD_RIGHT)
+ {
+ *val += 10;
+ if (*val > maxVal)
+ *val = minVal;
+ }
+ else
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void Task_ResetRtc_3(u8 taskId)
+{
+ gTasks[taskId].data[0] = 1;
+}
+
+void Task_ResetRtc_2(u8 taskId)
+{
+ ResetRtcScreen_HideChooseTimeWindow();
+ ResetRtcScreen_FreeCursorPalette();
+ gTasks[taskId].func = Task_ResetRtc_3;
+}
+
+void Task_ResetRtc_1(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 selection = data[2];
+ struct ResetRtcStruct *selectionInfo = &gUnknown_08376420[selection - 1];
+
+ if (gMain.newKeys & B_BUTTON)
+ {
+ gTasks[taskId].func = Task_ResetRtc_2;
+ data[1] = 0;
+ data[2] = 6;
+ PlaySE(SE_SELECT);
+ return;
+ }
+
+ if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (selectionInfo->right)
+ {
+ data[2] = selectionInfo->right;
+ PlaySE(SE_SELECT);
+ return;
+ }
+ }
+
+ if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (selectionInfo->left)
+ {
+ data[2] = selectionInfo->left;
+ PlaySE(SE_SELECT);
+ return;
+ }
+ }
+
+ if (selection == 5)
+ {
+ if (gMain.newKeys & A_BUTTON)
+ {
+ gLocalTime.days = data[3];
+ gLocalTime.hours = data[4];
+ gLocalTime.minutes = data[5];
+ gLocalTime.seconds = data[6];
+ PlaySE(SE_SELECT);
+ gTasks[taskId].func = Task_ResetRtc_2;
+ data[1] = 1;
+ data[2] = 6;
+ }
+ }
+ else if (ResetRtcScreen_MoveTimeUpDown(&data[selectionInfo->dataIndex], selectionInfo->minVal, selectionInfo->maxVal, gMain.newAndRepeatedKeys & (DPAD_UP | DPAD_DOWN)))
+ {
+ PlaySE(SE_SELECT);
+ ResetRtcScreen_PrintTime(4, 9, data[3], data[4], data[5], data[6]);
+ }
+}
+
+void Task_ResetRtc_0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ data[0] = 0;
+ data[3] = gLocalTime.days;
+ data[4] = gLocalTime.hours;
+ data[5] = gLocalTime.minutes;
+ data[6] = gLocalTime.seconds;
+ ResetRtcScreen_ShowChooseTimeWindow(data[3], data[4], data[5], data[6]);
+ ResetRtcScreen_CreateCursor(taskId);
+ data[2] = 2;
+ gTasks[taskId].func = Task_ResetRtc_1;
+}
+
+void CB2_InitResetRtcScreen(void)
+{
+ u8 *addr;
+ u32 size;
+
+ REG_DISPCNT = 0;
+ SetVBlankCallback(NULL);
+
+ DmaClear16(3, PLTT, PLTT_SIZE);
+
+ addr = (u8 *)VRAM;
+ size = 0x18000;
+ while (1)
+ {
+ DmaFill16(3, 0, addr, 0x1000);
+ addr += 0x1000;
+ size -= 0x1000;
+ if (size <= 0x1000)
+ {
+ DmaFill16(3, 0, addr, size);
+ break;
+ }
+ }
+
+ ResetOamRange(0, 128);
+ LoadOam();
+ remove_some_task();
+ dp12_8087EA4();
+ ResetSpriteData();
+ ResetTasks();
+ ResetPaletteFade();
+ SetUpWindowConfig(&gWindowConfig_81E6CE4);
+ InitMenuWindow(&gWindowConfig_81E6CE4);
+ REG_DISPCNT = 4352;
+ SetVBlankCallback(VBlankCB_ResetRtcScreen);
+ SetMainCallback2(CB2_ResetRtcScreen);
+ CreateTask(Task_ResetRtcScreen, 80);
+}
+
+void CB2_ResetRtcScreen(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void VBlankCB_ResetRtcScreen(void)
+{
+ ProcessSpriteCopyRequests();
+ LoadOam();
+ TransferPlttBuffer();
+}
+
+void ResetRtcScreen_ShowMessage(const u8 *str)
+{
+ MenuDisplayMessageBox();
+ MenuPrint(str, 2, 15);
+}
+
+void Task_ShowResetRtcPrompt(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ MenuZeroFillScreen();
+ MenuDrawTextWindow(0, 0, 20, 10);
+ MenuPrint(gSystemText_PresentTime, 1, 1);
+ ResetRtcScreen_PrintTime(
+ 1,
+ 3,
+ gLocalTime.days,
+ gLocalTime.hours,
+ gLocalTime.minutes,
+ gLocalTime.seconds);
+ MenuPrint(gSystemText_PreviousTime, 1, 5);
+ ResetRtcScreen_PrintTime(
+ 1,
+ 7,
+ gSaveBlock2.lastBerryTreeUpdate.days,
+ gSaveBlock2.lastBerryTreeUpdate.hours,
+ gSaveBlock2.lastBerryTreeUpdate.minutes,
+ gSaveBlock2.lastBerryTreeUpdate.seconds);
+ ResetRtcScreen_ShowMessage(gSystemText_ResetRTCPrompt);
+ data[0]++;
+ case 1:
+ if (gMain.newKeys & B_BUTTON)
+ {
+ DestroyTask(taskId);
+ DoSoftReset();
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void Task_ResetRtcScreen(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 1, 0x10, 0, 0xFFFF);
+ data[0] = 1;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
+ {
+ ResetRtcScreen_ShowMessage(gSystemText_NoSaveFileNoTime);
+ data[0] = 5;
+ }
+ else
+ {
+ RtcCalcLocalTime();
+ data[1] = CreateTask(Task_ShowResetRtcPrompt, 80);
+ data[0] = 2;
+ }
+ }
+ break;
+ case 2:
+ if (gTasks[data[1]].isActive != TRUE)
+ {
+ MenuZeroFillScreen();
+ ResetRtcScreen_ShowMessage(gSystemText_PleaseResetTime);
+ gLocalTime = gSaveBlock2.lastBerryTreeUpdate;
+ data[1] = CreateTask(Task_ResetRtc_0, 80);
+ data[0] = 3;
+ }
+ break;
+ case 3:
+ if (gTasks[data[1]].data[0])
+ {
+ if (!gTasks[data[1]].data[1])
+ {
+ DestroyTask(data[1]);
+ data[0] = 2;
+ }
+ else
+ {
+ DestroyTask(data[1]);
+ RtcReset();
+ RtcCalcLocalTimeOffset(
+ gLocalTime.days,
+ gLocalTime.hours,
+ gLocalTime.minutes,
+ gLocalTime.seconds);
+ gSaveBlock2.lastBerryTreeUpdate = gLocalTime;
+ VarSet(VAR_DAYS, gLocalTime.days);
+ DisableResetRTC();
+ ResetRtcScreen_ShowMessage(gSystemText_ClockResetDataSave);
+ data[0] = 4;
+ }
+ }
+ break;
+ case 4:
+ if (TrySavingData(0) == TRUE)
+ {
+ ResetRtcScreen_ShowMessage(gSystemText_SaveCompleted);
+ PlaySE(SE_PINPON);
+ }
+ else
+ {
+ ResetRtcScreen_ShowMessage(gSystemText_SaveFailed);
+ PlaySE(SE_BOO);
+ }
+ data[0] = 5;
+ case 5:
+ if (gMain.newKeys & A_BUTTON)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 1, 0, 0x10, 0xFFFF);
+ data[0] = 6;
+ }
+ else
+ {
+ break;
+ }
+ case 6:
+ if (!gPaletteFade.active)
+ {
+ DestroyTask(taskId);
+ DoSoftReset();
+ }
+ }
+}