From ab569cc466879939689b3ed945657a13a444bf66 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 14:57:00 -0500 Subject: [PATCH 01/17] clock.s --- asm/clock.s | 175 ---------------------------------------- include/dewford_trend.h | 1 + include/field_screen.h | 1 + include/rom6.h | 6 ++ include/tv.h | 1 + include/wallclock.h | 6 ++ ld_script.txt | 2 +- src/clock.c | 96 ++++++++++++++++++++++ 8 files changed, 112 insertions(+), 176 deletions(-) delete mode 100644 asm/clock.s create mode 100644 include/wallclock.h create mode 100644 src/clock.c diff --git a/asm/clock.s b/asm/clock.s deleted file mode 100644 index 5d771a8b69..0000000000 --- a/asm/clock.s +++ /dev/null @@ -1,175 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_809E778 -sub_809E778: @ 809E778 - push {lr} - ldr r0, =0x00000895 - bl FlagSet - bl RtcCalcLocalTime - ldr r0, =gSaveBlock2Ptr - ldr r2, [r0] - adds r2, 0xA0 - ldr r3, =gLocalTime - ldr r0, [r3] - ldr r1, [r3, 0x4] - str r0, [r2] - str r1, [r2, 0x4] - ldr r0, =0x00004040 - ldrh r1, [r3] - bl VarSet - pop {r0} - bx r0 - .pool - thumb_func_end sub_809E778 - - thumb_func_start DoTimeBasedEvents -DoTimeBasedEvents: @ 809E7B0 - push {r4,lr} - ldr r0, =0x00000895 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _0809E7DA - bl sub_813B9C0 - lsls r0, 24 - cmp r0, 0 - bne _0809E7DA - bl RtcCalcLocalTime - ldr r4, =gLocalTime - adds r0, r4, 0 - bl sub_809E7E8 - adds r0, r4, 0 - bl sub_809E858 -_0809E7DA: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end DoTimeBasedEvents - - thumb_func_start sub_809E7E8 -sub_809E7E8: @ 809E7E8 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r0, =0x00004040 - bl GetVarPointer - adds r6, r0, 0 - ldrh r0, [r6] - movs r2, 0 - ldrsh r1, [r5, r2] - cmp r0, r1 - beq _0809E84E - cmp r0, r1 - bgt _0809E84E - ldrh r4, [r5] - subs r4, r0 - lsls r4, 16 - lsrs r4, 16 - bl ClearUpperFlags - adds r0, r4, 0 - bl sub_8122580 - adds r0, r4, 0 - bl sub_80ED888 - adds r0, r4, 0 - bl sub_80AEFBC - adds r0, r4, 0 - bl UpdatePartyPokerusTime - adds r0, r4, 0 - bl sub_8137904 - adds r0, r4, 0 - bl sub_8137A20 - adds r0, r4, 0 - bl sub_8139EF4 - adds r0, r4, 0 - bl sub_813A7F4 - adds r0, r4, 0 - bl sub_813945C - adds r0, r4, 0 - bl SetRandomLotteryNumber - ldrh r0, [r5] - strh r0, [r6] -_0809E84E: - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_809E7E8 - - thumb_func_start sub_809E858 -sub_809E858: @ 809E858 - push {r4-r6,lr} - sub sp, 0x8 - adds r5, r0, 0 - mov r4, sp - ldr r6, =gSaveBlock2Ptr - ldr r1, [r6] - adds r1, 0xA0 - mov r0, sp - adds r2, r5, 0 - bl CalcTimeDifference - mov r0, sp - movs r2, 0 - ldrsh r1, [r0, r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r1, r0, 4 - subs r1, r0 - lsls r1, 5 - movs r2, 0x2 - ldrsb r2, [r4, r2] - lsls r0, r2, 4 - subs r0, r2 - lsls r0, 2 - adds r1, r0 - movs r0, 0x3 - ldrsb r0, [r4, r0] - adds r0, r1, r0 - cmp r0, 0 - beq _0809E8A8 - cmp r0, 0 - blt _0809E8A8 - bl BerryTreeTimeUpdate - ldr r2, [r6] - adds r2, 0xA0 - ldr r0, [r5] - ldr r1, [r5, 0x4] - str r0, [r2] - str r1, [r2, 0x4] -_0809E8A8: - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end sub_809E858 - - thumb_func_start sub_809E8B4 -sub_809E8B4: @ 809E8B4 - push {lr} - bl sub_809E778 - ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 - pop {r0} - bx r0 - .pool - thumb_func_end sub_809E8B4 - - thumb_func_start Special_StartWallClock -Special_StartWallClock: @ 809E8C8 - push {lr} - ldr r0, =Cb2_StartWallClock - bl SetMainCallback2 - ldr r1, =gMain - ldr r0, =sub_809E8B4 - str r0, [r1, 0x8] - pop {r0} - bx r0 - .pool - thumb_func_end Special_StartWallClock - - .align 2, 0 @ Don't pad with nop. diff --git a/include/dewford_trend.h b/include/dewford_trend.h index 01e5d9762a..3972ad143c 100644 --- a/include/dewford_trend.h +++ b/include/dewford_trend.h @@ -3,5 +3,6 @@ void InitDewfordTrend(void); void UpdateDewfordTrendPerDay(u16); +void sub_8122580(u16 days); #endif // GUARD_DEWFORDTREND_H diff --git a/include/field_screen.h b/include/field_screen.h index 089e79cc43..f01760fcb7 100644 --- a/include/field_screen.h +++ b/include/field_screen.h @@ -9,5 +9,6 @@ void pal_fill_black(void); bool8 sub_80ABDFC(void); void sub_80AF168(void); +void sub_80AEFBC(u16 days); #endif //GUARD_FIELD_SCREEN_H diff --git a/include/rom6.h b/include/rom6.h index b4a972794b..014422b3d2 100644 --- a/include/rom6.h +++ b/include/rom6.h @@ -5,5 +5,11 @@ void sub_81357FC(u8, void(void)); u8 GetLeadMonIndex(void); u8 GetSSTidalLocation(u8 *grp, u8 *num, s16 *x, s16 *y); void sub_813BADC(bool8); +bool8 sub_813B9C0(void); +void sub_8137904(u16 days); +void sub_8137A20(u16 days); +void sub_8139EF4(u16 days); +void sub_813A7F4(u16 days); +void sub_813945C(u16 days); #endif //GUARD_ROM6_H diff --git a/include/tv.h b/include/tv.h index 3f48af569d..80828faf1a 100644 --- a/include/tv.h +++ b/include/tv.h @@ -14,5 +14,6 @@ void sub_80EEA70(void); void sub_80F14F8(TVShow *shows); size_t sub_80EF370(int value); void SetPokemonAnglerSpecies(u16 species); +void sub_80ED888(u16 days); #endif //GUARD_TV_H diff --git a/include/wallclock.h b/include/wallclock.h new file mode 100644 index 0000000000..48697c19fc --- /dev/null +++ b/include/wallclock.h @@ -0,0 +1,6 @@ +#ifndef GUARD_WALLCLOCK_H +#define GUARD_WALLCLOCK_H + +void Cb2_StartWallClock(void); + +#endif //GUARD_WALLCLOCK_H diff --git a/ld_script.txt b/ld_script.txt index e9c810adcf..66c981f9c5 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -107,7 +107,7 @@ SECTIONS { src/event_data.o(.text); asm/coord_event_weather.o(.text); asm/field_tasks.o(.text); - asm/clock.o(.text); + src/clock.o(.text); asm/reset_rtc_screen.o(.text); src/start_menu.o(.text); asm/start_menu.o(.text); diff --git a/src/clock.c b/src/clock.c new file mode 100644 index 0000000000..2ba42f70de --- /dev/null +++ b/src/clock.c @@ -0,0 +1,96 @@ +#include "global.h" +#include "rom6.h" +#include "event_data.h" +#include "rtc.h" +#include "lottery_corner.h" +#include "dewford_trend.h" +#include "tv.h" +#include "field_screen.h" +#include "berry.h" +#include "main.h" +#include "overworld.h" +#include "wallclock.h" + +// static types + +// static declarations + +static void sub_809E7E8(struct Time *localTime); +static void sub_809E858(struct Time *localTime); + +// rodata + +// text + +static void sub_809E778(void) +{ + FlagSet(FLAG_SYS_CLOCK_SET); + RtcCalcLocalTime(); + gSaveBlock2Ptr->lastBerryTreeUpdate = gLocalTime; + VarSet(VAR_DAYS, gLocalTime.days); +} + +void DoTimeBasedEvents(void) +{ + if (FlagGet(FLAG_SYS_CLOCK_SET) && !sub_813B9C0()) + { + RtcCalcLocalTime(); + sub_809E7E8(&gLocalTime); + sub_809E858(&gLocalTime); + } +} + +static void sub_809E7E8(struct Time *localTime) +{ + u16 *days = GetVarPointer(VAR_DAYS); + u16 daysSince; + + if (*days != localTime->days) + { + if (*days <= localTime->days) + { + daysSince = localTime->days - *days; + ClearUpperFlags(); + sub_8122580(daysSince); + sub_80ED888(daysSince); + sub_80AEFBC(daysSince); + UpdatePartyPokerusTime(daysSince); + sub_8137904(daysSince); + sub_8137A20(daysSince); + sub_8139EF4(daysSince); + sub_813A7F4(daysSince); + sub_813945C(daysSince); + SetRandomLotteryNumber(daysSince); + *days = localTime->days; + } + } +} + +static void sub_809E858(struct Time *localTime) +{ + struct Time difference; + int minutes; + + CalcTimeDifference(&difference, &gSaveBlock2Ptr->lastBerryTreeUpdate, localTime); + minutes = 24 * 60 * difference.days + 60 * difference.hours + difference.minutes; + if (minutes != 0) + { + if (minutes >= 0) + { + BerryTreeTimeUpdate(minutes); + gSaveBlock2Ptr->lastBerryTreeUpdate = *localTime; + } + } +} + +void sub_809E8B4(void) +{ + sub_809E778(); + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void Special_StartWallClock(void) +{ + SetMainCallback2(Cb2_StartWallClock); + gMain.savedCallback = sub_809E8B4; +} From f54f2c424ffdbdd9b9b3c4758bbbe245833f6436 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 18:00:26 -0500 Subject: [PATCH 02/17] LoadWallClockGraphics --- asm/wallclock.s | 189 -------------------------------------------- data/data4c.s | 33 -------- data/wallclock.s | 39 +++++++++ include/gba/macro.h | 75 ++++++++++++++++++ include/graphics.h | 3 + ld_script.txt | 2 + src/wallclock.c | 83 +++++++++++++++++++ 7 files changed, 202 insertions(+), 222 deletions(-) create mode 100644 data/wallclock.s create mode 100644 src/wallclock.c diff --git a/asm/wallclock.s b/asm/wallclock.s index 5c818212c9..da8e01f2e0 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,195 +5,6 @@ .text - thumb_func_start sub_81347B4 -sub_81347B4: @ 81347B4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_81347B4 - - thumb_func_start LoadWallClockGraphics -LoadWallClockGraphics: @ 81347C8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r0, 0 - bl SetVBlankCallback - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0xE - movs r1, 0 - bl SetGpuReg - movs r0, 0xC - movs r1, 0 - bl SetGpuReg - movs r0, 0xA - movs r1, 0 - bl SetGpuReg - movs r0, 0x8 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r0, sp, 0x4 - mov r8, r0 - mov r2, sp - movs r6, 0 - ldr r1, =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_0813486C: - strh r6, [r2] - mov r0, sp - str r0, [r1] - str r3, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r5 - subs r4, r5 - cmp r4, r5 - bhi _0813486C - strh r6, [r2] - mov r2, sp - str r2, [r1] - str r3, [r1, 0x4] - lsrs r0, r4, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 19 - movs r3, 0x80 - lsls r3, 3 - movs r4, 0 - str r4, [sp, 0x4] - ldr r2, =0x040000d4 - mov r1, r8 - str r1, [r2] - str r0, [r2, 0x4] - lsrs r0, r3, 2 - movs r1, 0x85 - lsls r1, 24 - orrs r0, r1 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r1, 0xA0 - lsls r1, 19 - mov r0, sp - strh r4, [r0] - str r0, [r2] - str r1, [r2, 0x4] - lsrs r3, 1 - movs r0, 0x81 - lsls r0, 24 - orrs r3, r0 - str r3, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, =gUnknown_08DCC05C - movs r1, 0xC0 - lsls r1, 19 - bl LZ77UnCompVram - ldr r0, =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0 - bne _081348FC - ldr r0, =gUnknown_08DCC01C - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - b _08134906 - .pool -_081348FC: - ldr r0, =gUnknown_08DCC03C - movs r1, 0 - movs r2, 0x20 - bl LoadPalette -_08134906: - bl GetOverworldTextboxPalettePtr - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - ldr r0, =gUnknown_085B21D4 - movs r1, 0xC0 - movs r2, 0x8 - bl LoadPalette - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, =gUnknown_085B21FC - movs r0, 0 - movs r2, 0x3 - bl InitBgsFromTemplates - ldr r0, =gUnknown_085B21DC - bl InitWindows - bl DeactivateAllTextPrinters - movs r1, 0x94 - lsls r1, 2 - movs r0, 0 - movs r2, 0xD0 - bl sub_809882C - bl clear_scheduled_bg_copies_to_vram - bl remove_some_task - bl ResetTasks - bl ResetSpriteData - bl ResetPaletteFade - bl FreeAllSpritePalettes - ldr r0, =gUnknown_085B2208 - bl LoadCompressedObjectPic - ldr r0, =gUnknown_085B2218 - bl LoadSpritePalettes - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end LoadWallClockGraphics - thumb_func_start sub_813498C sub_813498C: @ 813498C push {lr} diff --git a/data/data4c.s b/data/data4c.s index b86cd2add1..c18d0d5927 100644 --- a/data/data4c.s +++ b/data/data4c.s @@ -5,39 +5,6 @@ .section .rodata -gUnknown_085B21D4:: @ 85B21D4 - .incbin "baserom.gba", 0x5b21d4, 0x8 - -gUnknown_085B21DC:: @ 85B21DC - .incbin "baserom.gba", 0x5b21dc, 0x18 - -gUnknown_085B21F4:: @ 85B21F4 - .incbin "baserom.gba", 0x5b21f4, 0x8 - -gUnknown_085B21FC:: @ 85B21FC - .incbin "baserom.gba", 0x5b21fc, 0xc - -gUnknown_085B2208:: @ 85B2208 - .incbin "baserom.gba", 0x5b2208, 0x10 - -gUnknown_085B2218:: @ 85B2218 - .incbin "baserom.gba", 0x5b2218, 0x38 - -gUnknown_085B2250:: @ 85B2250 - .incbin "baserom.gba", 0x5b2250, 0x18 - -gUnknown_085B2268:: @ 85B2268 - .incbin "baserom.gba", 0x5b2268, 0x38 - -gUnknown_085B22A0:: @ 85B22A0 - .incbin "baserom.gba", 0x5b22a0, 0x18 - -gUnknown_085B22B8:: @ 85B22B8 - .incbin "baserom.gba", 0x5b22b8, 0x18 - -gUnknown_085B22D0:: @ 85B22D0 - .incbin "baserom.gba", 0x5b22d0, 0x2d0 - gPokeblockFlavorCompatibilityTable:: @ 85B25A0 .incbin "baserom.gba", 0x5b25a0, 0x80 diff --git a/data/wallclock.s b/data/wallclock.s new file mode 100644 index 0000000000..a665655390 --- /dev/null +++ b/data/wallclock.s @@ -0,0 +1,39 @@ +@ the fourth big chunk of data + + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata + +gUnknown_085B21D4:: @ 85B21D4 + .incbin "baserom.gba", 0x5b21d4, 0x8 + +gUnknown_085B21DC:: @ 85B21DC + .incbin "baserom.gba", 0x5b21dc, 0x18 + +gUnknown_085B21F4:: @ 85B21F4 + .incbin "baserom.gba", 0x5b21f4, 0x8 + +gUnknown_085B21FC:: @ 85B21FC + .incbin "baserom.gba", 0x5b21fc, 0xc + +gUnknown_085B2208:: @ 85B2208 + .incbin "baserom.gba", 0x5b2208, 0x10 + +gUnknown_085B2218:: @ 85B2218 + .incbin "baserom.gba", 0x5b2218, 0x38 + +gUnknown_085B2250:: @ 85B2250 + .incbin "baserom.gba", 0x5b2250, 0x18 + +gUnknown_085B2268:: @ 85B2268 + .incbin "baserom.gba", 0x5b2268, 0x38 + +gUnknown_085B22A0:: @ 85B22A0 + .incbin "baserom.gba", 0x5b22a0, 0x18 + +gUnknown_085B22B8:: @ 85B22B8 + .incbin "baserom.gba", 0x5b22b8, 0x18 + +gUnknown_085B22D0:: @ 85B22D0 + .incbin "baserom.gba", 0x5b22d0, 0x2d0 diff --git a/include/gba/macro.h b/include/gba/macro.h index 7b6b98c067..ad4820bcf9 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -78,6 +78,81 @@ #define DmaCopy16(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 16) #define DmaCopy32(dmaNum, src, dest, size) DMA_COPY(dmaNum, src, dest, size, 32) +#define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \ +{ \ + const void *_src = src; \ + void *_dest = dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaCopy##bit(dmaNum, _src, _dest, (block)); \ + _src += (block); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaCopy##bit(dmaNum, _src, _dest, _size); \ + break; \ + } \ + } \ +} + +#define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16) + +#define DmaCopyLarge32(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 32) + +#define DmaFillLarge(dmaNum, value, dest, size, block, bit) \ +{ \ + void *_dest = dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaFill##bit(dmaNum, value, _dest, (block)); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaFill##bit(dmaNum, value, _dest, _size); \ + break; \ + } \ + } \ +} + +#define DmaFillLarge16(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 16) + +#define DmaFillLarge32(dmaNum, value, dest, size, block) DmaFillLarge(dmaNum, value, dest, size, block, 32) + +#define DmaCopyDefvars(dmaNum, src, dest, size, bit) \ +{ \ + const void *_src = src; \ + void *_dest = dest; \ + u32 _size = size; \ + DmaCopy##bit(dmaNum, _src, _dest, _size); \ +} + +#define DmaCopy16Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 16) +#define DmaCopy32Defvars(dmaNum, src, dest, size) DmaCopyDefvars(dmaNum, src, dest, size, 32) + +#define DmaFillDefvars(dmaNum, value, dest, size, bit) \ +{ \ + void *_dest = dest; \ + u32 _size = size; \ + DmaFill##bit(dmaNum, value, _dest, _size); \ +} + +#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16) +#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32) + +#define DmaClearDefvars(dmaNum, dest, size, bit) \ +{ \ + void *_dest = dest; \ + u32 _size = size; \ + DmaClear##bit(dmaNum, _dest, _size); \ +} + +#define DmaClear16Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 16) +#define DmaClear32Defvars(dmaNum, dest, size) DmaClearDefvars(dmaNum, dest, size, 32) + #define DmaStop(dmaNum) \ { \ vu16 *dmaRegs = (vu16 *)REG_ADDR_DMA##dmaNum; \ diff --git a/include/graphics.h b/include/graphics.h index c50fdef3f4..f3d4588ea9 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -91,5 +91,8 @@ extern const u8 gUnknown_08DB9F08[]; extern const u8 gUnknown_08DB9FFC[]; extern const u8 gUnknown_08DBA020[]; extern const u8 gUnknown_08DBA12C[]; +extern const u8 gUnknown_08DCC05C[]; +extern const u16 gUnknown_08DCC01C[]; +extern const u16 gUnknown_08DCC03C[]; #endif //GUARD_GRAPHICS_H diff --git a/ld_script.txt b/ld_script.txt index 66c981f9c5..2dd25e91a7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -178,6 +178,7 @@ SECTIONS { src/battle_ai_script_commands.o(.text); asm/trader.o(.text); src/starter_choose.o(.text); + src/wallclock.o(.text); asm/wallclock.o(.text); asm/rom6.o(.text); asm/battle_records.o(.text); @@ -425,6 +426,7 @@ SECTIONS { src/battle_ai_script_commands.o(.rodata); data/data4.o(.rodata); data/starter_choose.o(.rodata); + data/wallclock.o(.rodata); data/data4c.o(.rodata); src/battle_controller_link_partner.o(.rodata); src/battle_message.o(.rodata); diff --git a/src/wallclock.c b/src/wallclock.c new file mode 100644 index 0000000000..bbf8c656a1 --- /dev/null +++ b/src/wallclock.c @@ -0,0 +1,83 @@ +#include "global.h" +#include "main.h" +#include "palette.h" +#include "gpu_regs.h" +#include "bg.h" +#include "rtc.h" +#include "clock.h" +#include "wallclock.h" +#include "event_data.h" +#include "graphics.h" +#include "text.h" +#include "window.h" +#include "text_window.h" +#include "menu.h" +#include "unknown_task.h" +#include "task.h" +#include "decompress.h" + +// static types + +// static declarations + +// rodata + +extern const u16 gUnknown_085B21D4[]; +extern const struct BgTemplate gUnknown_085B21FC[]; +extern const struct WindowTemplate gUnknown_085B21DC[]; +extern const struct CompressedSpriteSheet gUnknown_085B2208; +extern const struct SpritePalette gUnknown_085B2218; + +// text + +void sub_81347B4(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void LoadWallClockGraphics(void) +{ + SetVBlankCallback(NULL); + SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); + SetGpuReg(REG_OFFSET_BG3CNT, 0x0000); + SetGpuReg(REG_OFFSET_BG2CNT, 0x0000); + SetGpuReg(REG_OFFSET_BG1CNT, 0x0000); + SetGpuReg(REG_OFFSET_BG0CNT, 0x0000); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaClear32(3, (void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + LZ77UnCompVram(gUnknown_08DCC05C, (void *)VRAM); + if (gSpecialVar_0x8004 == 0) + { + LoadPalette(gUnknown_08DCC01C, 0x00, 0x20); + } + else + { + LoadPalette(gUnknown_08DCC03C, 0x00, 0x20); + } + LoadPalette(GetOverworldTextboxPalettePtr(), 0xe0, 0x20); + LoadPalette(gUnknown_085B21D4, 0xc0, 0x08); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_085B21FC, 3); + InitWindows(gUnknown_085B21DC); + DeactivateAllTextPrinters(); + sub_809882C(0, 0x250, 0xd0); + clear_scheduled_bg_copies_to_vram(); + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + LoadCompressedObjectPic(&gUnknown_085B2208); + LoadSpritePalettes(&gUnknown_085B2218); +} From 2280614a1467f3823aa3817026289bb2b22cfcaf Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 19:06:01 -0500 Subject: [PATCH 03/17] Start decompiling data --- data/starter_choose.s | 3 +- data/wallclock.s | 19 ++-------- graphics/wallclock/graphics_85b1f58.png | Bin 0 -> 204 bytes graphics/wallclock/palette_85b21d4.pal | 7 ++++ ld_script.txt | 1 + src/wallclock.c | 46 ++++++++++++++++++++---- 6 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 graphics/wallclock/graphics_85b1f58.png create mode 100644 graphics/wallclock/palette_85b21d4.pal diff --git a/data/starter_choose.s b/data/starter_choose.s index ae81aae205..a951a89879 100644 --- a/data/starter_choose.s +++ b/data/starter_choose.s @@ -63,5 +63,4 @@ sSpriteTemplate_PokeBall:: @ 85B1F28 .incbin "baserom.gba", 0x5b1f28, 0x18 gUnknown_085B1F40:: @ 85B1F40 - .incbin "baserom.gba", 0x5b1f40, 0x294 - + .incbin "baserom.gba", 0x5b1f40, 0x18 diff --git a/data/wallclock.s b/data/wallclock.s index a665655390..1faafff638 100644 --- a/data/wallclock.s +++ b/data/wallclock.s @@ -5,23 +5,8 @@ .section .rodata -gUnknown_085B21D4:: @ 85B21D4 - .incbin "baserom.gba", 0x5b21d4, 0x8 - -gUnknown_085B21DC:: @ 85B21DC - .incbin "baserom.gba", 0x5b21dc, 0x18 - -gUnknown_085B21F4:: @ 85B21F4 - .incbin "baserom.gba", 0x5b21f4, 0x8 - -gUnknown_085B21FC:: @ 85B21FC - .incbin "baserom.gba", 0x5b21fc, 0xc - -gUnknown_085B2208:: @ 85B2208 - .incbin "baserom.gba", 0x5b2208, 0x10 - -gUnknown_085B2218:: @ 85B2218 - .incbin "baserom.gba", 0x5b2218, 0x38 +gUnknown_085B2230:: @ 85B2230 + .incbin "baserom.gba", 0x5b2230, 0x20 gUnknown_085B2250:: @ 85B2250 .incbin "baserom.gba", 0x5b2250, 0x18 diff --git a/graphics/wallclock/graphics_85b1f58.png b/graphics/wallclock/graphics_85b1f58.png new file mode 100644 index 0000000000000000000000000000000000000000..06a4ecad0030cfc9e5ae63a9a14487ac5629b54e GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^4nRDC1xPSNoVl+9q$Yd1IEF;DzP)D4bwGiK^}z-1 ziq=PSjjI2jRoxuQUf(_?Xw`-3P7hDI^YU#JnWEH?+i1>Z;m3Mm3&@NQ>JK{4WPLbl zx#D_b)j}UupiqJMip4i>JzXrp!0>?a!heTlS`9Osmt3Dvt)OGNdk%Mpp`BkApXGjo zBPwsF?z{HxZpx{%J1>;q2T~iSv>Lv*SRLNL-RmcC@#Pk=eIP45UHx3vIVCg!04^p{ AAOHXW literal 0 HcmV?d00001 diff --git a/graphics/wallclock/palette_85b21d4.pal b/graphics/wallclock/palette_85b21d4.pal new file mode 100644 index 0000000000..fda3176085 --- /dev/null +++ b/graphics/wallclock/palette_85b21d4.pal @@ -0,0 +1,7 @@ +JASC-PAL +0100 +4 +0 0 0 +74 180 189 +255 255 255 +0 0 0 diff --git a/ld_script.txt b/ld_script.txt index 2dd25e91a7..a3c9aec3de 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -426,6 +426,7 @@ SECTIONS { src/battle_ai_script_commands.o(.rodata); data/data4.o(.rodata); data/starter_choose.o(.rodata); + src/wallclock.o(.rodata); data/wallclock.o(.rodata); data/data4c.o(.rodata); src/battle_controller_link_partner.o(.rodata); diff --git a/src/wallclock.c b/src/wallclock.c index bbf8c656a1..0c283e8713 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -22,11 +22,45 @@ // rodata -extern const u16 gUnknown_085B21D4[]; -extern const struct BgTemplate gUnknown_085B21FC[]; -extern const struct WindowTemplate gUnknown_085B21DC[]; -extern const struct CompressedSpriteSheet gUnknown_085B2208; -extern const struct SpritePalette gUnknown_085B2218; +const u8 gUnknown_085B1F58[] = INCBIN_U8("graphics/wallclock/graphics_85b1f58.4bpp.lz"); +const u16 gUnknown_085B21D4[] = INCBIN_U16("graphics/wallclock/palette_85b21d4.gbapal"); +const struct WindowTemplate gUnknown_085B21DC[] = { + { 0x00, 0x03, 0x11, 0x18, 0x02, 0x0e, 0x200 }, + { 0x02, 0x18, 0x10, 0x06, 0x02, 0x0c, 0x230 }, + DUMMY_WIN_TEMPLATE +}; +const struct WindowTemplate gUnknown_085B21F4 = { + 0x00, 0x18, 0x09, 0x05, 0x04, 0x0e, 0x23c +}; +const struct BgTemplate gUnknown_085B21FC[] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .priority = 0 + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 8, + .priority = 1 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 7, + .priority = 2 + } +}; +const struct CompressedSpriteSheet gUnknown_085B2208 = { + gUnknown_085B1F58, 0x2000, 0x1000 +}; +const u32 filler_85B2210[2] = {}; +const struct SpritePalette gUnknown_085B2218[] = { + { gUnknown_08DCC01C, 0x1000 }, + { gUnknown_08DCC03C, 0x1001 }, + {} +}; // text @@ -79,5 +113,5 @@ void LoadWallClockGraphics(void) ResetPaletteFade(); FreeAllSpritePalettes(); LoadCompressedObjectPic(&gUnknown_085B2208); - LoadSpritePalettes(&gUnknown_085B2218); + LoadSpritePalettes(gUnknown_085B2218); } From 24009ea941abb81068745926ca9960acf927dd4e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 19:49:03 -0500 Subject: [PATCH 04/17] through Cb2_StartWallClock and associated data --- asm/wallclock.s | 183 --------------------------------------------- data/wallclock.s | 15 ---- include/graphics.h | 1 + include/strings.h | 1 + src/wallclock.c | 134 ++++++++++++++++++++++++++++++++- 5 files changed, 135 insertions(+), 199 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index da8e01f2e0..0ca39b897c 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,189 +5,6 @@ .text - thumb_func_start sub_813498C -sub_813498C: @ 813498C - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0x1 - bl EnableInterrupts - ldr r0, =sub_81347B4 - bl SetVBlankCallback - ldr r0, =sub_8134C9C - bl SetMainCallback2 - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - add sp, 0x4 - pop {r0} - bx r0 - .pool - thumb_func_end sub_813498C - - thumb_func_start Cb2_StartWallClock -Cb2_StartWallClock: @ 81349F4 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0xC - bl LoadWallClockGraphics - ldr r0, =gUnknown_08DCC648 - ldr r1, =0x06003800 - bl LZ77UnCompVram - ldr r0, =sub_8134CB8 - movs r1, 0 - bl CreateTask - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - ldr r1, =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - mov r8, r1 - movs r1, 0xA - strh r1, [r0, 0xC] - mov r2, r8 - strh r2, [r0, 0xE] - strh r2, [r0, 0x10] - strh r2, [r0, 0x12] - strh r2, [r0, 0x14] - strh r2, [r0, 0x8] - movs r1, 0x96 - lsls r1, 1 - strh r1, [r0, 0xA] - ldr r0, =gUnknown_085B2250 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gSprites - mov r9, r1 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r9 - strh r6, [r1, 0x2E] - ldrb r2, [r1, 0x1] - movs r5, 0x4 - negs r5, r5 - adds r0, r5, 0 - ands r0, r2 - movs r2, 0x1 - mov r10, r2 - mov r2, r10 - orrs r0, r2 - strb r0, [r1, 0x1] - ldrb r2, [r1, 0x3] - movs r4, 0x3F - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - strb r0, [r1, 0x3] - ldr r0, =gUnknown_085B2268 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r9 - strh r6, [r1, 0x2E] - ldrb r0, [r1, 0x1] - ands r5, r0 - mov r0, r10 - orrs r5, r0 - strb r5, [r1, 0x1] - ldrb r0, [r1, 0x3] - ands r4, r0 - movs r0, 0x2 - orrs r4, r0 - strb r4, [r1, 0x3] - ldr r0, =gUnknown_085B22A0 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r9 - strh r6, [r1, 0x2E] - movs r0, 0x2D - strh r0, [r1, 0x30] - ldr r0, =gUnknown_085B22B8 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - add r1, r9 - strh r6, [r1, 0x2E] - movs r0, 0x5A - strh r0, [r1, 0x30] - bl sub_813498C - ldr r2, =gText_Confirm3 - movs r0, 0x1 - str r0, [sp] - mov r1, r8 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl PrintTextOnWindow - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .pool - thumb_func_end Cb2_StartWallClock - thumb_func_start Cb2_ViewWallClock Cb2_ViewWallClock: @ 8134B44 push {r4-r7,lr} diff --git a/data/wallclock.s b/data/wallclock.s index 1faafff638..95f1568475 100644 --- a/data/wallclock.s +++ b/data/wallclock.s @@ -5,20 +5,5 @@ .section .rodata -gUnknown_085B2230:: @ 85B2230 - .incbin "baserom.gba", 0x5b2230, 0x20 - -gUnknown_085B2250:: @ 85B2250 - .incbin "baserom.gba", 0x5b2250, 0x18 - -gUnknown_085B2268:: @ 85B2268 - .incbin "baserom.gba", 0x5b2268, 0x38 - -gUnknown_085B22A0:: @ 85B22A0 - .incbin "baserom.gba", 0x5b22a0, 0x18 - -gUnknown_085B22B8:: @ 85B22B8 - .incbin "baserom.gba", 0x5b22b8, 0x18 - gUnknown_085B22D0:: @ 85B22D0 .incbin "baserom.gba", 0x5b22d0, 0x2d0 diff --git a/include/graphics.h b/include/graphics.h index f3d4588ea9..528b7f49f9 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -94,5 +94,6 @@ extern const u8 gUnknown_08DBA12C[]; extern const u8 gUnknown_08DCC05C[]; extern const u16 gUnknown_08DCC01C[]; extern const u16 gUnknown_08DCC03C[]; +extern const u16 gUnknown_08DCC648[]; #endif //GUARD_GRAPHICS_H diff --git a/include/strings.h b/include/strings.h index 08e2b4bba8..17ecdd5652 100644 --- a/include/strings.h +++ b/include/strings.h @@ -82,5 +82,6 @@ extern const u8 gText_NoRegistry[]; extern const u8 gText_OkayToDeleteFromRegistry[]; extern const u8 gText_RegisteredDataDeleted[]; extern const u8 gUnknown_085EA79D[]; +extern const u8 gText_Confirm3[]; #endif //GUARD_STRINGS_H diff --git a/src/wallclock.c b/src/wallclock.c index 0c283e8713..2676bbf534 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -14,12 +14,20 @@ #include "menu.h" #include "unknown_task.h" #include "task.h" +#include "strings.h" #include "decompress.h" // static types // static declarations +void sub_8134C9C(void); +void sub_8134CB8(u8 taskId); +void sub_81351AC(struct Sprite *sprite); +void sub_8135244(struct Sprite *sprite); +void sub_81352DC(struct Sprite *sprite); +void sub_8135380(struct Sprite *sprite); + // rodata const u8 gUnknown_085B1F58[] = INCBIN_U8("graphics/wallclock/graphics_85b1f58.4bpp.lz"); @@ -61,10 +69,84 @@ const struct SpritePalette gUnknown_085B2218[] = { { gUnknown_08DCC03C, 0x1001 }, {} }; +static const struct OamData Unknown_085B2230 = { + .y = 0xa0, + .size = 3, + .priority = 1 +}; +static const union AnimCmd Unknown_085B2238[] = { + ANIMCMD_FRAME(0, 30), + ANIMCMD_END +}; +static const union AnimCmd Unknown_085B2240[] = { + ANIMCMD_FRAME(64, 30), + ANIMCMD_END +}; +static const union AnimCmd *const gUnknown_085B2248[] = { + Unknown_085B2238 +}; +static const union AnimCmd *const gUnknown_085B224C[] = { + Unknown_085B2240 +}; +const struct SpriteTemplate gUnknown_085B2250 = { + 0x1000, + 0x1000, + &Unknown_085B2230, + gUnknown_085B2248, + NULL, + gDummySpriteAffineAnimTable, + sub_81351AC +}; +const struct SpriteTemplate gUnknown_085B2268 = { + 0x1000, + 0x1000, + &Unknown_085B2230, + gUnknown_085B224C, + NULL, + gDummySpriteAffineAnimTable, + sub_8135244 +}; +static const struct OamData Unknown_085B2280 = { + .y = 0xa0, + .size = 1, + .priority = 3 +}; +static const union AnimCmd Unknown_085B2288[] = { + ANIMCMD_FRAME(0x84, 30), + ANIMCMD_END +}; +static const union AnimCmd Unknown_085B2290[] = { + ANIMCMD_FRAME(0x80, 30), + ANIMCMD_END +}; +static const union AnimCmd *const gUnknown_085B2298[] = { + Unknown_085B2288 +}; +static const union AnimCmd *const gUnknown_085B229C[] = { + Unknown_085B2290 +}; +const struct SpriteTemplate gUnknown_085B22A0 = { + 0x1000, + 0x1000, + &Unknown_085B2280, + gUnknown_085B2298, + NULL, + gDummySpriteAffineAnimTable, + sub_81352DC +}; +const struct SpriteTemplate gUnknown_085B22B8 = { + 0x1000, + 0x1000, + &Unknown_085B2280, + gUnknown_085B229C, + NULL, + gDummySpriteAffineAnimTable, + sub_8135380 +}; // text -void sub_81347B4(void) +static void sub_81347B4(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -115,3 +197,53 @@ void LoadWallClockGraphics(void) LoadCompressedObjectPic(&gUnknown_085B2208); LoadSpritePalettes(gUnknown_085B2218); } + +void sub_813498C(void) +{ + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + EnableInterrupts(INTR_FLAG_VBLANK); + SetVBlankCallback(sub_81347B4); + SetMainCallback2(sub_8134C9C); + SetGpuReg(REG_OFFSET_BLDCNT, 0x0000); + SetGpuReg(REG_OFFSET_BLDALPHA, 0x0000); + SetGpuReg(REG_OFFSET_BLDY, 0x0000); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + ShowBg(0); + ShowBg(2); + ShowBg(3); +} + +void Cb2_StartWallClock(void) +{ + u8 taskId; + u8 spriteId; + + LoadWallClockGraphics(); + LZ77UnCompVram(gUnknown_08DCC648, (u16 *)BG_SCREEN_ADDR(7)); + taskId = CreateTask(sub_8134CB8, 0); + gTasks[taskId].data[2] = 10; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0x12c; + spriteId = CreateSprite(&gUnknown_085B2250, 0x78, 0x50, 1); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 0; + spriteId = CreateSprite(&gUnknown_085B2268, 0x78, 0x50, 0); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 1; + spriteId = CreateSprite(&gUnknown_085B22A0, 0x78, 0x50, 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 0x2d; + spriteId = CreateSprite(&gUnknown_085B22B8, 0x78, 0x50, 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = 0x5a; + sub_813498C(); + PrintTextOnWindow(1, 1, gText_Confirm3, 0, 1, 0, NULL); + PutWindowTilemap(1); + schedule_bg_copy_tilemap_to_vram(2); +} From efd23cb91b402ff44cf8139490ae37cf6990d1be Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 20:06:29 -0500 Subject: [PATCH 05/17] Cb2_ViewWallClock --- asm/wallclock.s | 147 --------------------------------------------- include/graphics.h | 3 +- include/strings.h | 1 + src/wallclock.c | 47 ++++++++++++++- 4 files changed, 48 insertions(+), 150 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index 0ca39b897c..bf36815c5a 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,153 +5,6 @@ .text - thumb_func_start Cb2_ViewWallClock -Cb2_ViewWallClock: @ 8134B44 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - bl LoadWallClockGraphics - ldr r0, =gUnknown_08DCC908 - ldr r1, =0x06003800 - bl LZ77UnCompVram - ldr r0, =sub_8134F10 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r7, r0, 24 - adds r0, r7, 0 - bl sub_8135130 - ldr r1, =gTasks - lsls r0, r7, 2 - adds r0, r7 - lsls r0, 3 - adds r0, r1 - movs r1, 0x12 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08134B9C - movs r2, 0x2D - mov r10, r2 - movs r0, 0x5A - str r0, [sp, 0xC] - b _08134BA4 - .pool -_08134B9C: - movs r1, 0x5A - mov r10, r1 - movs r2, 0x87 - str r2, [sp, 0xC] -_08134BA4: - ldr r0, =gUnknown_085B2250 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r6, =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r0, 0 - mov r9, r0 - strh r7, [r1, 0x2E] - ldrb r2, [r1, 0x1] - movs r5, 0x4 - negs r5, r5 - adds r0, r5, 0 - ands r0, r2 - movs r2, 0x1 - mov r8, r2 - mov r2, r8 - orrs r0, r2 - strb r0, [r1, 0x1] - ldrb r2, [r1, 0x3] - movs r4, 0x3F - negs r4, r4 - adds r0, r4, 0 - ands r0, r2 - strb r0, [r1, 0x3] - ldr r0, =gUnknown_085B2268 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - strh r7, [r1, 0x2E] - ldrb r0, [r1, 0x1] - ands r5, r0 - mov r0, r8 - orrs r5, r0 - strb r5, [r1, 0x1] - ldrb r0, [r1, 0x3] - ands r4, r0 - movs r0, 0x2 - orrs r4, r0 - strb r4, [r1, 0x3] - ldr r0, =gUnknown_085B22A0 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - strh r7, [r1, 0x2E] - mov r2, r10 - strh r2, [r1, 0x30] - ldr r0, =gUnknown_085B22B8 - movs r1, 0x78 - movs r2, 0x50 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - strh r7, [r1, 0x2E] - mov r0, sp - ldrh r0, [r0, 0xC] - strh r0, [r1, 0x30] - bl sub_813498C - ldr r2, =gText_Cancel4 - movs r0, 0x1 - str r0, [sp] - mov r1, r9 - str r1, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl PrintTextOnWindow - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end Cb2_ViewWallClock - thumb_func_start sub_8134C9C sub_8134C9C: @ 8134C9C push {lr} diff --git a/include/graphics.h b/include/graphics.h index 528b7f49f9..25a5431c63 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -94,6 +94,7 @@ extern const u8 gUnknown_08DBA12C[]; extern const u8 gUnknown_08DCC05C[]; extern const u16 gUnknown_08DCC01C[]; extern const u16 gUnknown_08DCC03C[]; -extern const u16 gUnknown_08DCC648[]; +extern const u8 gUnknown_08DCC648[]; +extern const u8 gUnknown_08DCC908[]; #endif //GUARD_GRAPHICS_H diff --git a/include/strings.h b/include/strings.h index 17ecdd5652..b54c68c6ee 100644 --- a/include/strings.h +++ b/include/strings.h @@ -83,5 +83,6 @@ extern const u8 gText_OkayToDeleteFromRegistry[]; extern const u8 gText_RegisteredDataDeleted[]; extern const u8 gUnknown_085EA79D[]; extern const u8 gText_Confirm3[]; +extern const u8 gText_Cancel4[]; #endif //GUARD_STRINGS_H diff --git a/src/wallclock.c b/src/wallclock.c index 2676bbf534..bb6f4cd197 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -23,6 +23,8 @@ void sub_8134C9C(void); void sub_8134CB8(u8 taskId); +void sub_8134F10(u8 taskId); +void sub_8135130(u8 taskId); void sub_81351AC(struct Sprite *sprite); void sub_8135244(struct Sprite *sprite); void sub_81352DC(struct Sprite *sprite); @@ -238,12 +240,53 @@ void Cb2_StartWallClock(void) gSprites[spriteId].oam.matrixNum = 1; spriteId = CreateSprite(&gUnknown_085B22A0, 0x78, 0x50, 2); gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 0x2d; + gSprites[spriteId].data1 = 45; spriteId = CreateSprite(&gUnknown_085B22B8, 0x78, 0x50, 2); gSprites[spriteId].data0 = taskId; - gSprites[spriteId].data1 = 0x5a; + gSprites[spriteId].data1 = 90; sub_813498C(); PrintTextOnWindow(1, 1, gText_Confirm3, 0, 1, 0, NULL); PutWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(2); } + +void Cb2_ViewWallClock(void) +{ + u8 taskId; + u8 spriteId; + u8 r10; + u8 spc; + + LoadWallClockGraphics(); + LZ77UnCompVram(gUnknown_08DCC908, (u16 *)BG_SCREEN_ADDR(7)); + taskId = CreateTask(sub_8134F10, 0); + sub_8135130(taskId); + if (gTasks[taskId].data[5] == 0) + { + r10 = 45; + spc = 90; + } + else + { + r10 = 90; + spc = 135; + } + spriteId = CreateSprite(&gUnknown_085B2250, 0x78, 0x50, 1); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 0; + spriteId = CreateSprite(&gUnknown_085B2268, 0x78, 0x50, 0); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.matrixNum = 1; + spriteId = CreateSprite(&gUnknown_085B22A0, 0x78, 0x50, 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = r10; + spriteId = CreateSprite(&gUnknown_085B22B8, 0x78, 0x50, 2); + gSprites[spriteId].data0 = taskId; + gSprites[spriteId].data1 = spc; + sub_813498C(); + PrintTextOnWindow(1, 1, gText_Cancel4, 0, 1, 0, NULL); + PutWindowTilemap(1); + schedule_bg_copy_tilemap_to_vram(2); +} From 2746967bef9e82df0655391176283c064997cf7b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 20:46:29 -0500 Subject: [PATCH 06/17] through sub_8134CE8 --- asm/wallclock.s | 145 ---------------- data/wallclock.s | 9 - ld_script.txt | 1 - src/wallclock.c | 429 ++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 427 insertions(+), 157 deletions(-) delete mode 100644 data/wallclock.s diff --git a/asm/wallclock.s b/asm/wallclock.s index bf36815c5a..626021067d 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,151 +5,6 @@ .text - thumb_func_start sub_8134C9C -sub_8134C9C: @ 8134C9C - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl do_scheduled_bg_tilemap_copies_to_vram - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8134C9C - - thumb_func_start sub_8134CB8 -sub_8134CB8: @ 8134CB8 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08134CD8 - ldr r0, =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_8134CE8 - str r0, [r1] -_08134CD8: - pop {r0} - bx r0 - .pool - thumb_func_end sub_8134CB8 - - thumb_func_start sub_8134CE8 -sub_8134CE8: @ 8134CE8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - movs r1, 0x6 - bl __modsi3 - lsls r0, 16 - cmp r0, 0 - beq _08134D1C - ldrh r0, [r5, 0x8] - ldrb r1, [r5, 0x10] - ldrb r2, [r5, 0x14] - bl sub_8134FFC - strh r0, [r5, 0x8] - b _08134DBE - .pool -_08134D1C: - movs r2, 0xE - ldrsh r1, [r5, r2] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 1 - strh r0, [r5, 0x8] - movs r3, 0xC - ldrsh r0, [r5, r3] - movs r1, 0xC - bl __modsi3 - lsls r0, 16 - asrs r0, 16 - lsls r4, r0, 4 - subs r4, r0 - lsls r4, 1 - movs r1, 0xE - ldrsh r0, [r5, r1] - movs r1, 0xA - bl __divsi3 - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 2 - adds r1, r0 - adds r4, r1 - strh r4, [r5, 0xA] - ldr r2, =gMain - ldrh r0, [r2, 0x2E] - movs r3, 0x1 - adds r1, r3, 0 - ands r1, r0 - cmp r1, 0 - beq _08134D70 - ldr r0, =sub_8134DC4 - str r0, [r5] - b _08134DBE - .pool -_08134D70: - strh r1, [r5, 0x10] - ldrh r1, [r2, 0x2C] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08134D7E - strh r3, [r5, 0x10] -_08134D7E: - ldrh r1, [r2, 0x2C] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08134D8C - movs r0, 0x2 - strh r0, [r5, 0x10] -_08134D8C: - ldrh r1, [r5, 0x10] - movs r2, 0x10 - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _08134DBC - ldrh r2, [r5, 0x14] - movs r3, 0x14 - ldrsh r0, [r5, r3] - cmp r0, 0xFE - bgt _08134DA4 - adds r0, r2, 0x1 - strh r0, [r5, 0x14] -_08134DA4: - ldrh r0, [r5, 0x8] - lsls r1, 24 - lsrs r1, 24 - ldrb r2, [r5, 0x14] - bl sub_8134FFC - strh r0, [r5, 0x8] - ldrb r1, [r5, 0x10] - adds r0, r6, 0 - bl sub_813504C - b _08134DBE -_08134DBC: - strh r0, [r5, 0x14] -_08134DBE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8134CE8 - thumb_func_start sub_8134DC4 sub_8134DC4: @ 8134DC4 push {r4,r5,lr} diff --git a/data/wallclock.s b/data/wallclock.s deleted file mode 100644 index 95f1568475..0000000000 --- a/data/wallclock.s +++ /dev/null @@ -1,9 +0,0 @@ -@ the fourth big chunk of data - - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -gUnknown_085B22D0:: @ 85B22D0 - .incbin "baserom.gba", 0x5b22d0, 0x2d0 diff --git a/ld_script.txt b/ld_script.txt index a3c9aec3de..df0a02cc5c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -427,7 +427,6 @@ SECTIONS { data/data4.o(.rodata); data/starter_choose.o(.rodata); src/wallclock.o(.rodata); - data/wallclock.o(.rodata); data/data4c.o(.rodata); src/battle_controller_link_partner.o(.rodata); src/battle_message.o(.rodata); diff --git a/src/wallclock.c b/src/wallclock.c index bb6f4cd197..b6e4096f94 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -21,9 +21,13 @@ // static declarations -void sub_8134C9C(void); -void sub_8134CB8(u8 taskId); +static void sub_8134C9C(void); +static void sub_8134CB8(u8 taskId); +void sub_8134DC4(u8 taskId); +void sub_8134CE8(u8 taskId); void sub_8134F10(u8 taskId); +u16 sub_8134FFC(u16 a0, u8 a1, u8 a2); +void sub_813504C(u8 taskId, u8 a1); void sub_8135130(u8 taskId); void sub_81351AC(struct Sprite *sprite); void sub_8135244(struct Sprite *sprite); @@ -145,6 +149,368 @@ const struct SpriteTemplate gUnknown_085B22B8 = { gDummySpriteAffineAnimTable, sub_8135380 }; +const s8 gUnknown_085B22D0[][2] = { + { 0x00, -0x18}, + { 0x01, -0x19}, + { 0x01, -0x19}, + { 0x02, -0x19}, + { 0x02, -0x19}, + { 0x02, -0x19}, + { 0x03, -0x18}, + { 0x03, -0x19}, + { 0x04, -0x19}, + { 0x04, -0x19}, + { 0x04, -0x19}, + { 0x05, -0x19}, + { 0x05, -0x19}, + { 0x06, -0x18}, + { 0x06, -0x18}, + { 0x06, -0x18}, + { 0x07, -0x18}, + { 0x07, -0x18}, + { 0x07, -0x18}, + { 0x08, -0x18}, + { 0x08, -0x18}, + { 0x09, -0x18}, + { 0x09, -0x18}, + { 0x0a, -0x17}, + { 0x0a, -0x17}, + { 0x0b, -0x16}, + { 0x0b, -0x16}, + { 0x0b, -0x16}, + { 0x0c, -0x16}, + { 0x0c, -0x15}, + { 0x0d, -0x15}, + { 0x0d, -0x15}, + { 0x0d, -0x15}, + { 0x0e, -0x15}, + { 0x0e, -0x15}, + { 0x0e, -0x14}, + { 0x0e, -0x14}, + { 0x0f, -0x14}, + { 0x0f, -0x13}, + { 0x10, -0x13}, + { 0x10, -0x13}, + { 0x10, -0x13}, + { 0x10, -0x12}, + { 0x10, -0x12}, + { 0x11, -0x12}, + { 0x11, -0x11}, + { 0x11, -0x11}, + { 0x12, -0x11}, + { 0x12, -0x11}, + { 0x12, -0x10}, + { 0x12, -0x10}, + { 0x13, -0x10}, + { 0x13, -0x0f}, + { 0x13, -0x0f}, + { 0x14, -0x0f}, + { 0x14, -0x0e}, + { 0x14, -0x0e}, + { 0x14, -0x0d}, + { 0x14, -0x0d}, + { 0x15, -0x0d}, + { 0x15, -0x0d}, + { 0x15, -0x0c}, + { 0x16, -0x0c}, + { 0x16, -0x0c}, + { 0x16, -0x0b}, + { 0x16, -0x0b}, + { 0x16, -0x0a}, + { 0x17, -0x0a}, + { 0x17, -0x09}, + { 0x17, -0x09}, + { 0x17, -0x09}, + { 0x17, -0x09}, + { 0x17, -0x08}, + { 0x17, -0x08}, + { 0x17, -0x07}, + { 0x17, -0x07}, + { 0x17, -0x06}, + { 0x18, -0x06}, + { 0x18, -0x06}, + { 0x19, -0x05}, + { 0x19, -0x05}, + { 0x18, -0x04}, + { 0x19, -0x04}, + { 0x18, -0x03}, + { 0x19, -0x03}, + { 0x19, -0x03}, + { 0x19, -0x02}, + { 0x19, -0x02}, + { 0x18, -0x01}, + { 0x19, -0x01}, + { 0x18, 0x00}, + { 0x18, 0x00}, + { 0x18, 0x00}, + { 0x18, 0x01}, + { 0x18, 0x01}, + { 0x19, 0x02}, + { 0x18, 0x02}, + { 0x19, 0x02}, + { 0x18, 0x03}, + { 0x18, 0x03}, + { 0x19, 0x04}, + { 0x18, 0x04}, + { 0x18, 0x05}, + { 0x18, 0x05}, + { 0x18, 0x05}, + { 0x18, 0x06}, + { 0x17, 0x06}, + { 0x17, 0x06}, + { 0x17, 0x07}, + { 0x17, 0x08}, + { 0x17, 0x08}, + { 0x17, 0x08}, + { 0x17, 0x09}, + { 0x17, 0x09}, + { 0x17, 0x0a}, + { 0x16, 0x0a}, + { 0x16, 0x0a}, + { 0x16, 0x0b}, + { 0x16, 0x0b}, + { 0x16, 0x0b}, + { 0x16, 0x0c}, + { 0x15, 0x0c}, + { 0x15, 0x0c}, + { 0x15, 0x0d}, + { 0x14, 0x0d}, + { 0x14, 0x0d}, + { 0x13, 0x0d}, + { 0x13, 0x0d}, + { 0x13, 0x0e}, + { 0x13, 0x0e}, + { 0x13, 0x0f}, + { 0x13, 0x0f}, + { 0x12, 0x0f}, + { 0x12, 0x10}, + { 0x11, 0x10}, + { 0x11, 0x10}, + { 0x11, 0x11}, + { 0x11, 0x11}, + { 0x10, 0x11}, + { 0x10, 0x12}, + { 0x10, 0x12}, + { 0x0f, 0x12}, + { 0x0e, 0x12}, + { 0x0f, 0x13}, + { 0x0e, 0x13}, + { 0x0e, 0x13}, + { 0x0d, 0x13}, + { 0x0d, 0x14}, + { 0x0d, 0x14}, + { 0x0d, 0x14}, + { 0x0c, 0x14}, + { 0x0c, 0x14}, + { 0x0c, 0x15}, + { 0x0b, 0x15}, + { 0x0b, 0x15}, + { 0x0b, 0x15}, + { 0x0a, 0x15}, + { 0x0a, 0x16}, + { 0x0a, 0x16}, + { 0x09, 0x16}, + { 0x09, 0x16}, + { 0x08, 0x16}, + { 0x07, 0x16}, + { 0x07, 0x17}, + { 0x07, 0x17}, + { 0x06, 0x17}, + { 0x06, 0x17}, + { 0x05, 0x17}, + { 0x05, 0x17}, + { 0x05, 0x18}, + { 0x04, 0x18}, + { 0x04, 0x18}, + { 0x04, 0x18}, + { 0x03, 0x18}, + { 0x02, 0x18}, + { 0x02, 0x18}, + { 0x01, 0x18}, + { 0x01, 0x18}, + { 0x00, 0x18}, + { 0x00, 0x18}, + {-0x01, 0x17}, + { 0x00, 0x18}, + { 0x00, 0x18}, + {-0x01, 0x18}, + {-0x01, 0x18}, + {-0x02, 0x18}, + {-0x02, 0x18}, + {-0x03, 0x18}, + {-0x03, 0x18}, + {-0x04, 0x18}, + {-0x04, 0x18}, + {-0x05, 0x18}, + {-0x05, 0x17}, + {-0x05, 0x17}, + {-0x06, 0x17}, + {-0x06, 0x17}, + {-0x07, 0x17}, + {-0x07, 0x17}, + {-0x07, 0x17}, + {-0x08, 0x17}, + {-0x08, 0x16}, + {-0x09, 0x16}, + {-0x09, 0x16}, + {-0x0a, 0x16}, + {-0x0a, 0x16}, + {-0x0a, 0x15}, + {-0x0b, 0x15}, + {-0x0b, 0x15}, + {-0x0b, 0x15}, + {-0x0b, 0x14}, + {-0x0c, 0x14}, + {-0x0c, 0x14}, + {-0x0d, 0x14}, + {-0x0d, 0x14}, + {-0x0d, 0x13}, + {-0x0e, 0x13}, + {-0x0e, 0x13}, + {-0x0e, 0x13}, + {-0x0e, 0x12}, + {-0x0f, 0x12}, + {-0x0f, 0x12}, + {-0x0f, 0x11}, + {-0x10, 0x11}, + {-0x10, 0x11}, + {-0x11, 0x11}, + {-0x11, 0x10}, + {-0x11, 0x10}, + {-0x12, 0x10}, + {-0x11, 0x0f}, + {-0x12, 0x0f}, + {-0x12, 0x0f}, + {-0x13, 0x0f}, + {-0x13, 0x0e}, + {-0x13, 0x0e}, + {-0x13, 0x0d}, + {-0x13, 0x0d}, + {-0x14, 0x0d}, + {-0x14, 0x0c}, + {-0x14, 0x0c}, + {-0x15, 0x0c}, + {-0x15, 0x0c}, + {-0x15, 0x0b}, + {-0x15, 0x0b}, + {-0x15, 0x0a}, + {-0x15, 0x0a}, + {-0x15, 0x09}, + {-0x16, 0x09}, + {-0x16, 0x09}, + {-0x16, 0x08}, + {-0x16, 0x08}, + {-0x16, 0x07}, + {-0x17, 0x07}, + {-0x17, 0x07}, + {-0x17, 0x06}, + {-0x17, 0x06}, + {-0x17, 0x05}, + {-0x18, 0x05}, + {-0x17, 0x04}, + {-0x17, 0x04}, + {-0x18, 0x04}, + {-0x18, 0x04}, + {-0x18, 0x03}, + {-0x18, 0x03}, + {-0x18, 0x02}, + {-0x18, 0x02}, + {-0x18, 0x01}, + {-0x18, 0x01}, + {-0x18, 0x01}, + {-0x18, 0x00}, + {-0x19, 0x00}, + {-0x18, -0x01}, + {-0x19, -0x01}, + {-0x18, -0x01}, + {-0x18, -0x02}, + {-0x18, -0x02}, + {-0x18, -0x03}, + {-0x18, -0x03}, + {-0x18, -0x04}, + {-0x18, -0x04}, + {-0x18, -0x04}, + {-0x18, -0x05}, + {-0x18, -0x05}, + {-0x18, -0x06}, + {-0x18, -0x06}, + {-0x17, -0x06}, + {-0x17, -0x07}, + {-0x17, -0x07}, + {-0x17, -0x08}, + {-0x17, -0x08}, + {-0x17, -0x09}, + {-0x17, -0x09}, + {-0x16, -0x09}, + {-0x16, -0x09}, + {-0x16, -0x0a}, + {-0x16, -0x0a}, + {-0x15, -0x0a}, + {-0x15, -0x0b}, + {-0x16, -0x0b}, + {-0x16, -0x0c}, + {-0x15, -0x0c}, + {-0x15, -0x0d}, + {-0x15, -0x0d}, + {-0x14, -0x0d}, + {-0x15, -0x0e}, + {-0x14, -0x0e}, + {-0x14, -0x0e}, + {-0x13, -0x0e}, + {-0x13, -0x0f}, + {-0x13, -0x0f}, + {-0x12, -0x10}, + {-0x12, -0x10}, + {-0x12, -0x10}, + {-0x12, -0x11}, + {-0x12, -0x11}, + {-0x11, -0x11}, + {-0x11, -0x12}, + {-0x11, -0x12}, + {-0x10, -0x12}, + {-0x10, -0x12}, + {-0x10, -0x13}, + {-0x10, -0x13}, + {-0x0f, -0x13}, + {-0x0f, -0x13}, + {-0x0f, -0x14}, + {-0x0e, -0x14}, + {-0x0e, -0x14}, + {-0x0e, -0x15}, + {-0x0d, -0x15}, + {-0x0d, -0x15}, + {-0x0d, -0x15}, + {-0x0c, -0x15}, + {-0x0c, -0x16}, + {-0x0b, -0x16}, + {-0x0b, -0x16}, + {-0x0b, -0x16}, + {-0x0a, -0x16}, + {-0x0a, -0x16}, + {-0x09, -0x16}, + {-0x09, -0x17}, + {-0x09, -0x17}, + {-0x08, -0x17}, + {-0x08, -0x17}, + {-0x07, -0x17}, + {-0x07, -0x17}, + {-0x07, -0x18}, + {-0x06, -0x18}, + {-0x06, -0x18}, + {-0x05, -0x18}, + {-0x05, -0x18}, + {-0x04, -0x18}, + {-0x04, -0x18}, + {-0x04, -0x18}, + {-0x04, -0x19}, + {-0x03, -0x19}, + {-0x02, -0x19}, + {-0x02, -0x18}, + {-0x02, -0x18}, + {-0x01, -0x19}, + {-0x01, -0x19}, + { 0x00, -0x19} +}; // text @@ -290,3 +656,62 @@ void Cb2_ViewWallClock(void) PutWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(2); } + +static void sub_8134C9C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +static void sub_8134CB8(u8 taskId) +{ + if (!gPaletteFade.active) + { + gTasks[taskId].func = sub_8134CE8; + } +} + +void sub_8134CE8(u8 taskId) +{ + if (gTasks[taskId].data[0] % 6) + { + gTasks[taskId].data[0] = sub_8134FFC(gTasks[taskId].data[0], gTasks[taskId].data[4], gTasks[taskId].data[6]); + } + else + { + gTasks[taskId].data[0] = gTasks[taskId].data[3] * 6; + gTasks[taskId].data[1] = (gTasks[taskId].data[2] % 12) * 30 + (gTasks[taskId].data[3] / 10) * 5; + if (gMain.newKeys & A_BUTTON) + { + gTasks[taskId].func = sub_8134DC4; + } + else + { + gTasks[taskId].data[4] = 0; + if (gMain.heldKeys & DPAD_LEFT) + { + gTasks[taskId].data[4] = 1; + } + if (gMain.heldKeys & DPAD_RIGHT) + { + gTasks[taskId].data[4] = 2; + } + if (gTasks[taskId].data[4] != 0) + { + if (gTasks[taskId].data[6] <= 0xFE) + { + gTasks[taskId].data[6]++; + } + gTasks[taskId].data[0] = sub_8134FFC(gTasks[taskId].data[0], gTasks[taskId].data[4], gTasks[taskId].data[6]); + sub_813504C(taskId, gTasks[taskId].data[4]); + } + else + { + gTasks[taskId].data[6] = 0; + } + } + } +} From b210d5f86b4c949b8e98c9117bc19b62fe0ed352 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:06:46 -0500 Subject: [PATCH 07/17] through c3_80BF560 --- asm/wallclock.s | 101 ---------------------------------------------- include/strings.h | 1 + src/wallclock.c | 38 +++++++++++++++-- 3 files changed, 36 insertions(+), 104 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index 626021067d..5c36ae9c71 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,107 +5,6 @@ .text - thumb_func_start sub_8134DC4 -sub_8134DC4: @ 8134DC4 - push {r4,r5,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r5, 0x94 - lsls r5, 2 - movs r0, 0 - movs r1, 0 - adds r2, r5, 0 - movs r3, 0xD - bl SetWindowBorderStyle - ldr r2, =gText_IsThisTheCorrectTime - movs r0, 0x1 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - movs r1, 0x1 - movs r3, 0 - bl PrintTextOnWindow - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - bl schedule_bg_copy_tilemap_to_vram - ldr r0, =gUnknown_085B21F4 - adds r1, r5, 0 - movs r2, 0xD - movs r3, 0x1 - bl CreateYesNoMenu - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, =c3_80BF560 - str r1, [r0] - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8134DC4 - - thumb_func_start c3_80BF560 -c3_80BF560: @ 8134E30 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl sub_8198C58 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08134E56 - cmp r1, 0 - bgt _08134E50 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08134E74 - b _08134E96 -_08134E50: - cmp r1, 0x1 - beq _08134E74 - b _08134E96 -_08134E56: - movs r0, 0x5 - bl PlaySE - ldr r0, =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_8134EA4 - b _08134E94 - .pool -_08134E74: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - movs r1, 0 - bl sub_8198070 - movs r0, 0 - bl ClearWindowTilemap - ldr r0, =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_8134CE8 -_08134E94: - str r0, [r1] -_08134E96: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end c3_80BF560 - thumb_func_start sub_8134EA4 sub_8134EA4: @ 8134EA4 push {r4,lr} diff --git a/include/strings.h b/include/strings.h index b54c68c6ee..030f46330d 100644 --- a/include/strings.h +++ b/include/strings.h @@ -84,5 +84,6 @@ extern const u8 gText_RegisteredDataDeleted[]; extern const u8 gUnknown_085EA79D[]; extern const u8 gText_Confirm3[]; extern const u8 gText_Cancel4[]; +extern const u8 gText_IsThisTheCorrectTime[]; #endif //GUARD_STRINGS_H diff --git a/src/wallclock.c b/src/wallclock.c index b6e4096f94..1b11b31378 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -15,6 +15,8 @@ #include "unknown_task.h" #include "task.h" #include "strings.h" +#include "sound.h" +#include "songs.h" #include "decompress.h" // static types @@ -23,8 +25,10 @@ static void sub_8134C9C(void); static void sub_8134CB8(u8 taskId); -void sub_8134DC4(u8 taskId); -void sub_8134CE8(u8 taskId); +static void sub_8134CE8(u8 taskId); +static void sub_8134DC4(u8 taskId); +static void c3_80BF560(u8 taskId); +void sub_8134EA4(u8 taskId); void sub_8134F10(u8 taskId); u16 sub_8134FFC(u16 a0, u8 a1, u8 a2); void sub_813504C(u8 taskId, u8 a1); @@ -674,7 +678,7 @@ static void sub_8134CB8(u8 taskId) } } -void sub_8134CE8(u8 taskId) +static void sub_8134CE8(u8 taskId) { if (gTasks[taskId].data[0] % 6) { @@ -715,3 +719,31 @@ void sub_8134CE8(u8 taskId) } } } + +static void sub_8134DC4(u8 taskId) +{ + SetWindowBorderStyle(0, FALSE, 0x250, 0x0d); + PrintTextOnWindow(0, 1, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); + PutWindowTilemap(0); + schedule_bg_copy_tilemap_to_vram(0); + CreateYesNoMenu(&gUnknown_085B21F4, 0x250, 0x0d, 1); + gTasks[taskId].func = c3_80BF560; +} + +static void c3_80BF560(u8 taskId) +{ + switch (sub_8198C58()) + { + case 0: + PlaySE(SE_SELECT); + gTasks[taskId].func = sub_8134EA4; + break; + case 1: + case -1: + PlaySE(SE_SELECT); + sub_8198070(0, FALSE); + ClearWindowTilemap(0); + gTasks[taskId].func = sub_8134CE8; + break; + } +} From 4a81b595c358b0c136e262057765565dd38a168e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:11:32 -0500 Subject: [PATCH 08/17] through c2_080111BC --- asm/wallclock.s | 51 ------------------------------------------------- src/wallclock.c | 19 +++++++++++++++++- 2 files changed, 18 insertions(+), 52 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index 5c36ae9c71..f1a7283652 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,57 +5,6 @@ .text - thumb_func_start sub_8134EA4 -sub_8134EA4: @ 8134EA4 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gTasks - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - adds r4, r1 - movs r1, 0xC - ldrsh r0, [r4, r1] - movs r2, 0xE - ldrsh r1, [r4, r2] - bl RtcInitLocalTimeOffset - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, =c2_080111BC - str r0, [r4] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8134EA4 - - thumb_func_start c2_080111BC -c2_080111BC: @ 8134EE8 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08134F02 - bl FreeAllWindowBuffers - ldr r0, =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 -_08134F02: - pop {r0} - bx r0 - .pool - thumb_func_end c2_080111BC - thumb_func_start sub_8134F10 sub_8134F10: @ 8134F10 push {lr} diff --git a/src/wallclock.c b/src/wallclock.c index 1b11b31378..b14037c43e 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -28,7 +28,8 @@ static void sub_8134CB8(u8 taskId); static void sub_8134CE8(u8 taskId); static void sub_8134DC4(u8 taskId); static void c3_80BF560(u8 taskId); -void sub_8134EA4(u8 taskId); +static void sub_8134EA4(u8 taskId); +static void c2_080111BC(u8 taskId); void sub_8134F10(u8 taskId); u16 sub_8134FFC(u16 a0, u8 a1, u8 a2); void sub_813504C(u8 taskId, u8 a1); @@ -747,3 +748,19 @@ static void c3_80BF560(u8 taskId) break; } } + +static void sub_8134EA4(u8 taskId) +{ + RtcInitLocalTimeOffset(gTasks[taskId].data[2], gTasks[taskId].data[3]); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = c2_080111BC; +} + +static void c2_080111BC(u8 taskId) +{ + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + SetMainCallback2(gMain.savedCallback); + } +} From 046e5ebf6963bbe5cc3b668c1511f1e1597a6da9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:17:50 -0500 Subject: [PATCH 09/17] through sub_8134FB0 --- asm/wallclock.s | 97 ------------------------------------------------- src/wallclock.c | 36 +++++++++++++++++- 2 files changed, 35 insertions(+), 98 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index f1a7283652..7ed41b39c1 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,103 +5,6 @@ .text - thumb_func_start sub_8134F10 -sub_8134F10: @ 8134F10 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08134F30 - ldr r0, =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_8134F40 - str r0, [r1] -_08134F30: - pop {r0} - bx r0 - .pool - thumb_func_end sub_8134F10 - - thumb_func_start sub_8134F40 -sub_8134F40: @ 8134F40 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_8135130 - ldr r0, =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08134F66 - ldr r0, =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, =sub_8134F78 - str r0, [r1] -_08134F66: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8134F40 - - thumb_func_start sub_8134F78 -sub_8134F78: @ 8134F78 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, =sub_8134FB0 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8134F78 - - thumb_func_start sub_8134FB0 -sub_8134FB0: @ 8134FB0 - push {lr} - ldr r0, =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08134FC6 - ldr r0, =gMain - ldr r0, [r0, 0x8] - bl SetMainCallback2 -_08134FC6: - pop {r0} - bx r0 - .pool - thumb_func_end sub_8134FB0 - thumb_func_start sub_8134FD4 sub_8134FD4: @ 8134FD4 push {lr} diff --git a/src/wallclock.c b/src/wallclock.c index b14037c43e..af343d1fc9 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -30,7 +30,10 @@ static void sub_8134DC4(u8 taskId); static void c3_80BF560(u8 taskId); static void sub_8134EA4(u8 taskId); static void c2_080111BC(u8 taskId); -void sub_8134F10(u8 taskId); +static void sub_8134F10(u8 taskId); +static void sub_8134F40(u8 taskId); +static void sub_8134F78(u8 taskId); +static void sub_8134FB0(u8 taskId); u16 sub_8134FFC(u16 a0, u8 a1, u8 a2); void sub_813504C(u8 taskId, u8 a1); void sub_8135130(u8 taskId); @@ -764,3 +767,34 @@ static void c2_080111BC(u8 taskId) SetMainCallback2(gMain.savedCallback); } } + +static void sub_8134F10(u8 taskId) +{ + if (!gPaletteFade.active) + { + gTasks[taskId].func = sub_8134F40; + } +} + +static void sub_8134F40(u8 taskId) +{ + sub_8135130(taskId); + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + gTasks[taskId].func = sub_8134F78; + } +} + +static void sub_8134F78(u8 taskId) +{ + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_8134FB0; +} + +static void sub_8134FB0(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gMain.savedCallback); + } +} From dfa5f24e59e0e49525a1287f37ba7452d9e7c37e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:27:05 -0500 Subject: [PATCH 10/17] sub_8134FFC --- asm/wallclock.s | 76 ------------------------------------------------- src/wallclock.c | 36 ++++++++++++++++++++++- 2 files changed, 35 insertions(+), 77 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index 7ed41b39c1..31f57120f9 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,82 +5,6 @@ .text - thumb_func_start sub_8134FD4 -sub_8134FD4: @ 8134FD4 - push {lr} - lsls r0, 16 - lsrs r0, 16 - adds r1, r0, 0 - cmp r0, 0x3C - bls _08134FE4 - movs r0, 0x6 - b _08134FF6 -_08134FE4: - cmp r0, 0x1E - bls _08134FEC - movs r0, 0x3 - b _08134FF6 -_08134FEC: - cmp r1, 0xA - bhi _08134FF4 - movs r0, 0x1 - b _08134FF6 -_08134FF4: - movs r0, 0x2 -_08134FF6: - pop {r1} - bx r1 - thumb_func_end sub_8134FD4 - - thumb_func_start sub_8134FFC -sub_8134FFC: @ 8134FFC - push {r4,r5,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 24 - lsrs r5, r1, 24 - lsls r2, 24 - lsrs r2, 24 - adds r0, r2, 0 - bl sub_8134FD4 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r5, 0x1 - beq _0813501E - cmp r5, 0x2 - beq _08135030 - b _08135044 -_0813501E: - cmp r4, 0 - beq _08135026 - subs r0, r4, r1 - b _0813503C -_08135026: - movs r2, 0xB4 - lsls r2, 1 - adds r0, r2, 0 - subs r0, r1 - b _0813503C -_08135030: - movs r0, 0xB4 - lsls r0, 1 - subs r0, r1 - cmp r4, r0 - bge _08135042 - adds r0, r4, r1 -_0813503C: - lsls r0, 16 - lsrs r4, r0, 16 - b _08135044 -_08135042: - movs r4, 0 -_08135044: - adds r0, r4, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8134FFC - thumb_func_start sub_813504C sub_813504C: @ 813504C push {r4-r6,lr} diff --git a/src/wallclock.c b/src/wallclock.c index af343d1fc9..51f6c530d8 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -34,7 +34,7 @@ static void sub_8134F10(u8 taskId); static void sub_8134F40(u8 taskId); static void sub_8134F78(u8 taskId); static void sub_8134FB0(u8 taskId); -u16 sub_8134FFC(u16 a0, u8 a1, u8 a2); +static u16 sub_8134FFC(u16 a0, u8 a1, u8 a2); void sub_813504C(u8 taskId, u8 a1); void sub_8135130(u8 taskId); void sub_81351AC(struct Sprite *sprite); @@ -798,3 +798,37 @@ static void sub_8134FB0(u8 taskId) SetMainCallback2(gMain.savedCallback); } } + +static u8 sub_8134FD4(u16 a0) +{ + if (a0 > 60) + { + return 6; + } + if (a0 > 30) + { + return 3; + } + if (a0 > 10) + { + return 2; + } + return 1; +} + +static u16 sub_8134FFC(u16 a0, u8 a1, u8 a2) +{ + u8 r1 = sub_8134FD4(a2); + switch (a1) + { + case 1: + if (a0) a0 -= r1; + else a0 = 360 - r1; + break; + case 2: + if (a0 < 360 - r1) a0 += r1; + else a0 = 0; + break; + } + return a0; +} From 1b3fcb83f252c83c1d97a630ed381622fed74fd6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:37:42 -0500 Subject: [PATCH 11/17] sub_813504C --- asm/wallclock.s | 84 ------------------------------------------------- src/wallclock.c | 55 +++++++++++++++++++++++++++++--- 2 files changed, 51 insertions(+), 88 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index 31f57120f9..42f35beaf7 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,90 +5,6 @@ .text - thumb_func_start sub_813504C -sub_813504C: @ 813504C - push {r4-r6,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - cmp r4, 0x1 - beq _08135060 - cmp r4, 0x2 - beq _081350A0 - b _081350DE -_08135060: - ldr r0, =gTasks - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xE] - movs r5, 0xE - ldrsh r0, [r1, r5] - cmp r0, 0 - ble _08135080 - subs r0, r2, 0x1 - strh r0, [r1, 0xE] - b _081350DE - .pool -_08135080: - movs r0, 0x3B - strh r0, [r1, 0xE] - ldrh r2, [r1, 0xC] - movs r6, 0xC - ldrsh r0, [r1, r6] - cmp r0, 0 - ble _08135092 - subs r0, r2, 0x1 - b _08135094 -_08135092: - movs r0, 0x17 -_08135094: - strh r0, [r1, 0xC] - adds r0, r3, 0 - adds r1, r4, 0 - bl sub_81350E8 - b _081350DE -_081350A0: - ldr r0, =gTasks - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xE] - movs r5, 0xE - ldrsh r0, [r1, r5] - cmp r0, 0x3A - bgt _081350C0 - adds r0, r2, 0x1 - strh r0, [r1, 0xE] - b _081350DE - .pool -_081350C0: - movs r5, 0 - strh r5, [r1, 0xE] - ldrh r2, [r1, 0xC] - movs r6, 0xC - ldrsh r0, [r1, r6] - cmp r0, 0x16 - bgt _081350D4 - adds r0, r2, 0x1 - strh r0, [r1, 0xC] - b _081350D6 -_081350D4: - strh r5, [r1, 0xC] -_081350D6: - adds r0, r3, 0 - adds r1, r4, 0 - bl sub_81350E8 -_081350DE: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_813504C - thumb_func_start sub_81350E8 sub_81350E8: @ 81350E8 push {lr} diff --git a/src/wallclock.c b/src/wallclock.c index 51f6c530d8..e35e6a0756 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -34,8 +34,9 @@ static void sub_8134F10(u8 taskId); static void sub_8134F40(u8 taskId); static void sub_8134F78(u8 taskId); static void sub_8134FB0(u8 taskId); -static u16 sub_8134FFC(u16 a0, u8 a1, u8 a2); -void sub_813504C(u8 taskId, u8 a1); +static u16 sub_8134FFC(u16 a0, u8 command, u8 a2); +static bool32 sub_813504C(u8 taskId, u8 command); +void sub_81350E8(u8 taskId, u8 command); void sub_8135130(u8 taskId); void sub_81351AC(struct Sprite *sprite); void sub_8135244(struct Sprite *sprite); @@ -816,10 +817,10 @@ static u8 sub_8134FD4(u16 a0) return 1; } -static u16 sub_8134FFC(u16 a0, u8 a1, u8 a2) +static u16 sub_8134FFC(u16 a0, u8 command, u8 a2) { u8 r1 = sub_8134FD4(a2); - switch (a1) + switch (command) { case 1: if (a0) a0 -= r1; @@ -832,3 +833,49 @@ static u16 sub_8134FFC(u16 a0, u8 a1, u8 a2) } return a0; } + +static bool32 sub_813504C(u8 taskId, u8 command) +{ + switch (command) + { + case 1: + if (gTasks[taskId].data[3] > 0) + { + gTasks[taskId].data[3]--; + } + else + { + gTasks[taskId].data[3] = 59; + if (gTasks[taskId].data[2] > 0) + { + gTasks[taskId].data[2]--; + } + else + { + gTasks[taskId].data[2] = 23; + } + sub_81350E8(taskId, command); + } + break; + case 2: + if (gTasks[taskId].data[3] < 59) + { + gTasks[taskId].data[3]++; + } + else + { + gTasks[taskId].data[3] = 0; + if (gTasks[taskId].data[2] < 23) + { + gTasks[taskId].data[2]++; + } + else + { + gTasks[taskId].data[2] = 0; + } + sub_81350E8(taskId, command); + } + break; + } + return FALSE; +} From 23c7c6a41c2aca624fa6884d121976544cb9ad10 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:52:22 -0500 Subject: [PATCH 12/17] _12HourClockFixAMPM --- asm/wallclock.s | 44 ----------------- src/wallclock.c | 124 +++++++++++++++++++++++++++++++----------------- 2 files changed, 81 insertions(+), 87 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index 42f35beaf7..5a33d12196 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,50 +5,6 @@ .text - thumb_func_start sub_81350E8 -sub_81350E8: @ 81350E8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - ldr r2, =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrb r0, [r1, 0xC] - cmp r3, 0x1 - beq _0813510C - cmp r3, 0x2 - beq _0813511E - b _0813512A - .pool -_0813510C: - cmp r0, 0xB - beq _08135116 - cmp r0, 0x17 - beq _0813511A - b _0813512A -_08135116: - movs r0, 0 - b _08135128 -_0813511A: - strh r3, [r1, 0x12] - b _0813512A -_0813511E: - cmp r0, 0 - beq _08135128 - cmp r0, 0xC - bne _0813512A - movs r0, 0x1 -_08135128: - strh r0, [r1, 0x12] -_0813512A: - pop {r0} - bx r0 - thumb_func_end sub_81350E8 - thumb_func_start sub_8135130 sub_8135130: @ 8135130 push {r4-r6,lr} diff --git a/src/wallclock.c b/src/wallclock.c index e35e6a0756..f43fa413f4 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -21,6 +21,14 @@ // static types +#define WALL_CLOCK_TASK_MINUTE_HAND_ANGLE 0 +#define WALL_CLOCK_TASK_HOUR_HAND_ANGLE 1 +#define WALL_CLOCK_TASK_HOUR 2 +#define WALL_CLOCK_TASK_MINUTE 3 +#define WALL_CLOCK_TASK_SET_COMMAND 4 +#define WALL_CLOCK_TASK_12HRCLOCK_AM_PM 5 +#define WALL_CLOCK_TASK_SET_SPEED 6 + // static declarations static void sub_8134C9C(void); @@ -34,9 +42,9 @@ static void sub_8134F10(u8 taskId); static void sub_8134F40(u8 taskId); static void sub_8134F78(u8 taskId); static void sub_8134FB0(u8 taskId); -static u16 sub_8134FFC(u16 a0, u8 command, u8 a2); -static bool32 sub_813504C(u8 taskId, u8 command); -void sub_81350E8(u8 taskId, u8 command); +static u16 GetClockHandAngle(u16 a0, u8 command, u8 a2); +static bool32 MoveClockHand(u8 taskId, u8 command); +static void _12HourClockFixAMPM(u8 taskId, u8 command); void sub_8135130(u8 taskId); void sub_81351AC(struct Sprite *sprite); void sub_8135244(struct Sprite *sprite); @@ -598,13 +606,13 @@ void Cb2_StartWallClock(void) LoadWallClockGraphics(); LZ77UnCompVram(gUnknown_08DCC648, (u16 *)BG_SCREEN_ADDR(7)); taskId = CreateTask(sub_8134CB8, 0); - gTasks[taskId].data[2] = 10; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 0; - gTasks[taskId].data[6] = 0; - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0x12c; + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] = 10; + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] = 0; + gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] = 0; + gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = 0; + gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED] = 0; + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = 0; + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR_HAND_ANGLE] = 0x12c; spriteId = CreateSprite(&gUnknown_085B2250, 0x78, 0x50, 1); gSprites[spriteId].data0 = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; @@ -636,7 +644,7 @@ void Cb2_ViewWallClock(void) LZ77UnCompVram(gUnknown_08DCC908, (u16 *)BG_SCREEN_ADDR(7)); taskId = CreateTask(sub_8134F10, 0); sub_8135130(taskId); - if (gTasks[taskId].data[5] == 0) + if (gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] == 0) { r10 = 45; spc = 90; @@ -685,41 +693,41 @@ static void sub_8134CB8(u8 taskId) static void sub_8134CE8(u8 taskId) { - if (gTasks[taskId].data[0] % 6) + if (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] % 6) { - gTasks[taskId].data[0] = sub_8134FFC(gTasks[taskId].data[0], gTasks[taskId].data[4], gTasks[taskId].data[6]); + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = GetClockHandAngle(gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE], gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND], gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED]); } else { - gTasks[taskId].data[0] = gTasks[taskId].data[3] * 6; - gTasks[taskId].data[1] = (gTasks[taskId].data[2] % 12) * 30 + (gTasks[taskId].data[3] / 10) * 5; + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] * 6; + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR_HAND_ANGLE] = (gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] % 12) * 30 + (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] / 10) * 5; if (gMain.newKeys & A_BUTTON) { gTasks[taskId].func = sub_8134DC4; } else { - gTasks[taskId].data[4] = 0; + gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] = 0; if (gMain.heldKeys & DPAD_LEFT) { - gTasks[taskId].data[4] = 1; + gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] = 1; } if (gMain.heldKeys & DPAD_RIGHT) { - gTasks[taskId].data[4] = 2; + gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] = 2; } - if (gTasks[taskId].data[4] != 0) + if (gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] != 0) { - if (gTasks[taskId].data[6] <= 0xFE) + if (gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED] <= 0xFE) { - gTasks[taskId].data[6]++; + gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED]++; } - gTasks[taskId].data[0] = sub_8134FFC(gTasks[taskId].data[0], gTasks[taskId].data[4], gTasks[taskId].data[6]); - sub_813504C(taskId, gTasks[taskId].data[4]); + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = GetClockHandAngle(gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE], gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND], gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED]); + MoveClockHand(taskId, gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND]); } else { - gTasks[taskId].data[6] = 0; + gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED] = 0; } } } @@ -755,7 +763,7 @@ static void c3_80BF560(u8 taskId) static void sub_8134EA4(u8 taskId) { - RtcInitLocalTimeOffset(gTasks[taskId].data[2], gTasks[taskId].data[3]); + RtcInitLocalTimeOffset(gTasks[taskId].data[WALL_CLOCK_TASK_HOUR], gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE]); BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = c2_080111BC; } @@ -800,7 +808,7 @@ static void sub_8134FB0(u8 taskId) } } -static u8 sub_8134FD4(u16 a0) +static u8 GetClockHandAngleChange(u16 a0) { if (a0 > 60) { @@ -817,9 +825,9 @@ static u8 sub_8134FD4(u16 a0) return 1; } -static u16 sub_8134FFC(u16 a0, u8 command, u8 a2) +static u16 GetClockHandAngle(u16 a0, u8 command, u8 a2) { - u8 r1 = sub_8134FD4(a2); + u8 r1 = GetClockHandAngleChange(a2); switch (command) { case 1: @@ -834,48 +842,78 @@ static u16 sub_8134FFC(u16 a0, u8 command, u8 a2) return a0; } -static bool32 sub_813504C(u8 taskId, u8 command) +static bool32 MoveClockHand(u8 taskId, u8 command) { switch (command) { case 1: - if (gTasks[taskId].data[3] > 0) + if (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] > 0) { - gTasks[taskId].data[3]--; + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE]--; } else { - gTasks[taskId].data[3] = 59; - if (gTasks[taskId].data[2] > 0) + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] = 59; + if (gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] > 0) { - gTasks[taskId].data[2]--; + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR]--; } else { - gTasks[taskId].data[2] = 23; + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] = 23; } - sub_81350E8(taskId, command); + _12HourClockFixAMPM(taskId, command); } break; case 2: - if (gTasks[taskId].data[3] < 59) + if (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] < 59) { - gTasks[taskId].data[3]++; + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE]++; } else { - gTasks[taskId].data[3] = 0; - if (gTasks[taskId].data[2] < 23) + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] = 0; + if (gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] < 23) { - gTasks[taskId].data[2]++; + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR]++; } else { - gTasks[taskId].data[2] = 0; + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] = 0; } - sub_81350E8(taskId, command); + _12HourClockFixAMPM(taskId, command); } break; } return FALSE; } + +static void _12HourClockFixAMPM(u8 taskId, u8 command) +{ + u8 hours = gTasks[taskId].data[WALL_CLOCK_TASK_HOUR]; + switch (command) + { + case 1: + switch (hours) + { + case 11: + gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = FALSE; + break; + case 23: + gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = TRUE; + break; + } + break; + case 2: + switch (hours) + { + case 0: + gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = FALSE; + break; + case 12: + gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = TRUE; + break; + } + break; + } +} From 53a7f188f834cf778eb3de604c73facba13e0c9f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 22:08:12 -0500 Subject: [PATCH 13/17] through sub_81351AC --- asm/wallclock.s | 138 ------------------------------------------------ src/wallclock.c | 44 ++++++++++++++- 2 files changed, 42 insertions(+), 140 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index 5a33d12196..0a6fdea3b1 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,144 +5,6 @@ .text - thumb_func_start sub_8135130 -sub_8135130: @ 8135130 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl RtcCalcLocalTime - ldr r1, =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r6, r0, r1 - ldr r5, =gLocalTime - movs r0, 0x2 - ldrsb r0, [r5, r0] - strh r0, [r6, 0xC] - movs r0, 0x3 - ldrsb r0, [r5, r0] - strh r0, [r6, 0xE] - movs r0, 0xE - ldrsh r1, [r6, r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 1 - strh r0, [r6, 0x8] - movs r1, 0xC - ldrsh r0, [r6, r1] - movs r1, 0xC - bl __modsi3 - lsls r0, 16 - asrs r0, 16 - lsls r4, r0, 4 - subs r4, r0 - lsls r4, 1 - movs r1, 0xE - ldrsh r0, [r6, r1] - movs r1, 0xA - bl __divsi3 - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 2 - adds r1, r0 - adds r4, r1 - strh r4, [r6, 0xA] - movs r0, 0x2 - ldrsb r0, [r5, r0] - cmp r0, 0xB - bgt _081351A0 - movs r0, 0 - b _081351A2 - .pool -_081351A0: - movs r0, 0x1 -_081351A2: - strh r0, [r6, 0x12] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8135130 - - thumb_func_start sub_81351AC -sub_81351AC: @ 81351AC - push {r4-r7,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldr r2, =gTasks - movs r0, 0x2E - ldrsh r1, [r6, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r4, [r0, 0x8] - adds r7, r4, 0 - adds r0, r4, 0 - bl Sin2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _081351D4 - adds r0, 0xF -_081351D4: - lsls r0, 12 - lsrs r5, r0, 16 - adds r0, r4, 0 - bl Cos2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _081351E8 - adds r0, 0xF -_081351E8: - lsls r1, r0, 12 - lsrs r1, 16 - lsls r3, r5, 16 - lsrs r2, r3, 16 - negs r3, r3 - lsrs r3, 16 - str r1, [sp] - movs r0, 0 - bl SetOamMatrix - ldr r1, =gUnknown_085B22D0 - lsls r2, r7, 1 - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r3, r0, 16 - adds r1, 0x1 - adds r2, r1 - movs r0, 0 - ldrsb r0, [r2, r0] - lsls r0, 16 - lsrs r2, r0, 16 - cmp r3, 0x80 - bls _08135224 - movs r1, 0xFF - lsls r1, 8 - adds r0, r1, 0 - orrs r3, r0 -_08135224: - cmp r2, 0x80 - bls _08135230 - movs r1, 0xFF - lsls r1, 8 - adds r0, r1, 0 - orrs r2, r0 -_08135230: - strh r3, [r6, 0x24] - strh r2, [r6, 0x26] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81351AC - thumb_func_start sub_8135244 sub_8135244: @ 8135244 push {r4-r7,lr} diff --git a/src/wallclock.c b/src/wallclock.c index f43fa413f4..c54fd269ee 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -17,6 +17,7 @@ #include "strings.h" #include "sound.h" #include "songs.h" +#include "trig.h" #include "decompress.h" // static types @@ -45,8 +46,8 @@ static void sub_8134FB0(u8 taskId); static u16 GetClockHandAngle(u16 a0, u8 command, u8 a2); static bool32 MoveClockHand(u8 taskId, u8 command); static void _12HourClockFixAMPM(u8 taskId, u8 command); -void sub_8135130(u8 taskId); -void sub_81351AC(struct Sprite *sprite); +static void sub_8135130(u8 taskId); +static void sub_81351AC(struct Sprite *sprite); void sub_8135244(struct Sprite *sprite); void sub_81352DC(struct Sprite *sprite); void sub_8135380(struct Sprite *sprite); @@ -917,3 +918,42 @@ static void _12HourClockFixAMPM(u8 taskId, u8 command) break; } } + +static void sub_8135130(u8 taskId) +{ + RtcCalcLocalTime(); + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] = gLocalTime.hours; + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] = gLocalTime.minutes; + gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] * 6; + gTasks[taskId].data[WALL_CLOCK_TASK_HOUR_HAND_ANGLE] = (gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] % 12) * 30 + (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] / 10) * 5; + if (gLocalTime.hours < 12) + { + gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = FALSE; + } + else + { + gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = TRUE; + } +} + +static void sub_81351AC(struct Sprite *sprite) +{ + u16 angle = gTasks[sprite->data0].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE]; + s16 sin = Sin2(angle) / 16; + s16 cos = Cos2(angle) / 16; + u16 xhat; + u16 yhat; + SetOamMatrix(0, cos, sin, -sin, cos); + xhat = gUnknown_085B22D0[angle][0]; + yhat = gUnknown_085B22D0[angle][1]; + if (xhat > 0x80) + { + xhat |= 0xff00; + } + if (yhat > 0x80) + { + yhat |= 0xff00; + } + sprite->pos2.x = xhat; + sprite->pos2.y = yhat; +} From 1063bcaab8cdcade543b79f0b97fec36b1ecfa30 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 22:28:13 -0500 Subject: [PATCH 14/17] through sub_81352DC --- asm/wallclock.s | 165 ------------------------------------------------ src/wallclock.c | 54 +++++++++++++++- 2 files changed, 52 insertions(+), 167 deletions(-) diff --git a/asm/wallclock.s b/asm/wallclock.s index 0a6fdea3b1..5c590488f0 100644 --- a/asm/wallclock.s +++ b/asm/wallclock.s @@ -5,171 +5,6 @@ .text - thumb_func_start sub_8135244 -sub_8135244: @ 8135244 - push {r4-r7,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldr r2, =gTasks - movs r0, 0x2E - ldrsh r1, [r6, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r4, [r0, 0xA] - adds r7, r4, 0 - adds r0, r4, 0 - bl Sin2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _0813526C - adds r0, 0xF -_0813526C: - lsls r0, 12 - lsrs r5, r0, 16 - adds r0, r4, 0 - bl Cos2 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bge _08135280 - adds r0, 0xF -_08135280: - lsls r1, r0, 12 - lsrs r1, 16 - lsls r3, r5, 16 - lsrs r2, r3, 16 - negs r3, r3 - lsrs r3, 16 - str r1, [sp] - movs r0, 0x1 - bl SetOamMatrix - ldr r1, =gUnknown_085B22D0 - lsls r2, r7, 1 - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - lsls r0, 16 - lsrs r3, r0, 16 - adds r1, 0x1 - adds r2, r1 - movs r0, 0 - ldrsb r0, [r2, r0] - lsls r0, 16 - lsrs r2, r0, 16 - cmp r3, 0x80 - bls _081352BC - movs r1, 0xFF - lsls r1, 8 - adds r0, r1, 0 - orrs r3, r0 -_081352BC: - cmp r2, 0x80 - bls _081352C8 - movs r1, 0xFF - lsls r1, 8 - adds r0, r1, 0 - orrs r2, r0 -_081352C8: - strh r3, [r6, 0x24] - strh r2, [r6, 0x26] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8135244 - - thumb_func_start sub_81352DC -sub_81352DC: @ 81352DC - push {r4,lr} - adds r4, r0, 0 - ldr r2, =gTasks - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r1, 0x12 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0813531C - ldrh r1, [r4, 0x30] - adds r0, r1, 0 - subs r0, 0x3C - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1D - bhi _08135308 - adds r0, r1, 0x5 - strh r0, [r4, 0x30] -_08135308: - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0x3B - bgt _0813533C - adds r0, r1, 0x1 - b _0813533A - .pool -_0813531C: - ldrh r1, [r4, 0x30] - adds r0, r1, 0 - subs r0, 0x2E - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1D - bhi _0813532E - subs r0, r1, 0x5 - strh r0, [r4, 0x30] -_0813532E: - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0x4B - ble _0813533C - subs r0, r1, 0x1 -_0813533A: - strh r0, [r4, 0x30] -_0813533C: - ldrh r0, [r4, 0x30] - bl Cos2 - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - subs r1, r0 - lsls r0, r1, 1 - cmp r0, 0 - bge _08135354 - ldr r1, =0x00000fff - adds r0, r1 -_08135354: - asrs r0, 12 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x30] - bl Sin2 - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - subs r1, r0 - lsls r0, r1, 1 - cmp r0, 0 - bge _08135370 - ldr r2, =0x00000fff - adds r0, r2 -_08135370: - asrs r0, 12 - strh r0, [r4, 0x26] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81352DC - thumb_func_start sub_8135380 sub_8135380: @ 8135380 push {r4,lr} diff --git a/src/wallclock.c b/src/wallclock.c index c54fd269ee..6c78d72a11 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -48,8 +48,8 @@ static bool32 MoveClockHand(u8 taskId, u8 command); static void _12HourClockFixAMPM(u8 taskId, u8 command); static void sub_8135130(u8 taskId); static void sub_81351AC(struct Sprite *sprite); -void sub_8135244(struct Sprite *sprite); -void sub_81352DC(struct Sprite *sprite); +static void sub_8135244(struct Sprite *sprite); +static void sub_81352DC(struct Sprite *sprite); void sub_8135380(struct Sprite *sprite); // rodata @@ -957,3 +957,53 @@ static void sub_81351AC(struct Sprite *sprite) sprite->pos2.x = xhat; sprite->pos2.y = yhat; } + +static void sub_8135244(struct Sprite *sprite) +{ + u16 angle = gTasks[sprite->data0].data[WALL_CLOCK_TASK_HOUR_HAND_ANGLE]; + s16 sin = Sin2(angle) / 16; + s16 cos = Cos2(angle) / 16; + u16 xhat; + u16 yhat; + SetOamMatrix(1, cos, sin, -sin, cos); + xhat = gUnknown_085B22D0[angle][0]; + yhat = gUnknown_085B22D0[angle][1]; + if (xhat > 0x80) + { + xhat |= 0xff00; + } + if (yhat > 0x80) + { + yhat |= 0xff00; + } + sprite->pos2.x = xhat; + sprite->pos2.y = yhat; +} + +static void sub_81352DC(struct Sprite *sprite) +{ + if (gTasks[sprite->data0].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM]) + { + if ((u16)(sprite->data1 - 60) < 30) + { + sprite->data1 += 5; + } + if (sprite->data1 < 60) + { + sprite->data1++; + } + } + else + { + if ((u16)(sprite->data1 - 46) < 30) + { + sprite->data1 -= 5; + } + if (sprite->data1 > 75) + { + sprite->data1--; + } + } + sprite->pos2.x = Cos2(sprite->data1) * 30 / 0x1000; + sprite->pos2.y = Sin2(sprite->data1) * 30 / 0x1000; +} From f9c3aeb9194e7c670742dc9b99ca90131c24ddc1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 22:30:20 -0500 Subject: [PATCH 15/17] sub_8135380 --- asm/wallclock.s | 95 ------------------------------------------------- ld_script.txt | 1 - src/wallclock.c | 30 +++++++++++++++- 3 files changed, 29 insertions(+), 97 deletions(-) delete mode 100644 asm/wallclock.s diff --git a/asm/wallclock.s b/asm/wallclock.s deleted file mode 100644 index 5c590488f0..0000000000 --- a/asm/wallclock.s +++ /dev/null @@ -1,95 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8135380 -sub_8135380: @ 8135380 - push {r4,lr} - adds r4, r0, 0 - ldr r2, =gTasks - movs r0, 0x2E - ldrsh r1, [r4, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r1, 0x12 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _081353C0 - ldrh r1, [r4, 0x30] - adds r0, r1, 0 - subs r0, 0x69 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1D - bhi _081353AC - adds r0, r1, 0x5 - strh r0, [r4, 0x30] -_081353AC: - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0x68 - bgt _081353E0 - adds r0, r1, 0x1 - b _081353DE - .pool -_081353C0: - ldrh r1, [r4, 0x30] - adds r0, r1, 0 - subs r0, 0x5B - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1D - bhi _081353D2 - subs r0, r1, 0x5 - strh r0, [r4, 0x30] -_081353D2: - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0x78 - ble _081353E0 - subs r0, r1, 0x1 -_081353DE: - strh r0, [r4, 0x30] -_081353E0: - ldrh r0, [r4, 0x30] - bl Cos2 - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - subs r1, r0 - lsls r0, r1, 1 - cmp r0, 0 - bge _081353F8 - ldr r1, =0x00000fff - adds r0, r1 -_081353F8: - asrs r0, 12 - strh r0, [r4, 0x24] - ldrh r0, [r4, 0x30] - bl Sin2 - lsls r0, 16 - asrs r0, 16 - lsls r1, r0, 4 - subs r1, r0 - lsls r0, r1, 1 - cmp r0, 0 - bge _08135414 - ldr r2, =0x00000fff - adds r0, r2 -_08135414: - asrs r0, 12 - strh r0, [r4, 0x26] - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8135380 - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index df0a02cc5c..c5c627d6c3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -179,7 +179,6 @@ SECTIONS { asm/trader.o(.text); src/starter_choose.o(.text); src/wallclock.o(.text); - asm/wallclock.o(.text); asm/rom6.o(.text); asm/battle_records.o(.text); asm/pokedex_area_screen.o(.text); diff --git a/src/wallclock.c b/src/wallclock.c index 6c78d72a11..436c498f4f 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -50,7 +50,7 @@ static void sub_8135130(u8 taskId); static void sub_81351AC(struct Sprite *sprite); static void sub_8135244(struct Sprite *sprite); static void sub_81352DC(struct Sprite *sprite); -void sub_8135380(struct Sprite *sprite); +static void sub_8135380(struct Sprite *sprite); // rodata @@ -1007,3 +1007,31 @@ static void sub_81352DC(struct Sprite *sprite) sprite->pos2.x = Cos2(sprite->data1) * 30 / 0x1000; sprite->pos2.y = Sin2(sprite->data1) * 30 / 0x1000; } + +static void sub_8135380(struct Sprite *sprite) +{ + if (gTasks[sprite->data0].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM]) + { + if ((u16)(sprite->data1 - 105) < 30) + { + sprite->data1 += 5; + } + if (sprite->data1 < 105) + { + sprite->data1++; + } + } + else + { + if ((u16)(sprite->data1 - 91) < 30) + { + sprite->data1 -= 5; + } + if (sprite->data1 > 120) + { + sprite->data1--; + } + } + sprite->pos2.x = Cos2(sprite->data1) * 30 / 0x1000; + sprite->pos2.y = Sin2(sprite->data1) * 30 / 0x1000; +} From 9840be1f0041e697f1aefbdc839a5227b7100112 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 22:43:05 -0500 Subject: [PATCH 16/17] Slight cleanup --- src/wallclock.c | 65 ++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/src/wallclock.c b/src/wallclock.c index 436c498f4f..5b9e80317a 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -30,6 +30,9 @@ #define WALL_CLOCK_TASK_12HRCLOCK_AM_PM 5 #define WALL_CLOCK_TASK_SET_SPEED 6 +#define TAG_GFX_WALL_CLOCK_HAND 0x1000 +#define TAG_PAL_WALL_CLOCK_HAND 0x1000 + // static declarations static void sub_8134C9C(void); @@ -54,17 +57,17 @@ static void sub_8135380(struct Sprite *sprite); // rodata -const u8 gUnknown_085B1F58[] = INCBIN_U8("graphics/wallclock/graphics_85b1f58.4bpp.lz"); -const u16 gUnknown_085B21D4[] = INCBIN_U16("graphics/wallclock/palette_85b21d4.gbapal"); -const struct WindowTemplate gUnknown_085B21DC[] = { +static const u8 gUnknown_085B1F58[] = INCBIN_U8("graphics/wallclock/graphics_85b1f58.4bpp.lz"); +static const u16 gUnknown_085B21D4[] = INCBIN_U16("graphics/wallclock/palette_85b21d4.gbapal"); +static const struct WindowTemplate gUnknown_085B21DC[] = { { 0x00, 0x03, 0x11, 0x18, 0x02, 0x0e, 0x200 }, { 0x02, 0x18, 0x10, 0x06, 0x02, 0x0c, 0x230 }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_085B21F4 = { +static const struct WindowTemplate gUnknown_085B21F4 = { 0x00, 0x18, 0x09, 0x05, 0x04, 0x0e, 0x23c }; -const struct BgTemplate gUnknown_085B21FC[] = { +static const struct BgTemplate gUnknown_085B21FC[] = { { .bg = 0, .charBaseIndex = 2, @@ -84,12 +87,12 @@ const struct BgTemplate gUnknown_085B21FC[] = { .priority = 2 } }; -const struct CompressedSpriteSheet gUnknown_085B2208 = { - gUnknown_085B1F58, 0x2000, 0x1000 +static const struct CompressedSpriteSheet gUnknown_085B2208 = { + gUnknown_085B1F58, 0x2000, TAG_GFX_WALL_CLOCK_HAND }; -const u32 filler_85B2210[2] = {}; -const struct SpritePalette gUnknown_085B2218[] = { - { gUnknown_08DCC01C, 0x1000 }, +static const u32 filler_85B2210[2] = {}; +static const struct SpritePalette gUnknown_085B2218[] = { + { gUnknown_08DCC01C, TAG_PAL_WALL_CLOCK_HAND }, { gUnknown_08DCC03C, 0x1001 }, {} }; @@ -112,18 +115,18 @@ static const union AnimCmd *const gUnknown_085B2248[] = { static const union AnimCmd *const gUnknown_085B224C[] = { Unknown_085B2240 }; -const struct SpriteTemplate gUnknown_085B2250 = { - 0x1000, - 0x1000, +static const struct SpriteTemplate gUnknown_085B2250 = { + TAG_GFX_WALL_CLOCK_HAND, + TAG_PAL_WALL_CLOCK_HAND, &Unknown_085B2230, gUnknown_085B2248, NULL, gDummySpriteAffineAnimTable, sub_81351AC }; -const struct SpriteTemplate gUnknown_085B2268 = { - 0x1000, - 0x1000, +static const struct SpriteTemplate gUnknown_085B2268 = { + TAG_GFX_WALL_CLOCK_HAND, + TAG_PAL_WALL_CLOCK_HAND, &Unknown_085B2230, gUnknown_085B224C, NULL, @@ -149,25 +152,25 @@ static const union AnimCmd *const gUnknown_085B2298[] = { static const union AnimCmd *const gUnknown_085B229C[] = { Unknown_085B2290 }; -const struct SpriteTemplate gUnknown_085B22A0 = { - 0x1000, - 0x1000, +static const struct SpriteTemplate gUnknown_085B22A0 = { + TAG_GFX_WALL_CLOCK_HAND, + TAG_PAL_WALL_CLOCK_HAND, &Unknown_085B2280, gUnknown_085B2298, NULL, gDummySpriteAffineAnimTable, sub_81352DC }; -const struct SpriteTemplate gUnknown_085B22B8 = { - 0x1000, - 0x1000, +static const struct SpriteTemplate gUnknown_085B22B8 = { + TAG_GFX_WALL_CLOCK_HAND, + TAG_PAL_WALL_CLOCK_HAND, &Unknown_085B2280, gUnknown_085B229C, NULL, gDummySpriteAffineAnimTable, sub_8135380 }; -const s8 gUnknown_085B22D0[][2] = { +static const s8 sClockHandCoords[][2] = { { 0x00, -0x18}, { 0x01, -0x19}, { 0x01, -0x19}, @@ -944,8 +947,8 @@ static void sub_81351AC(struct Sprite *sprite) u16 xhat; u16 yhat; SetOamMatrix(0, cos, sin, -sin, cos); - xhat = gUnknown_085B22D0[angle][0]; - yhat = gUnknown_085B22D0[angle][1]; + xhat = sClockHandCoords[angle][0]; + yhat = sClockHandCoords[angle][1]; if (xhat > 0x80) { xhat |= 0xff00; @@ -966,8 +969,8 @@ static void sub_8135244(struct Sprite *sprite) u16 xhat; u16 yhat; SetOamMatrix(1, cos, sin, -sin, cos); - xhat = gUnknown_085B22D0[angle][0]; - yhat = gUnknown_085B22D0[angle][1]; + xhat = sClockHandCoords[angle][0]; + yhat = sClockHandCoords[angle][1]; if (xhat > 0x80) { xhat |= 0xff00; @@ -984,7 +987,7 @@ static void sub_81352DC(struct Sprite *sprite) { if (gTasks[sprite->data0].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM]) { - if ((u16)(sprite->data1 - 60) < 30) + if (sprite->data1 >= 60 && sprite->data1 < 90) { sprite->data1 += 5; } @@ -995,7 +998,7 @@ static void sub_81352DC(struct Sprite *sprite) } else { - if ((u16)(sprite->data1 - 46) < 30) + if (sprite->data1 >= 46 && sprite->data1 < 76) { sprite->data1 -= 5; } @@ -1012,7 +1015,7 @@ static void sub_8135380(struct Sprite *sprite) { if (gTasks[sprite->data0].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM]) { - if ((u16)(sprite->data1 - 105) < 30) + if (sprite->data1 >= 105 && sprite->data1 < 135) { sprite->data1 += 5; } @@ -1023,7 +1026,7 @@ static void sub_8135380(struct Sprite *sprite) } else { - if ((u16)(sprite->data1 - 91) < 30) + if (sprite->data1 >= 91 && sprite->data1 < 121) { sprite->data1 -= 5; } From 6d73bb4b57efb3ff81dcc2aa0d00d5de380add9e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 16 Dec 2017 10:23:05 -0500 Subject: [PATCH 17/17] Import function labels from Ruby --- asm/dewford_trend.s | 6 +- asm/easy_chat.s | 8 +- asm/field_screen.s | 6 +- asm/learn_move.s | 8 +- asm/link.s | 8 +- asm/main_menu.s | 2 +- asm/menu.s | 6 +- asm/menu_helpers.s | 2 +- asm/party_menu.s | 22 +- asm/player_pc.s | 2 +- asm/pokemon_storage_system.s | 8 +- asm/rom6.s | 34 ++- asm/script_menu.s | 2 +- asm/slot_machine.s | 2 +- asm/start_menu.s | 6 +- asm/trade.s | 4 +- asm/use_pokeblock.s | 2 +- data/scripts/maps/BattleFrontier_Lounge2.inc | 24 +- data/scripts/maps/BattleFrontier_Lounge3.inc | 20 +- data/scripts/players_house.inc | 2 +- data/specials.inc | 2 +- include/constants/vars.h | 13 +- include/dewford_trend.h | 2 +- include/field_screen.h | 2 +- include/menu.h | 2 +- include/rom6.h | 10 +- include/tv.h | 2 +- src/berry_blender.c | 2 +- src/clear_save_data_screen.c | 2 +- src/clock.c | 53 ++-- src/egg_hatch.c | 4 +- src/evolution_scene.c | 2 +- src/starter_choose.c | 2 +- src/tv.c | 2 +- src/wallclock.c | 279 ++++++++++--------- 35 files changed, 287 insertions(+), 266 deletions(-) diff --git a/asm/dewford_trend.s b/asm/dewford_trend.s index 89f89c4e0a..7d9d679024 100644 --- a/asm/dewford_trend.s +++ b/asm/dewford_trend.s @@ -79,8 +79,8 @@ _08122522: .pool thumb_func_end InitDewfordTrend - thumb_func_start sub_8122580 -sub_8122580: @ 8122580 + thumb_func_start UpdateDewfordTrendPerDay +UpdateDewfordTrendPerDay: @ 8122580 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -253,7 +253,7 @@ _081226BE: pop {r0} bx r0 .pool - thumb_func_end sub_8122580 + thumb_func_end UpdateDewfordTrendPerDay thumb_func_start sub_81226D8 sub_81226D8: @ 81226D8 diff --git a/asm/easy_chat.s b/asm/easy_chat.s index 602e7b3e75..3a359c9fa1 100644 --- a/asm/easy_chat.s +++ b/asm/easy_chat.s @@ -1635,7 +1635,7 @@ _0811AF86: thumb_func_start sub_811AF8C sub_811AF8C: @ 811AF8C push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -1684,7 +1684,7 @@ _0811AFE6: thumb_func_start sub_811AFEC sub_811AFEC: @ 811AFEC push {r4,lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -1727,7 +1727,7 @@ _0811B03A: thumb_func_start sub_811B040 sub_811B040: @ 811B040 push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -1832,7 +1832,7 @@ sub_811B0E8: @ 811B0E8 thumb_func_start sub_811B0F8 sub_811B0F8: @ 811B0F8 push {r4,lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/field_screen.s b/asm/field_screen.s index 497346f8ac..a579efe73c 100644 --- a/asm/field_screen.s +++ b/asm/field_screen.s @@ -7777,8 +7777,8 @@ _080AEFB6: bx r1 thumb_func_end sub_80AEEE8 - thumb_func_start sub_80AEFBC -sub_80AEFBC: @ 80AEFBC + thumb_func_start UpdateWeatherPerDay +UpdateWeatherPerDay: @ 80AEFBC lsls r0, 16 ldr r1, =gSaveBlock1Ptr ldr r2, [r1] @@ -7794,7 +7794,7 @@ sub_80AEFBC: @ 80AEFBC strb r1, [r2] bx lr .pool - thumb_func_end sub_80AEFBC + thumb_func_end UpdateWeatherPerDay thumb_func_start sub_80AEFDC sub_80AEFDC: @ 80AEFDC diff --git a/asm/learn_move.s b/asm/learn_move.s index 159b16f7ef..acd9f4f98d 100755 --- a/asm/learn_move.s +++ b/asm/learn_move.s @@ -353,7 +353,7 @@ _08160994: b _08160E88 .pool _081609A8: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -433,7 +433,7 @@ _08160A50: b _08160E88 .pool _08160A64: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -493,7 +493,7 @@ _08160ADC: b _08160E88 .pool _08160AEC: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -551,7 +551,7 @@ _08160B6C: b _08160E88 .pool _08160B80: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/link.s b/asm/link.s index 2e6f3f8d30..953e1ac25c 100644 --- a/asm/link.s +++ b/asm/link.s @@ -26142,7 +26142,7 @@ _080170E0: negs r0, r0 b _08017110 _080170F2: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 movs r2, 0x80 @@ -29500,7 +29500,7 @@ _08018BD6: b _08018C3E .pool _08018BE4: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r6, r0, 24 movs r1, 0x80 @@ -52112,7 +52112,7 @@ _0802426A: bl sub_8197930 b _080242D0 _08024270: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r4, r0, 24 movs r0, 0x2 @@ -71033,7 +71033,7 @@ _0802DA84: thumb_func_start sub_802DA8C sub_802DA8C: @ 802DA8C push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r0, 24 pop {r1} diff --git a/asm/main_menu.s b/asm/main_menu.s index 7b7ce49f73..52afc783e7 100644 --- a/asm/main_menu.s +++ b/asm/main_menu.s @@ -3025,7 +3025,7 @@ task_new_game_prof_birch_speech_part2_4: @ 8031188 push {r4,r5,lr} lsls r0, 24 lsrs r5, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/menu.s b/asm/menu.s index e1102893a2..64644504ef 100755 --- a/asm/menu.s +++ b/asm/menu.s @@ -2266,8 +2266,8 @@ sub_8198C34: @ 8198C34 bx r0 thumb_func_end sub_8198C34 - thumb_func_start sub_8198C58 -sub_8198C58: @ 8198C58 + thumb_func_start ProcessMenuInputNoWrap_ +ProcessMenuInputNoWrap_: @ 8198C58 push {r4,lr} bl ProcessMenuInputNoWrapAround lsls r0, 24 @@ -2282,7 +2282,7 @@ _08198C6E: pop {r4} pop {r1} bx r1 - thumb_func_end sub_8198C58 + thumb_func_end ProcessMenuInputNoWrap_ thumb_func_start sub_8198C78 sub_8198C78: @ 8198C78 diff --git a/asm/menu_helpers.s b/asm/menu_helpers.s index 423f653d98..444632dc50 100644 --- a/asm/menu_helpers.s +++ b/asm/menu_helpers.s @@ -277,7 +277,7 @@ Task_CallYesOrNoCallback: @ 8121FDC push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/party_menu.s b/asm/party_menu.s index 4ae689d4dc..27ff4721c9 100755 --- a/asm/party_menu.s +++ b/asm/party_menu.s @@ -2554,7 +2554,7 @@ sub_81B1708: @ 81B1708 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -4010,7 +4010,7 @@ sub_81B227C: @ 81B227C push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -7952,7 +7952,7 @@ sub_81B43DC: @ 81B43DC push {r4-r6,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -8485,7 +8485,7 @@ sub_81B48DC: @ 81B48DC muls r1, r0 ldr r0, =gPlayerParty adds r4, r1, r0 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -8777,7 +8777,7 @@ sub_81B4BA0: @ 81B4BA0 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -8883,7 +8883,7 @@ sub_81B4C94: @ 81B4C94 push {r7} lsls r0, 24 lsrs r5, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -9691,7 +9691,7 @@ sub_81B5430: @ 81B5430 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -9985,7 +9985,7 @@ sub_81B56D8: @ 81B56D8 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -12970,7 +12970,7 @@ sub_81B7028: @ 81B7028 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -13272,7 +13272,7 @@ sub_81B72C8: @ 81B72C8 muls r1, r0 ldr r0, =gPlayerParty adds r4, r1, r0 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r5, r0, 24 cmp r5, 0 @@ -15054,7 +15054,7 @@ sub_81B82D4: @ 81B82D4 push {r4-r7,lr} lsls r0, 24 lsrs r5, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/player_pc.s b/asm/player_pc.s index 2287d41237..c1bb4f632b 100644 --- a/asm/player_pc.s +++ b/asm/player_pc.s @@ -1378,7 +1378,7 @@ sub_816B9D8: @ 816B9D8 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r0, 24 movs r1, 0x1 diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index c30cd7c288..2deae56ab2 100755 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -3409,7 +3409,7 @@ _080C8F0C: adds r0, 0x1 strb r0, [r1] _080C8F22: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -4133,7 +4133,7 @@ _080C9584: b _080C9664 .pool _080C95A4: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -4927,7 +4927,7 @@ _080C9C78: b _080C9CAA .pool _080C9C8C: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -5058,7 +5058,7 @@ _080C9DAC: b _080C9DE0 .pool _080C9DC0: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/rom6.s b/asm/rom6.s index 430ed7ee99..0c464c14fd 100644 --- a/asm/rom6.s +++ b/asm/rom6.s @@ -4188,6 +4188,8 @@ sp0C8_whiteout_maybe: @ 813787C .pool thumb_func_end sp0C8_whiteout_maybe +@ time_events.o + thumb_func_start sub_8137890 sub_8137890: @ 8137890 push {r4,lr} @@ -4244,8 +4246,8 @@ sub_81378E4: @ 81378E4 bx r0 thumb_func_end sub_81378E4 - thumb_func_start sub_8137904 -sub_8137904: @ 8137904 + thumb_func_start UpdateMirageRnd +UpdateMirageRnd: @ 8137904 push {r4,lr} lsls r0, 16 lsrs r4, r0, 16 @@ -4271,7 +4273,7 @@ _08137928: pop {r0} bx r0 .pool - thumb_func_end sub_8137904 + thumb_func_end UpdateMirageRnd thumb_func_start sub_813793C sub_813793C: @ 813793C @@ -4385,8 +4387,8 @@ sub_8137A0C: @ 8137A0C .pool thumb_func_end sub_8137A0C - thumb_func_start sub_8137A20 -sub_8137A20: @ 8137A20 + thumb_func_start UpdateBirchState +UpdateBirchState: @ 8137A20 push {r4,r5,lr} adds r4, r0, 0 lsls r4, 16 @@ -4405,7 +4407,9 @@ sub_8137A20: @ 8137A20 pop {r0} bx r0 .pool - thumb_func_end sub_8137A20 + thumb_func_end UpdateBirchState + +@ birch_pc.o thumb_func_start sub_8137A4C sub_8137A4C: @ 8137A4C @@ -7605,15 +7609,15 @@ _08139456: bx r1 thumb_func_end sub_81393FC - thumb_func_start sub_813945C -sub_813945C: @ 813945C + thumb_func_start SetShoalItemFlag +SetShoalItemFlag: @ 813945C push {lr} ldr r0, =0x000008bf bl FlagSet pop {r0} bx r0 .pool - thumb_func_end sub_813945C + thumb_func_end SetShoalItemFlag thumb_func_start sub_813946C sub_813946C: @ 813946C @@ -8934,8 +8938,8 @@ _08139EEE: bx r1 thumb_func_end sub_8139ED0 - thumb_func_start sub_8139EF4 -sub_8139EF4: @ 8139EF4 + thumb_func_start UpdateFrontierManiac +UpdateFrontierManiac: @ 8139EF4 push {r4,r5,lr} adds r4, r0, 0 lsls r4, 16 @@ -8954,7 +8958,7 @@ sub_8139EF4: @ 8139EF4 pop {r0} bx r0 .pool - thumb_func_end sub_8139EF4 + thumb_func_end UpdateFrontierManiac thumb_func_start sub_8139F20 sub_8139F20: @ 8139F20 @@ -10002,8 +10006,8 @@ _0813A7C6: .pool thumb_func_end sub_813A7B8 - thumb_func_start sub_813A7F4 -sub_813A7F4: @ 813A7F4 + thumb_func_start UpdateFrontierGambler +UpdateFrontierGambler: @ 813A7F4 push {r4,r5,lr} adds r4, r0, 0 lsls r4, 16 @@ -10022,7 +10026,7 @@ sub_813A7F4: @ 813A7F4 pop {r0} bx r0 .pool - thumb_func_end sub_813A7F4 + thumb_func_end UpdateFrontierGambler thumb_func_start sub_813A820 sub_813A820: @ 813A820 diff --git a/asm/script_menu.s b/asm/script_menu.s index be7cbfbc7c..233a5e14cf 100644 --- a/asm/script_menu.s +++ b/asm/script_menu.s @@ -444,7 +444,7 @@ task_yes_no_maybe: @ 80E215C b _080E21C4 .pool _080E2180: - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 movs r0, 0x1 diff --git a/asm/slot_machine.s b/asm/slot_machine.s index 6390ae9923..24e7556486 100644 --- a/asm/slot_machine.s +++ b/asm/slot_machine.s @@ -1581,7 +1581,7 @@ sub_812B158: @ 812B158 thumb_func_start sub_812B1B0 sub_812B1B0: @ 812B1B0 push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/start_menu.s b/asm/start_menu.s index 634425f805..787c0de230 100644 --- a/asm/start_menu.s +++ b/asm/start_menu.s @@ -1121,7 +1121,7 @@ sub_80A00EC: @ 80A00EC thumb_func_start sub_80A0108 sub_80A0108: @ 80A0108 push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -1226,7 +1226,7 @@ sub_80A01D0: @ 80A01D0 thumb_func_start sub_80A01EC sub_80A01EC: @ 80A01EC push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -1441,7 +1441,7 @@ sub_80A0388: @ 80A0388 thumb_func_start sub_80A03A4 sub_80A03A4: @ 80A03A4 push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/trade.s b/asm/trade.s index d36ae3c677..9f10faee24 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -3696,7 +3696,7 @@ _0807920E: thumb_func_start sub_8079218 sub_8079218: @ 8079218 push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 @@ -3798,7 +3798,7 @@ _080792D8: thumb_func_start sub_80792E4 sub_80792E4: @ 80792E4 push {lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 asrs r1, r0, 24 cmp r1, 0 diff --git a/asm/use_pokeblock.s b/asm/use_pokeblock.s index 3c580654cb..f22fd90614 100755 --- a/asm/use_pokeblock.s +++ b/asm/use_pokeblock.s @@ -1240,7 +1240,7 @@ sub_8166D44: @ 8166D44 thumb_func_start sub_8166DE4 sub_8166DE4: @ 8166DE4 push {r4,lr} - bl sub_8198C58 + bl ProcessMenuInputNoWrap_ lsls r0, 24 lsrs r4, r0, 24 asrs r1, r0, 24 diff --git a/data/scripts/maps/BattleFrontier_Lounge2.inc b/data/scripts/maps/BattleFrontier_Lounge2.inc index 6b43747cce..bd20f13ac3 100644 --- a/data/scripts/maps/BattleFrontier_Lounge2.inc +++ b/data/scripts/maps/BattleFrontier_Lounge2.inc @@ -17,29 +17,29 @@ BattleFrontier_Lounge2_EventScript_26065F:: @ 826065F end BattleFrontier_Lounge2_EventScript_26066D:: @ 826066D - compare_var_to_value VAR_0x402F, 0 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 0 call_if 1, BattleFrontier_Lounge2_EventScript_26070A - compare_var_to_value VAR_0x402F, 1 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 1 call_if 1, BattleFrontier_Lounge2_EventScript_26070F - compare_var_to_value VAR_0x402F, 2 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 2 call_if 1, BattleFrontier_Lounge2_EventScript_260714 - compare_var_to_value VAR_0x402F, 3 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 3 call_if 1, BattleFrontier_Lounge2_EventScript_260719 - compare_var_to_value VAR_0x402F, 4 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 4 call_if 1, BattleFrontier_Lounge2_EventScript_26071E - compare_var_to_value VAR_0x402F, 5 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 5 call_if 1, BattleFrontier_Lounge2_EventScript_260723 - compare_var_to_value VAR_0x402F, 6 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 6 call_if 1, BattleFrontier_Lounge2_EventScript_260728 - compare_var_to_value VAR_0x402F, 7 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 7 call_if 1, BattleFrontier_Lounge2_EventScript_26072D - compare_var_to_value VAR_0x402F, 8 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 8 call_if 1, BattleFrontier_Lounge2_EventScript_260732 - compare_var_to_value VAR_0x402F, 9 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 9 call_if 1, BattleFrontier_Lounge2_EventScript_260737 - compare_var_to_value VAR_0x402F, 3 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 3 call_if 3, BattleFrontier_Lounge2_EventScript_2606F8 - compare_var_to_value VAR_0x402F, 4 + compare_var_to_value VAR_FRONTIER_MANIAC_FACILITY, 4 call_if 4, BattleFrontier_Lounge2_EventScript_260701 special sub_8139F20 waitmessage diff --git a/data/scripts/maps/BattleFrontier_Lounge3.inc b/data/scripts/maps/BattleFrontier_Lounge3.inc index 0612ccb8e0..5fb7a83672 100644 --- a/data/scripts/maps/BattleFrontier_Lounge3.inc +++ b/data/scripts/maps/BattleFrontier_Lounge3.inc @@ -32,7 +32,7 @@ BattleFrontier_Lounge3_EventScript_261DAF:: @ 8261DAF BattleFrontier_Lounge3_EventScript_261DE9:: @ 8261DE9 multichoice 20, 4, 87, 0 - copyvar VAR_0x4032, VAR_RESULT + copyvar VAR_FRONTIER_GAMBLER_AMOUNT_BET, VAR_RESULT switch VAR_RESULT case 0, BattleFrontier_Lounge3_EventScript_261E30 case 1, BattleFrontier_Lounge3_EventScript_261E3B @@ -69,7 +69,7 @@ BattleFrontier_Lounge3_EventScript_261E51:: @ 8261E51 BattleFrontier_Lounge3_EventScript_261E75:: @ 8261E75 copyvar VAR_0x8004, VAR_0x8008 special sub_813A9A4 - setvar VAR_0x4033, 1 + setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1 special sub_813A8FC playse SE_REGI msgbox BattleFrontier_Lounge3_Text_262BE0, 4 @@ -113,37 +113,37 @@ BattleFrontier_Lounge3_EventScript_261EEB:: @ 8261EEB BattleFrontier_Lounge3_EventScript_261EF9:: @ 8261EF9 msgbox BattleFrontier_Lounge3_Text_26346B, 4 - compare_var_to_value VAR_0x4033, 1 + compare_var_to_value VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1 goto_if 4, BattleFrontier_Lounge3_EventScript_261F12 goto BattleFrontier_Lounge3_EventScript_261DAF end BattleFrontier_Lounge3_EventScript_261F12:: @ 8261F12 - compare_var_to_value VAR_0x4033, 1 + compare_var_to_value VAR_FRONTIER_GAMBLER_PLACED_BET_F, 1 goto_eq BattleFrontier_Lounge3_EventScript_261F9E - compare_var_to_value VAR_0x4033, 2 + compare_var_to_value VAR_FRONTIER_GAMBLER_PLACED_BET_F, 2 goto_eq BattleFrontier_Lounge3_EventScript_261F2E goto BattleFrontier_Lounge3_EventScript_261F71 end BattleFrontier_Lounge3_EventScript_261F2E:: @ 8261F2E msgbox BattleFrontier_Lounge3_Text_263334, 4 - compare_var_to_value VAR_0x4032, 0 + compare_var_to_value VAR_FRONTIER_GAMBLER_AMOUNT_BET, 0 call_if 1, BattleFrontier_Lounge3_EventScript_261F80 - compare_var_to_value VAR_0x4032, 1 + compare_var_to_value VAR_FRONTIER_GAMBLER_AMOUNT_BET, 1 call_if 1, BattleFrontier_Lounge3_EventScript_261F8A - compare_var_to_value VAR_0x4032, 2 + compare_var_to_value VAR_FRONTIER_GAMBLER_AMOUNT_BET, 2 call_if 1, BattleFrontier_Lounge3_EventScript_261F94 msgbox BattleFrontier_Lounge3_Text_2633D4, 9 special sub_813A9D0 msgbox BattleFrontier_Lounge3_Text_2633F2, 4 - setvar VAR_0x4033, 0 + setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 0 release end BattleFrontier_Lounge3_EventScript_261F71:: @ 8261F71 msgbox BattleFrontier_Lounge3_Text_263298, 4 - setvar VAR_0x4033, 0 + setvar VAR_FRONTIER_GAMBLER_PLACED_BET_F, 0 release end diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc index 85952d9f0c..05d93c35d6 100644 --- a/data/scripts/players_house.inc +++ b/data/scripts/players_house.inc @@ -114,7 +114,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_29283F:: @ 829283F LittlerootTown_BrendansHouse_2F_EventScript_292849:: @ 8292849 fadescreen 1 - special Special_StartWallClock + special StartWallClock waitstate return diff --git a/data/specials.inc b/data/specials.inc index 19adbae4d7..04b38ffc6d 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -164,7 +164,7 @@ gSpecials:: @ 81DBA64 def_special sub_8138B8C def_special sub_814FC9C def_special sub_8085784 - def_special Special_StartWallClock + def_special StartWallClock def_special Special_ViewWallClock def_special sub_80B1138 def_special sub_80B086C diff --git a/include/constants/vars.h b/include/constants/vars.h index 6828614bf5..6dc8d0ccdf 100644 --- a/include/constants/vars.h +++ b/include/constants/vars.h @@ -50,11 +50,14 @@ #define VAR_RESET_RTC_ENABLE 0x402C #define VAR_0x402D 0x402D #define VAR_0x402E 0x402E -#define VAR_0x402F 0x402F -#define VAR_0x4030 0x4030 -#define VAR_0x4031 0x4031 -#define VAR_0x4032 0x4032 -#define VAR_0x4033 0x4033 + +#define VAR_FRONTIER_MANIAC_FACILITY 0x402F + +#define VAR_FRONTIER_GAMBLER_FACILITY 0x4030 +#define VAR_FRONTIER_GAMBLER_SET_FACILITY_F 0x4031 +#define VAR_FRONTIER_GAMBLER_AMOUNT_BET 0x4032 +#define VAR_FRONTIER_GAMBLER_PLACED_BET_F 0x4033 + #define VAR_0x4034 0x4034 #define VAR_0x4035 0x4035 #define VAR_STORAGE_UNKNOWN 0x4036 diff --git a/include/dewford_trend.h b/include/dewford_trend.h index 3972ad143c..dac5ea6c97 100644 --- a/include/dewford_trend.h +++ b/include/dewford_trend.h @@ -3,6 +3,6 @@ void InitDewfordTrend(void); void UpdateDewfordTrendPerDay(u16); -void sub_8122580(u16 days); +void UpdateDewfordTrendPerDay(u16 days); #endif // GUARD_DEWFORDTREND_H diff --git a/include/field_screen.h b/include/field_screen.h index f01760fcb7..cfc0d081f5 100644 --- a/include/field_screen.h +++ b/include/field_screen.h @@ -9,6 +9,6 @@ void pal_fill_black(void); bool8 sub_80ABDFC(void); void sub_80AF168(void); -void sub_80AEFBC(u16 days); +void UpdateWeatherPerDay(u16 days); #endif //GUARD_FIELD_SCREEN_H diff --git a/include/menu.h b/include/menu.h index 2052a8dadc..99ff35adbe 100644 --- a/include/menu.h +++ b/include/menu.h @@ -29,7 +29,7 @@ int decompress_and_copy_tile_data_to_vram(u8 bg_id, const void *src, int size, u bool8 free_temp_tile_data_buffers_if_possible(void); u64 sub_8198A50(struct WindowTemplate*, u8, u8, u8, u8, u8, u8, u16); // returns something but it isn't used, fix when menu.s is decomp'd void CreateYesNoMenu(const struct WindowTemplate *windowTemplate, u16 borderFirstTileNum, u8 borderPalette, u8 initialCursorPos); -s8 sub_8198C58(void); +s8 ProcessMenuInputNoWrap_(void); void do_scheduled_bg_tilemap_copies_to_vram(void); void clear_scheduled_bg_copies_to_vram(void); void AddTextPrinterParametrized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, struct TextColor *color, s8 speed, const u8 *str); diff --git a/include/rom6.h b/include/rom6.h index 014422b3d2..6d20752e26 100644 --- a/include/rom6.h +++ b/include/rom6.h @@ -6,10 +6,10 @@ u8 GetLeadMonIndex(void); u8 GetSSTidalLocation(u8 *grp, u8 *num, s16 *x, s16 *y); void sub_813BADC(bool8); bool8 sub_813B9C0(void); -void sub_8137904(u16 days); -void sub_8137A20(u16 days); -void sub_8139EF4(u16 days); -void sub_813A7F4(u16 days); -void sub_813945C(u16 days); +void UpdateMirageRnd(u16 days); +void UpdateBirchState(u16 days); +void UpdateFrontierManiac(u16 days); +void UpdateFrontierGambler(u16 days); +void SetShoalItemFlag(u16 days); #endif //GUARD_ROM6_H diff --git a/include/tv.h b/include/tv.h index afa0ae930b..eca11385e8 100644 --- a/include/tv.h +++ b/include/tv.h @@ -15,6 +15,6 @@ void sub_80F14F8(TVShow *shows); size_t sub_80EF370(int value); bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language); void SetPokemonAnglerSpecies(u16 species); -void sub_80ED888(u16 days); +void UpdateTVShowsPerDay(u16 days); #endif //GUARD_TV_H diff --git a/src/berry_blender.c b/src/berry_blender.c index b1d36e2d99..b1e8712a6e 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -2444,7 +2444,7 @@ static void CB2_HandleBlenderEndGame(void) sBerryBlenderData->gameEndState++; break; case 10: - switch (sub_8198C58()) + switch (ProcessMenuInputNoWrap_()) { case 1: case -1: diff --git a/src/clear_save_data_screen.c b/src/clear_save_data_screen.c index d00944ac19..6d6a1545b6 100755 --- a/src/clear_save_data_screen.c +++ b/src/clear_save_data_screen.c @@ -88,7 +88,7 @@ static void Task_DoClearSaveDataScreenYesNo(u8 taskId) static void Task_ClearSaveDataScreenYesNoChoice(u8 taskId) { - switch(sub_8198C58()) + switch(ProcessMenuInputNoWrap_()) { case 0: FillWindowPixelBuffer(0, 17); diff --git a/src/clock.c b/src/clock.c index 2ba42f70de..7cea301661 100644 --- a/src/clock.c +++ b/src/clock.c @@ -15,14 +15,14 @@ // static declarations -static void sub_809E7E8(struct Time *localTime); -static void sub_809E858(struct Time *localTime); +static void UpdatePerDay(struct Time *localTime); +static void UpdatePerMinute(struct Time *localTime); // rodata // text -static void sub_809E778(void) +static void InitTimeBasedEvents(void) { FlagSet(FLAG_SYS_CLOCK_SET); RtcCalcLocalTime(); @@ -35,38 +35,35 @@ void DoTimeBasedEvents(void) if (FlagGet(FLAG_SYS_CLOCK_SET) && !sub_813B9C0()) { RtcCalcLocalTime(); - sub_809E7E8(&gLocalTime); - sub_809E858(&gLocalTime); + UpdatePerDay(&gLocalTime); + UpdatePerMinute(&gLocalTime); } } -static void sub_809E7E8(struct Time *localTime) +static void UpdatePerDay(struct Time *localTime) { u16 *days = GetVarPointer(VAR_DAYS); u16 daysSince; - if (*days != localTime->days) + if (*days != localTime->days && *days <= localTime->days) { - if (*days <= localTime->days) - { - daysSince = localTime->days - *days; - ClearUpperFlags(); - sub_8122580(daysSince); - sub_80ED888(daysSince); - sub_80AEFBC(daysSince); - UpdatePartyPokerusTime(daysSince); - sub_8137904(daysSince); - sub_8137A20(daysSince); - sub_8139EF4(daysSince); - sub_813A7F4(daysSince); - sub_813945C(daysSince); - SetRandomLotteryNumber(daysSince); - *days = localTime->days; - } + daysSince = localTime->days - *days; + ClearUpperFlags(); + UpdateDewfordTrendPerDay(daysSince); + UpdateTVShowsPerDay(daysSince); + UpdateWeatherPerDay(daysSince); + UpdatePartyPokerusTime(daysSince); + UpdateMirageRnd(daysSince); + UpdateBirchState(daysSince); + UpdateFrontierManiac(daysSince); + UpdateFrontierGambler(daysSince); + SetShoalItemFlag(daysSince); + SetRandomLotteryNumber(daysSince); + *days = localTime->days; } } -static void sub_809E858(struct Time *localTime) +static void UpdatePerMinute(struct Time *localTime) { struct Time difference; int minutes; @@ -83,14 +80,14 @@ static void sub_809E858(struct Time *localTime) } } -void sub_809E8B4(void) +static void ReturnFromStartWallClock(void) { - sub_809E778(); + InitTimeBasedEvents(); SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } -void Special_StartWallClock(void) +void StartWallClock(void) { SetMainCallback2(Cb2_StartWallClock); - gMain.savedCallback = sub_809E8B4; + gMain.savedCallback = ReturnFromStartWallClock; } diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 0326078069..a31eb0520e 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -58,7 +58,7 @@ extern const u8 gText_HatchedFromEgg[]; extern const u8 gText_NickHatchPrompt[]; extern u8 sav1_map_get_name(void); -extern s8 sub_8198C58(void); +extern s8 ProcessMenuInputNoWrap_(void); extern void TVShowConvertInternationalString(u8* str1, u8* str2, u8); extern void sub_806A068(u16, u8); extern void fade_screen(u8, u8); @@ -669,7 +669,7 @@ static void CB2_EggHatch_1(void) } break; case 10: - switch (sub_8198C58()) + switch (ProcessMenuInputNoWrap_()) { case 0: GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); diff --git a/src/evolution_scene.c b/src/evolution_scene.c index c17921b74d..2b88fec3a8 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -1168,7 +1168,7 @@ static void Task_TradeEvolutionScene(u8 taskID) } break; case 4: - switch (sub_8198C58()) + switch (ProcessMenuInputNoWrap_()) { case 0: sEvoCursorPos = 0; diff --git a/src/starter_choose.c b/src/starter_choose.c index 82f8f75f6f..2d78af8fb1 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -265,7 +265,7 @@ static void Task_StarterChoose5(u8 taskId) { u8 spriteId; - switch (sub_8198C58()) + switch (ProcessMenuInputNoWrap_()) { case 0: // YES // Return the starter choice and exit. diff --git a/src/tv.c b/src/tv.c index 1605be29c3..205adbf4d4 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1793,7 +1793,7 @@ void EndMassOutbreak(void) gSaveBlock1Ptr->outbreakDaysLeft = 0; } -void sub_80ED888(u16 days) +void UpdateTVShowsPerDay(u16 days) { sub_80ED8B4(days); diff --git a/src/wallclock.c b/src/wallclock.c index ccec36739f..892ef3f05f 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -22,38 +22,38 @@ // static types -#define WALL_CLOCK_TASK_MINUTE_HAND_ANGLE 0 -#define WALL_CLOCK_TASK_HOUR_HAND_ANGLE 1 -#define WALL_CLOCK_TASK_HOUR 2 -#define WALL_CLOCK_TASK_MINUTE 3 -#define WALL_CLOCK_TASK_SET_COMMAND 4 -#define WALL_CLOCK_TASK_12HRCLOCK_AM_PM 5 -#define WALL_CLOCK_TASK_SET_SPEED 6 +#define tMinuteHandAngle data[0] +#define tHourHandAngle data[1] +#define tHours data[2] +#define tMinutes data[3] +#define tMvmtDir data[4] +#define tPeriod data[5] +#define tMvmtSpeed data[6] #define TAG_GFX_WALL_CLOCK_HAND 0x1000 #define TAG_PAL_WALL_CLOCK_HAND 0x1000 // static declarations -static void sub_8134C9C(void); -static void sub_8134CB8(u8 taskId); -static void sub_8134CE8(u8 taskId); -static void sub_8134DC4(u8 taskId); -static void c3_80BF560(u8 taskId); -static void sub_8134EA4(u8 taskId); -static void c2_080111BC(u8 taskId); -static void sub_8134F10(u8 taskId); -static void sub_8134F40(u8 taskId); -static void sub_8134F78(u8 taskId); -static void sub_8134FB0(u8 taskId); -static u16 GetClockHandAngle(u16 a0, u8 command, u8 a2); -static bool32 MoveClockHand(u8 taskId, u8 command); -static void _12HourClockFixAMPM(u8 taskId, u8 command); -static void sub_8135130(u8 taskId); -static void sub_81351AC(struct Sprite *sprite); -static void sub_8135244(struct Sprite *sprite); -static void sub_81352DC(struct Sprite *sprite); -static void sub_8135380(struct Sprite *sprite); +static void WallClockMainCallback(void); +static void Task_SetClock1(u8 taskId); +static void Task_SetClock2(u8 taskId); +static void Task_SetClock3(u8 taskId); +static void Task_SetClock4(u8 taskId); +static void Task_SetClock5(u8 taskId); +static void Task_SetClock6(u8 taskId); +static void Task_ViewClock1(u8 taskId); +static void Task_ViewClock2(u8 taskId); +static void Task_ViewClock3(u8 taskId); +static void Task_ViewClock4(u8 taskId); +static u16 CalcNewMinHandAngle(u16 a0, u8 command, u8 a2); +static bool32 AdvanceClock(u8 taskId, u8 command); +static void UpdateClockPeriod(u8 taskId, u8 command); +static void InitClockWithRtc(u8 taskId); +static void SpriteCB_MinuteHand(struct Sprite *sprite); +static void SpriteCB_HourHand(struct Sprite *sprite); +static void SpriteCB_AMIndicator(struct Sprite *sprite); +static void SpriteCB_PMIndicator(struct Sprite *sprite); // rodata @@ -122,7 +122,7 @@ static const struct SpriteTemplate gUnknown_085B2250 = { gUnknown_085B2248, NULL, gDummySpriteAffineAnimTable, - sub_81351AC + SpriteCB_MinuteHand }; static const struct SpriteTemplate gUnknown_085B2268 = { TAG_GFX_WALL_CLOCK_HAND, @@ -131,7 +131,7 @@ static const struct SpriteTemplate gUnknown_085B2268 = { gUnknown_085B224C, NULL, gDummySpriteAffineAnimTable, - sub_8135244 + SpriteCB_HourHand }; static const struct OamData Unknown_085B2280 = { .y = 0xa0, @@ -159,7 +159,7 @@ static const struct SpriteTemplate gUnknown_085B22A0 = { gUnknown_085B2298, NULL, gDummySpriteAffineAnimTable, - sub_81352DC + SpriteCB_AMIndicator }; static const struct SpriteTemplate gUnknown_085B22B8 = { TAG_GFX_WALL_CLOCK_HAND, @@ -168,7 +168,7 @@ static const struct SpriteTemplate gUnknown_085B22B8 = { gUnknown_085B229C, NULL, gDummySpriteAffineAnimTable, - sub_8135380 + SpriteCB_PMIndicator }; static const s8 sClockHandCoords[][2] = { { 0x00, -0x18}, @@ -535,14 +535,14 @@ static const s8 sClockHandCoords[][2] = { // text -static void sub_81347B4(void) +static void WallClockVblankCallback(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void LoadWallClockGraphics(void) +static void LoadWallClockGraphics(void) { SetVBlankCallback(NULL); SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); @@ -587,12 +587,12 @@ void LoadWallClockGraphics(void) LoadSpritePalettes(gUnknown_085B2218); } -void sub_813498C(void) +static void WallClockInit(void) { BeginNormalPaletteFade(-1, 0, 16, 0, 0); EnableInterrupts(INTR_FLAG_VBLANK); - SetVBlankCallback(sub_81347B4); - SetMainCallback2(sub_8134C9C); + SetVBlankCallback(WallClockVblankCallback); + SetMainCallback2(WallClockMainCallback); SetGpuReg(REG_OFFSET_BLDCNT, 0x0000); SetGpuReg(REG_OFFSET_BLDALPHA, 0x0000); SetGpuReg(REG_OFFSET_BLDY, 0x0000); @@ -609,29 +609,36 @@ void Cb2_StartWallClock(void) LoadWallClockGraphics(); LZ77UnCompVram(gUnknown_08DCC648, (u16 *)BG_SCREEN_ADDR(7)); - taskId = CreateTask(sub_8134CB8, 0); - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] = 10; - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] = 0; - gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] = 0; - gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = 0; - gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED] = 0; - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = 0; - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR_HAND_ANGLE] = 0x12c; + + taskId = CreateTask(Task_SetClock1, 0); + gTasks[taskId].tHours = 10; + gTasks[taskId].tMinutes = 0; + gTasks[taskId].tMvmtDir = 0; + gTasks[taskId].tPeriod = 0; + gTasks[taskId].tMvmtSpeed = 0; + gTasks[taskId].tMinuteHandAngle = 0; + gTasks[taskId].tHourHandAngle = 300; + spriteId = CreateSprite(&gUnknown_085B2250, 0x78, 0x50, 1); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 0; + spriteId = CreateSprite(&gUnknown_085B2268, 0x78, 0x50, 0); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 1; + spriteId = CreateSprite(&gUnknown_085B22A0, 0x78, 0x50, 2); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 45; + spriteId = CreateSprite(&gUnknown_085B22B8, 0x78, 0x50, 2); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 90; - sub_813498C(); + + WallClockInit(); + PrintTextOnWindow(1, 1, gText_Confirm3, 0, 1, 0, NULL); PutWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(2); @@ -641,44 +648,51 @@ void Cb2_ViewWallClock(void) { u8 taskId; u8 spriteId; - u8 r10; - u8 spc; + u8 angle1; + u8 angle2; LoadWallClockGraphics(); LZ77UnCompVram(gUnknown_08DCC908, (u16 *)BG_SCREEN_ADDR(7)); - taskId = CreateTask(sub_8134F10, 0); - sub_8135130(taskId); - if (gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] == 0) + + taskId = CreateTask(Task_ViewClock1, 0); + InitClockWithRtc(taskId); + if (gTasks[taskId].tPeriod == 0) { - r10 = 45; - spc = 90; + angle1 = 45; + angle2 = 90; } else { - r10 = 90; - spc = 135; + angle1 = 90; + angle2 = 135; } + spriteId = CreateSprite(&gUnknown_085B2250, 0x78, 0x50, 1); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 0; + spriteId = CreateSprite(&gUnknown_085B2268, 0x78, 0x50, 0); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; gSprites[spriteId].oam.matrixNum = 1; + spriteId = CreateSprite(&gUnknown_085B22A0, 0x78, 0x50, 2); gSprites[spriteId].data[0] = taskId; - gSprites[spriteId].data[1] = r10; + gSprites[spriteId].data[1] = angle1; + spriteId = CreateSprite(&gUnknown_085B22B8, 0x78, 0x50, 2); gSprites[spriteId].data[0] = taskId; - gSprites[spriteId].data[1] = spc; - sub_813498C(); + gSprites[spriteId].data[1] = angle2; + + WallClockInit(); + PrintTextOnWindow(1, 1, gText_Cancel4, 0, 1, 0, NULL); PutWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(2); } -static void sub_8134C9C(void) +static void WallClockMainCallback(void) { RunTasks(); AnimateSprites(); @@ -687,92 +701,92 @@ static void sub_8134C9C(void) UpdatePaletteFade(); } -static void sub_8134CB8(u8 taskId) +static void Task_SetClock1(u8 taskId) { if (!gPaletteFade.active) { - gTasks[taskId].func = sub_8134CE8; + gTasks[taskId].func = Task_SetClock2; } } -static void sub_8134CE8(u8 taskId) +static void Task_SetClock2(u8 taskId) { - if (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] % 6) + if (gTasks[taskId].tMinuteHandAngle % 6) { - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = GetClockHandAngle(gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE], gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND], gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED]); + gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle(gTasks[taskId].tMinuteHandAngle, gTasks[taskId].tMvmtDir, gTasks[taskId].tMvmtSpeed); } else { - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] * 6; - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR_HAND_ANGLE] = (gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] % 12) * 30 + (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] / 10) * 5; + gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; + gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; if (gMain.newKeys & A_BUTTON) { - gTasks[taskId].func = sub_8134DC4; + gTasks[taskId].func = Task_SetClock3; } else { - gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] = 0; + gTasks[taskId].tMvmtDir = 0; if (gMain.heldKeys & DPAD_LEFT) { - gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] = 1; + gTasks[taskId].tMvmtDir = 1; } if (gMain.heldKeys & DPAD_RIGHT) { - gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] = 2; + gTasks[taskId].tMvmtDir = 2; } - if (gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND] != 0) + if (gTasks[taskId].tMvmtDir != 0) { - if (gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED] <= 0xFE) + if (gTasks[taskId].tMvmtSpeed < 0xFF) { - gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED]++; + gTasks[taskId].tMvmtSpeed++; } - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = GetClockHandAngle(gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE], gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND], gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED]); - MoveClockHand(taskId, gTasks[taskId].data[WALL_CLOCK_TASK_SET_COMMAND]); + gTasks[taskId].tMinuteHandAngle = CalcNewMinHandAngle(gTasks[taskId].tMinuteHandAngle, gTasks[taskId].tMvmtDir, gTasks[taskId].tMvmtSpeed); + AdvanceClock(taskId, gTasks[taskId].tMvmtDir); } else { - gTasks[taskId].data[WALL_CLOCK_TASK_SET_SPEED] = 0; + gTasks[taskId].tMvmtSpeed = 0; } } } } -static void sub_8134DC4(u8 taskId) +static void Task_SetClock3(u8 taskId) { SetWindowBorderStyle(0, FALSE, 0x250, 0x0d); PrintTextOnWindow(0, 1, gText_IsThisTheCorrectTime, 0, 1, 0, NULL); PutWindowTilemap(0); schedule_bg_copy_tilemap_to_vram(0); CreateYesNoMenu(&gUnknown_085B21F4, 0x250, 0x0d, 1); - gTasks[taskId].func = c3_80BF560; + gTasks[taskId].func = Task_SetClock4; } -static void c3_80BF560(u8 taskId) +static void Task_SetClock4(u8 taskId) { - switch (sub_8198C58()) + switch (ProcessMenuInputNoWrap_()) { case 0: PlaySE(SE_SELECT); - gTasks[taskId].func = sub_8134EA4; + gTasks[taskId].func = Task_SetClock5; break; case 1: case -1: PlaySE(SE_SELECT); sub_8198070(0, FALSE); ClearWindowTilemap(0); - gTasks[taskId].func = sub_8134CE8; + gTasks[taskId].func = Task_SetClock2; break; } } -static void sub_8134EA4(u8 taskId) +static void Task_SetClock5(u8 taskId) { - RtcInitLocalTimeOffset(gTasks[taskId].data[WALL_CLOCK_TASK_HOUR], gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE]); + RtcInitLocalTimeOffset(gTasks[taskId].tHours, gTasks[taskId].tMinutes); BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = c2_080111BC; + gTasks[taskId].func = Task_SetClock6; } -static void c2_080111BC(u8 taskId) +static void Task_SetClock6(u8 taskId) { if (!gPaletteFade.active) { @@ -781,30 +795,30 @@ static void c2_080111BC(u8 taskId) } } -static void sub_8134F10(u8 taskId) +static void Task_ViewClock1(u8 taskId) { if (!gPaletteFade.active) { - gTasks[taskId].func = sub_8134F40; + gTasks[taskId].func = Task_ViewClock2; } } -static void sub_8134F40(u8 taskId) +static void Task_ViewClock2(u8 taskId) { - sub_8135130(taskId); + InitClockWithRtc(taskId); if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { - gTasks[taskId].func = sub_8134F78; + gTasks[taskId].func = Task_ViewClock3; } } -static void sub_8134F78(u8 taskId) +static void Task_ViewClock3(u8 taskId) { BeginNormalPaletteFade(-1, 0, 0, 16, 0); - gTasks[taskId].func = sub_8134FB0; + gTasks[taskId].func = Task_ViewClock4; } -static void sub_8134FB0(u8 taskId) +static void Task_ViewClock4(u8 taskId) { if (!gPaletteFade.active) { @@ -812,7 +826,7 @@ static void sub_8134FB0(u8 taskId) } } -static u8 GetClockHandAngleChange(u16 a0) +static u8 CalcMinHandDelta(u16 a0) { if (a0 > 60) { @@ -829,9 +843,9 @@ static u8 GetClockHandAngleChange(u16 a0) return 1; } -static u16 GetClockHandAngle(u16 a0, u8 command, u8 a2) +static u16 CalcNewMinHandAngle(u16 a0, u8 command, u8 a2) { - u8 r1 = GetClockHandAngleChange(a2); + u8 r1 = CalcMinHandDelta(a2); switch (command) { case 1: @@ -846,65 +860,65 @@ static u16 GetClockHandAngle(u16 a0, u8 command, u8 a2) return a0; } -static bool32 MoveClockHand(u8 taskId, u8 command) +static bool32 AdvanceClock(u8 taskId, u8 command) { switch (command) { case 1: - if (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] > 0) + if (gTasks[taskId].tMinutes > 0) { - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE]--; + gTasks[taskId].tMinutes--; } else { - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] = 59; - if (gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] > 0) + gTasks[taskId].tMinutes = 59; + if (gTasks[taskId].tHours > 0) { - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR]--; + gTasks[taskId].tHours--; } else { - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] = 23; + gTasks[taskId].tHours = 23; } - _12HourClockFixAMPM(taskId, command); + UpdateClockPeriod(taskId, command); } break; case 2: - if (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] < 59) + if (gTasks[taskId].tMinutes < 59) { - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE]++; + gTasks[taskId].tMinutes++; } else { - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] = 0; - if (gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] < 23) + gTasks[taskId].tMinutes = 0; + if (gTasks[taskId].tHours < 23) { - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR]++; + gTasks[taskId].tHours++; } else { - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] = 0; + gTasks[taskId].tHours = 0; } - _12HourClockFixAMPM(taskId, command); + UpdateClockPeriod(taskId, command); } break; } return FALSE; } -static void _12HourClockFixAMPM(u8 taskId, u8 command) +static void UpdateClockPeriod(u8 taskId, u8 command) { - u8 hours = gTasks[taskId].data[WALL_CLOCK_TASK_HOUR]; + u8 hours = gTasks[taskId].tHours; switch (command) { case 1: switch (hours) { case 11: - gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = FALSE; + gTasks[taskId].tPeriod = FALSE; break; case 23: - gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = TRUE; + gTasks[taskId].tPeriod = TRUE; break; } break; @@ -912,43 +926,45 @@ static void _12HourClockFixAMPM(u8 taskId, u8 command) switch (hours) { case 0: - gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = FALSE; + gTasks[taskId].tPeriod = FALSE; break; case 12: - gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = TRUE; + gTasks[taskId].tPeriod = TRUE; break; } break; } } -static void sub_8135130(u8 taskId) +static void InitClockWithRtc(u8 taskId) { RtcCalcLocalTime(); - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] = gLocalTime.hours; - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] = gLocalTime.minutes; - gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE] = gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] * 6; - gTasks[taskId].data[WALL_CLOCK_TASK_HOUR_HAND_ANGLE] = (gTasks[taskId].data[WALL_CLOCK_TASK_HOUR] % 12) * 30 + (gTasks[taskId].data[WALL_CLOCK_TASK_MINUTE] / 10) * 5; + gTasks[taskId].tHours = gLocalTime.hours; + gTasks[taskId].tMinutes = gLocalTime.minutes; + gTasks[taskId].tMinuteHandAngle = gTasks[taskId].tMinutes * 6; + gTasks[taskId].tHourHandAngle = (gTasks[taskId].tHours % 12) * 30 + (gTasks[taskId].tMinutes / 10) * 5; if (gLocalTime.hours < 12) { - gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = FALSE; + gTasks[taskId].tPeriod = FALSE; } else { - gTasks[taskId].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM] = TRUE; + gTasks[taskId].tPeriod = TRUE; } } -static void sub_81351AC(struct Sprite *sprite) +static void SpriteCB_MinuteHand(struct Sprite *sprite) { - u16 angle = gTasks[sprite->data[0]].data[WALL_CLOCK_TASK_MINUTE_HAND_ANGLE]; + u16 angle = gTasks[sprite->data[0]].tMinuteHandAngle; s16 sin = Sin2(angle) / 16; s16 cos = Cos2(angle) / 16; u16 xhat; u16 yhat; + SetOamMatrix(0, cos, sin, -sin, cos); xhat = sClockHandCoords[angle][0]; yhat = sClockHandCoords[angle][1]; + if (xhat > 0x80) { xhat |= 0xff00; @@ -961,13 +977,14 @@ static void sub_81351AC(struct Sprite *sprite) sprite->pos2.y = yhat; } -static void sub_8135244(struct Sprite *sprite) +static void SpriteCB_HourHand(struct Sprite *sprite) { - u16 angle = gTasks[sprite->data[0]].data[WALL_CLOCK_TASK_HOUR_HAND_ANGLE]; + u16 angle = gTasks[sprite->data[0]].tHourHandAngle; s16 sin = Sin2(angle) / 16; s16 cos = Cos2(angle) / 16; u16 xhat; u16 yhat; + SetOamMatrix(1, cos, sin, -sin, cos); xhat = sClockHandCoords[angle][0]; yhat = sClockHandCoords[angle][1]; @@ -983,9 +1000,9 @@ static void sub_8135244(struct Sprite *sprite) sprite->pos2.y = yhat; } -static void sub_81352DC(struct Sprite *sprite) +static void SpriteCB_AMIndicator(struct Sprite *sprite) { - if (gTasks[sprite->data[0]].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM]) + if (gTasks[sprite->data[0]].tPeriod) { if (sprite->data[1] >= 60 && sprite->data[1] < 90) { @@ -1011,9 +1028,9 @@ static void sub_81352DC(struct Sprite *sprite) sprite->pos2.y = Sin2(sprite->data[1]) * 30 / 0x1000; } -static void sub_8135380(struct Sprite *sprite) +static void SpriteCB_PMIndicator(struct Sprite *sprite) { - if (gTasks[sprite->data[0]].data[WALL_CLOCK_TASK_12HRCLOCK_AM_PM]) + if (gTasks[sprite->data[0]].tPeriod) { if (sprite->data[1] >= 105 && sprite->data[1] < 135) {