From f54f2c424ffdbdd9b9b3c4758bbbe245833f6436 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 18:00:26 -0500 Subject: LoadWallClockGraphics --- src/wallclock.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/wallclock.c (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c new file mode 100644 index 000000000..bbf8c656a --- /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); +} -- cgit v1.2.3 From 2280614a1467f3823aa3817026289bb2b22cfcaf Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 19:06:01 -0500 Subject: Start decompiling data --- src/wallclock.c | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index bbf8c656a..0c283e871 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); } -- cgit v1.2.3 From 24009ea941abb81068745926ca9960acf927dd4e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 19:49:03 -0500 Subject: through Cb2_StartWallClock and associated data --- src/wallclock.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 133 insertions(+), 1 deletion(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index 0c283e871..2676bbf53 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); +} -- cgit v1.2.3 From efd23cb91b402ff44cf8139490ae37cf6990d1be Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 20:06:29 -0500 Subject: Cb2_ViewWallClock --- src/wallclock.c | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index 2676bbf53..bb6f4cd19 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); +} -- cgit v1.2.3 From 2746967bef9e82df0655391176283c064997cf7b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 20:46:29 -0500 Subject: through sub_8134CE8 --- src/wallclock.c | 429 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 427 insertions(+), 2 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index bb6f4cd19..b6e4096f9 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; + } + } + } +} -- cgit v1.2.3 From b210d5f86b4c949b8e98c9117bc19b62fe0ed352 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:06:46 -0500 Subject: through c3_80BF560 --- src/wallclock.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index b6e4096f9..1b11b3137 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; + } +} -- cgit v1.2.3 From 4a81b595c358b0c136e262057765565dd38a168e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:11:32 -0500 Subject: through c2_080111BC --- src/wallclock.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index 1b11b3137..b14037c43 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); + } +} -- cgit v1.2.3 From 046e5ebf6963bbe5cc3b668c1511f1e1597a6da9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:17:50 -0500 Subject: through sub_8134FB0 --- src/wallclock.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index b14037c43..af343d1fc 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); + } +} -- cgit v1.2.3 From dfa5f24e59e0e49525a1287f37ba7452d9e7c37e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:27:05 -0500 Subject: sub_8134FFC --- src/wallclock.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index af343d1fc..51f6c530d 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; +} -- cgit v1.2.3 From 1b3fcb83f252c83c1d97a630ed381622fed74fd6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:37:42 -0500 Subject: sub_813504C --- src/wallclock.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 4 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index 51f6c530d..e35e6a075 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; +} -- cgit v1.2.3 From 23c7c6a41c2aca624fa6884d121976544cb9ad10 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 21:52:22 -0500 Subject: _12HourClockFixAMPM --- src/wallclock.c | 124 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 81 insertions(+), 43 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index e35e6a075..f43fa413f 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; + } +} -- cgit v1.2.3 From 53a7f188f834cf778eb3de604c73facba13e0c9f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 22:08:12 -0500 Subject: through sub_81351AC --- src/wallclock.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index f43fa413f..c54fd269e 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; +} -- cgit v1.2.3 From 1063bcaab8cdcade543b79f0b97fec36b1ecfa30 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 22:28:13 -0500 Subject: through sub_81352DC --- src/wallclock.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index c54fd269e..6c78d72a1 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; +} -- cgit v1.2.3 From f9c3aeb9194e7c670742dc9b99ca90131c24ddc1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 22:30:20 -0500 Subject: sub_8135380 --- src/wallclock.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index 6c78d72a1..436c498f4 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; +} -- cgit v1.2.3 From 9840be1f0041e697f1aefbdc839a5227b7100112 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 24 Nov 2017 22:43:05 -0500 Subject: Slight cleanup --- src/wallclock.c | 65 ++++++++++++++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 31 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index 436c498f4..5b9e80317 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; } -- cgit v1.2.3 From 6d73bb4b57efb3ff81dcc2aa0d00d5de380add9e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 16 Dec 2017 10:23:05 -0500 Subject: Import function labels from Ruby --- src/wallclock.c | 279 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 148 insertions(+), 131 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index ccec36739..892ef3f05 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) { -- cgit v1.2.3 From 314b96af46db86b74203f67f7bdf2d68ff4d4e68 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 17 Dec 2017 23:45:27 +0100 Subject: static names given s prefix --- src/wallclock.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src/wallclock.c') diff --git a/src/wallclock.c b/src/wallclock.c index 892ef3f05..cd85de230 100644 --- a/src/wallclock.c +++ b/src/wallclock.c @@ -57,8 +57,8 @@ static void SpriteCB_PMIndicator(struct Sprite *sprite); // rodata -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 u8 sUnknown_085B1F58[] = INCBIN_U8("graphics/wallclock/graphics_85b1f58.4bpp.lz"); +static const u16 sUnknown_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 }, @@ -88,7 +88,7 @@ static const struct BgTemplate gUnknown_085B21FC[] = { } }; static const struct CompressedSpriteSheet gUnknown_085B2208 = { - gUnknown_085B1F58, 0x2000, TAG_GFX_WALL_CLOCK_HAND + sUnknown_085B1F58, 0x2000, TAG_GFX_WALL_CLOCK_HAND }; static const u32 filler_85B2210[2] = {}; static const struct SpritePalette gUnknown_085B2218[] = { @@ -571,7 +571,7 @@ static void LoadWallClockGraphics(void) LoadPalette(gUnknown_08DCC03C, 0x00, 0x20); } LoadPalette(GetOverworldTextboxPalettePtr(), 0xe0, 0x20); - LoadPalette(gUnknown_085B21D4, 0xc0, 0x08); + LoadPalette(sUnknown_085B21D4, 0xc0, 0x08); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_085B21FC, 3); InitWindows(gUnknown_085B21DC); @@ -666,27 +666,27 @@ void Cb2_ViewWallClock(void) 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] = angle1; - + spriteId = CreateSprite(&gUnknown_085B22B8, 0x78, 0x50, 2); gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = angle2; - + WallClockInit(); - + PrintTextOnWindow(1, 1, gText_Cancel4, 0, 1, 0, NULL); PutWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(2); -- cgit v1.2.3