From 18e060cd532fbe5678d08dd1a1386ae0763f6fc1 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 31 May 2017 10:12:55 -0400 Subject: Start to decompile use_pokeblock.s --- src/pokenav.c | 17 +---------------- src/use_pokeblock.c | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 16 deletions(-) create mode 100644 src/use_pokeblock.c (limited to 'src') diff --git a/src/pokenav.c b/src/pokenav.c index f50f039f8..4d1ecf421 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -1,24 +1,9 @@ #include "global.h" #include "battle.h" #include "data2.h" +#include "pokenav.h" #include "string_util.h" -struct UnkPokenavStruct_Sub { - /*0x0*/ u16 unk0; - /*0x2*/ u8 filler2[6]; -}; - - -struct UnkPokenavStruct { - /*0x0000*/ u8 filler0000[0xCEE8]; - /*0xCEE8*/ struct UnkPokenavStruct_Sub unkCEE8[78]; - /*0xD158*/ u16 unkD158; - -}; - -extern struct UnkPokenavStruct *gUnknown_083DFEC4; - - void sub_80F700C(u8 *arg0, u16 arg1) { struct Trainer *trainer; u8 *ptr; diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c new file mode 100644 index 000000000..78415cbd7 --- /dev/null +++ b/src/use_pokeblock.c @@ -0,0 +1,26 @@ +// +// Created by Scott Norton on 5/31/17. +// + +#include "global.h" +#include "main.h" +#include "pokemon.h" +#include "pokenav.h" +#include "use_pokeblock.h" + +asm(".text"); + +extern struct UnkPokenavStruct_Sub1 *gUnknown_02039304; +void launch_c3_walk_stairs_and_run_once(void *); +void sub_8136244(void); +void sub_8136294(void); + +void sub_8136130(u32 a0, u32 a1) +{ + gUnknown_02039304 = &gUnknown_083DFEC4->unkD164; + gUnknown_02039304->unk8 = a0; + gUnknown_02039304->unk4 = a1; + gUnknown_083DFEC4->unkD162[0] = 2; + launch_c3_walk_stairs_and_run_once(sub_8136294); + SetMainCallback2(sub_8136244); +} -- cgit v1.2.3 From 508d11da9b1503a8b40f0f34a2c2242d1ef73c7d Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 31 May 2017 10:55:51 -0400 Subject: Continue decompilation of use_pokeblock.s --- src/use_pokeblock.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 70 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 78415cbd7..c45064b80 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -4,18 +4,30 @@ #include "global.h" #include "main.h" +#include "asm.h" +#include "sprite.h" #include "pokemon.h" #include "pokenav.h" +#include "palette.h" #include "use_pokeblock.h" asm(".text"); +void *gUnknown_02039308; +void *gUnknown_0203930C; +u8 gUnknown_02039310; + extern struct UnkPokenavStruct_Sub1 *gUnknown_02039304; -void launch_c3_walk_stairs_and_run_once(void *); +void launch_c3_walk_stairs_and_run_once(void (*const)(void)); +void sub_81361E4(void); +void sub_813622C(void); void sub_8136244(void); void sub_8136294(void); +void sub_81365C8(void); +void sub_81368A4(void); +u8 sub_81370E4(u8); -void sub_8136130(u32 a0, u32 a1) +void sub_8136130(void *a0, void *a1) { gUnknown_02039304 = &gUnknown_083DFEC4->unkD164; gUnknown_02039304->unk8 = a0; @@ -24,3 +36,59 @@ void sub_8136130(u32 a0, u32 a1) launch_c3_walk_stairs_and_run_once(sub_8136294); SetMainCallback2(sub_8136244); } + +void sub_8136174(void) +{ + gUnknown_02039304->unk8 = gUnknown_0203930C; + gUnknown_02039304->unk4 = gUnknown_02039308; + gUnknown_02039310 = sub_81370E4(gUnknown_02039310); + gUnknown_02039304->unk56 = gUnknown_02039310 < 4 ? 0 : 1; + gUnknown_083DFEC4->unkD162[0] = 2; + launch_c3_walk_stairs_and_run_once(sub_8136294); + SetMainCallback2(sub_81361E4); +} + +void sub_81361E4(void) +{ + gUnknown_02039304->unk0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + if (gUnknown_02039304->unk0 == sub_81365C8) + { + REG_DISPCNT = 0; + gUnknown_02039304->unk50 = 0; + SetMainCallback2(sub_813622C); + } +} + +void sub_813622C(void) +{ + sub_81368A4(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8136244(void) +{ + gUnknown_02039304->unk0(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_8136264(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_80F5CDC(6); + sub_8089668(); +} + +void launch_c3_walk_stairs_and_run_once(void (*const func)(void)) +{ + gUnknown_02039304->unk0 = func; + gUnknown_02039304->unk50 = 0; +} -- cgit v1.2.3 From e3025532d0d9ce7ad3f4581dac145f97d77905a1 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 31 May 2017 13:07:23 -0400 Subject: Some more decompilation (giant function nonmatching, need help fixing pokenav struct?) --- src/use_pokeblock.c | 511 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 509 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index c45064b80..351248cbd 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -5,24 +5,30 @@ #include "global.h" #include "main.h" #include "asm.h" -#include "sprite.h" +#include "rom4.h" #include "pokemon.h" #include "pokenav.h" #include "palette.h" +#include "text.h" +#include "menu.h" #include "use_pokeblock.h" -asm(".text"); +asm(".text\n" + ".include \"constants/gba_constants.inc\""); void *gUnknown_02039308; void *gUnknown_0203930C; u8 gUnknown_02039310; extern struct UnkPokenavStruct_Sub1 *gUnknown_02039304; +extern u16 gKeyRepeatStartDelay; + void launch_c3_walk_stairs_and_run_once(void (*const)(void)); void sub_81361E4(void); void sub_813622C(void); void sub_8136244(void); void sub_8136294(void); +void sub_81365A0(void); void sub_81365C8(void); void sub_81368A4(void); u8 sub_81370E4(u8); @@ -92,3 +98,504 @@ void launch_c3_walk_stairs_and_run_once(void (*const func)(void)) gUnknown_02039304->unk0 = func; gUnknown_02039304->unk50 = 0; } + +#ifdef NONMATCHING +void sub_8136294(void) +{ + u32 dma3sad; + bool32 c1LinkRelatedActive; + switch (gUnknown_02039304->unk50) + { + case 0: + c1LinkRelatedActive = is_c1_link_related_active(); + gUnknown_083DFEC4->unk6DAC = c1LinkRelatedActive; + if ((bool8)c1LinkRelatedActive == FALSE) + { + gUnknown_02039304->unk55 = 0; + launch_c3_walk_stairs_and_run_once(sub_81365A0); + gUnknown_02039304->unk50++; + } + break; + case 1: + ResetSpriteData(); + FreeAllSpritePalettes(); + gUnknown_02039304->unk50++; + break; + case 2: + SetVBlankCallback(NULL); + gUnknown_02039304->unk50++; + break; + case 3: + SetUpWindowConfig(&gWindowConfig_81E7080); + gUnknown_02039304->unk50++; + break; + case 4: + MultistepInitMenuWindowBegin(&gWindowConfig_81E7080); + gUnknown_02039304->unk50++; + break; + case 5: + if (MultistepInitMenuWindowContinue()) + { + gUnknown_02039304->unk50++; + } + break; + case 6: + gUnknown_083DFEC4->unk76AA = 0; + gUnknown_083DFEC4->unk87E0 = NULL; + gUnknown_083DFEC4->unk030C = 0x20; + gUnknown_02039304->unk50++; + break; + case 7: + sub_80F2688(); + gUnknown_02039304->unk50++; + // fallthrough + case 8: + if (!sub_80F26BC()) + { + gUnknown_02039304->unk50++; + } + break; + case 9: + sub_80F2C80(1); + gUnknown_02039304->unk50++; + // fallthrough + case 10: + if (!sub_80F2CBC(1)) + { + gUnknown_02039304->unk50++; + } + break; + case 11: + gKeyRepeatStartDelay = 20; + gUnknown_083DFEC4->unk8828 = CalculatePlayerPartyCount(); + gUnknown_083DFEC4->unk9344 = 0; + gUnknown_083DFEC4->unk8768 = NULL; + sub_80F4BD0(); + gUnknown_083DFEC4->unkD160 = 0; + gUnknown_02039304->unk50++; + break; + case 12: + if (!sub_80F1778()) + { + REG_BG2VOFS = 6; + REG_BG3VOFS = 6; + gUnknown_02039304->unk50++; + } + break; + case 13: + sub_80F2E18(0); + gUnknown_083DFEC4->unk8768->unk26 = 0xffd8; + gUnknown_02039304->unk50++; + break; + case 14: + if (!sub_80F170C()) + { + gUnknown_02039304->unk50++; + } + break; + case 15: + sub_80F33A8(); + gUnknown_02039304->unk50++; + break; + case 16: + dma3sad = 0; + REG_DMA3SAD = (vu32)&dma3sad; + REG_DMA3DAD = 0x600F800; + REG_DMA3CNT = 0x85000200; + REG_BG1VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1CNT = 0x1f00; + gUnknown_02039304->unk50++; + break; + case 17: + sub_80F567C(&gUnknown_083DFEC4->unk8ff0, &gUnknown_083DFEC4->unk9004); + sub_80F5B38(); + gUnknown_02039304->unk50++; + break; + case 18: + if (!sub_80F5B50()) + { + gUnknown_02039304->unk50++; + } + break; + case 19: + sub_80F556C(&gUnknown_083DFEC4->unk9004); + gUnknown_02039304->unk50++; + break; + case 20: + sub_80F1934(); + gUnknown_02039304->unk50++; + break; + case 21: + REG_WIN0H = 0xf0; + REG_WIN1H = 0x9b; + REG_WIN0V = 0x3273; + REG_WIN1V = 0x3273; + REG_WININ = 0x3f3f; + REG_WINOUT = 0x1b; + REG_BG0VOFS = 0x28; + REG_DISPCNT = 0x7f40; + // fallthrough + case 22: + gUnknown_02039304->unk55 = 1; + launch_c3_walk_stairs_and_run_once(sub_81365C8); + break; + } +} +#else +__attribute__((naked)) +void sub_8136294(void) +{ + asm(".syntax unified\n" + "\tpush {r4,r5,lr}\n" + "\tsub sp, 0x4\n" + "\tldr r1, _081362B4 @ =gUnknown_02039304\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x50\n" + "\tldrb r0, [r0]\n" + "\tadds r3, r1, 0\n" + "\tcmp r0, 0x16\n" + "\tbls _081362A8\n" + "\tb _0813657A\n" + "_081362A8:\n" + "\tlsls r0, 2\n" + "\tldr r1, _081362B8 @ =_081362BC\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_081362B4: .4byte gUnknown_02039304\n" + "_081362B8: .4byte _081362BC\n" + "\t.align 2, 0\n" + "_081362BC:\n" + "\t.4byte _08136318\n" + "\t.4byte _08136354\n" + "\t.4byte _0813635E\n" + "\t.4byte _08136366\n" + "\t.4byte _08136374\n" + "\t.4byte _08136380\n" + "\t.4byte _0813638C\n" + "\t.4byte _081363B8\n" + "\t.4byte _081363C8\n" + "\t.4byte _081363DC\n" + "\t.4byte _081363EE\n" + "\t.4byte _08136404\n" + "\t.4byte _08136448\n" + "\t.4byte _08136464\n" + "\t.4byte _08136488\n" + "\t.4byte _08136494\n" + "\t.4byte _0813649A\n" + "\t.4byte _081364D8\n" + "\t.4byte _081364FC\n" + "\t.4byte _08136508\n" + "\t.4byte _08136520\n" + "\t.4byte _08136538\n" + "\t.4byte _0813656C\n" + "_08136318:\n" + "\tbl is_c1_link_related_active\n" + "\tldr r1, _08136344 @ =gUnknown_083DFEC4\n" + "\tldr r1, [r1]\n" + "\tldr r2, _08136348 @ =0x00006dac\n" + "\tadds r1, r2\n" + "\tstrb r0, [r1]\n" + "\tlsls r0, 24\n" + "\tlsrs r1, r0, 24\n" + "\tcmp r1, 0\n" + "\tbeq _08136330\n" + "\tb _0813657A\n" + "_08136330:\n" + "\tldr r4, _0813634C @ =gUnknown_02039304\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x55\n" + "\tstrb r1, [r0]\n" + "\tldr r0, _08136350 @ =sub_81365A0\n" + "\tbl launch_c3_walk_stairs_and_run_once\n" + "\tldr r1, [r4]\n" + "\tb _08136528\n" + "\t.align 2, 0\n" + "_08136344: .4byte gUnknown_083DFEC4\n" + "_08136348: .4byte 0x00006dac\n" + "_0813634C: .4byte gUnknown_02039304\n" + "_08136350: .4byte sub_81365A0\n" + "_08136354:\n" + "\tbl ResetSpriteData\n" + "\tbl FreeAllSpritePalettes\n" + "\tb _08136524\n" + "_0813635E:\n" + "\tmovs r0, 0\n" + "\tbl SetVBlankCallback\n" + "\tb _08136524\n" + "_08136366:\n" + "\tldr r0, _08136370 @ =gWindowConfig_81E7080\n" + "\tbl SetUpWindowConfig\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_08136370: .4byte gWindowConfig_81E7080\n" + "_08136374:\n" + "\tldr r0, _0813637C @ =gWindowConfig_81E7080\n" + "\tbl MultistepInitMenuWindowBegin\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_0813637C: .4byte gWindowConfig_81E7080\n" + "_08136380:\n" + "\tbl MultistepInitMenuWindowContinue\n" + "\tcmp r0, 0\n" + "\tbne _0813638A\n" + "\tb _0813657A\n" + "_0813638A:\n" + "\tb _08136524\n" + "_0813638C:\n" + "\tldr r0, _081363AC @ =gUnknown_083DFEC4\n" + "\tldr r1, [r0]\n" + "\tldr r4, _081363B0 @ =0x000076aa\n" + "\tadds r0, r1, r4\n" + "\tmovs r2, 0\n" + "\tstrb r2, [r0]\n" + "\tldr r4, _081363B4 @ =0x000087e0\n" + "\tadds r0, r1, r4\n" + "\tstr r2, [r0]\n" + "\tmovs r0, 0xC3\n" + "\tlsls r0, 2\n" + "\tadds r1, r0\n" + "\tmovs r0, 0x20\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r3]\n" + "\tb _08136528\n" + "\t.align 2, 0\n" + "_081363AC: .4byte gUnknown_083DFEC4\n" + "_081363B0: .4byte 0x000076aa\n" + "_081363B4: .4byte 0x000087e0\n" + "_081363B8:\n" + "\tbl sub_80F2688\n" + "\tldr r0, _081363D8 @ =gUnknown_02039304\n" + "\tldr r1, [r0]\n" + "\tadds r1, 0x50\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "_081363C8:\n" + "\tbl sub_80F26BC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _081363D4\n" + "\tb _0813657A\n" + "_081363D4:\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_081363D8: .4byte gUnknown_02039304\n" + "_081363DC:\n" + "\tmovs r0, 0x1\n" + "\tbl sub_80F2C80\n" + "\tldr r0, _08136400 @ =gUnknown_02039304\n" + "\tldr r1, [r0]\n" + "\tadds r1, 0x50\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "_081363EE:\n" + "\tmovs r0, 0x1\n" + "\tbl sub_80F2CBC\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _081363FC\n" + "\tb _0813657A\n" + "_081363FC:\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_08136400: .4byte gUnknown_02039304\n" + "_08136404:\n" + "\tldr r1, _08136434 @ =gKeyRepeatStartDelay\n" + "\tmovs r0, 0x14\n" + "\tstrh r0, [r1]\n" + "\tbl CalculatePlayerPartyCount\n" + "\tldr r1, _08136438 @ =gUnknown_083DFEC4\n" + "\tldr r4, [r1]\n" + "\tldr r2, _0813643C @ =0x00008828\n" + "\tadds r1, r4, r2\n" + "\tmovs r5, 0\n" + "\tstrb r0, [r1]\n" + "\tldr r1, _08136440 @ =0x00009344\n" + "\tadds r0, r4, r1\n" + "\tstrb r5, [r0]\n" + "\tsubs r2, 0xC0\n" + "\tadds r0, r4, r2\n" + "\tstr r5, [r0]\n" + "\tbl sub_80F4BD0\n" + "\tldr r0, _08136444 @ =0x0000d160\n" + "\tadds r4, r0\n" + "\tstrh r5, [r4]\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_08136434: .4byte gKeyRepeatStartDelay\n" + "_08136438: .4byte gUnknown_083DFEC4\n" + "_0813643C: .4byte 0x00008828\n" + "_08136440: .4byte 0x00009344\n" + "_08136444: .4byte 0x0000d160\n" + "_08136448:\n" + "\tbl sub_80F1778\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08136454\n" + "\tb _0813657A\n" + "_08136454:\n" + "\tldr r0, _08136460 @ =REG_BG2VOFS\n" + "\tmovs r1, 0x6\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x4\n" + "\tstrh r1, [r0]\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_08136460: .4byte REG_BG2VOFS\n" + "_08136464:\n" + "\tmovs r0, 0\n" + "\tbl sub_80F2E18\n" + "\tldr r0, _0813647C @ =gUnknown_083DFEC4\n" + "\tldr r0, [r0]\n" + "\tldr r1, _08136480 @ =0x00008768\n" + "\tadds r0, r1\n" + "\tldr r1, [r0]\n" + "\tldr r0, _08136484 @ =0x0000ffd8\n" + "\tstrh r0, [r1, 0x26]\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_0813647C: .4byte gUnknown_083DFEC4\n" + "_08136480: .4byte 0x00008768\n" + "_08136484: .4byte 0x0000ffd8\n" + "_08136488:\n" + "\tbl sub_80F170C\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0813657A\n" + "\tb _08136524\n" + "_08136494:\n" + "\tbl sub_80F33A8\n" + "\tb _08136524\n" + "_0813649A:\n" + "\tldr r1, _081364C4 @ =0x0600f800\n" + "\tmovs r2, 0\n" + "\tstr r2, [sp]\n" + "\tldr r0, _081364C8 @ =0x040000d4\n" + "\tmov r4, sp\n" + "\tstr r4, [r0]\n" + "\tstr r1, [r0, 0x4]\n" + "\tldr r1, _081364CC @ =0x85000200\n" + "\tstr r1, [r0, 0x8]\n" + "\tldr r0, [r0, 0x8]\n" + "\tldr r0, _081364D0 @ =REG_BG1VOFS\n" + "\tstrh r2, [r0]\n" + "\tsubs r0, 0x2\n" + "\tstrh r2, [r0]\n" + "\tldr r1, _081364D4 @ =REG_BG1CNT\n" + "\tmovs r2, 0xF8\n" + "\tlsls r2, 5\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tldr r1, [r3]\n" + "\tb _08136528\n" + "\t.align 2, 0\n" + "_081364C4: .4byte 0x0600f800\n" + "_081364C8: .4byte 0x040000d4\n" + "_081364CC: .4byte 0x85000200\n" + "_081364D0: .4byte REG_BG1VOFS\n" + "_081364D4: .4byte REG_BG1CNT\n" + "_081364D8:\n" + "\tldr r0, _081364F0 @ =gUnknown_083DFEC4\n" + "\tldr r1, [r0]\n" + "\tldr r4, _081364F4 @ =0x00008ff0\n" + "\tadds r0, r1, r4\n" + "\tldr r2, _081364F8 @ =0x00009004\n" + "\tadds r1, r2\n" + "\tbl sub_80F567C\n" + "\tbl sub_80F5B38\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_081364F0: .4byte gUnknown_083DFEC4\n" + "_081364F4: .4byte 0x00008ff0\n" + "_081364F8: .4byte 0x00009004\n" + "_081364FC:\n" + "\tbl sub_80F5B50\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0813657A\n" + "\tb _08136524\n" + "_08136508:\n" + "\tldr r0, _08136518 @ =gUnknown_083DFEC4\n" + "\tldr r0, [r0]\n" + "\tldr r4, _0813651C @ =0x00009004\n" + "\tadds r0, r4\n" + "\tbl sub_80F556C\n" + "\tb _08136524\n" + "\t.align 2, 0\n" + "_08136518: .4byte gUnknown_083DFEC4\n" + "_0813651C: .4byte 0x00009004\n" + "_08136520:\n" + "\tbl sub_80F1934\n" + "_08136524:\n" + "\tldr r0, _08136534 @ =gUnknown_02039304\n" + "\tldr r1, [r0]\n" + "_08136528:\n" + "\tadds r1, 0x50\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tb _0813657A\n" + "\t.align 2, 0\n" + "_08136534: .4byte gUnknown_02039304\n" + "_08136538:\n" + "\tldr r1, _08136584 @ =REG_WIN0H\n" + "\tmovs r0, 0xF0\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tmovs r0, 0x9B\n" + "\tstrh r0, [r1]\n" + "\tldr r0, _08136588 @ =REG_WIN0V\n" + "\tldr r2, _0813658C @ =0x00003273\n" + "\tadds r1, r2, 0\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x2\n" + "\tstrh r1, [r0]\n" + "\tldr r1, _08136590 @ =REG_WININ\n" + "\tldr r4, _08136594 @ =0x00003f3f\n" + "\tadds r0, r4, 0\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tmovs r0, 0x1B\n" + "\tstrh r0, [r1]\n" + "\tsubs r1, 0x38\n" + "\tmovs r0, 0x28\n" + "\tstrh r0, [r1]\n" + "\tsubs r1, 0x12\n" + "\tldr r2, _08136598 @ =0x00007f40\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "_0813656C:\n" + "\tldr r0, [r3]\n" + "\tadds r0, 0x55\n" + "\tmovs r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r0, _0813659C @ =sub_81365C8\n" + "\tbl launch_c3_walk_stairs_and_run_once\n" + "_0813657A:\n" + "\tadd sp, 0x4\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08136584: .4byte REG_WIN0H\n" + "_08136588: .4byte REG_WIN0V\n" + "_0813658C: .4byte 0x00003273\n" + "_08136590: .4byte REG_WININ\n" + "_08136594: .4byte 0x00003f3f\n" + "_08136598: .4byte 0x00007f40\n" + "_0813659C: .4byte sub_81365C8\n" + ".syntax divided\n"); +} +#endif + +void sub_81365A0(void) +{ + while (!gUnknown_02039304->unk55) + { + sub_8136294(); + } +} -- cgit v1.2.3 From 39efcb2a6d169fba0ff33f1bd25e2947b74881a0 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 31 May 2017 13:37:37 -0400 Subject: sub_81365C8 --- src/use_pokeblock.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 351248cbd..39003a1e3 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -27,9 +27,11 @@ void launch_c3_walk_stairs_and_run_once(void (*const)(void)); void sub_81361E4(void); void sub_813622C(void); void sub_8136244(void); +void sub_8136264(void); void sub_8136294(void); void sub_81365A0(void); void sub_81365C8(void); +void sub_8136638(void); void sub_81368A4(void); u8 sub_81370E4(u8); @@ -599,3 +601,23 @@ void sub_81365A0(void) sub_8136294(); } } + +void sub_81365C8(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + SetVBlankCallback(sub_8136264); + gUnknown_02039304->unk50++; + break; + case 1: + if (!gPaletteFade.active) + { + sub_80F3C94(); + sub_80F3D00(); + launch_c3_walk_stairs_and_run_once(sub_8136638); + } + break; + } +} -- cgit v1.2.3 From 489106198973e1377d0ac823b4decaa395ca7c9e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 22 Jun 2017 22:08:27 -0400 Subject: File modes --- src/daycare.c | 0 src/field_effect.c | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/daycare.c mode change 100755 => 100644 src/field_effect.c (limited to 'src') diff --git a/src/daycare.c b/src/daycare.c old mode 100755 new mode 100644 diff --git a/src/field_effect.c b/src/field_effect.c old mode 100755 new mode 100644 -- cgit v1.2.3 From 9e14c471e6176d3b9eded4815f917b4a2e06d5cc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 22 Jun 2017 22:27:51 -0400 Subject: Start decompiling field_tasks.s --- src/field_special_scene.c | 2 +- src/field_tasks.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/field_tasks.c (limited to 'src') diff --git a/src/field_special_scene.c b/src/field_special_scene.c index c88ac8f65..82a7a13e3 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -229,7 +229,7 @@ void ExecuteTruckSequence(void) CreateTask(Task_HandleTruckSequence, 0xA); } -void EndTruckSequence(void) +void EndTruckSequence(u8 taskId) { if (!FuncIsActiveTask(Task_HandleTruckSequence)) { diff --git a/src/field_tasks.c b/src/field_tasks.c new file mode 100644 index 000000000..0b6cc2de4 --- /dev/null +++ b/src/field_tasks.c @@ -0,0 +1,67 @@ +// +// Created by scott on 6/22/2017. +// + +#include "global.h" +#include "task.h" +#include "main.h" +#include "rom4.h" +#include "clock.h" +#include "script.h" +#include "field_special_scene.h" +#include "secret_base.h" +#include "field_tasks.h" + +void DummyPerStepCallback(u8); +void PerStepCallback_8069F64(u8); +void PerStepCallback_8069AA0(u8); +void PerStepCallback_8069864(u8); +void PerStepCallback_8069DD4(u8); +void PerStepCallback_806A07C(u8); + +void (*const gUnknown_08376364[])(u8) = { + DummyPerStepCallback, + PerStepCallback_8069F64, + PerStepCallback_8069AA0, + PerStepCallback_8069864, + PerStepCallback_8069DD4, + EndTruckSequence, + sub_80BCF1C, + PerStepCallback_806A07C +}; + +void Task_RunPerStepCallback(u8 taskId) +{ + int idx = gTasks[taskId].data[0]; + gUnknown_08376364[idx](taskId); +} + +void RunTimeBasedEvents(s16 *taskData) +{ + switch (*taskData) + { + case 0: + if (gMain.vblankCounter1 & 0x1000) + { + DoTimeBasedEvents(); + (*taskData)++; + } + break; + case 1: + if (!(gMain.vblankCounter1 & 0x1000)) + { + (*taskData)--; + } + break; + } +} + +void Task_RunTimeBasedEvents(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + if (!ScriptContext2_IsEnabled()) + { + RunTimeBasedEvents(taskData); + sub_80540D0(taskData + 1, taskData + 2); + } +} -- cgit v1.2.3 From 29ed9d7aee11527bbe971dd1daa099e04d7e5bc9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 22 Jun 2017 22:59:22 -0400 Subject: Up through ResetFieldTaskArgs --- src/field_specials.c | 0 src/field_tasks.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/field_specials.c mode change 100644 => 100755 src/field_tasks.c (limited to 'src') diff --git a/src/field_specials.c b/src/field_specials.c old mode 100644 new mode 100755 diff --git a/src/field_tasks.c b/src/field_tasks.c old mode 100644 new mode 100755 index 0b6cc2de4..d52bafe1c --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -36,7 +36,7 @@ void Task_RunPerStepCallback(u8 taskId) gUnknown_08376364[idx](taskId); } -void RunTimeBasedEvents(s16 *taskData) +static void RunTimeBasedEvents(s16 *taskData) { switch (*taskData) { @@ -65,3 +65,66 @@ void Task_RunTimeBasedEvents(u8 taskId) sub_80540D0(taskData + 1, taskData + 2); } } + +void Task_MuddySlope(u8); + +void SetUpFieldTasks(void) +{ + if (!FuncIsActiveTask(Task_RunPerStepCallback)) + { + u8 taskId = CreateTask(Task_RunPerStepCallback, 0x50); + gTasks[taskId].data[0] = 0; + } + if (!FuncIsActiveTask(Task_MuddySlope)) + { + CreateTask(Task_MuddySlope, 0x50); + } + if (!FuncIsActiveTask(Task_RunTimeBasedEvents)) + { + CreateTask(Task_RunTimeBasedEvents, 0x50); + } +} + +void ActivatePerStepCallback(u8 callback) +{ + s16 *dataPointer; + s16 *dataStart; + s16 zero; + u8 taskId = FindTaskIdByFunc(Task_RunPerStepCallback); + if (taskId != 0xff) + { + dataStart = gTasks[taskId].data; + zero = 0; + dataPointer = &dataStart[15]; + do + { + *dataPointer-- = zero; + } while ((int)dataPointer >= (int)dataStart); + if (callback >= ARRAY_COUNT(gUnknown_08376364)) + { + *dataStart = 0; + } + else + { + *dataStart = callback; + } + } +} + +void ResetFieldTasksArgs(void) +{ + u8 taskId; + s16 *taskData; + taskId = FindTaskIdByFunc(Task_RunPerStepCallback); + if (taskId != 0xff) + { + taskData = gTasks[taskId].data; + } + taskId = FindTaskIdByFunc(Task_RunTimeBasedEvents); + if (taskId != 0xff) + { + taskData = gTasks[taskId].data; + taskData[1] = 0; + taskData[2] = 0; + } +} -- cgit v1.2.3 From d5db71923c6fb611760e3a21f4f44c7c56142159 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 23 Jun 2017 08:44:18 -0400 Subject: up through sub_80695E0 --- src/field_specials.c | 0 src/field_tasks.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) mode change 100755 => 100644 src/field_specials.c mode change 100755 => 100644 src/field_tasks.c (limited to 'src') diff --git a/src/field_specials.c b/src/field_specials.c old mode 100755 new mode 100644 diff --git a/src/field_tasks.c b/src/field_tasks.c old mode 100755 new mode 100644 index d52bafe1c..39c2146d6 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -10,6 +10,7 @@ #include "script.h" #include "field_special_scene.h" #include "secret_base.h" +#include "metatile_behavior.h" #include "field_tasks.h" void DummyPerStepCallback(u8); @@ -128,3 +129,50 @@ void ResetFieldTasksArgs(void) taskData[2] = 0; } } + +const struct MetatileOffset gUnknown_08376384[][2] = { + {{ 0, 0,0x259}, { 0, 1,0x261}}, + {{ 0, -1,0x259}, { 0, 0,0x261}}, + {{ 0, 0,0x252}, { 1, 0,0x253}}, + {{ -1, 0,0x252}, { 0, 0,0x253}} +}; + +const struct MetatileOffset gUnknown_083763A4[][2] = { + {{ 0, 0,0x25A}, { 0, 1,0x262}}, + {{ 0, -1,0x25A}, { 0, 0,0x262}}, + {{ 0, 0,0x254}, { 1, 0,0x255}}, + {{ -1, 0,0x254}, { 0, 0,0x255}} +}; + +const struct MetatileOffset gUnknown_083763C4[][2] = { + {{ 0, 0,0x258}, { 0, 1,0x260}}, + {{ 0, -1,0x258}, { 0, 0,0x260}}, + {{ 0, 0,0x250}, { 1, 0,0x251}}, + {{ -1, 0,0x250}, { 0, 0,0x251}} +}; + +void DummyPerStepCallback(u8 taskId) {} + +const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8 a1) +{ + if (sub_80576A0(a1)) + { + return a0[0]; + } + else if (sub_80576B4(a1)) + { + return a0[1]; + } + else if (sub_80576C8(a1)) + { + return a0[2]; + } + else if (sub_80576DC(a1)) + { + return a0[3]; + } + else + { + return NULL; + } +} -- cgit v1.2.3 From 637774362fdbedd8a54b651e6196a1e1a4f4c093 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 25 Jun 2017 20:12:08 -0400 Subject: start decompiling sound_check_menu.c --- src/sound_check_menu.c | 622 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 622 insertions(+) create mode 100755 src/sound_check_menu.c (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c new file mode 100755 index 000000000..75cf48798 --- /dev/null +++ b/src/sound_check_menu.c @@ -0,0 +1,622 @@ +#include "global.h" +#include "sprite.h" +#include "palette.h" +#include "task.h" +#include "m4a.h" +#include "main.h" +#include "text.h" +#include "menu.h" +#include "songs.h" + +// local task defines +#define UNK_DATA0 data[0] +#define BGM_INDEX data[1] +#define SE_INDEX data[2] +#define UNK_DATA3 data[3] + +extern void sub_80BA6B8(u8); +extern void sub_80BA700(u16, u8, u8); +extern void sub_80BA79C(u8 *, u8, u8); +extern void sub_80BA65C(u8); +extern void sub_80BA800(u8); +extern void sub_80BAF84(u8); +extern void sub_80BB25C(u8); +extern void sub_80BA68C(u8); + +extern u8 gUnknown_020387B0; + +extern u8 *gBGMNames[]; +extern u8 *gSENames[]; + +extern u8 gDebugText_SoundCheckJap[]; +extern u8 gDebugText_BGM[]; +extern u8 gDebugText_SE[]; +extern u8 gDebugText_ABDesc[]; +extern u8 gDebugText_UpDown[]; +extern u8 gDebugText_DriverTest[]; + +void sub_80BA258(u8); +void sub_80BA384(u8); + +void sub_80BA0A8(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80BA0C0(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + + if(gUnknown_020387B0 != 0) + { + m4aSoundMain(); + m4aSoundMain(); + m4aSoundMain(); + } +} + +// unused +void CB2_StartSoundCheckMenu(void) +{ + u8 taskId; + + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + ResetPaletteFade(); + ResetTasks(); + ResetSpriteData(); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_WININ = 0x1111; + REG_WINOUT = 0x31; + REG_BLDCNT = 0xE1; + REG_BLDALPHA = 0; + REG_BLDY = 7; + REG_IE = 1; // could be a typo of REG_IME + REG_IE |= 1; + REG_DISPSTAT |= 8; + SetVBlankCallback(sub_80BA0C0); + SetMainCallback2(sub_80BA0A8); + REG_DISPCNT = 0x7140; + taskId = CreateTask(sub_80BA258, 0); + TASK.UNK_DATA0 = 0; + TASK.BGM_INDEX = 0; + TASK.SE_INDEX = 0; + TASK.UNK_DATA3 = 0; + gUnknown_020387B0 = 0; + TASK.UNK_DATA3 = 0; // why? + m4aSoundInit(); +} + +// Task_InitSoundCheckMenu +void sub_80BA258(u8 taskId) +{ + u8 soundcheckStr[9]; + u8 bgmStr[4]; + u8 seStr[4]; + u8 abDescStr[13]; + u8 upDownStr[12]; + u8 driverStr[14]; + + // these probably used size of the strings themselves, but they are not in the C file yet. + memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof soundcheckStr); + memcpy(bgmStr, gDebugText_BGM, sizeof bgmStr); + memcpy(seStr, gDebugText_SE, sizeof seStr); + memcpy(abDescStr, gDebugText_ABDesc, sizeof abDescStr); + memcpy(upDownStr, gDebugText_UpDown, sizeof upDownStr); + memcpy(driverStr, gDebugText_DriverTest, sizeof driverStr); + + if(!gPaletteFade.active) + { + MenuDrawTextWindow(0x2, 0, 0x1B, 0x3); + MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA); + MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11); + MenuPrint(soundcheckStr, 4, 1); + MenuPrint(abDescStr, 14, 1); + MenuPrint(bgmStr, 4, 6); + MenuPrint(upDownStr, 14, 6); + MenuPrint(seStr, 4, 13); + MenuPrint(upDownStr, 14, 13); + MenuPrint(driverStr, 14, 18); + TASK.FUNC = sub_80BA384; + REG_WIN0H = 0x11DF; + REG_WIN0V = 0x11F; + } +} + +void sub_80BA384(u8 taskId) +{ + sub_80BA6B8(TASK.UNK_DATA0); + sub_80BA700(TASK.BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index + sub_80BA79C(gBGMNames[TASK.BGM_INDEX], 11, 8); + sub_80BA700(TASK.SE_INDEX, 7, 15); + sub_80BA79C(gSENames[TASK.SE_INDEX], 11, 15); + TASK.FUNC = sub_80BA65C; +} + +#ifdef NONMATCHING +bool8 sub_80BA400(u8 taskId) +{ + if(gMain.newKeys & R_BUTTON) // driver test + { + gTasks[taskId].func = sub_80BA800; + return FALSE; + } + if(gMain.newKeys & L_BUTTON) + { + gTasks[taskId].func = sub_80BAF84; + return FALSE; + } + if(gMain.newKeys & START_BUTTON) + { + gTasks[taskId].func = sub_80BB25C; + return FALSE; + } + if(gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match. + { + if(gTasks[taskId].data[0] != 0) // is playing? + { + if(gTasks[taskId].data[4] != 0) + { + if(gTasks[taskId].data[2] != 0) // why are you insiting on a non signed halfword? + { + m4aSongNumStop(gTasks[taskId].data[4]); + } + else + { + m4aSongNumStop(gTasks[taskId].data[2]); + gTasks[taskId].data[4] = gTasks[taskId].data[2]; + return FALSE; + } + } + else if(gTasks[taskId].data[2] == 0) // _080BA4BA + { + return FALSE; + } + // _080BA4C4 + m4aSongNumStart(gTasks[taskId].data[2]); + gTasks[taskId].data[4] = gTasks[taskId].data[2]; + } + else // _080BA4D0 + { + if(gTasks[taskId].data[3] != 0) + { + if(gTasks[taskId].data[1] != 0) + { + m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP); + } + else // _080BA500 + { + m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP); + gTasks[taskId].data[3] = gTasks[taskId].data[1]; + return FALSE; + } + } + else if(gTasks[taskId].data[1] == 0) // _080BA514 + return FALSE; + + m4aSongNumStart(gTasks[taskId].data[1] + BGM_STOP); + gTasks[taskId].data[3] = gTasks[taskId].data[1]; + } + return FALSE; + } + if(gMain.newKeys & B_BUTTON) + { + m4aSongNumStart(5); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = sub_80BA68C; + return FALSE; + } + if(gMain.newAndRepeatedKeys & DPAD_UP) + { + gTasks[taskId].data[8] ^= A_BUTTON; // huh? + return TRUE; + } + if(gMain.newAndRepeatedKeys & DPAD_DOWN) + { + gTasks[taskId].data[8] ^= A_BUTTON; // huh? + return TRUE; + } + else + { + u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT; + if(keys) + { + if(gTasks[taskId].data[0] != 0) + { + if(gTasks[taskId].data[2] > 0) + { + gTasks[taskId].data[2]--; + } + else + { + gTasks[taskId].data[2] = 0xF7; + } + } + else if(gTasks[taskId].data[1] > 0) + { + gTasks[taskId].data[1]--; + } + else + { + gTasks[taskId].data[1] = 0x75; + } + return TRUE; + } + if(gMain.newAndRepeatedKeys & DPAD_LEFT) + { + if(gTasks[taskId].data[0] != 0) + { + if(gTasks[taskId].data[2] < 0xF7) + { + gTasks[taskId].data[2]++; + } + else + { + gTasks[taskId].data[2] = keys; // ?? + } + } + else if(gTasks[taskId].data[1] < 0x75) + { + gTasks[taskId].data[1]++; + return TRUE; + } + else + { + gTasks[taskId].data[1] = gTasks[taskId].data[2]; + return TRUE; + } + return TRUE; + } + if(gMain.heldKeys & SELECT_BUTTON) + { + gUnknown_020387B0 = A_BUTTON; + return FALSE; + } + else + { + gUnknown_020387B0 = (gMain.heldKeys & SELECT_BUTTON); + return FALSE; + } + } +} +#else +__attribute__((naked)) +bool8 sub_80BA400(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x4\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + ldr r2, _080BA428 @ =gMain\n\ + ldrh r1, [r2, 0x2E]\n\ + movs r0, 0x80\n\ + lsls r0, 1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA434\n\ + ldr r0, _080BA42C @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _080BA430 @ =sub_80BA800\n\ + str r0, [r1]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA428: .4byte gMain\n\ +_080BA42C: .4byte gTasks\n\ +_080BA430: .4byte sub_80BA800\n\ +_080BA434:\n\ + movs r0, 0x80\n\ + lsls r0, 2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA458\n\ + ldr r0, _080BA450 @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _080BA454 @ =sub_80BAF84\n\ + str r0, [r1]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA450: .4byte gTasks\n\ +_080BA454: .4byte sub_80BAF84\n\ +_080BA458:\n\ + movs r0, 0x8\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA478\n\ + ldr r0, _080BA470 @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldr r0, _080BA474 @ =sub_80BB25C\n\ + str r0, [r1]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA470: .4byte gTasks\n\ +_080BA474: .4byte sub_80BB25C\n\ +_080BA478:\n\ + movs r6, 0x1\n\ + movs r5, 0x1\n\ + ands r5, r1\n\ + cmp r5, 0\n\ + beq _080BA538\n\ + ldr r0, _080BA4AC @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r5, r1, r0\n\ + movs r1, 0x8\n\ + ldrsh r0, [r5, r1]\n\ + cmp r0, 0\n\ + beq _080BA4D0\n\ + movs r2, 0x10\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0\n\ + beq _080BA4BA\n\ + movs r3, 0xC\n\ + ldrsh r4, [r5, r3]\n\ + cmp r4, 0\n\ + beq _080BA4B0\n\ + ldrh r0, [r5, 0x10]\n\ + bl m4aSongNumStop\n\ + b _080BA4C4\n\ + .align 2, 0\n\ +_080BA4AC: .4byte gTasks\n\ +_080BA4B0:\n\ + ldrh r0, [r5, 0x10]\n\ + bl m4aSongNumStop\n\ + strh r4, [r5, 0x10]\n\ + b _080BA64C\n\ +_080BA4BA:\n\ + movs r4, 0xC\n\ + ldrsh r0, [r5, r4]\n\ + cmp r0, 0\n\ + bne _080BA4C4\n\ + b _080BA64C\n\ +_080BA4C4:\n\ + ldrh r0, [r5, 0xC]\n\ + bl m4aSongNumStart\n\ + ldrh r0, [r5, 0xC]\n\ + strh r0, [r5, 0x10]\n\ + b _080BA64C\n\ +_080BA4D0:\n\ + ldrh r1, [r5, 0xE]\n\ + movs r2, 0xE\n\ + ldrsh r0, [r5, r2]\n\ + cmp r0, 0\n\ + beq _080BA514\n\ + movs r3, 0xA\n\ + ldrsh r4, [r5, r3]\n\ + cmp r4, 0\n\ + beq _080BA500\n\ + ldr r0, _080BA4FC @ =0x0000015d\n\ + adds r4, r0, 0\n\ + adds r0, r1, r4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl m4aSongNumStop\n\ + ldrh r1, [r5, 0xA]\n\ + adds r4, r1\n\ + lsls r4, 16\n\ + lsrs r4, 16\n\ + adds r0, r4, 0\n\ + b _080BA528\n\ + .align 2, 0\n\ +_080BA4FC: .4byte 0x0000015d\n\ +_080BA500:\n\ + ldr r2, _080BA510 @ =0x0000015d\n\ + adds r0, r1, r2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl m4aSongNumStop\n\ + strh r4, [r5, 0xE]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA510: .4byte 0x0000015d\n\ +_080BA514:\n\ + ldrh r1, [r5, 0xA]\n\ + movs r3, 0xA\n\ + ldrsh r0, [r5, r3]\n\ + cmp r0, 0\n\ + bne _080BA520\n\ + b _080BA64C\n\ +_080BA520:\n\ + ldr r4, _080BA534 @ =0x0000015d\n\ + adds r0, r1, r4\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ +_080BA528:\n\ + bl m4aSongNumStart\n\ + ldrh r0, [r5, 0xA]\n\ + strh r0, [r5, 0xE]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA534: .4byte 0x0000015d\n\ +_080BA538:\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA570\n\ + movs r0, 0x5\n\ + bl m4aSongNumStart\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + str r5, [sp]\n\ + movs r1, 0\n\ + movs r2, 0\n\ + movs r3, 0x10\n\ + bl BeginNormalPaletteFade\n\ + ldr r1, _080BA568 @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _080BA56C @ =sub_80BA68C\n\ + str r1, [r0]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA568: .4byte gTasks\n\ +_080BA56C: .4byte sub_80BA68C\n\ +_080BA570:\n\ + ldrh r1, [r2, 0x30]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080BA582\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA59C\n\ +_080BA582:\n\ + ldr r0, _080BA598 @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + ldrh r0, [r1, 0x8]\n\ + eors r0, r6\n\ + strh r0, [r1, 0x8]\n\ +_080BA592:\n\ + movs r0, 0x1\n\ + b _080BA64E\n\ + .align 2, 0\n\ +_080BA598: .4byte gTasks\n\ +_080BA59C:\n\ + movs r0, 0x10\n\ + ands r0, r1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, 0\n\ + beq _080BA5EA\n\ + ldr r0, _080BA5CC @ =gTasks\n\ + lsls r1, r4, 2\n\ + adds r1, r4\n\ + lsls r1, 3\n\ + adds r1, r0\n\ + movs r2, 0x8\n\ + ldrsh r0, [r1, r2]\n\ + cmp r0, 0\n\ + beq _080BA5D6\n\ + ldrh r2, [r1, 0xC]\n\ + movs r3, 0xC\n\ + ldrsh r0, [r1, r3]\n\ + cmp r0, 0\n\ + ble _080BA5D0\n\ + subs r0, r2, 0x1\n\ + strh r0, [r1, 0xC]\n\ + b _080BA592\n\ + .align 2, 0\n\ +_080BA5CC: .4byte gTasks\n\ +_080BA5D0:\n\ + movs r0, 0xF7\n\ + strh r0, [r1, 0xC]\n\ + b _080BA592\n\ +_080BA5D6:\n\ + ldrh r2, [r1, 0xA]\n\ + movs r4, 0xA\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0\n\ + ble _080BA5E4\n\ + subs r0, r2, 0x1\n\ + b _080BA5E6\n\ +_080BA5E4:\n\ + movs r0, 0x75\n\ +_080BA5E6:\n\ + strh r0, [r1, 0xA]\n\ + b _080BA592\n\ +_080BA5EA:\n\ + movs r0, 0x20\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080BA630\n\ + ldr r1, _080BA614 @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r1, r0, r1\n\ + movs r0, 0x8\n\ + ldrsh r2, [r1, r0]\n\ + cmp r2, 0\n\ + beq _080BA61C\n\ + ldrh r2, [r1, 0xC]\n\ + movs r4, 0xC\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0xF6\n\ + bgt _080BA618\n\ + adds r0, r2, 0x1\n\ + strh r0, [r1, 0xC]\n\ + b _080BA592\n\ + .align 2, 0\n\ +_080BA614: .4byte gTasks\n\ +_080BA618:\n\ + strh r3, [r1, 0xC]\n\ + b _080BA592\n\ +_080BA61C:\n\ + ldrh r3, [r1, 0xA]\n\ + movs r4, 0xA\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0x74\n\ + bgt _080BA62C\n\ + adds r0, r3, 0x1\n\ + strh r0, [r1, 0xA]\n\ + b _080BA592\n\ +_080BA62C:\n\ + strh r2, [r1, 0xA]\n\ + b _080BA592\n\ +_080BA630:\n\ + ldrh r1, [r2, 0x2C]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + cmp r1, 0\n\ + beq _080BA648\n\ + ldr r0, _080BA644 @ =gUnknown_020387B0\n\ + strb r6, [r0]\n\ + b _080BA64C\n\ + .align 2, 0\n\ +_080BA644: .4byte gUnknown_020387B0\n\ +_080BA648:\n\ + ldr r0, _080BA658 @ =gUnknown_020387B0\n\ + strb r1, [r0]\n\ +_080BA64C:\n\ + movs r0, 0\n\ +_080BA64E:\n\ + add sp, 0x4\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080BA658: .4byte gUnknown_020387B0\n\ + .syntax divided"); +} +#endif -- cgit v1.2.3 From 01890a2020676ad2567f21d9f11deeb2e3a0e2db Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 08:24:28 -0400 Subject: Nonmatching sub_8069638 and callers --- src/field_tasks.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) mode change 100644 => 100755 src/field_tasks.c (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c old mode 100644 new mode 100755 index 39c2146d6..11f67c330 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -11,6 +11,8 @@ #include "field_special_scene.h" #include "secret_base.h" #include "metatile_behavior.h" +#include "fieldmap.h" +#include "field_camera.h" #include "field_tasks.h" void DummyPerStepCallback(u8); @@ -176,3 +178,108 @@ const struct MetatileOffset *sub_80695E0(const struct MetatileOffset a0[][2], s8 return NULL; } } + +#ifdef NONMATCHING +void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag) +{ + const struct MetatileOffset *offsetData = sub_80695E0(offsets, MapGridGetMetatileBehaviorAt(x, y)); + const struct MetatileOffset *offsetData2 = offsetData; + if (offsetData != NULL) + { + MapGridSetMetatileIdAt(x + offsetData[0].x, y + offsetData[0].y, offsetData[0].tileId); + if (flag) + { + CurrentMapDrawMetatileAt(x + offsetData[0].x, y + offsetData[0].y); + } + MapGridSetMetatileIdAt(x + offsetData2[1].x, y + offsetData2[1].y, offsetData2[1].tileId); + if (flag) + { + CurrentMapDrawMetatileAt(x + offsetData2[1].x, y + offsetData2[1].y); + } + } +} +#else +__attribute__((naked)) +void sub_8069638(const struct MetatileOffset offsets[][2], s16 x, s16 y, bool32 flag) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tadds r5, r0, 0\n" + "\tmov r8, r3\n" + "\tlsls r1, 16\n" + "\tasrs r6, r1, 16\n" + "\tlsls r2, 16\n" + "\tasrs r7, r2, 16\n" + "\tadds r0, r6, 0\n" + "\tadds r1, r7, 0\n" + "\tbl MapGridGetMetatileBehaviorAt\n" + "\tadds r1, r0, 0\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tadds r0, r5, 0\n" + "\tbl sub_80695E0\n" + "\tadds r4, r0, 0\n" + "\tadds r5, r4, 0\n" + "\tcmp r4, 0\n" + "\tbeq _080696B6\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r4, r0]\n" + "\tadds r0, r6, r0\n" + "\tmovs r1, 0x1\n" + "\tldrsb r1, [r4, r1]\n" + "\tadds r1, r7, r1\n" + "\tldrh r2, [r4, 0x2]\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tmov r0, r8\n" + "\tcmp r0, 0\n" + "\tbeq _0806968E\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r4, r0]\n" + "\tadds r0, r6, r0\n" + "\tmovs r1, 0x1\n" + "\tldrsb r1, [r4, r1]\n" + "\tadds r1, r7, r1\n" + "\tbl CurrentMapDrawMetatileAt\n" + "_0806968E:\n" + "\tmovs r0, 0x4\n" + "\tldrsb r0, [r5, r0]\n" + "\tadds r0, r6, r0\n" + "\tmovs r1, 0x5\n" + "\tldrsb r1, [r5, r1]\n" + "\tadds r1, r7, r1\n" + "\tldrh r2, [r5, 0x6]\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tmov r0, r8\n" + "\tcmp r0, 0\n" + "\tbeq _080696B6\n" + "\tmovs r0, 0x4\n" + "\tldrsb r0, [r5, r0]\n" + "\tadds r0, r6, r0\n" + "\tmovs r1, 0x5\n" + "\tldrsb r1, [r5, r1]\n" + "\tadds r1, r7, r1\n" + "\tbl CurrentMapDrawMetatileAt\n" + "_080696B6:\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif + +void sub_80696C0(s16 x, s16 y, bool32 flag) +{ + sub_8069638(gUnknown_08376384, x, y, flag); +} + +void sub_80696E4(s16 x, s16 y, bool32 flag) +{ + sub_8069638(gUnknown_083763A4, x, y, flag); +} + +void sub_8069708(s16 x, s16 y, bool32 flag) +{ + sub_8069638(gUnknown_083763C4, x, y, flag); +} -- cgit v1.2.3 From d7ab13d3a9b969b0267786e566595689338ae7c4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 08:35:22 -0400 Subject: sub_806972C --- src/field_tasks.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 11f67c330..6682d01c3 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -283,3 +283,37 @@ void sub_8069708(s16 x, s16 y, bool32 flag) { sub_8069638(gUnknown_083763C4, x, y, flag); } + +bool8 sub_806972C(s16 x1, s16 y1, s16 x2, s16 y2) +{ + s8 metatileBehavior = MapGridGetMetatileBehaviorAt(x2, y2); + if (sub_80576A0(metatileBehavior)) + { + if (y1 > y2) + { + return FALSE; + } + } + else if (sub_80576B4(metatileBehavior)) + { + if (y1 < y2) + { + return FALSE; + } + } + else if (sub_80576C8(metatileBehavior)) + { + if (x1 > x2) + { + return FALSE; + } + } + else if (sub_80576DC(metatileBehavior)) + { + if (x1 < x2) + { + return FALSE; + } + } + return TRUE; +} -- cgit v1.2.3 From 155007d14989b2a798a15c6be8a00bb926d2c9b7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 08:37:30 -0400 Subject: sub_80697C8 --- src/field_tasks.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 6682d01c3..34cbc9796 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -317,3 +317,37 @@ bool8 sub_806972C(s16 x1, s16 y1, s16 x2, s16 y2) } return TRUE; } + +bool8 sub_80697C8(s16 x1, s16 y1, s16 x2, s16 y2) +{ + s8 metatileBehavior = MapGridGetMetatileBehaviorAt(x1, y1); + if (sub_80576A0(metatileBehavior)) + { + if (y1 < y2) + { + return FALSE; + } + } + else if (sub_80576B4(metatileBehavior)) + { + if (y1 > y2) + { + return FALSE; + } + } + else if (sub_80576C8(metatileBehavior)) + { + if (x1 < x2) + { + return FALSE; + } + } + else if (sub_80576DC(metatileBehavior)) + { + if (x1 > x2) + { + return FALSE; + } + } + return TRUE; +} -- cgit v1.2.3 From 830b3a9e1f58133e4b4d1fa6a9e65600bccd4b86 Mon Sep 17 00:00:00 2001 From: scnorton Date: Mon, 26 Jun 2017 18:11:50 -0400 Subject: Nonmatching WIP PerStepCallback_8069864 --- src/field_tasks.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 34cbc9796..407fa7776 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -12,7 +12,10 @@ #include "secret_base.h" #include "metatile_behavior.h" #include "fieldmap.h" +#include "field_player_avatar.h" #include "field_camera.h" +#include "songs.h" +#include "sound.h" #include "field_tasks.h" void DummyPerStepCallback(u8); @@ -351,3 +354,60 @@ bool8 sub_80697C8(s16 x1, s16 y1, s16 x2, s16 y2) } return TRUE; } + +void PerStepCallback_8069864(u8 taskId) +{ + s16 x, y; + s16 *data = gTasks[taskId].data; + PlayerGetDestCoords(&x, &y); + switch (data[1]) + { + case 0: + data[2] = x; + data[3] = y; + sub_80696E4(x, y, TRUE); + data[1] = 1; + break; + case 1: + if (x != data[2] || y != data[3]) + { + if (sub_806972C(x, y, data[2], data[3])) + { + sub_80696C0(data[2], data[3], TRUE); + sub_8069708(data[2], data[3], FALSE); + data[4] = data[2]; + data[5] = data[3]; + data[1] = 2; + data[6] = 8; + } + else + { + data[4] = -1; + data[5] = -1; + } + if (sub_80697C8(x, y, data[2], data[3])) + { + sub_80696C0(x, y, TRUE); + data[1] = 2; + data[6] = 8; + } + data[2] = x; + data[3] = y; + if (MetatileBehavior_IsPacifidlogLog(MapGridGetMetatileBehaviorAt(x, y))) + { + PlaySE(SE_MIZU); + } + break; + } + case 2: + if ((--data[6]) == 0) + { + sub_80696E4(x, y, TRUE); + if (data[4] != -1 && data[5] != -1) + { + sub_8069708(data[4], data[5], TRUE); + } + data[1] = 1; + } + } +} -- cgit v1.2.3 From 826d62b737f8012dbd5865098ac84c94cedd5139 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 19:50:49 -0400 Subject: Matching PerStepCallback_8069864 --- src/field_tasks.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 407fa7776..a266f8c8b 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -287,7 +287,7 @@ void sub_8069708(s16 x, s16 y, bool32 flag) sub_8069638(gUnknown_083763C4, x, y, flag); } -bool8 sub_806972C(s16 x1, s16 y1, s16 x2, s16 y2) +bool32 sub_806972C(s16 x1, s16 y1, s16 x2, s16 y2) { s8 metatileBehavior = MapGridGetMetatileBehaviorAt(x2, y2); if (sub_80576A0(metatileBehavior)) @@ -321,7 +321,7 @@ bool8 sub_806972C(s16 x1, s16 y1, s16 x2, s16 y2) return TRUE; } -bool8 sub_80697C8(s16 x1, s16 y1, s16 x2, s16 y2) +bool32 sub_80697C8(s16 x1, s16 y1, s16 x2, s16 y2) { s8 metatileBehavior = MapGridGetMetatileBehaviorAt(x1, y1); if (sub_80576A0(metatileBehavior)) @@ -357,8 +357,9 @@ bool8 sub_80697C8(s16 x1, s16 y1, s16 x2, s16 y2) void PerStepCallback_8069864(u8 taskId) { + s16 *data; s16 x, y; - s16 *data = gTasks[taskId].data; + data = gTasks[taskId].data; PlayerGetDestCoords(&x, &y); switch (data[1]) { @@ -397,8 +398,8 @@ void PerStepCallback_8069864(u8 taskId) { PlaySE(SE_MIZU); } - break; } + break; case 2: if ((--data[6]) == 0) { @@ -409,5 +410,6 @@ void PerStepCallback_8069864(u8 taskId) } data[1] = 1; } + break; } } -- cgit v1.2.3 From c739404ef0f50f87f580d8454ae9c32325ce83e4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 20:35:57 -0400 Subject: Through PerStepCallback_8069AA0 --- src/field_tasks.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index a266f8c8b..5ccd3fa14 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -413,3 +413,125 @@ void PerStepCallback_8069864(u8 taskId) break; } } + +void sub_80699D8(s16 x, s16 y) +{ + u8 z = PlayerGetZCoord(); + if (!(z & 0x01)) + { + switch (MapGridGetMetatileIdAt(x, y)) + { + case 0x24e: + MapGridSetMetatileIdAt(x, y, 0x24f); + break; + case 0x256: + MapGridSetMetatileIdAt(x, y, 0x257); + break; + } + } +} + +void sub_8069A3C(s16 x, s16 y) +{ + u8 z = PlayerGetZCoord(); + if (!(z & 0x01)) + { + switch (MapGridGetMetatileIdAt(x, y)) + { + case 0x24f: + MapGridSetMetatileIdAt(x, y, 0x24e); + break; + case 0x257: + MapGridSetMetatileIdAt(x, y, 0x256); + break; + } + } +} + +void PerStepCallback_8069AA0(u8 taskId) +{ + bool8 isFortreeBridgeCur; + bool8 isFortreeBridgePrev; + u8 z, flag; + s16 x, y, x2, y2; + s16 *data = gTasks[taskId].data; + PlayerGetDestCoords(&x, &y); + switch (data[1]) + { + default: + break; + case 0: + data[2] = x; + data[3] = y; + if (MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y))) + { + sub_80699D8(x, y); + CurrentMapDrawMetatileAt(x, y); + } + data[1] = 1; + break; + case 1: + x2 = data[2]; + y2 = data[3]; + if (x == x2 && y == y2) + { + break; + } + isFortreeBridgeCur = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x, y)); + isFortreeBridgePrev = MetatileBehavior_IsFortreeBridge(MapGridGetMetatileBehaviorAt(x2, y2)); + z = PlayerGetZCoord(); + flag = 0; + if ((u8)(z & 1) == 0) + { + flag = 1; + } + if (flag && (isFortreeBridgeCur == 1 || isFortreeBridgePrev == 1)) + { + PlaySE(SE_HASHI); + } + if (isFortreeBridgePrev) + { + sub_8069A3C(x2, y2); + CurrentMapDrawMetatileAt(x2, y2); + sub_80699D8(x, y); + CurrentMapDrawMetatileAt(x, y); + } + data[4] = x2; + data[5] = y2; + data[2] = x; + data[3] = y; + if (!isFortreeBridgePrev) + { + break; + } + data[6] = 16; + data[1] = 2; + // fallthrough + case 2: + data[6]--; + x2 = data[4]; + y2 = data[5]; + switch (data[6] % 7) + { + case 0: + CurrentMapDrawMetatileAt(x2, y2); + case 1: + case 2: + case 3: + break; + case 4: + sub_80699D8(x2, y2); + CurrentMapDrawMetatileAt(x2, y2); + sub_8069A3C(x2, y2); + case 5: + case 6: + case 7: + break; + } + if (data[6] == 0) + { + data[1] = 1; + } + break; + } +} -- cgit v1.2.3 From 10f782959283e43cea5219033772778dbaf4a745 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 20:42:50 -0400 Subject: sub_8069CB8 --- src/field_tasks.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 5ccd3fa14..88dd025cc 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -535,3 +535,41 @@ void PerStepCallback_8069AA0(u8 taskId) break; } } + +const u16 gUnknown_083763E4[] = { + 0, + 0, + 0, + 0, + 0, + 0, + 0x4001, + 0x4002, + 0x4003, + 0x4004, + 0, + 0, + 0x4005, + 0x4006, + 0x4007, + 0, + 0, + 0x4008, + 0x4009, + 0x400A, + 0, + 0, + 0, + 0, + 0, + 0 +}; + +bool8 sub_8069CB8(s16 x, s16 y) +{ + if ((u16)(x - 3) < 11 && (u16)(y - 6) < 14 && gUnknown_083763E4[y]) + { + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From d10bffc7d8977bee1b42a550dc154d03bf92c3c6 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 26 Jun 2017 21:09:49 -0400 Subject: decompile up to sub_80BA800 --- src/sound_check_menu.c | 209 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 201 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 75cf48798..a46e7e363 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -7,22 +7,51 @@ #include "text.h" #include "menu.h" #include "songs.h" +#include "title_screen.h" // local task defines -#define UNK_DATA0 data[0] +#define WINDOW_SELECTED data[0] #define BGM_INDEX data[1] #define SE_INDEX data[2] #define UNK_DATA3 data[3] +// window selections +enum +{ + BGM_WINDOW, + SE_WINDOW +}; + extern void sub_80BA6B8(u8); -extern void sub_80BA700(u16, u8, u8); -extern void sub_80BA79C(u8 *, u8, u8); -extern void sub_80BA65C(u8); extern void sub_80BA800(u8); extern void sub_80BAF84(u8); extern void sub_80BB25C(u8); extern void sub_80BA68C(u8); +extern void sub_80BAD5C(void); +extern void sub_80BAE10(u8, u8); +extern void sub_80BAA48(u8); + +struct Struct_20387B4 +{ + u32 unk0; + u32 unk4; + u32 unk8; + u32 unkC; + u32 unk10; + u32 unk14; + u32 unk18; + u32 unk1C; + u32 unk20; +}; + +extern struct Struct_20387B4 gUnknown_020387B4; +extern u8 gUnknown_020387B3; +extern u8 gUnknown_020387B1; +extern u8 gUnknown_020387B2; +extern u32 gUnknown_03005D30; +extern u8 gUnknown_020387D8; +extern u8 gUnknown_020387D9; extern u8 gUnknown_020387B0; extern u8 *gBGMNames[]; @@ -34,9 +63,26 @@ extern u8 gDebugText_SE[]; extern u8 gDebugText_ABDesc[]; extern u8 gDebugText_UpDown[]; extern u8 gDebugText_DriverTest[]; +extern u8 gDebugText_BBack[]; +extern u8 gDebugText_APlay[]; +extern u8 gDebugText_Voice[]; +extern u8 gDebugText_Volume[]; +extern u8 gDebugText_Panpot[]; +extern u8 gDebugText_Pitch[]; +extern u8 gDebugText_Length[]; +extern u8 gDebugText_Release[]; +extern u8 gDebugText_Progress[]; +extern u8 gDebugText_Chorus[]; +extern u8 gDebugText_Priority[]; +extern u8 gDebugText_Playing[]; +extern u8 gDebugText_Reverse[]; +extern u8 gDebugText_Stereo[]; void sub_80BA258(u8); void sub_80BA384(u8); +void sub_80BA65C(u8); +void sub_80BA700(u16, u16, u16); +void sub_80BA79C(u8 *, u16, u16); void sub_80BA0A8(void) { @@ -101,7 +147,7 @@ void CB2_StartSoundCheckMenu(void) SetMainCallback2(sub_80BA0A8); REG_DISPCNT = 0x7140; taskId = CreateTask(sub_80BA258, 0); - TASK.UNK_DATA0 = 0; + TASK.WINDOW_SELECTED = BGM_WINDOW; TASK.BGM_INDEX = 0; TASK.SE_INDEX = 0; TASK.UNK_DATA3 = 0; @@ -146,9 +192,9 @@ void sub_80BA258(u8 taskId) } } -void sub_80BA384(u8 taskId) +void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText { - sub_80BA6B8(TASK.UNK_DATA0); + sub_80BA6B8(TASK.WINDOW_SELECTED); sub_80BA700(TASK.BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index sub_80BA79C(gBGMNames[TASK.BGM_INDEX], 11, 8); sub_80BA700(TASK.SE_INDEX, 7, 15); @@ -157,7 +203,7 @@ void sub_80BA384(u8 taskId) } #ifdef NONMATCHING -bool8 sub_80BA400(u8 taskId) +bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput { if(gMain.newKeys & R_BUTTON) // driver test { @@ -198,6 +244,7 @@ bool8 sub_80BA400(u8 taskId) // _080BA4C4 m4aSongNumStart(gTasks[taskId].data[2]); gTasks[taskId].data[4] = gTasks[taskId].data[2]; + return FALSE; } else // _080BA4D0 { @@ -620,3 +667,149 @@ _080BA658: .4byte gUnknown_020387B0\n\ .syntax divided"); } #endif + +void sub_80BA65C(u8 taskId) +{ + if(sub_80BA400(taskId) != FALSE) + gTasks[taskId].func = sub_80BA384; +} + +void sub_80BA68C(u8 taskId) +{ + if(!gPaletteFade.active) + { + DestroyTask(taskId); + SetMainCallback2(CB2_InitTitleScreen); + } +} + +void sub_80BA6B8(u8 windowType) +{ + switch(windowType) + { + case BGM_WINDOW: + default: + REG_WIN1H = 0x11DF; + REG_WIN1V = 0x2957; + break; + case SE_WINDOW: + REG_WIN1H = 0x11DF; + REG_WIN1V = 0x618F; + break; + } +} + +void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? +{ + u8 i; + u8 str[5]; + bool8 someBool; + u8 divisorValue; + + for(i = 0; i < 3; i++) + str[i] = 0; // initialize array + + str[3] = 0xB0; + str[4] = 0xFF; + someBool = FALSE; + + divisorValue = soundIndex / 100; + if(divisorValue) + { + str[0] = divisorValue + 0xA1; + someBool = TRUE; + } + + divisorValue = (soundIndex % 100) / 10; + if(divisorValue || someBool != FALSE) + str[1] = divisorValue + 0xA1; + + str[2] = ((soundIndex % 100) % 10) + 0xA1; + MenuPrint(str, x, y); +} + +void sub_80BA79C(u8 *string, u16 x, u16 y) +{ + u8 i; + u8 str[11]; + + for(i = 0; i < 11; i++) + str[i] = 0; // format string. + + str[10] = 0xFF; // the above for loop formats the last element of the array unnecessarily. + + for(i = 0; string[i] != 0xFF && i < 10; i++) + str[i] = string[i]; + + MenuPrint(str, x, y); +} + +void sub_80BA800(u8 taskId) +{ + u8 bbackStr[10]; + u8 aplayStr[11]; + u8 voiceStr[10]; + u8 volumeStr[10]; + u8 panpotStr[10]; + u8 pitchStr[10]; + u8 lengthStr[10]; + u8 releaseStr[10]; + u8 progressStr[10]; + u8 chorusStr[10]; + u8 priorityStr[10]; + u8 playingStr[9]; + u8 reverseStr[9]; + u8 stereoStr[9]; + + memcpy(bbackStr, gDebugText_BBack, sizeof bbackStr); + memcpy(aplayStr, gDebugText_APlay, sizeof aplayStr); + memcpy(voiceStr, gDebugText_Voice, sizeof voiceStr); + memcpy(volumeStr, gDebugText_Volume, sizeof volumeStr); + memcpy(panpotStr, gDebugText_Panpot, sizeof panpotStr); + memcpy(pitchStr, gDebugText_Pitch, sizeof pitchStr); + memcpy(lengthStr, gDebugText_Length, sizeof lengthStr); + memcpy(releaseStr, gDebugText_Release, sizeof releaseStr); + memcpy(progressStr, gDebugText_Progress, sizeof progressStr); + memcpy(chorusStr, gDebugText_Chorus, sizeof chorusStr); + memcpy(priorityStr, gDebugText_Priority, sizeof priorityStr); + memcpy(playingStr, gDebugText_Playing, sizeof playingStr); + memcpy(reverseStr, gDebugText_Reverse, sizeof reverseStr); + memcpy(stereoStr, gDebugText_Stereo, sizeof stereoStr); + + REG_DISPCNT = 0x3140; + MenuDrawTextWindow(0, 0, 0x1D, 0x13); + MenuPrint(bbackStr, 0x13, 0x4); + MenuPrint(aplayStr, 0x13, 0x2); + MenuPrint(voiceStr, 0x2, 0x1); + MenuPrint(volumeStr, 0x2, 0x3); + MenuPrint(panpotStr, 0x2, 0x5); + MenuPrint(pitchStr, 0x2, 0x7); + MenuPrint(lengthStr, 0x2, 0x9); + MenuPrint(releaseStr, 0x2, 0xB); + MenuPrint(progressStr, 0x2, 0xD); + MenuPrint(chorusStr, 0x2, 0xF); + MenuPrint(priorityStr, 0x2, 0x11); + MenuPrint(playingStr, 0x13, 0x10); + MenuPrint(reverseStr, 0x13, 0xE); + MenuPrint(stereoStr, 0x13, 0xC); + REG_WIN0H = 0xF0; + REG_WIN0V = 0xA0; + gUnknown_020387B3 = 0; + gUnknown_020387B1 = 0; + gUnknown_020387B2 = 0; + gUnknown_03005D30 = 0; + gUnknown_020387D8 = 0; + gUnknown_020387D9 = 1; + gUnknown_020387B4.unk0 = 0; + gUnknown_020387B4.unk4 = 0x78; + gUnknown_020387B4.unk8 = 0; + gUnknown_020387B4.unkC = 0x3C00; + gUnknown_020387B4.unk10 = 0xB4; + gUnknown_020387B4.unk18 = 0; + gUnknown_020387B4.unk14 = 0; + gUnknown_020387B4.unk1C = 0; + gUnknown_020387B4.unk20 = 2; + sub_80BAD5C(); + sub_80BAE10(0, 0); + gTasks[taskId].func = sub_80BAA48; +} -- cgit v1.2.3 From 9cc199f064aa2f5a8e188dfe805a511c2c92c4fa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 21:48:30 -0400 Subject: stupid sub_8069D34 --- src/field_tasks.c | 79 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 52 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 88dd025cc..92b8d3bb8 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -5,6 +5,8 @@ #include "global.h" #include "task.h" #include "main.h" +#include "vars.h" +#include "event_data.h" #include "rom4.h" #include "clock.h" #include "script.h" @@ -537,35 +539,35 @@ void PerStepCallback_8069AA0(u8 taskId) } const u16 gUnknown_083763E4[] = { - 0, - 0, - 0, - 0, - 0, - 0, - 0x4001, - 0x4002, - 0x4003, - 0x4004, - 0, - 0, - 0x4005, - 0x4006, - 0x4007, - 0, - 0, - 0x4008, - 0x4009, - 0x400A, - 0, - 0, - 0, - 0, - 0, - 0 + 0, + 0, + 0, + 0, + 0, + 0, + VAR_0x4001, + VAR_0x4002, + VAR_0x4003, + VAR_0x4004, + 0, + 0, + VAR_0x4005, + VAR_0x4006, + VAR_0x4007, + 0, + 0, + VAR_0x4008, + VAR_0x4009, + VAR_0x400A, + 0, + 0, + 0, + 0, + 0, + 0 }; -bool8 sub_8069CB8(s16 x, s16 y) +bool32 sub_8069CB8(s16 x, s16 y) { if ((u16)(x - 3) < 11 && (u16)(y - 6) < 14 && gUnknown_083763E4[y]) { @@ -573,3 +575,26 @@ bool8 sub_8069CB8(s16 x, s16 y) } return FALSE; } + +void sub_8069CFC(s16 x, s16 y) +{ + if (sub_8069CB8(x, y)) + { + *GetVarPointer(gUnknown_083763E4[y]) |= (1 << (x - 3)); + } +} + +bool32 sub_8069D34(s16 x, s16 y) +{ + u32 var; + if (!sub_8069CB8(x, y)) + { + return FALSE; + } + var = VarGet(gUnknown_083763E4[y]) << 16; + if (((1 << 16) << (x - 3)) & var) + { + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From e8acc9564ef11ca8f7d20b1ed1fbd34e6850e2a3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 21:53:54 -0400 Subject: sub_8069D78 --- src/field_tasks.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 92b8d3bb8..cc87a201e 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -598,3 +598,20 @@ bool32 sub_8069D34(s16 x, s16 y) } return FALSE; } + +void sub_8069D78(void) +{ + s32 x, y; + s32 width = gMapHeader.mapData->width; + s32 height = gMapHeader.mapData->height; + for (x=0; x Date: Mon, 26 Jun 2017 22:15:36 -0400 Subject: PerStepCallback_8069DD4 --- src/field_tasks.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index cc87a201e..f68c6bbe4 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -615,3 +615,77 @@ void sub_8069D78(void) } } } + +void PerStepCallback_8069DD4(u8 taskId) +{ + s16 x, y; + u16 tileBehavior; + u16 *var; + s16 *data = gTasks[taskId].data; + switch (data[1]) + { + case 0: + PlayerGetDestCoords(&x, &y); + data[2] = x; + data[3] = y; + data[1] = 1; + break; + case 1: + PlayerGetDestCoords(&x, &y); + if (x != data[2] || y != data[3]) + { + data[2] = x; + data[3] = y; + tileBehavior = MapGridGetMetatileBehaviorAt(x, y); + var = GetVarPointer(VAR_ICE_STEP_COUNT); + if (MetatileBehavior_IsThinIce(tileBehavior) == TRUE) + { + (*var)++; + data[6] = 4; + data[1] = 2; + data[4] = x; + data[5] = y; + } + else if (MetatileBehavior_IsCrackedIce(tileBehavior) == TRUE) + { + *var = 0; + data[6] = 4; + data[1] = 3; + data[4] = x; + data[5] = y; + } + } + break; + case 2: + if (data[6] != 0) + { + data[6]--; + } + else + { + x = data[4]; + y = data[5]; + PlaySE(SE_RU_BARI); + MapGridSetMetatileIdAt(x, y, 0x20e); + CurrentMapDrawMetatileAt(x, y); + sub_8069CFC(x - 7, y - 7); + data[1] = 1; + } + break; + case 3: + if (data[6] != 0) + { + data[6]--; + } + else + { + x = data[4]; + y = data[5]; + PlaySE(SE_RU_GASYAN); + MapGridSetMetatileIdAt(x, y, 0x206); + CurrentMapDrawMetatileAt(x, y); + data[1] = 1; + } + break; + } +} -- cgit v1.2.3 From 57a6a5e6564aec89ab45f2d4c3b911f59f7db210 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 22:26:02 -0400 Subject: PerStepCallback_8069F64 --- src/field_tasks.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index f68c6bbe4..ea70cf227 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -6,11 +6,14 @@ #include "task.h" #include "main.h" #include "vars.h" +#include "item.h" +#include "items.h" #include "event_data.h" #include "rom4.h" #include "clock.h" #include "script.h" #include "field_special_scene.h" +#include "field_effect_helpers.h" #include "secret_base.h" #include "metatile_behavior.h" #include "fieldmap.h" @@ -689,3 +692,35 @@ void PerStepCallback_8069DD4(u8 taskId) break; } } + +void PerStepCallback_8069F64(u8 taskId) +{ + s16 x, y; + u16 *var; + s16 *data = gTasks[taskId].data; + PlayerGetDestCoords(&x, &y); + if (x != data[1] || y != data[2]) + { + data[1] = x; + data[2] = y; + if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y))) + { + if (MapGridGetMetatileIdAt(x, y) == 0x20a) + { + ash(x, y, 0x212, 4); + } + else + { + ash(x, y, 0x206, 4); + } + if (CheckBagHasItem(ITEM_SOOT_SACK, 1)) + { + var = GetVarPointer(VAR_ASH_GATHER_COUNT); + if (*var < 9999) + { + (*var)++; + } + } + } + } +} -- cgit v1.2.3 From 2c4dc3b5be3b45a50387b1b0677d8f4b64391575 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 26 Jun 2017 22:32:18 -0400 Subject: sub_806A040 --- src/field_tasks.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index ea70cf227..021f2c070 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -724,3 +724,9 @@ void PerStepCallback_8069F64(u8 taskId) } } } + +void sub_806A040(s16 x, s16 y) +{ + MapGridSetMetatileIdAt(x, y, MapGridGetMetatileIdAt(x, y) == 0x22f ? 0x206 : 0x237); + CurrentMapDrawMetatileAt(x, y); +} -- cgit v1.2.3 From a3c3267a9c915f86b986df90e747e12a90bcf5b5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 08:26:08 -0400 Subject: PerStepCallback_806A07C --- src/field_tasks.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 021f2c070..653d3ffd9 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -6,6 +6,7 @@ #include "task.h" #include "main.h" #include "vars.h" +#include "bike.h" #include "item.h" #include "items.h" #include "event_data.h" @@ -730,3 +731,48 @@ void sub_806A040(s16 x, s16 y) MapGridSetMetatileIdAt(x, y, MapGridGetMetatileIdAt(x, y) == 0x22f ? 0x206 : 0x237); CurrentMapDrawMetatileAt(x, y); } + +void PerStepCallback_806A07C(u8 taskId) +{ + s16 x, y; + u16 behavior; + s16 *data = gTasks[taskId].data; + PlayerGetDestCoords(&x, &y); + behavior = MapGridGetMetatileBehaviorAt(x, y); + if (data[4] != 0 && (--data[4]) == 0) + { + sub_806A040(data[5], data[6]); + } + if (data[7] != 0 && (--data[7]) == 0) + { + sub_806A040(data[8], data[9]); + } + if (MetatileBehavior_IsCrackedFloorHole(behavior)) + { + VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty + } + if ((x != data[2] || y != data[3])) + { + data[2] = x; + data[3] = y; + if (MetatileBehavior_IsCrackedFloor(behavior)) + { + if (GetPlayerSpeed() != 4) + { + VarSet(VAR_ICE_STEP_COUNT, 0); // this var does double duty + } + if (data[4] == 0) + { + data[4] = 3; + data[5] = x; + data[6] = y; + } + else if (data[7] == 0) + { + data[7] = 3; + data[8] = x; + data[9] = y; + } + } + } +} -- cgit v1.2.3 From 0687a65dc9b67d99d7bb8bdb656ce0c358a57f66 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 08:34:22 -0400 Subject: Through sub_806A18C --- src/field_tasks.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 653d3ffd9..8ddef126b 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -776,3 +776,21 @@ void PerStepCallback_806A07C(u8 taskId) } } } + +const u16 gUnknown_08376418[] = {0xe8, 0xeb, 0xea, 0xe9}; + +void sub_806A18C(s16 *data, s16 x, s16 y) +{ + u16 tile; + if ((--data[0]) == 0) + { + tile = 0xe8; + } + else + { + tile = gUnknown_08376418[data[0] / 8]; + } + MapGridSetMetatileIdAt(x, y, tile); + CurrentMapDrawMetatileAt(x, y); + MapGridSetMetatileIdAt(x, y, 0xe8); +} -- cgit v1.2.3 From 41cc0382a43161c0c66ddaf73742ecec8dcbdcc6 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 27 Jun 2017 09:43:57 -0400 Subject: Finish decompiling field_tasks.s --- src/field_tasks.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src') diff --git a/src/field_tasks.c b/src/field_tasks.c index 8ddef126b..caf2ce6b9 100755 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -794,3 +794,66 @@ void sub_806A18C(s16 *data, s16 x, s16 y) CurrentMapDrawMetatileAt(x, y); MapGridSetMetatileIdAt(x, y, 0xe8); } + +void Task_MuddySlope(u8 taskId) +{ + s16 x, y, x2, y2; + int i; + u16 mapIndices; + s16 *data = gTasks[taskId].data; + PlayerGetDestCoords(&x, &y); + mapIndices = (gSaveBlock1.location.mapGroup << 8) | gSaveBlock1.location.mapNum; + switch (data[1]) + { + case 0: + data[0] = mapIndices; + data[2] = x; + data[3] = y; + data[1] = 1; + data[4] = 0; + data[7] = 0; + data[10] = 0; + data[13] = 0; + break; + case 1: + if (data[2] != x || data[3] != y) + { + data[2] = x; + data[3] = y; + if (MetatileBehavior_IsMuddySlope(MapGridGetMetatileBehaviorAt(x, y))) + { + for (i=4; i<14; i+=3) + { + if (data[i] == 0) + { + data[i] = 32; + data[i + 1] = x; + data[i + 2] = y; + break; + } + } + } + } + break; + } + if (gUnknown_0202E844.field_0 && mapIndices != data[0]) + { + data[0] = mapIndices; + x2 = gUnknown_0202E844.x; + y2 = gUnknown_0202E844.y; + } + else + { + x2 = 0; + y2 = 0; + } + for (i=4; i<14; i+=3) + { + if (data[i]) + { + data[i + 1] -= x2; + data[i + 2] -= y2; + sub_806A18C(&data[i], data[i + 1], data[i + 2]); + } + } +} -- cgit v1.2.3 From 7d2166b97f554285cedf958073eefb0276da727f Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Tue, 27 Jun 2017 16:11:15 +0200 Subject: Make files non-executable --- src/field_map_obj.c | 0 src/field_map_obj_helpers.c | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/field_map_obj.c mode change 100755 => 100644 src/field_map_obj_helpers.c (limited to 'src') diff --git a/src/field_map_obj.c b/src/field_map_obj.c old mode 100755 new mode 100644 diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c old mode 100755 new mode 100644 -- cgit v1.2.3 From 628a71bed7bb350f6e69b8bd2528ea7103a16cbe Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 18:51:55 -0400 Subject: Start decompiling pokeblock.s --- src/pokeblock.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 src/pokeblock.c (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c new file mode 100755 index 000000000..79df0fb29 --- /dev/null +++ b/src/pokeblock.c @@ -0,0 +1,30 @@ +// +// Created by scott on 6/27/2017. +// + +#include "global.h" +#include "sprite.h" +#include "task.h" +#include "text.h" +#include "palette.h" +#include "pokeblock.h" + +void sub_810B674(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + UpdatePaletteFade(); +} + +void sub_810B68C(void) +{ + u16 *src; + vu16 *dest; + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + src = gBGTilemapBuffers[2]; + dest = (vu16 *)(VRAM + 0x7800); + DmaCopy16(3, src, dest, sizeof gBGTilemapBuffers[2]); +} -- cgit v1.2.3 From fc5d035bdaf86d5cc68994657e3e47666308d7c3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 19:25:30 -0400 Subject: sub_810B6C0 --- src/pokeblock.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 79df0fb29..9f921e357 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -3,10 +3,15 @@ // #include "global.h" +#include "rom4.h" #include "sprite.h" #include "task.h" +#include "unknown_task.h" #include "text.h" +#include "main.h" +#include "menu.h" #include "palette.h" +#include "menu_helpers.h" #include "pokeblock.h" void sub_810B674(void) @@ -28,3 +33,125 @@ void sub_810B68C(void) dest = (vu16 *)(VRAM + 0x7800); DmaCopy16(3, src, dest, sizeof gBGTilemapBuffers[2]); } + +bool8 sub_810B998(void); +u8 sub_810BA50(s16, s16, u8); +void sub_810BC98(void); +void sub_810BD08(void); +void sub_810BB0C(void); +void sub_810BB30(void); +void sub_810BC84(u8); + +bool32 sub_810B6C0(void) +{ + u16 ime; + switch (gMain.state) + { + case 0: + sub_80F9438(); + sub_80F9368(); + REG_BG2CNT = BGCNT_SCREENBASE(15) | BGCNT_CHARBASE(2) | BGCNT_PRIORITY(2); + REG_BLDCNT = 0; + gMain.state++; + break; + case 1: + remove_some_task(); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + gMain.state++; + break; + case 3: + ResetSpriteData(); + gMain.state++; + break; + case 4: + if (gUnknown_02039244 != 2) + { + ResetTasks(); + } + gMain.state++; + break; + case 5: + SetUpWindowConfig(&gWindowConfig_81E6E34); + gMain.state++; + break; + case 6: + SetUpWindowConfig(&gWindowConfig_81E6E50); + gMain.state++; + break; + case 7: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E34); + gMain.state++; + break; + case 8: + if (MultistepInitMenuWindowContinue()) + { + gMain.state++; + } + break; + case 9: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6E50); + gMain.state++; + break; + case 10: + if (MultistepInitMenuWindowContinue()) + { + ewram[0x1ffff] = 0; + gMain.state++; + } + break; + case 11: + if (sub_810B998()) + { + gMain.state++; + } + break; + case 12: + sub_80F944C(); + LoadScrollIndicatorPalette(); + CreateVerticalScrollIndicators(0, 0xb0, 0x08); + CreateVerticalScrollIndicators(1, 0xb0, 0x98); + gMain.state++; + break; + case 13: + ewram[0x1fffe] = sub_810BA50(0x38, 0x40, 0); + gMain.state++; + break; + case 14: + sub_810BC98(); + sub_810BD08(); + gMain.state++; + break; + case 15: + sub_810BB0C(); + sub_810BB30(); + sub_810BC84(gUnknown_02039248[1]); + gMain.state++; + break; + case 16: + ime = REG_IME; + REG_IME = 0; + REG_IE |= 1; + REG_IME = ime; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + SetVBlankCallback(sub_810B68C); + REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG2_ON | DISPCNT_BG1_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP; + gMain.state++; + break; + case 17: + if (sub_8055870() != TRUE) + { + gMain.state++; + } + break; + case 18: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + gPaletteFade.bufferTransferDisabled = FALSE; + SetMainCallback2(sub_810B674); + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From 3661177dc197119b53ff4a677359d27272c816e0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 19:35:29 -0400 Subject: sub_810B96C --- src/pokeblock.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 9f921e357..76a06c5ea 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -14,7 +14,7 @@ #include "menu_helpers.h" #include "pokeblock.h" -void sub_810B674(void) +static void sub_810B674(void) { AnimateSprites(); BuildOamBuffer(); @@ -22,7 +22,7 @@ void sub_810B674(void) UpdatePaletteFade(); } -void sub_810B68C(void) +static void sub_810B68C(void) { u16 *src; vu16 *dest; @@ -42,7 +42,7 @@ void sub_810BB0C(void); void sub_810BB30(void); void sub_810BC84(u8); -bool32 sub_810B6C0(void) +static bool8 sub_810B6C0(void) { u16 ime; switch (gMain.state) @@ -134,7 +134,7 @@ bool32 sub_810B6C0(void) case 16: ime = REG_IME; REG_IME = 0; - REG_IE |= 1; + REG_IE |= INTR_FLAG_VBLANK; REG_IME = ime; REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; SetVBlankCallback(sub_810B68C); @@ -155,3 +155,16 @@ bool32 sub_810B6C0(void) } return FALSE; } + +void sub_810BF7C(u8); + +void sub_810B96C(void) +{ + do { + if (sub_810B6C0() == TRUE) + { + CreateTask(sub_810BF7C, 0); + break; + } + } while (sub_80F9344() != TRUE); +} -- cgit v1.2.3 From 25355e8530142e6ad88f4173c3c3dc9d881d7fa8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 20:17:39 -0400 Subject: sub_810B998 and ALL the data --- src/decoration.c | 8 +-- src/pokeblock.c | 173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/pokemon_3.c | 6 +- 3 files changed, 179 insertions(+), 8 deletions(-) mode change 100644 => 100755 src/decoration.c (limited to 'src') diff --git a/src/decoration.c b/src/decoration.c old mode 100644 new mode 100755 index 9eba54ad7..e829cb072 --- a/src/decoration.c +++ b/src/decoration.c @@ -1396,7 +1396,7 @@ const u8 *const gUnknown_083EC624[] = { gMenuText_GoBackToPrev }; -const struct MenuAction3 gUnknown_083EC634[] = { +const struct YesNoFuncTable gUnknown_083EC634[] = { {sub_80FF5BC, sub_80FF058}, {sub_81017A0, sub_80FF058}, {sub_81017A0, sub_80FF058}, @@ -1871,16 +1871,16 @@ void sub_80FE948(u8 taskId) gUnknown_020388F5 = gUnknown_020388F2 + gUnknown_020388F4; if (gUnknown_020388F5 == gUnknown_020388D5) { - gUnknown_083EC634[gTasks[taskId].data[11]].func2(taskId); + gUnknown_083EC634[gTasks[taskId].data[11]].noFunc(taskId); } else { - gUnknown_083EC634[gTasks[taskId].data[11]].func1(taskId); + gUnknown_083EC634[gTasks[taskId].data[11]].yesFunc(taskId); } } else if (gMain.newKeys & B_BUTTON) { HandleDestroyMenuCursors(); PlaySE(SE_SELECT); - gUnknown_083EC634[gTasks[taskId].data[11]].func2(taskId); + gUnknown_083EC634[gTasks[taskId].data[11]].noFunc(taskId); } } } diff --git a/src/pokeblock.c b/src/pokeblock.c index 76a06c5ea..7b67eb408 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -5,15 +5,158 @@ #include "global.h" #include "rom4.h" #include "sprite.h" +#include "strings.h" #include "task.h" #include "unknown_task.h" #include "text.h" #include "main.h" #include "menu.h" #include "palette.h" +#include "graphics.h" +#include "decompress.h" #include "menu_helpers.h" +#include "battle.h" +#include "item_menu.h" #include "pokeblock.h" +// rodata + +const s8 gPokeblockFlavorCompatibilityTable[][5] = { + // Cool, Beauty, Cute, Smart, Tough + { 0, 0, 0, 0, 0}, // Hardy + { 1, 0, 0, 0, -1}, // Lonely + { 1, 0, -1, 0, 0}, // Brave + { 1, -1, 0, 0, 0}, // Adamant + { 1, 0, 0, -1, 0}, // Naughty + { -1, 0, 0, 0, 1}, // Bold + { 0, 0, 0, 0, 0}, // Docile + { 0, 0, -1, 0, 1}, // Relaxed + { 0, -1, 0, 0, 1}, // Impish + { 0, 0, 0, -1, 1}, // Lax + { -1, 0, 1, 0, 0}, // Timid + { 0, 0, 1, 0, -1}, // Hasty + { 0, 0, 0, 0, 0}, // Serious + { 0, -1, 1, 0, 0}, // Jolly + { 0, 0, 1, -1, 0}, // Naive + { -1, 1, 0, 0, 0}, // Modest + { 0, 1, 0, 0, -1}, // Mild + { 0, 1, -1, 0, 0}, // Quiet + { 0, 0, 0, 0, 0}, // Bashful + { 0, 1, 0, -1, 0}, // Rash + { -1, 0, 0, 1, 0}, // Calm + { 0, 0, 0, 1, -1}, // Gentle + { 0, 0, -1, 1, 0}, // Sassy + { 0, -1, 0, 1, 0}, // Careful + { 0, 0, 0, 0, 0} // Quirky +}; + +void (*const gUnknown_083F7EA8[])(void) = { + sub_80A5B40, + c2_exit_to_overworld_2_switch, + sub_802E424, + c2_exit_to_overworld_2_switch +}; + +const u8 *const gPokeblockNames[] = { + NULL, + ContestStatsText_RedPokeBlock, + ContestStatsText_BluePokeBlock, + ContestStatsText_PinkPokeBlock, + ContestStatsText_GreenPokeBlock, + ContestStatsText_YellowPokeBlock, + ContestStatsText_PurplePokeBlock, + ContestStatsText_IndigoPokeBlock, + ContestStatsText_BrownPokeBlock, + ContestStatsText_LiteBluePokeBlock, + ContestStatsText_OlivePokeBlock, + ContestStatsText_GrayPokeBlock, + ContestStatsText_BlackPokeBlock, + ContestStatsText_WhitePokeBlock, + ContestStatsText_GoldPokeBlock +}; + +void sub_810C508(u8); +void sub_810C5C0(u8); +void sub_810C748(u8); +void sub_810C788(u8); +void sub_810C854(u8); + +const struct MenuAction2 gUnknown_083F7EF4[] = { + OtherText_Use, sub_810C508, + OtherText_Toss, sub_810C5C0, + gOtherText_CancelNoTerminator, sub_810C748, + OtherText_Use, sub_810C788, + OtherText_Use, sub_810C854, +}; + +const u8 gUnknown_083F7F1C[] = {0, 1, 2}; +const u8 gUnknown_083F7F1F[] = {3, 2}; +const u8 gUnknown_083F7F21[] = {4, 2}; + +void sub_810C610(u8); +void sub_810C668(u8); + +const struct YesNoFuncTable gUnknown_083F7F24[] = {sub_810C610, sub_810C668}; + +const u8 UnreferencedData_083F7F2C[] = {0x16, 0x17, 0x18, 0x21, 0x2f}; + +const struct OamData gOamData_83F7F34 = { + .size = 3, + .priority = 2 +}; + +const union AnimCmd gSpriteAnim_83F7F3C[] = { + ANIMCMD_FRAME(.imageValue = 0, .duration = 0), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83F7F44[] = { + gSpriteAnim_83F7F3C +}; + +const union AffineAnimCmd gSpriteAffineAnim_83F7F48[] = { + AFFINEANIMCMD_FRAME(0, 0, -2, 2), + AFFINEANIMCMD_FRAME(0, 0, 2, 4), + AFFINEANIMCMD_FRAME(0, 0, -2, 4), + AFFINEANIMCMD_FRAME(0, 0, 2, 2), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] = { + gSpriteAffineAnim_83F7F48 +}; + +const struct CompressedSpriteSheet gUnknown_083F7F74 = { + gMenuPokeblockDevice_Gfx, + 0x800, + 0x39d0 +}; + +const struct CompressedSpritePalette gUnknown_083F7F7C = { + gMenuPokeblockDevice_Pal, + 0x39d0 +}; + +const struct SpriteTemplate gSpriteTemplate_83F7F84 = { + 0x39d0, + 0x39d0, + &gOamData_83F7F34, + gSpriteAnimTable_83F7F44, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const u8 gUnknown_083F7F9C[][8] = { + { 1, 20, 0, 0, 0, 0, 20, 0}, + { 2, 0, 20, 0, 0, 0, 20, 0}, + { 3, 0, 0, 20, 0, 0, 20, 0}, + { 4, 0, 0, 0, 20, 0, 20, 0}, + { 5, 0, 0, 0, 0, 20, 20, 0} +}; + +// text + static void sub_810B674(void) { AnimateSprites(); @@ -34,7 +177,7 @@ static void sub_810B68C(void) DmaCopy16(3, src, dest, sizeof gBGTilemapBuffers[2]); } -bool8 sub_810B998(void); +static bool8 sub_810B998(void); u8 sub_810BA50(s16, s16, u8); void sub_810BC98(void); void sub_810BD08(void); @@ -168,3 +311,31 @@ void sub_810B96C(void) } } while (sub_80F9344() != TRUE); } + +static bool8 sub_810B998(void) +{ + switch (ewram[0x1ffff]) + { + case 0: + LZDecompressVram(gMenuPokeblock_Gfx, (void *)VRAM + 0x8000); + ewram[0x1ffff]++; + break; + case 1: + sub_800D238(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]); + ewram[0x1ffff]++; + break; + case 2: + LoadCompressedPalette(gMenuPokeblock_Pal, 0, 0xc0); + ewram[0x1ffff]++; + break; + case 3: + LoadCompressedObjectPic(&gUnknown_083F7F74); + ewram[0x1ffff]++; + break; + case 4: + LoadCompressedObjectPalette(&gUnknown_083F7F7C); + ewram[0x1ffff] = 0; + return TRUE; + } + return FALSE; +} diff --git a/src/pokemon_3.c b/src/pokemon_3.c index cb8eb2a46..9a2a5d8e4 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -70,7 +70,7 @@ extern u32 gTMHMLearnsets[][2]; extern u8 gBattleMonForms[]; extern const u8 BattleText_Wally[]; extern const u16 gHMMoves[]; -extern s8 gUnknown_083F7E28[]; +extern s8 gPokeblockFlavorCompatibilityTable[]; extern u8 gLastUsedAbility; extern const u8 BattleText_PreventedSwitch[]; extern u16 gBattlePartyID[]; @@ -1238,13 +1238,13 @@ bool8 sub_8040A3C(u16 species) s8 sub_8040A54(struct Pokemon *mon, u8 a2) { u8 nature = GetNature(mon); - return gUnknown_083F7E28[nature * 5 + a2]; + return gPokeblockFlavorCompatibilityTable[nature * 5 + a2]; } s8 sub_8040A7C(u32 personality, u8 a2) { u8 nature = GetNatureFromPersonality(personality); - return gUnknown_083F7E28[nature * 5 + a2]; + return gPokeblockFlavorCompatibilityTable[nature * 5 + a2]; } bool8 IsTradedMon(struct Pokemon *mon) -- cgit v1.2.3 From b61b1fd911a15cb9bf9999658d4186b4825c4492 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 21:08:41 -0400 Subject: through sub_810BB88 --- src/pokeblock.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 7b67eb408..437f25e46 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -17,6 +17,8 @@ #include "menu_helpers.h" #include "battle.h" #include "item_menu.h" +#include "item.h" +#include "items.h" #include "pokeblock.h" // rodata @@ -339,3 +341,87 @@ static bool8 sub_810B998(void) } return FALSE; } + +u8 sub_810BA50(s16 x, s16 y, u8 subpriority) +{ + return CreateSprite(&gSpriteTemplate_83F7F84, x, y, subpriority); +} + +void sub_810BA7C(u8 a0) +{ + gUnknown_02039244 = a0; + switch (gUnknown_02039244) + { + default: + gUnknown_03000758 = gUnknown_083F7F1C; + gUnknown_0203924C = sizeof gUnknown_083F7F1C; + break; + case 2: + gUnknown_03000758 = gUnknown_083F7F1F; + gUnknown_0203924C = sizeof gUnknown_083F7F1F; + break; + case 3: + gUnknown_03000758 = gUnknown_083F7F21; + gUnknown_0203924C = sizeof gUnknown_083F7F21; + break; + } +} + +void sub_810BADC(void) +{ + sub_810BA7C(2); + SetMainCallback2(sub_810B96C); +} + +void sub_810BAF4(void) +{ + sub_810BA7C(3); + SetMainCallback2(sub_810B96C); +} + +void sub_810BB0C(void) +{ + BasicInitMenuWindow(&gWindowConfig_81E6E34); + sub_8072BD8(ItemId_GetItem(ITEM_POKEBLOCK_CASE)->name, 2, 1, 0x48); +} + +void sub_810BB30(void) +{ + BasicInitMenuWindow(&gWindowConfig_81E6E34); + MenuPrint(gContestStatsText_Spicy, 2, 13); + MenuPrint(gContestStatsText_Dry, 2, 15); + MenuPrint(gContestStatsText_Sweet, 2, 17); + MenuPrint(gContestStatsText_Bitter, 8, 13); + MenuPrint(gContestStatsText_Sour, 8, 15); +} + +u8 sub_810C9B0(struct Pokeblock *); + +void sub_810BB88(u8 a0) +{ + u8 i; + u8 y; + u8 *buf; + BasicInitMenuWindow(&gWindowConfig_81E6E34); + for (i=a0; i<=a0+8; i++) + { + y = (i - a0) << 1; + if (i == gUnknown_02039248[2]) + { + buf = sub_8072C74(gStringVar1, gContestStatsText_StowCase, 0x78, 0); + MenuPrint(gStringVar1, 15, y + 1); + if (i != a0 + 8) + { + MenuZeroFillWindowRect(15, y + 3, 29, 18); + } + break; + } + buf = sub_8072C74(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[i].color], 0x5e, 0); + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x14; + buf[2] = 0x06; + buf += 3; + ConvertIntToDecimalStringN(buf, sub_810C9B0(&gSaveBlock1.pokeblocks[i]), STR_CONV_MODE_RIGHT_ALIGN, 3); + MenuPrint(gStringVar1, 15, y + 1); + } +} -- cgit v1.2.3 From 5f3b6f124ff35593eeecc028234ae7d48589c768 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 21:27:07 -0400 Subject: through sub_810BD08 --- src/pokeblock.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 437f25e46..111bf2160 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -425,3 +425,52 @@ void sub_810BB88(u8 a0) MenuPrint(gStringVar1, 15, y + 1); } } + +void sub_810BDAC(bool8); + +void sub_810BC84(u8 a0) +{ + sub_810BB88(a0); + sub_810BDAC(FALSE); +} + +void sub_810BC98(void) +{ + u16 i, j; + struct Pokeblock buf; + for (i=0; i<39; i++) + { + for (j=i+1; j<40; j++) + { + if (gSaveBlock1.pokeblocks[i].color == 0) + { + buf = gSaveBlock1.pokeblocks[i]; + gSaveBlock1.pokeblocks[i] = gSaveBlock1.pokeblocks[j]; + gSaveBlock1.pokeblocks[j] = buf; + } + } + } +} + +void sub_810BD08(void) +{ + u8 i; + gUnknown_02039248[2] = 0; + for (i=0; i<40; i++) + { + if (gSaveBlock1.pokeblocks[i].color != 0) + gUnknown_02039248[2]++; + } + if (gUnknown_02039248[2] < 8) + { + gUnknown_02039248[3] = gUnknown_02039248[2]; + } + else + { + gUnknown_02039248[3] = 8; + } + if (gUnknown_02039248[1] + 8 > gUnknown_02039248[2] && gUnknown_02039248[1] != 0) + { + gUnknown_02039248[1]--; + } +} -- cgit v1.2.3 From 7fe3e5af79fba97a5077ffd0590cf36cc6de4ee2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 21:37:54 -0400 Subject: sub_810BD64 --- src/pokeblock.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 111bf2160..ee2e5417b 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -474,3 +474,14 @@ void sub_810BD08(void) gUnknown_02039248[1]--; } } + +void sub_810BD64(u16 a0) +{ + u8 i; + int y; + for (i=0; i<14; i++) + { + (gBGTilemapBuffers)[2][(2 * gUnknown_02039248[0] + 1) * 32 + (y = i + 15)] = a0; + (gBGTilemapBuffers)[2][(2 * gUnknown_02039248[0] + 2) * 32 + y] = a0; + } +} -- cgit v1.2.3 From 6c024a4dd3207de47324b2ba68b2bec2fc5742dc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 27 Jun 2017 22:32:10 -0400 Subject: sub_810BDAC --- src/pokeblock.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index ee2e5417b..e7405349f 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -475,13 +475,78 @@ void sub_810BD08(void) } } -void sub_810BD64(u16 a0) +void sub_810BD64(u16 a0, u16 a1) { u8 i; int y; for (i=0; i<14; i++) { - (gBGTilemapBuffers)[2][(2 * gUnknown_02039248[0] + 1) * 32 + (y = i + 15)] = a0; - (gBGTilemapBuffers)[2][(2 * gUnknown_02039248[0] + 2) * 32 + y] = a0; + gBGTilemapBuffers[2][(2 * gUnknown_02039248[0] + 1) * 32 + (y = i + 15)] = a0; + gBGTilemapBuffers[2][(2 * gUnknown_02039248[0] + 2) * 32 + y] = a0; + } +} + +s16 sub_810CA9C(struct Pokeblock *, u8); +u8 sub_810C9E8(struct Pokeblock *); + +void sub_810BDAC(bool8 flag) +{ + u8 i; + u16 v0; + if (!flag) + { + sub_810BD64(0x1005, 0x1014); + } + else + { + sub_810BD64(0x2005, 0x2014); + } + if (gUnknown_02039248[1]) + { + sub_80F979C(0, 0); + } + else + { + sub_80F979C(0, 1); + } + if (gUnknown_02039248[2] > gUnknown_02039248[3] && gUnknown_02039248[1] + gUnknown_02039248[3] != gUnknown_02039248[2]) + { + sub_80F979C(1, 0); + } + else + { + sub_80F979C(1, 1); + } + for (i=0; i<5; i++) + { + v0 = ((i % 3) << 6) + 0x1a1 + (i / 3) * 6; + if (gUnknown_02039248[0] + gUnknown_02039248[1] != gUnknown_02039248[2]) + { + if (sub_810CA9C(&gSaveBlock1.pokeblocks[gUnknown_02039248[0] + gUnknown_02039248[1]], i + 1) > 0) + { + gBGTilemapBuffers[2][v0] = (i << 12) + 23; + gBGTilemapBuffers[2][v0 + 32] = (i << 12) + 24; + } + else + { + gBGTilemapBuffers[2][v0] = 15; + gBGTilemapBuffers[2][v0 + 32] = 15; + } + } + else + { + gBGTilemapBuffers[2][v0] = 15; + gBGTilemapBuffers[2][v0 + 32] = 15; + } + } + BasicInitMenuWindow(&gWindowConfig_81E6E34); + if (gUnknown_02039248[0] + gUnknown_02039248[1] != gUnknown_02039248[2]) + { + sub_8072C14(gStringVar1, sub_810C9E8(&gSaveBlock1.pokeblocks[gUnknown_02039248[0] + gUnknown_02039248[1]]), 16, 1); + MenuPrint(gStringVar1, 11, 17); + } + else + { + MenuZeroFillWindowRect(11, 17, 12, 18); } } -- cgit v1.2.3 From d5e220ebbe7ca570306ee176926b9d81373414df Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 27 Jun 2017 22:56:08 -0400 Subject: decompile up to sub_80BAE10 --- src/sound_check_menu.c | 252 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 221 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index a46e7e363..8736a63f1 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -22,38 +22,55 @@ enum SE_WINDOW }; -extern void sub_80BA6B8(u8); -extern void sub_80BA800(u8); +// driver test cry enums +enum +{ + CRY_TEST_UNK0, + CRY_TEST_VOLUME, + CRY_TEST_PANPOT, + CRY_TEST_PITCH, + CRY_TEST_LENGTH, + CRY_TEST_RELEASE, + CRY_TEST_PROGRESS, + CRY_TEST_CHORUS, + CRY_TEST_PRIORITY +}; + +// minmax range enums +enum +{ + MIN, + MAX +}; + extern void sub_80BAF84(u8); extern void sub_80BB25C(u8); extern void sub_80BA68C(u8); -extern void sub_80BAD5C(void); -extern void sub_80BAE10(u8, u8); -extern void sub_80BAA48(u8); +extern void sub_80BAE78(int, int, int, int); -struct Struct_20387B4 -{ - u32 unk0; - u32 unk4; - u32 unk8; - u32 unkC; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1C; - u32 unk20; -}; +extern struct ToneData voicegroup_84537C0[]; +extern struct ToneData voicegroup_8452590[]; +extern struct ToneData voicegroup_8453DC0[]; +extern struct ToneData voicegroup_8452B90[]; +extern struct ToneData voicegroup_84543C0[]; +extern struct ToneData voicegroup_8453190[]; +extern struct ToneData voicegroup_84549C0[]; +extern struct ToneData voicegroup_8453790[]; + +extern u8 gUnknown_083D0300[18]; -extern struct Struct_20387B4 gUnknown_020387B4; +extern int gUnknown_020387B4[9]; +extern int gUnknown_083D039C[16]; -extern u8 gUnknown_020387B3; +extern s8 gUnknown_020387B3; extern u8 gUnknown_020387B1; extern u8 gUnknown_020387B2; -extern u32 gUnknown_03005D30; extern u8 gUnknown_020387D8; extern u8 gUnknown_020387D9; extern u8 gUnknown_020387B0; +extern struct MusicPlayerInfo *gUnknown_03005D30; + extern u8 *gBGMNames[]; extern u8 *gSENames[]; @@ -77,12 +94,20 @@ extern u8 gDebugText_Priority[]; extern u8 gDebugText_Playing[]; extern u8 gDebugText_Reverse[]; extern u8 gDebugText_Stereo[]; +extern u8 gUnknown_083D03DC[]; +extern u8 gUnknown_083D03DE[]; void sub_80BA258(u8); void sub_80BA384(u8); void sub_80BA65C(u8); +void sub_80BA6B8(u8); void sub_80BA700(u16, u16, u16); void sub_80BA79C(u8 *, u16, u16); +void sub_80BA800(u8); +void sub_80BAA48(u8); +void sub_80BACDC(s8); +void sub_80BAD5C(void); +void sub_80BAE10(u8, u8); void sub_80BA0A8(void) { @@ -744,7 +769,7 @@ void sub_80BA79C(u8 *string, u16 x, u16 y) MenuPrint(str, x, y); } -void sub_80BA800(u8 taskId) +void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu { u8 bbackStr[10]; u8 aplayStr[11]; @@ -797,19 +822,184 @@ void sub_80BA800(u8 taskId) gUnknown_020387B3 = 0; gUnknown_020387B1 = 0; gUnknown_020387B2 = 0; - gUnknown_03005D30 = 0; + gUnknown_03005D30 = NULL; gUnknown_020387D8 = 0; gUnknown_020387D9 = 1; - gUnknown_020387B4.unk0 = 0; - gUnknown_020387B4.unk4 = 0x78; - gUnknown_020387B4.unk8 = 0; - gUnknown_020387B4.unkC = 0x3C00; - gUnknown_020387B4.unk10 = 0xB4; - gUnknown_020387B4.unk18 = 0; - gUnknown_020387B4.unk14 = 0; - gUnknown_020387B4.unk1C = 0; - gUnknown_020387B4.unk20 = 2; + gUnknown_020387B4[CRY_TEST_UNK0] = 0; + gUnknown_020387B4[CRY_TEST_VOLUME] = 0x78; + gUnknown_020387B4[CRY_TEST_PANPOT] = 0; + gUnknown_020387B4[CRY_TEST_PITCH] = 0x3C00; + gUnknown_020387B4[CRY_TEST_LENGTH] = 0xB4; + gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; + gUnknown_020387B4[CRY_TEST_RELEASE] = 0; + gUnknown_020387B4[CRY_TEST_CHORUS] = 0; + gUnknown_020387B4[CRY_TEST_PRIORITY] = 2; sub_80BAD5C(); sub_80BAE10(0, 0); gTasks[taskId].func = sub_80BAA48; } + +void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput +{ + if(gMain.newKeys & 0x2) + { + REG_DISPCNT = 0x7140; + REG_WIN0H = 0x11DF; + REG_WIN0V = 0x11F; + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + gTasks[taskId].func = sub_80BA258; + return; + } + if(gMain.newAndRepeatedKeys & 0x40) // _080BAAA8 + { + u8 backupVar = gUnknown_020387B3; + if(--gUnknown_020387B3 < 0) + gUnknown_020387B3 = 8; + + sub_80BAE10(backupVar, gUnknown_020387B3); + return; + } + if(gMain.newAndRepeatedKeys & 0x80) // _080BAAD0 + { + u8 backupVar = gUnknown_020387B3; + if(++gUnknown_020387B3 > 8) + gUnknown_020387B3 = 0; + + sub_80BAE10(backupVar, gUnknown_020387B3); + return; + } + if(gMain.newKeys & 0x8) // _080BAAF8 + { + gUnknown_020387D8 ^= 1; + sub_80BAD5C(); + return; + } + if(gMain.newKeys & 0x4) // _080BAB14 + { + gUnknown_020387D9 ^= 1; + sub_80BAD5C(); + SetPokemonCryStereo(gUnknown_020387D9); + return; + } + if(gMain.newAndRepeatedKeys & 0x100) // _080BAB38 + { + sub_80BACDC(10); + sub_80BAD5C(); + return; + } + if(gMain.newAndRepeatedKeys & 0x200) // _080BAB46 + { + sub_80BACDC(-10); + sub_80BAD5C(); + return; + } + if(gMain.newAndRepeatedKeys & 0x20) // _080BAB56 + { + sub_80BACDC(-1); + sub_80BAD5C(); + return; + } + if(gMain.newAndRepeatedKeys & 0x10) // _080BAB64 + { + sub_80BACDC(1); + sub_80BAD5C(); + return; + } + if(gMain.newKeys & 0x1) // _080BAB78 + { + u8 divide, remaining; + + SetPokemonCryVolume(gUnknown_020387B4[CRY_TEST_VOLUME]); + SetPokemonCryPanpot(gUnknown_020387B4[CRY_TEST_PANPOT]); + SetPokemonCryPitch(gUnknown_020387B4[CRY_TEST_PITCH]); + SetPokemonCryLength(gUnknown_020387B4[CRY_TEST_LENGTH]); + SetPokemonCryProgress(gUnknown_020387B4[CRY_TEST_PROGRESS]); + SetPokemonCryRelease(gUnknown_020387B4[CRY_TEST_RELEASE]); + SetPokemonCryChorus(gUnknown_020387B4[CRY_TEST_CHORUS]); + SetPokemonCryPriority(gUnknown_020387B4[CRY_TEST_PRIORITY]); + + remaining = gUnknown_020387B4[CRY_TEST_UNK0] % 128; + divide = gUnknown_020387B4[CRY_TEST_UNK0] / 128; + + switch(divide) + { + case 0: + if(gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84537C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452590[remaining]); + break; + case 1: + if(gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453DC0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452B90[remaining]); + break; + case 2: + if(gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84543C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453190[remaining]); + break; + case 3: + if(gUnknown_020387D8) + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84549C0[remaining]); + else + gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453790[remaining]); + break; + } + } + + // _080BACA2 + if(gUnknown_03005D30 != NULL) + { + gUnknown_020387B1 = IsPokemonCryPlaying(gUnknown_03005D30); + + if(gUnknown_020387B1 != gUnknown_020387B2) + sub_80BAD5C(); + + gUnknown_020387B2 = gUnknown_020387B1; + } +} + +void sub_80BACDC(s8 var) +{ + int minMaxArray[16]; + + memcpy(minMaxArray, gUnknown_083D039C, sizeof minMaxArray); + gUnknown_020387B4[gUnknown_020387B3] += var; + + if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[ARR_2D(gUnknown_020387B3, MAX)]) + gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[ARR_2D(gUnknown_020387B3, MIN)]; + + if(gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[ARR_2D(gUnknown_020387B3, MIN)]) + gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[ARR_2D(gUnknown_020387B3, MAX)]; +} + +void sub_80BAD5C(void) +{ + sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0] + 1, 0xB, 0x1, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_VOLUME], 0xB, 0x3, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_PANPOT], 0xB, 0x5, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_PITCH], 0xB, 0x7, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_LENGTH], 0xB, 0x9, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_RELEASE], 0xB, 0xB, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_PROGRESS], 0xB, 0xD, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_CHORUS], 0xB, 0xF, 0x5); + sub_80BAE78(gUnknown_020387B4[CRY_TEST_PRIORITY], 0xB, 0x11, 0x5); + sub_80BAE78(gUnknown_020387B1, 0x1B, 0x10, 0x1); + sub_80BAE78(gUnknown_020387D8, 0x1B, 0xE, 0x1); + sub_80BAE78(gUnknown_020387D9, 0x1B, 0xC, 0x1); +} + +void sub_80BAE10(u8 var1, u8 var2) +{ + u8 str1[2]; + u8 str2[2]; + + memcpy(str1, gUnknown_083D03DC, sizeof str1); + memcpy(str2, gUnknown_083D03DE, sizeof str2); + + MenuPrint(str2, gUnknown_083D0300[ARR_2D(var1, 0)], gUnknown_083D0300[ARR_2D(var1, 1)]); + MenuPrint(str1, gUnknown_083D0300[ARR_2D(var2, 0)], gUnknown_083D0300[ARR_2D(var2, 1)]); +} -- cgit v1.2.3 From b2ac045c71d0695dcdde96f1cb6a5b513fbaa294 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 28 Jun 2017 08:45:32 -0400 Subject: sub_810BF7C --- src/pokeblock.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index e7405349f..e22752253 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -5,6 +5,7 @@ #include "global.h" #include "rom4.h" #include "sprite.h" +#include "script.h" #include "strings.h" #include "task.h" #include "unknown_task.h" @@ -19,6 +20,8 @@ #include "item_menu.h" #include "item.h" #include "items.h" +#include "sound.h" +#include "songs.h" #include "pokeblock.h" // rodata @@ -550,3 +553,82 @@ void sub_810BDAC(bool8 flag) MenuZeroFillWindowRect(11, 17, 12, 18); } } + +void sub_810C8D4(struct Sprite *); + +void sub_810BF38(bool8 flag) +{ + PlaySE(SE_SELECT); + gSprites[ewram[0x1fffe]].callback = sub_810C8D4; + sub_810BDAC(flag); +} + +void sub_810C0C8(u8); +void sub_810C31C(u8); +void sub_810C368(u8); + +void sub_810BF7C(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (gUnknown_02039248[0] != 0) + { + sub_810BD64(5, 20); + gUnknown_02039248[0]--; + sub_810BF38(FALSE); + } + else if (gUnknown_02039248[1] != 0) + { + gUnknown_02039248[1]--; + sub_810BB88(gUnknown_02039248[1]); + sub_810BF38(FALSE); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (gUnknown_02039248[0] != gUnknown_02039248[3]) + { + sub_810BD64(5, 20); + gUnknown_02039248[0]++; + sub_810BF38(FALSE); + } + else if (gUnknown_02039248[1] + gUnknown_02039248[0] != gUnknown_02039248[2]) + { + gUnknown_02039248[1]++; + sub_810BB88(gUnknown_02039248[1]); + sub_810BF38(FALSE); + } + } + else if (gMain.newKeys & SELECT_BUTTON) + { + if (gUnknown_02039248[1] + gUnknown_02039248[0] != gUnknown_02039248[2]) + { + PlaySE(SE_SELECT); + sub_810BDAC(TRUE); + gTasks[taskId].data[0] = gUnknown_02039248[1] + gUnknown_02039248[0]; + gTasks[taskId].func = sub_810C0C8; + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_02039248[1] + gUnknown_02039248[0] == gUnknown_02039248[2]) + { + gScriptResult = 0xffff; + sub_810C31C(taskId); + } + else + { + sub_810C368(taskId); + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gScriptResult = 0xffff; + sub_810C31C(taskId); + } + } +} -- cgit v1.2.3 From a33c8cb4f38a6977d9b2d41c06555243892efa54 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 09:32:50 -0400 Subject: sub_810C0C8 --- src/pokeblock.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index e22752253..0f1e36ee7 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -632,3 +632,60 @@ void sub_810BF7C(u8 taskId) } } } + +void sub_810C1C8(u8, u8); +void sub_810C23C(u8); + +void sub_810C0C8(u8 taskId) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (gUnknown_02039248[0] != 0) + { + sub_810BD64(5, 20); + gUnknown_02039248[0]--; + sub_810BF38(TRUE); + sub_810C1C8(taskId, 1); + } + else if (gUnknown_02039248[1] != 0) + { + sub_810C1C8(taskId, 0); + gUnknown_02039248[1]--; + sub_810BB88(gUnknown_02039248[1]); + sub_810BF38(TRUE); + sub_810C1C8(taskId, 1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (gUnknown_02039248[0] != gUnknown_02039248[3]) + { + sub_810BD64(5, 20); + gUnknown_02039248[0]++; + sub_810BF38(TRUE); + sub_810C1C8(taskId, 1); + } + else if (gUnknown_02039248[1] + gUnknown_02039248[0] != gUnknown_02039248[2]) + { + sub_810C1C8(taskId, 0); + gUnknown_02039248[1]++; + sub_810BB88(gUnknown_02039248[1]); + sub_810BF38(TRUE); + sub_810C1C8(taskId, 1); + } + } + else if (gMain.newKeys & A_BUTTON || gMain.newKeys & SELECT_BUTTON) + { + PlaySE(SE_SELECT); + sub_810C1C8(taskId, 0); + sub_810C23C(taskId); + gTasks[taskId].func = sub_810BF7C; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_810C1C8(taskId, 0); + sub_810BDAC(0); + gTasks[taskId].func = sub_810BF7C; + } +} -- cgit v1.2.3 From 8f84aa839874e2b69bd0e31694fad7560ca90d17 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 09:46:43 -0400 Subject: sub_810C1C8 --- src/pokeblock.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 0f1e36ee7..775bc42ab 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -689,3 +689,24 @@ void sub_810C0C8(u8 taskId) gTasks[taskId].func = sub_810BF7C; } } + +void sub_810C1C8(u8 taskId, u8 flag) +{ + u8 i; + u32 x; + s16 y; + u16 v0 = 0x1005; + if (!flag) + { + v0 = 0x0005; + } + y = gTasks[taskId].data[0] - gUnknown_02039248[1]; + if ((u16)y <= 8 && y != gUnknown_02039248[0]) + { + for (i=0; i<14; i++) + { + gBGTilemapBuffers[2][(2 * y + 1) * 32 + (x = i + 15)] = v0; + gBGTilemapBuffers[2][(2 * y + 2) * 32 + x] = v0; + } + } +} -- cgit v1.2.3 From c038b3a51cd82ec56ed09965513e8f846a3490df Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 09:51:41 -0400 Subject: sub_810C23C --- src/pokeblock.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 775bc42ab..a47890fe9 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -710,3 +710,21 @@ void sub_810C1C8(u8 taskId, u8 flag) } } } + +void sub_810C23C(u8 taskId) +{ + struct Pokeblock buf; + u8 selidx = gUnknown_02039248[1] + gUnknown_02039248[0]; + if (selidx == gUnknown_02039248[2]) + { + sub_810BDAC(FALSE); + } + else + { + buf = gSaveBlock1.pokeblocks[selidx]; + gSaveBlock1.pokeblocks[selidx] = gSaveBlock1.pokeblocks[gTasks[taskId].data[0]]; + gSaveBlock1.pokeblocks[gTasks[taskId].data[0]] = buf; + sub_810BB88(gUnknown_02039248[1]); + sub_810BDAC(FALSE); + } +} -- cgit v1.2.3 From f01cdd2a380174613dc0da6e04dd19a1b0520b0a Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 10:31:51 -0400 Subject: sub_810C368 --- src/menu.c | 2 +- src/pokeblock.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/menu.c b/src/menu.c index 45cfbbc2f..d532fc602 100644 --- a/src/menu.c +++ b/src/menu.c @@ -571,7 +571,7 @@ void PrintMenuItems(u8 left, u8 top, u8 menuItemCount, const struct MenuAction m MenuPrint(menuItems[i].text, left, top + 2 * i); } -void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], u8 *order) +void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], const u8 *order) { u8 i; diff --git a/src/pokeblock.c b/src/pokeblock.c index a47890fe9..e62e8cf90 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -12,6 +12,7 @@ #include "text.h" #include "main.h" #include "menu.h" +#include "field_fadetransition.h" #include "palette.h" #include "graphics.h" #include "decompress.h" @@ -728,3 +729,51 @@ void sub_810C23C(u8 taskId) sub_810BDAC(FALSE); } } + +void sub_810C2B0(void) +{ + DestroyVerticalScrollIndicator(0); + DestroyVerticalScrollIndicator(1); + BuyMenuFreeMemory(); +} + +void sub_810C2C8(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gUnknown_02039244 == 3) + { + gFieldCallback = sub_8080990; + } + sub_810C2B0(); + SetMainCallback2(gUnknown_083F7EA8[gUnknown_02039244]); + DestroyTask(taskId); + } +} + +void sub_810C31C(u8 taskId) +{ + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + if (gUnknown_02039244 > 1) + { + gScriptItemId = ITEM_NONE; + } + gTasks[taskId].func = sub_810C2C8; +} + +void sub_810C40C(u8); + +void sub_810C368(u8 taskId) +{ + int v0 = 0; + if (gUnknown_02039244 > 1) + v0 = 2; + sub_80F98A4(0); + sub_80F98A4(1); + BasicInitMenuWindow(&gWindowConfig_81E6E50); + MenuDrawTextWindow(7, v0 + 4, 13, 11); + PrintMenuItemsReordered(8, v0 + 5, gUnknown_0203924C, (const struct MenuAction *)gUnknown_083F7EF4, gUnknown_03000758); + InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5); + gScriptItemId = gUnknown_02039248[0] + gUnknown_02039248[1]; + gTasks[taskId].func = sub_810C40C; +} -- cgit v1.2.3 From 7018449024766d1b24d3de4271f998d285e19cd0 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 10:38:43 -0400 Subject: sub_810C40C --- src/pokeblock.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index e62e8cf90..8ea8de838 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -777,3 +777,33 @@ void sub_810C368(u8 taskId) gScriptItemId = gUnknown_02039248[0] + gUnknown_02039248[1]; gTasks[taskId].func = sub_810C40C; } + +void sub_810C40C(u8 taskId) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (GetMenuCursorPos()) + { + PlaySE(SE_SELECT); + MoveMenuCursor(-1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (GetMenuCursorPos() != gUnknown_0203924C - 1) + { + PlaySE(SE_SELECT); + MoveMenuCursor(+1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_083F7EF4[gUnknown_03000758[GetMenuCursorPos()]].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_810C748(taskId); + } +} -- cgit v1.2.3 From c6255560d7577edf6058171ba61331c7c6f78dfc Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 10:51:18 -0400 Subject: through sub_810C540 --- src/pokeblock.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 8ea8de838..a8de73549 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -807,3 +807,33 @@ void sub_810C40C(u8 taskId) sub_810C748(taskId); } } + +void sub_8136130(struct Pokeblock *, MainCallback); + +void sub_810C4C4(u8 taskId) +{ + if (!gPaletteFade.active) + { + sub_810C2B0(); + sub_8136130(&gSaveBlock1.pokeblocks[gScriptItemId], sub_810B96C); + DestroyTask(taskId); + } +} + +void sub_810C508(u8 taskId) +{ + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_810C4C4; +} + +void sub_810C5EC(u8); + +void sub_810C540(u8 taskId) +{ + BasicInitMenuWindow(&gWindowConfig_81E6E50); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(7, 4, 13, 11); + StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gUnknown_02039248[0] + gUnknown_02039248[1]].color]); + StringExpandPlaceholders(gStringVar4, gContestStatsText_ThrowAwayPrompt); + DisplayItemMessageOnField(taskId, gStringVar4, sub_810C5EC, 0); +} -- cgit v1.2.3 From 0197921d32ac4af5a4290fa3bdcb65a275e8067c Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 11:33:39 -0400 Subject: through sub_810C788 --- src/mori_debug_menu.c | 2 +- src/pokeblock.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c index ba79261c0..2d9e3fa6f 100644 --- a/src/mori_debug_menu.c +++ b/src/mori_debug_menu.c @@ -133,7 +133,7 @@ s8 MoriDebugMenu_PokeblockCase(void) s32 loopCounter; for (loopCounter = 0; loopCounter <= 39; loopCounter++) - sub_810CA6C((u8)loopCounter); + sub_810CA6C(loopCounter); CloseMenu(); return 1; diff --git a/src/pokeblock.c b/src/pokeblock.c index a8de73549..9c6ccfc9f 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -837,3 +837,88 @@ void sub_810C540(u8 taskId) StringExpandPlaceholders(gStringVar4, gContestStatsText_ThrowAwayPrompt); DisplayItemMessageOnField(taskId, gStringVar4, sub_810C5EC, 0); } + +void sub_810C5C0(u8 taskId) +{ + sub_80F979C(1, 1); + gTasks[taskId].func = sub_810C540; +} + +void sub_810C5EC(u8 taskId) +{ + DisplayYesNoMenu(7, 6, 1); + DoYesNoFuncWithChoice(taskId, gUnknown_083F7F24); +} + +void sub_810C704(u8); + +void sub_810C610(u8 taskId) +{ + MenuZeroFillWindowRect(7, 6, 13, 11); + sub_810CA6C((gUnknown_02039248[0] + gUnknown_02039248[1])); + StringExpandPlaceholders(gStringVar4, gContestStatsText_WasThrownAway); + DisplayItemMessageOnField(taskId, gStringVar4, sub_810C704, 0); + sub_810BC98(); + sub_810BD08(); +} + +void sub_810C668(u8 taskId) +{ + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + if (gUnknown_02039248[2] > gUnknown_02039248[3] && gUnknown_02039248[1] + gUnknown_02039248[3] != gUnknown_02039248[2]) + { + sub_80F979C(1, 0); + } + BasicInitMenuWindow(&gWindowConfig_81E6E50); + MenuZeroFillWindowRect(7, 6, 13, 11); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_810BF7C; +} + +void sub_810C6DC(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) + { + sub_810C668(taskId); + } +} + +void sub_810C704(u8 taskId) +{ + BasicInitMenuWindow(&gWindowConfig_81E6E34); + sub_810BC84(gUnknown_02039248[1]); + sub_80F979C(1, 1); + gTasks[taskId].func = sub_810C6DC; +} + +void sub_810C748(u8 taskId) +{ + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(7, 4, 13, 11); + gTasks[taskId].func = sub_810BF7C; +} + +void sub_810C788(u8 taskId) +{ + s16 v0 = sub_810CAE4(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); + StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); + sub_810CA6C(gScriptItemId); + gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8; + if (v0 == 0) + { + gScriptItemId += 1; + } + if (v0 > 0) + { + gScriptItemId += 2; + } + if (v0 < 0) + { + gScriptItemId += 3; + } + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_810C2C8; +} -- cgit v1.2.3 From 180a1aba1687423fadca8f7d19567f95b47ecb73 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 12:33:11 -0400 Subject: Finish decompilation of pokeblock.s --- src/pokeblock.c | 238 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 205 insertions(+), 33 deletions(-) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index 9c6ccfc9f..fd2e2acde 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -23,37 +23,38 @@ #include "items.h" #include "sound.h" #include "songs.h" +#include "safari_zone.h" #include "pokeblock.h" // rodata -const s8 gPokeblockFlavorCompatibilityTable[][5] = { +const s8 gPokeblockFlavorCompatibilityTable[] = { // Cool, Beauty, Cute, Smart, Tough - { 0, 0, 0, 0, 0}, // Hardy - { 1, 0, 0, 0, -1}, // Lonely - { 1, 0, -1, 0, 0}, // Brave - { 1, -1, 0, 0, 0}, // Adamant - { 1, 0, 0, -1, 0}, // Naughty - { -1, 0, 0, 0, 1}, // Bold - { 0, 0, 0, 0, 0}, // Docile - { 0, 0, -1, 0, 1}, // Relaxed - { 0, -1, 0, 0, 1}, // Impish - { 0, 0, 0, -1, 1}, // Lax - { -1, 0, 1, 0, 0}, // Timid - { 0, 0, 1, 0, -1}, // Hasty - { 0, 0, 0, 0, 0}, // Serious - { 0, -1, 1, 0, 0}, // Jolly - { 0, 0, 1, -1, 0}, // Naive - { -1, 1, 0, 0, 0}, // Modest - { 0, 1, 0, 0, -1}, // Mild - { 0, 1, -1, 0, 0}, // Quiet - { 0, 0, 0, 0, 0}, // Bashful - { 0, 1, 0, -1, 0}, // Rash - { -1, 0, 0, 1, 0}, // Calm - { 0, 0, 0, 1, -1}, // Gentle - { 0, 0, -1, 1, 0}, // Sassy - { 0, -1, 0, 1, 0}, // Careful - { 0, 0, 0, 0, 0} // Quirky + 0, 0, 0, 0, 0, // Hardy + 1, 0, 0, 0, -1, // Lonely + 1, 0, -1, 0, 0, // Brave + 1, -1, 0, 0, 0, // Adamant + 1, 0, 0, -1, 0, // Naughty + -1, 0, 0, 0, 1, // Bold + 0, 0, 0, 0, 0, // Docile + 0, 0, -1, 0, 1, // Relaxed + 0, -1, 0, 0, 1, // Impish + 0, 0, 0, -1, 1, // Lax + -1, 0, 1, 0, 0, // Timid + 0, 0, 1, 0, -1, // Hasty + 0, 0, 0, 0, 0, // Serious + 0, -1, 1, 0, 0, // Jolly + 0, 0, 1, -1, 0, // Naive + -1, 1, 0, 0, 0, // Modest + 0, 1, 0, 0, -1, // Mild + 0, 1, -1, 0, 0, // Quiet + 0, 0, 0, 0, 0, // Bashful + 0, 1, 0, -1, 0, // Rash + -1, 0, 0, 1, 0, // Calm + 0, 0, 0, 1, -1, // Gentle + 0, 0, -1, 1, 0, // Sassy + 0, -1, 0, 1, 0, // Careful + 0, 0, 0, 0, 0 // Quirky }; void (*const gUnknown_083F7EA8[])(void) = { @@ -153,12 +154,12 @@ const struct SpriteTemplate gSpriteTemplate_83F7F84 = { SpriteCallbackDummy }; -const u8 gUnknown_083F7F9C[][8] = { - { 1, 20, 0, 0, 0, 0, 20, 0}, - { 2, 0, 20, 0, 0, 0, 20, 0}, - { 3, 0, 0, 20, 0, 0, 20, 0}, - { 4, 0, 0, 0, 20, 0, 20, 0}, - { 5, 0, 0, 0, 0, 20, 20, 0} +const struct Pokeblock gUnknown_083F7F9C[] = { + { PBLOCK_CLR_RED, 20, 0, 0, 0, 0, 20}, + { PBLOCK_CLR_BLUE, 0, 20, 0, 0, 0, 20}, + { PBLOCK_CLR_PINK, 0, 0, 20, 0, 0, 20}, + { PBLOCK_CLR_GREEN, 0, 0, 0, 20, 0, 20}, + { PBLOCK_CLR_YELLOW, 0, 0, 0, 0, 20, 20} }; // text @@ -490,7 +491,7 @@ void sub_810BD64(u16 a0, u16 a1) } } -s16 sub_810CA9C(struct Pokeblock *, u8); +s16 sub_810CA9C(const struct Pokeblock *, u8); u8 sub_810C9E8(struct Pokeblock *); void sub_810BDAC(bool8 flag) @@ -922,3 +923,174 @@ void sub_810C788(u8 taskId) BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_810C2C8; } + +void sub_810C854(u8 taskId) +{ + SafariZoneActivatePokeblockFeeder(gScriptItemId); + StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); + gScriptResult = gScriptItemId; + sub_810CA6C(gScriptItemId); + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gTasks[taskId].func = sub_810C2C8; +} + +void sub_810C8D4(struct Sprite *sprite) +{ + if (sprite->data0 > 1) + { + sprite->data0 = 0; + } + switch (sprite->data0) + { + case 0: + sprite->oam.affineMode = 1; + sprite->affineAnims = gSpriteAffineAnimTable_83F7F70; + InitSpriteAffineAnim(sprite); + sprite->data0 = 1; + sprite->data1 = 0; + break; + case 1: + if (++sprite->data1 > 11) + { + sprite->oam.affineMode = 0; + sprite->data0 = 0; + sprite->data1 = 0; + FreeOamMatrix(sprite->oam.matrixNum); + sprite->callback = SpriteCallbackDummy; + } + break; + } +} + +void ClearPokeblock(u8 pokeblockIdx) +{ + gSaveBlock1.pokeblocks[pokeblockIdx].color = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].spicy = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].dry = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].sweet = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].bitter = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].sour = 0; + gSaveBlock1.pokeblocks[pokeblockIdx].feel = 0; +} + +void ClearPokeblocks(void) +{ + u8 pokeblockIdx; + for (pokeblockIdx=0; pokeblockIdx 99) + feel = 99; + return feel; +} + +s8 sub_810CA00(void) +{ + u8 i; + for (i=0; icolor; + if (field == 1) + return pokeblock->spicy; + if (field == 2) + return pokeblock->dry; + if (field == 3) + return pokeblock->sweet; + if (field == 4) + return pokeblock->bitter; + if (field == 5) + return pokeblock->sour; + if (field == 6) + return pokeblock->feel; + return 0; +} + +s16 sub_810CAE4(u8 nature, const struct Pokeblock *pokeblock) +{ + u8 flavor; + s16 curGain; + s16 totalGain = 0; + for (flavor=0; flavor<5; flavor++) + { + curGain = sub_810CA9C(pokeblock, flavor + 1); + if (curGain > 0) + { + totalGain += curGain * gPokeblockFlavorCompatibilityTable[5 * nature + flavor]; + } + } + return totalGain; +} + +void sub_810CB44(struct Pokeblock *pokeblock, u8 *dest) +{ + u8 color = sub_810CA9C(pokeblock, 0); + StringCopy(dest, gPokeblockNames[color]); +} + +bool8 sub_810CB68(u8 nature, u8 *dest) +{ + u8 flavor; + for (flavor=0; flavor<5; flavor++) + { + if (sub_810CAE4(nature, &gUnknown_083F7F9C[flavor]) > 0) + { + StringCopy(dest, gPokeblockNames[flavor + 1]); + return TRUE; + } + } + return FALSE; +} -- cgit v1.2.3 From c0b4472f9547e334aa449f6cdbc1078d2190fb0f Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 12:44:43 -0400 Subject: Delete conflicting declaration in player_pc.c --- src/player_pc.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/player_pc.c b/src/player_pc.c index 9cb395432..38e01b92e 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -26,7 +26,6 @@ extern void DoPlayerPCDecoration(u8); extern void BuyMenuFreeMemory(void); extern void DestroyVerticalScrollIndicator(u8); extern void PauseVerticalScrollIndicator(u8); -extern void StartVerticalScrollIndicators(int); extern void LoadScrollIndicatorPalette(void); extern void ClearMailStruct(struct MailStruct *); extern u8 sub_807D770(void); -- cgit v1.2.3 From a7a374266fec8eb34208f8b7008e769cfb0da327 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 14:37:06 -0400 Subject: Move static function declarations to top of c file, and exported declarations to appropriate headers --- src/pokeblock.c | 182 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 95 insertions(+), 87 deletions(-) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index fd2e2acde..a7c6daa8b 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -24,10 +24,61 @@ #include "sound.h" #include "songs.h" #include "safari_zone.h" +#include "use_pokeblock.h" #include "pokeblock.h" +// function declarations + +// gUnknown_083F7EF4 +static void sub_810C508(u8); +static void sub_810C5C0(u8); +static void sub_810C748(u8); +static void sub_810C788(u8); +static void sub_810C854(u8); + +// gUnknown_083F7F24 +static void sub_810C610(u8); +static void sub_810C668(u8); + +// sub_810B6C0 +static bool8 sub_810B998(void); +static void sub_810BC98(void); +static void sub_810BD08(void); +static void sub_810BB0C(void); +static void sub_810BB30(void); +static void sub_810BC84(u8); + +// sub_810B96C +static void sub_810BF7C(u8); + +// sub_810BC84 +static void sub_810BDAC(bool8); + +// sub_810BF38 +static void sub_810C8D4(struct Sprite *); + +// sub_810BF7C +static void sub_810C0C8(u8); +static void sub_810C31C(u8); +static void sub_810C368(u8); + +// sub_810C0C8 +static void sub_810C1C8(u8, u8); +static void sub_810C23C(u8); + +// sub_810C368 +static void sub_810C40C(u8); + +// sub_810C540 +static void sub_810C5EC(u8); + +// sub_810C610 +static void sub_810C704(u8); + // rodata +#define GFX_TAG_POKEBLOCK_CASE 14800 + const s8 gPokeblockFlavorCompatibilityTable[] = { // Cool, Beauty, Cute, Smart, Tough 0, 0, 0, 0, 0, // Hardy @@ -82,28 +133,19 @@ const u8 *const gPokeblockNames[] = { ContestStatsText_GoldPokeBlock }; -void sub_810C508(u8); -void sub_810C5C0(u8); -void sub_810C748(u8); -void sub_810C788(u8); -void sub_810C854(u8); - const struct MenuAction2 gUnknown_083F7EF4[] = { - OtherText_Use, sub_810C508, - OtherText_Toss, sub_810C5C0, - gOtherText_CancelNoTerminator, sub_810C748, - OtherText_Use, sub_810C788, - OtherText_Use, sub_810C854, + {OtherText_Use, sub_810C508}, + {OtherText_Toss, sub_810C5C0}, + {gOtherText_CancelNoTerminator, sub_810C748}, + {OtherText_Use, sub_810C788}, + {OtherText_Use, sub_810C854}, }; const u8 gUnknown_083F7F1C[] = {0, 1, 2}; const u8 gUnknown_083F7F1F[] = {3, 2}; const u8 gUnknown_083F7F21[] = {4, 2}; -void sub_810C610(u8); -void sub_810C668(u8); - -const struct YesNoFuncTable gUnknown_083F7F24[] = {sub_810C610, sub_810C668}; +const struct YesNoFuncTable gUnknown_083F7F24 = {sub_810C610, sub_810C668}; const u8 UnreferencedData_083F7F2C[] = {0x16, 0x17, 0x18, 0x21, 0x2f}; @@ -136,17 +178,17 @@ const union AffineAnimCmd *const gSpriteAffineAnimTable_83F7F70[] = { const struct CompressedSpriteSheet gUnknown_083F7F74 = { gMenuPokeblockDevice_Gfx, 0x800, - 0x39d0 + GFX_TAG_POKEBLOCK_CASE }; const struct CompressedSpritePalette gUnknown_083F7F7C = { gMenuPokeblockDevice_Pal, - 0x39d0 + GFX_TAG_POKEBLOCK_CASE }; const struct SpriteTemplate gSpriteTemplate_83F7F84 = { - 0x39d0, - 0x39d0, + GFX_TAG_POKEBLOCK_CASE, + GFX_TAG_POKEBLOCK_CASE, &gOamData_83F7F34, gSpriteAnimTable_83F7F44, NULL, @@ -184,14 +226,6 @@ static void sub_810B68C(void) DmaCopy16(3, src, dest, sizeof gBGTilemapBuffers[2]); } -static bool8 sub_810B998(void); -u8 sub_810BA50(s16, s16, u8); -void sub_810BC98(void); -void sub_810BD08(void); -void sub_810BB0C(void); -void sub_810BB30(void); -void sub_810BC84(u8); - static bool8 sub_810B6C0(void) { u16 ime; @@ -306,8 +340,6 @@ static bool8 sub_810B6C0(void) return FALSE; } -void sub_810BF7C(u8); - void sub_810B96C(void) { do { @@ -324,7 +356,7 @@ static bool8 sub_810B998(void) switch (ewram[0x1ffff]) { case 0: - LZDecompressVram(gMenuPokeblock_Gfx, (void *)VRAM + 0x8000); + LZDecompressVram(gMenuPokeblock_Gfx, (u8 *)BG_CHAR_ADDR(2)); ewram[0x1ffff]++; break; case 1: @@ -384,13 +416,13 @@ void sub_810BAF4(void) SetMainCallback2(sub_810B96C); } -void sub_810BB0C(void) +static void sub_810BB0C(void) { BasicInitMenuWindow(&gWindowConfig_81E6E34); sub_8072BD8(ItemId_GetItem(ITEM_POKEBLOCK_CASE)->name, 2, 1, 0x48); } -void sub_810BB30(void) +static void sub_810BB30(void) { BasicInitMenuWindow(&gWindowConfig_81E6E34); MenuPrint(gContestStatsText_Spicy, 2, 13); @@ -400,9 +432,7 @@ void sub_810BB30(void) MenuPrint(gContestStatsText_Sour, 8, 15); } -u8 sub_810C9B0(struct Pokeblock *); - -void sub_810BB88(u8 a0) +static void sub_810BB88(u8 a0) { u8 i; u8 y; @@ -431,15 +461,13 @@ void sub_810BB88(u8 a0) } } -void sub_810BDAC(bool8); - -void sub_810BC84(u8 a0) +static void sub_810BC84(u8 a0) { sub_810BB88(a0); sub_810BDAC(FALSE); } -void sub_810BC98(void) +static void sub_810BC98(void) { u16 i, j; struct Pokeblock buf; @@ -457,7 +485,7 @@ void sub_810BC98(void) } } -void sub_810BD08(void) +static void sub_810BD08(void) { u8 i; gUnknown_02039248[2] = 0; @@ -480,7 +508,7 @@ void sub_810BD08(void) } } -void sub_810BD64(u16 a0, u16 a1) +static void sub_810BD64(u16 a0, u16 a1) { u8 i; int y; @@ -491,10 +519,7 @@ void sub_810BD64(u16 a0, u16 a1) } } -s16 sub_810CA9C(const struct Pokeblock *, u8); -u8 sub_810C9E8(struct Pokeblock *); - -void sub_810BDAC(bool8 flag) +static void sub_810BDAC(bool8 flag) { u8 i; u16 v0; @@ -556,20 +581,14 @@ void sub_810BDAC(bool8 flag) } } -void sub_810C8D4(struct Sprite *); - -void sub_810BF38(bool8 flag) +static void sub_810BF38(bool8 flag) { PlaySE(SE_SELECT); gSprites[ewram[0x1fffe]].callback = sub_810C8D4; sub_810BDAC(flag); } -void sub_810C0C8(u8); -void sub_810C31C(u8); -void sub_810C368(u8); - -void sub_810BF7C(u8 taskId) +static void sub_810BF7C(u8 taskId) { if (!gPaletteFade.active) { @@ -635,10 +654,7 @@ void sub_810BF7C(u8 taskId) } } -void sub_810C1C8(u8, u8); -void sub_810C23C(u8); - -void sub_810C0C8(u8 taskId) +static void sub_810C0C8(u8 taskId) { if (gMain.newAndRepeatedKeys & DPAD_UP) { @@ -692,7 +708,7 @@ void sub_810C0C8(u8 taskId) } } -void sub_810C1C8(u8 taskId, u8 flag) +static void sub_810C1C8(u8 taskId, u8 flag) { u8 i; u32 x; @@ -713,7 +729,7 @@ void sub_810C1C8(u8 taskId, u8 flag) } } -void sub_810C23C(u8 taskId) +static void sub_810C23C(u8 taskId) { struct Pokeblock buf; u8 selidx = gUnknown_02039248[1] + gUnknown_02039248[0]; @@ -731,14 +747,14 @@ void sub_810C23C(u8 taskId) } } -void sub_810C2B0(void) +static void sub_810C2B0(void) { DestroyVerticalScrollIndicator(0); DestroyVerticalScrollIndicator(1); BuyMenuFreeMemory(); } -void sub_810C2C8(u8 taskId) +static void sub_810C2C8(u8 taskId) { if (!gPaletteFade.active) { @@ -752,7 +768,7 @@ void sub_810C2C8(u8 taskId) } } -void sub_810C31C(u8 taskId) +static void sub_810C31C(u8 taskId) { BeginNormalPaletteFade(-1, 0, 0, 16, 0); if (gUnknown_02039244 > 1) @@ -762,9 +778,7 @@ void sub_810C31C(u8 taskId) gTasks[taskId].func = sub_810C2C8; } -void sub_810C40C(u8); - -void sub_810C368(u8 taskId) +static void sub_810C368(u8 taskId) { int v0 = 0; if (gUnknown_02039244 > 1) @@ -779,7 +793,7 @@ void sub_810C368(u8 taskId) gTasks[taskId].func = sub_810C40C; } -void sub_810C40C(u8 taskId) +static void sub_810C40C(u8 taskId) { if (gMain.newAndRepeatedKeys & DPAD_UP) { @@ -809,9 +823,7 @@ void sub_810C40C(u8 taskId) } } -void sub_8136130(struct Pokeblock *, MainCallback); - -void sub_810C4C4(u8 taskId) +static void sub_810C4C4(u8 taskId) { if (!gPaletteFade.active) { @@ -821,15 +833,13 @@ void sub_810C4C4(u8 taskId) } } -void sub_810C508(u8 taskId) +static void sub_810C508(u8 taskId) { BeginNormalPaletteFade(-1, 0, 0, 16, 0); gTasks[taskId].func = sub_810C4C4; } -void sub_810C5EC(u8); - -void sub_810C540(u8 taskId) +static void sub_810C540(u8 taskId) { BasicInitMenuWindow(&gWindowConfig_81E6E50); HandleDestroyMenuCursors(); @@ -839,21 +849,19 @@ void sub_810C540(u8 taskId) DisplayItemMessageOnField(taskId, gStringVar4, sub_810C5EC, 0); } -void sub_810C5C0(u8 taskId) +static void sub_810C5C0(u8 taskId) { sub_80F979C(1, 1); gTasks[taskId].func = sub_810C540; } -void sub_810C5EC(u8 taskId) +static void sub_810C5EC(u8 taskId) { DisplayYesNoMenu(7, 6, 1); - DoYesNoFuncWithChoice(taskId, gUnknown_083F7F24); + DoYesNoFuncWithChoice(taskId, &gUnknown_083F7F24); } -void sub_810C704(u8); - -void sub_810C610(u8 taskId) +static void sub_810C610(u8 taskId) { MenuZeroFillWindowRect(7, 6, 13, 11); sub_810CA6C((gUnknown_02039248[0] + gUnknown_02039248[1])); @@ -863,7 +871,7 @@ void sub_810C610(u8 taskId) sub_810BD08(); } -void sub_810C668(u8 taskId) +static void sub_810C668(u8 taskId) { StartVerticalScrollIndicators(0); StartVerticalScrollIndicators(1); @@ -877,7 +885,7 @@ void sub_810C668(u8 taskId) gTasks[taskId].func = sub_810BF7C; } -void sub_810C6DC(u8 taskId) +static void sub_810C6DC(u8 taskId) { if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { @@ -885,7 +893,7 @@ void sub_810C6DC(u8 taskId) } } -void sub_810C704(u8 taskId) +static void sub_810C704(u8 taskId) { BasicInitMenuWindow(&gWindowConfig_81E6E34); sub_810BC84(gUnknown_02039248[1]); @@ -893,7 +901,7 @@ void sub_810C704(u8 taskId) gTasks[taskId].func = sub_810C6DC; } -void sub_810C748(u8 taskId) +static void sub_810C748(u8 taskId) { StartVerticalScrollIndicators(0); StartVerticalScrollIndicators(1); @@ -902,7 +910,7 @@ void sub_810C748(u8 taskId) gTasks[taskId].func = sub_810BF7C; } -void sub_810C788(u8 taskId) +static void sub_810C788(u8 taskId) { s16 v0 = sub_810CAE4(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]); StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); @@ -924,7 +932,7 @@ void sub_810C788(u8 taskId) gTasks[taskId].func = sub_810C2C8; } -void sub_810C854(u8 taskId) +static void sub_810C854(u8 taskId) { SafariZoneActivatePokeblockFeeder(gScriptItemId); StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]); @@ -934,7 +942,7 @@ void sub_810C854(u8 taskId) gTasks[taskId].func = sub_810C2C8; } -void sub_810C8D4(struct Sprite *sprite) +static void sub_810C8D4(struct Sprite *sprite) { if (sprite->data0 > 1) { @@ -962,7 +970,7 @@ void sub_810C8D4(struct Sprite *sprite) } } -void ClearPokeblock(u8 pokeblockIdx) +static void ClearPokeblock(u8 pokeblockIdx) { gSaveBlock1.pokeblocks[pokeblockIdx].color = 0; gSaveBlock1.pokeblocks[pokeblockIdx].spicy = 0; -- cgit v1.2.3 From 496fd707b7527382bf97bb08a94ea1d78d543d8e Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 14:45:38 -0400 Subject: Remove excess declarations of gScriptItemId --- src/battle_anim_8137220.c | 2 +- src/battle_party_menu.c | 2 +- src/berry.c | 2 +- src/berry_tag_screen.c | 2 +- src/item_use.c | 1 - src/link.c | 2 +- src/party_menu.c | 2 +- src/pokeblock.c | 1 + 8 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/battle_anim_8137220.c b/src/battle_anim_8137220.c index 42d6cb8da..bb181d5fb 100644 --- a/src/battle_anim_8137220.c +++ b/src/battle_anim_8137220.c @@ -12,6 +12,7 @@ #include "songs.h" #include "sound.h" #include "sprite.h" +#include "item_use.h" #include "string_util.h" #include "task.h" #include "text.h" @@ -33,7 +34,6 @@ extern u8 gBattleBufferA[][0x200]; extern u8 gObjectBankIDs[]; extern MainCallback gPreBattleCallback1; extern bool8 gDoingBattleAnim; -extern u16 gScriptItemId; extern u16 gBattlePartyID[]; extern u8 gHealthboxIDs[]; extern u16 gBattleTypeFlags; diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c index cf572642e..73b847713 100644 --- a/src/battle_party_menu.c +++ b/src/battle_party_menu.c @@ -2,6 +2,7 @@ #include "battle_party_menu.h" #include "battle.h" #include "item_menu.h" +#include "item_use.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" @@ -55,7 +56,6 @@ extern void nullsub_14(); extern void OpenPartyMenu(); extern u8 sub_803FBBC(void); -extern u16 gScriptItemId; extern u8 gPlayerPartyCount; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; diff --git a/src/berry.c b/src/berry.c index d6fbb955e..fa15672e7 100644 --- a/src/berry.c +++ b/src/berry.c @@ -5,6 +5,7 @@ #include "fieldmap.h" #include "item.h" #include "item_menu.h" +#include "item_use.h" #include "items.h" #include "main.h" #include "rng.h" @@ -974,7 +975,6 @@ const struct Berry gBerries[] = const struct BerryTree gBlankBerryTree = {0}; extern u8 BerryTreeScript; -extern u16 gScriptItemId; extern u16 gScriptLastTalked; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 116ca2cca..0e81e4fec 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -5,6 +5,7 @@ #include "field_map_obj.h" #include "item_menu.h" #include "items.h" +#include "item_use.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" @@ -35,7 +36,6 @@ struct BerryTagStatus extern struct Struct2000000 unk_2000000; extern u8 gUnknown_0203932C; extern struct BerryTagStatus gUnknown_0203932E; -extern u16 gScriptItemId; extern u16 gUnknown_030041B4; extern const struct CompressedSpriteSheet gUnknown_083C1F74; diff --git a/src/item_use.c b/src/item_use.c index a92161e9a..b906f91ad 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -50,7 +50,6 @@ extern u8 gUnknown_081A168F[]; extern u16 gBattlePartyID[]; -extern u16 gScriptItemId; extern u16 gBattleTypeFlags; static const u8 gSSTidalBetaString[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); diff --git a/src/link.c b/src/link.c index 363a8b494..5858ad8bf 100644 --- a/src/link.c +++ b/src/link.c @@ -4,6 +4,7 @@ #include "berry.h" #include "berry_blender.h" #include "hall_of_fame.h" +#include "item_use.h" #include "main.h" #include "menu.h" #include "palette.h" @@ -38,7 +39,6 @@ struct LinkTestBGInfo extern u8 unk_2000000[]; extern u8 unk_2004000[]; extern u16 gBattleTypeFlags; -extern u16 gScriptItemId; extern u16 word_3004858; diff --git a/src/party_menu.c b/src/party_menu.c index 99bbb5f83..1fcd2cdda 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -6,6 +6,7 @@ #include "data2.h" #include "event_data.h" #include "item.h" +#include "item_use.h" #include "mail_data.h" #include "main.h" #include "menu.h" @@ -78,7 +79,6 @@ extern u16 gUnknown_0202E8F8; extern u8 gUnknown_0202E8FA; extern u8 gLastFieldPokeMenuOpened; extern u8 gPlayerPartyCount; -extern u16 gScriptItemId; extern s32 gBattleMoveDamage; //extern const u16 gUnknown_083769A8[][6]; diff --git a/src/pokeblock.c b/src/pokeblock.c index a7c6daa8b..dec549bfa 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -19,6 +19,7 @@ #include "menu_helpers.h" #include "battle.h" #include "item_menu.h" +#include "item_use.h" #include "item.h" #include "items.h" #include "sound.h" -- cgit v1.2.3 From b73b15dc9c10ace5145e3d4b339ca833413a1522 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 15:43:12 -0400 Subject: Decompile debug_sub_8120F98 --- src/pokeblock.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src') diff --git a/src/pokeblock.c b/src/pokeblock.c index dec549bfa..b7fa5daa8 100755 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -417,6 +417,17 @@ void sub_810BAF4(void) SetMainCallback2(sub_810B96C); } +#ifdef DEBUG +void debug_sub_8120F98(void) +{ + u8 i; + for (i=0; i<40 && gUnknown_083F7F9C[i].color != 0; i++) + { + gSaveBlock1.pokeblocks[i] = gUnknown_083F7F9C[i]; + } +} +#endif + static void sub_810BB0C(void) { BasicInitMenuWindow(&gWindowConfig_81E6E34); -- cgit v1.2.3 From 7bb9c048b717dcc911383580603009665b479575 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 17:53:44 -0400 Subject: Matching sub_8136294 --- src/pokenav.c | 1 + src/use_pokeblock.c | 374 ++-------------------------------------------------- 2 files changed, 11 insertions(+), 364 deletions(-) (limited to 'src') diff --git a/src/pokenav.c b/src/pokenav.c index 3a386d865..84ed7b14b 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -1,4 +1,5 @@ #include "global.h" +#include "main.h" #include "pokenav.h" #include "battle.h" #include "data2.h" diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index fd60d6291..17387e09f 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -15,8 +15,8 @@ asm(".text\n" ".include \"constants/gba_constants.inc\""); -void *gUnknown_02039308; -void *gUnknown_0203930C; +extern MainCallback gUnknown_02039308; +extern struct Pokeblock *gUnknown_0203930C; u8 gUnknown_02039310; extern struct UnkPokenavStruct_Sub1 *gUnknown_02039304; @@ -35,11 +35,11 @@ void sub_81368A4(void); void sub_8089668(void); u8 sub_81370E4(u8); -void sub_8136130(struct Pokeblock *a0, MainCallback a1) +void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { gUnknown_02039304 = &gUnknown_083DFEC4->unkD164; - gUnknown_02039304->unk8 = a0; - gUnknown_02039304->unk4 = a1; + gUnknown_02039304->pokeblock = pokeblock; + gUnknown_02039304->callback = callback; gUnknown_083DFEC4->unkD162[0] = 2; launch_c3_walk_stairs_and_run_once(sub_8136294); SetMainCallback2(sub_8136244); @@ -47,8 +47,8 @@ void sub_8136130(struct Pokeblock *a0, MainCallback a1) void sub_8136174(void) { - gUnknown_02039304->unk8 = gUnknown_0203930C; - gUnknown_02039304->unk4 = gUnknown_02039308; + gUnknown_02039304->pokeblock = gUnknown_0203930C; + gUnknown_02039304->callback = gUnknown_02039308; gUnknown_02039310 = sub_81370E4(gUnknown_02039310); gUnknown_02039304->unk56 = gUnknown_02039310 < 4 ? 0 : 1; gUnknown_083DFEC4->unkD162[0] = 2; @@ -101,10 +101,8 @@ void launch_c3_walk_stairs_and_run_once(void (*const func)(void)) gUnknown_02039304->unk50 = 0; } -#ifdef NONMATCHING void sub_8136294(void) { - u32 dma3sad; bool32 c1LinkRelatedActive; switch (gUnknown_02039304->unk50) { @@ -200,13 +198,10 @@ void sub_8136294(void) gUnknown_02039304->unk50++; break; case 16: - dma3sad = 0; - REG_DMA3SAD = (vu32)&dma3sad; - REG_DMA3DAD = 0x600F800; - REG_DMA3CNT = 0x85000200; + DmaClear32(3, 0x600f800, 0x800); REG_BG1VOFS = 0; REG_BG1HOFS = 0; - REG_BG1CNT = 0x1f00; + REG_BG1CNT = BGCNT_SCREENBASE(31); gUnknown_02039304->unk50++; break; case 17: @@ -236,7 +231,7 @@ void sub_8136294(void) REG_WININ = 0x3f3f; REG_WINOUT = 0x1b; REG_BG0VOFS = 0x28; - REG_DISPCNT = 0x7f40; + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; // fallthrough case 22: gUnknown_02039304->unk55 = 1; @@ -244,355 +239,6 @@ void sub_8136294(void) break; } } -#else -__attribute__((naked)) -void sub_8136294(void) -{ - asm(".syntax unified\n" - "\tpush {r4,r5,lr}\n" - "\tsub sp, 0x4\n" - "\tldr r1, _081362B4 @ =gUnknown_02039304\n" - "\tldr r0, [r1]\n" - "\tadds r0, 0x50\n" - "\tldrb r0, [r0]\n" - "\tadds r3, r1, 0\n" - "\tcmp r0, 0x16\n" - "\tbls _081362A8\n" - "\tb _0813657A\n" - "_081362A8:\n" - "\tlsls r0, 2\n" - "\tldr r1, _081362B8 @ =_081362BC\n" - "\tadds r0, r1\n" - "\tldr r0, [r0]\n" - "\tmov pc, r0\n" - "\t.align 2, 0\n" - "_081362B4: .4byte gUnknown_02039304\n" - "_081362B8: .4byte _081362BC\n" - "\t.align 2, 0\n" - "_081362BC:\n" - "\t.4byte _08136318\n" - "\t.4byte _08136354\n" - "\t.4byte _0813635E\n" - "\t.4byte _08136366\n" - "\t.4byte _08136374\n" - "\t.4byte _08136380\n" - "\t.4byte _0813638C\n" - "\t.4byte _081363B8\n" - "\t.4byte _081363C8\n" - "\t.4byte _081363DC\n" - "\t.4byte _081363EE\n" - "\t.4byte _08136404\n" - "\t.4byte _08136448\n" - "\t.4byte _08136464\n" - "\t.4byte _08136488\n" - "\t.4byte _08136494\n" - "\t.4byte _0813649A\n" - "\t.4byte _081364D8\n" - "\t.4byte _081364FC\n" - "\t.4byte _08136508\n" - "\t.4byte _08136520\n" - "\t.4byte _08136538\n" - "\t.4byte _0813656C\n" - "_08136318:\n" - "\tbl is_c1_link_related_active\n" - "\tldr r1, _08136344 @ =gUnknown_083DFEC4\n" - "\tldr r1, [r1]\n" - "\tldr r2, _08136348 @ =0x00006dac\n" - "\tadds r1, r2\n" - "\tstrb r0, [r1]\n" - "\tlsls r0, 24\n" - "\tlsrs r1, r0, 24\n" - "\tcmp r1, 0\n" - "\tbeq _08136330\n" - "\tb _0813657A\n" - "_08136330:\n" - "\tldr r4, _0813634C @ =gUnknown_02039304\n" - "\tldr r0, [r4]\n" - "\tadds r0, 0x55\n" - "\tstrb r1, [r0]\n" - "\tldr r0, _08136350 @ =sub_81365A0\n" - "\tbl launch_c3_walk_stairs_and_run_once\n" - "\tldr r1, [r4]\n" - "\tb _08136528\n" - "\t.align 2, 0\n" - "_08136344: .4byte gUnknown_083DFEC4\n" - "_08136348: .4byte 0x00006dac\n" - "_0813634C: .4byte gUnknown_02039304\n" - "_08136350: .4byte sub_81365A0\n" - "_08136354:\n" - "\tbl ResetSpriteData\n" - "\tbl FreeAllSpritePalettes\n" - "\tb _08136524\n" - "_0813635E:\n" - "\tmovs r0, 0\n" - "\tbl SetVBlankCallback\n" - "\tb _08136524\n" - "_08136366:\n" - "\tldr r0, _08136370 @ =gWindowConfig_81E7080\n" - "\tbl SetUpWindowConfig\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_08136370: .4byte gWindowConfig_81E7080\n" - "_08136374:\n" - "\tldr r0, _0813637C @ =gWindowConfig_81E7080\n" - "\tbl MultistepInitMenuWindowBegin\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_0813637C: .4byte gWindowConfig_81E7080\n" - "_08136380:\n" - "\tbl MultistepInitMenuWindowContinue\n" - "\tcmp r0, 0\n" - "\tbne _0813638A\n" - "\tb _0813657A\n" - "_0813638A:\n" - "\tb _08136524\n" - "_0813638C:\n" - "\tldr r0, _081363AC @ =gUnknown_083DFEC4\n" - "\tldr r1, [r0]\n" - "\tldr r4, _081363B0 @ =0x000076aa\n" - "\tadds r0, r1, r4\n" - "\tmovs r2, 0\n" - "\tstrb r2, [r0]\n" - "\tldr r4, _081363B4 @ =0x000087e0\n" - "\tadds r0, r1, r4\n" - "\tstr r2, [r0]\n" - "\tmovs r0, 0xC3\n" - "\tlsls r0, 2\n" - "\tadds r1, r0\n" - "\tmovs r0, 0x20\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r3]\n" - "\tb _08136528\n" - "\t.align 2, 0\n" - "_081363AC: .4byte gUnknown_083DFEC4\n" - "_081363B0: .4byte 0x000076aa\n" - "_081363B4: .4byte 0x000087e0\n" - "_081363B8:\n" - "\tbl sub_80F2688\n" - "\tldr r0, _081363D8 @ =gUnknown_02039304\n" - "\tldr r1, [r0]\n" - "\tadds r1, 0x50\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r1]\n" - "_081363C8:\n" - "\tbl sub_80F26BC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _081363D4\n" - "\tb _0813657A\n" - "_081363D4:\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_081363D8: .4byte gUnknown_02039304\n" - "_081363DC:\n" - "\tmovs r0, 0x1\n" - "\tbl sub_80F2C80\n" - "\tldr r0, _08136400 @ =gUnknown_02039304\n" - "\tldr r1, [r0]\n" - "\tadds r1, 0x50\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r1]\n" - "_081363EE:\n" - "\tmovs r0, 0x1\n" - "\tbl sub_80F2CBC\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _081363FC\n" - "\tb _0813657A\n" - "_081363FC:\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_08136400: .4byte gUnknown_02039304\n" - "_08136404:\n" - "\tldr r1, _08136434 @ =gKeyRepeatStartDelay\n" - "\tmovs r0, 0x14\n" - "\tstrh r0, [r1]\n" - "\tbl CalculatePlayerPartyCount\n" - "\tldr r1, _08136438 @ =gUnknown_083DFEC4\n" - "\tldr r4, [r1]\n" - "\tldr r2, _0813643C @ =0x00008828\n" - "\tadds r1, r4, r2\n" - "\tmovs r5, 0\n" - "\tstrb r0, [r1]\n" - "\tldr r1, _08136440 @ =0x00009344\n" - "\tadds r0, r4, r1\n" - "\tstrb r5, [r0]\n" - "\tsubs r2, 0xC0\n" - "\tadds r0, r4, r2\n" - "\tstr r5, [r0]\n" - "\tbl sub_80F4BD0\n" - "\tldr r0, _08136444 @ =0x0000d160\n" - "\tadds r4, r0\n" - "\tstrh r5, [r4]\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_08136434: .4byte gKeyRepeatStartDelay\n" - "_08136438: .4byte gUnknown_083DFEC4\n" - "_0813643C: .4byte 0x00008828\n" - "_08136440: .4byte 0x00009344\n" - "_08136444: .4byte 0x0000d160\n" - "_08136448:\n" - "\tbl sub_80F1778\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _08136454\n" - "\tb _0813657A\n" - "_08136454:\n" - "\tldr r0, _08136460 @ =REG_BG2VOFS\n" - "\tmovs r1, 0x6\n" - "\tstrh r1, [r0]\n" - "\tadds r0, 0x4\n" - "\tstrh r1, [r0]\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_08136460: .4byte REG_BG2VOFS\n" - "_08136464:\n" - "\tmovs r0, 0\n" - "\tbl sub_80F2E18\n" - "\tldr r0, _0813647C @ =gUnknown_083DFEC4\n" - "\tldr r0, [r0]\n" - "\tldr r1, _08136480 @ =0x00008768\n" - "\tadds r0, r1\n" - "\tldr r1, [r0]\n" - "\tldr r0, _08136484 @ =0x0000ffd8\n" - "\tstrh r0, [r1, 0x26]\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_0813647C: .4byte gUnknown_083DFEC4\n" - "_08136480: .4byte 0x00008768\n" - "_08136484: .4byte 0x0000ffd8\n" - "_08136488:\n" - "\tbl sub_80F170C\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _0813657A\n" - "\tb _08136524\n" - "_08136494:\n" - "\tbl sub_80F33A8\n" - "\tb _08136524\n" - "_0813649A:\n" - "\tldr r1, _081364C4 @ =0x0600f800\n" - "\tmovs r2, 0\n" - "\tstr r2, [sp]\n" - "\tldr r0, _081364C8 @ =0x040000d4\n" - "\tmov r4, sp\n" - "\tstr r4, [r0]\n" - "\tstr r1, [r0, 0x4]\n" - "\tldr r1, _081364CC @ =0x85000200\n" - "\tstr r1, [r0, 0x8]\n" - "\tldr r0, [r0, 0x8]\n" - "\tldr r0, _081364D0 @ =REG_BG1VOFS\n" - "\tstrh r2, [r0]\n" - "\tsubs r0, 0x2\n" - "\tstrh r2, [r0]\n" - "\tldr r1, _081364D4 @ =REG_BG1CNT\n" - "\tmovs r2, 0xF8\n" - "\tlsls r2, 5\n" - "\tadds r0, r2, 0\n" - "\tstrh r0, [r1]\n" - "\tldr r1, [r3]\n" - "\tb _08136528\n" - "\t.align 2, 0\n" - "_081364C4: .4byte 0x0600f800\n" - "_081364C8: .4byte 0x040000d4\n" - "_081364CC: .4byte 0x85000200\n" - "_081364D0: .4byte REG_BG1VOFS\n" - "_081364D4: .4byte REG_BG1CNT\n" - "_081364D8:\n" - "\tldr r0, _081364F0 @ =gUnknown_083DFEC4\n" - "\tldr r1, [r0]\n" - "\tldr r4, _081364F4 @ =0x00008ff0\n" - "\tadds r0, r1, r4\n" - "\tldr r2, _081364F8 @ =0x00009004\n" - "\tadds r1, r2\n" - "\tbl sub_80F567C\n" - "\tbl sub_80F5B38\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_081364F0: .4byte gUnknown_083DFEC4\n" - "_081364F4: .4byte 0x00008ff0\n" - "_081364F8: .4byte 0x00009004\n" - "_081364FC:\n" - "\tbl sub_80F5B50\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _0813657A\n" - "\tb _08136524\n" - "_08136508:\n" - "\tldr r0, _08136518 @ =gUnknown_083DFEC4\n" - "\tldr r0, [r0]\n" - "\tldr r4, _0813651C @ =0x00009004\n" - "\tadds r0, r4\n" - "\tbl sub_80F556C\n" - "\tb _08136524\n" - "\t.align 2, 0\n" - "_08136518: .4byte gUnknown_083DFEC4\n" - "_0813651C: .4byte 0x00009004\n" - "_08136520:\n" - "\tbl sub_80F1934\n" - "_08136524:\n" - "\tldr r0, _08136534 @ =gUnknown_02039304\n" - "\tldr r1, [r0]\n" - "_08136528:\n" - "\tadds r1, 0x50\n" - "\tldrb r0, [r1]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r1]\n" - "\tb _0813657A\n" - "\t.align 2, 0\n" - "_08136534: .4byte gUnknown_02039304\n" - "_08136538:\n" - "\tldr r1, _08136584 @ =REG_WIN0H\n" - "\tmovs r0, 0xF0\n" - "\tstrh r0, [r1]\n" - "\tadds r1, 0x2\n" - "\tmovs r0, 0x9B\n" - "\tstrh r0, [r1]\n" - "\tldr r0, _08136588 @ =REG_WIN0V\n" - "\tldr r2, _0813658C @ =0x00003273\n" - "\tadds r1, r2, 0\n" - "\tstrh r1, [r0]\n" - "\tadds r0, 0x2\n" - "\tstrh r1, [r0]\n" - "\tldr r1, _08136590 @ =REG_WININ\n" - "\tldr r4, _08136594 @ =0x00003f3f\n" - "\tadds r0, r4, 0\n" - "\tstrh r0, [r1]\n" - "\tadds r1, 0x2\n" - "\tmovs r0, 0x1B\n" - "\tstrh r0, [r1]\n" - "\tsubs r1, 0x38\n" - "\tmovs r0, 0x28\n" - "\tstrh r0, [r1]\n" - "\tsubs r1, 0x12\n" - "\tldr r2, _08136598 @ =0x00007f40\n" - "\tadds r0, r2, 0\n" - "\tstrh r0, [r1]\n" - "_0813656C:\n" - "\tldr r0, [r3]\n" - "\tadds r0, 0x55\n" - "\tmovs r1, 0x1\n" - "\tstrb r1, [r0]\n" - "\tldr r0, _0813659C @ =sub_81365C8\n" - "\tbl launch_c3_walk_stairs_and_run_once\n" - "_0813657A:\n" - "\tadd sp, 0x4\n" - "\tpop {r4,r5}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08136584: .4byte REG_WIN0H\n" - "_08136588: .4byte REG_WIN0V\n" - "_0813658C: .4byte 0x00003273\n" - "_08136590: .4byte REG_WININ\n" - "_08136594: .4byte 0x00003f3f\n" - "_08136598: .4byte 0x00007f40\n" - "_0813659C: .4byte sub_81365C8\n" - ".syntax divided\n"); -} -#endif void sub_81365A0(void) { -- cgit v1.2.3 From 7caa3fd85bcb243cf5f63b2cf58185dc1eb9217c Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 18:20:16 -0400 Subject: sub_8136638 --- src/use_pokeblock.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 17387e09f..3c9afb756 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -10,6 +10,8 @@ #include "palette.h" #include "text.h" #include "menu.h" +#include "sound.h" +#include "songs.h" #include "use_pokeblock.h" asm(".text\n" @@ -33,7 +35,14 @@ void sub_81365C8(void); void sub_8136638(void); void sub_81368A4(void); void sub_8089668(void); +void sub_8136B44(void); u8 sub_81370E4(u8); +void sub_8136BB8(void); +s8 sub_8136C40(void); +bool8 sub_8137058(void); +void sub_8136D60(void); +void sub_8136808(void); +void sub_8136D8C(void); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -198,7 +207,7 @@ void sub_8136294(void) gUnknown_02039304->unk50++; break; case 16: - DmaClear32(3, 0x600f800, 0x800); + DmaClear32(3, BG_SCREEN_ADDR(31), 0x800); REG_BG1VOFS = 0; REG_BG1HOFS = 0; REG_BG1CNT = BGCNT_SCREENBASE(31); @@ -267,3 +276,93 @@ void sub_81365C8(void) break; } } + +void sub_8136638(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + if (gMain.heldKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + sub_80F5060(TRUE); + move_anim_execute(); + gUnknown_02039304->unk50 = 1; + } + else if (gMain.heldKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + sub_80F5060(FALSE); + move_anim_execute(); + gUnknown_02039304->unk50 = 1; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_02039304->unk50 = 3; + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_083DFEC4->unk87DC == gUnknown_083DFEC4->unk87DA - 1) + { + gUnknown_02039304->unk50 = 3; + } + else + { + gUnknown_02039304->unk50 = 5; + } + } + break; + case 1: + if (!gpu_sync_bg_show()) + { + gUnknown_02039304->unk50++; + } + break; + case 2: + if (!sub_8055870()) + { + sub_80F1934(); + sub_80F3D00(); + gUnknown_02039304->unk50 = 0; + } + break; + case 3: + launch_c3_walk_stairs_and_run_once(sub_8136B44); + break; + case 4: + break; + case 5: + sub_8136BB8(); + gUnknown_02039304->unk50++; + break; + case 6: + switch (sub_8136C40()) + { + case 1: + case -1: + gUnknown_02039304->unk50 = 0; + break; + case 0: + if (sub_8137058()) + { + sub_8136D60(); + gUnknown_02039304->unk50 = 7; + } + else + { + launch_c3_walk_stairs_and_run_once(sub_8136808); + } + break; + } + break; + case 7: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8136D8C(); + gUnknown_02039304->unk50 = 0; + } + break; + } +} -- cgit v1.2.3 From c44f9abfbb661d1721f03244eac99062df86d85d Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 18:29:30 -0400 Subject: sub_8136808 --- src/use_pokeblock.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 3c9afb756..b23cc4d69 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -12,6 +12,7 @@ #include "menu.h" #include "sound.h" #include "songs.h" +#include "pokeblock_feed.h" #include "use_pokeblock.h" asm(".text\n" @@ -43,6 +44,7 @@ bool8 sub_8137058(void); void sub_8136D60(void); void sub_8136808(void); void sub_8136D8C(void); +u8 sub_81370A4(u8); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -366,3 +368,24 @@ void sub_8136638(void) break; } } + +void sub_8136808(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + gUnknown_02039310 = sub_81370A4(gUnknown_083DFEC4->unk87DC); + gUnknown_02039308 = gUnknown_02039304->callback; + gUnknown_0203930C = gUnknown_02039304->pokeblock; + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_02039304->unk50++; + break; + case 1: + if (!gPaletteFade.active) + { + gMain.savedCallback = sub_8136174; + SetMainCallback2(sub_8147ADC); + } + break; + } +} -- cgit v1.2.3 From ea9652139728e41317b900f0aba5f50478643fc5 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 18:37:35 -0400 Subject: sub_81368A4 --- src/use_pokeblock.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index b23cc4d69..f84ecad08 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -45,6 +45,7 @@ void sub_8136D60(void); void sub_8136808(void); void sub_8136D8C(void); u8 sub_81370A4(u8); +void sub_81369CC(void); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -389,3 +390,56 @@ void sub_8136808(void) break; } } + +void sub_81368A4(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + if (gUnknown_083DFEC4->unk87DC != gUnknown_02039310) + { + sub_80F5060(gUnknown_02039304->unk56); + gUnknown_02039304->unk50++; + } + else + { + gUnknown_02039304->unk50 = 3; + } + break; + case 1: + if (!gpu_sync_bg_show()) + { + gUnknown_02039304->unk50++; + } + break; + case 2: + if (!sub_8055870()) + { + sub_80F1934(); + gUnknown_02039304->unk50 = 0; + } + break; + case 3: + BlendPalettes(-1, 16, 0); + gUnknown_02039304->unk50++; + break; + case 4: + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON; + gUnknown_02039304->unk50++; + break; + case 5: + SetVBlankCallback(sub_8136264); + BeginNormalPaletteFade(-1, 0, 16, 0, 0); + gUnknown_02039304->unk50++; + break; + case 6: + if (!gPaletteFade.active) + { + sub_80F3C94(); + sub_80F3D00(); + launch_c3_walk_stairs_and_run_once(sub_81369CC); + SetMainCallback2(sub_8136244); + } + break; + } +} -- cgit v1.2.3 From 5c8320f9e1f8735272e2b8239fbba3b2b6eb69c4 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 28 Jun 2017 19:09:19 -0400 Subject: sub_81369CC --- src/use_pokeblock.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 2 deletions(-) mode change 100644 => 100755 src/use_pokeblock.c (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c old mode 100644 new mode 100755 index f84ecad08..861a3efcd --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -12,6 +12,7 @@ #include "menu.h" #include "sound.h" #include "songs.h" +#include "pokeblock.h" #include "pokeblock_feed.h" #include "use_pokeblock.h" @@ -24,6 +25,7 @@ u8 gUnknown_02039310; extern struct UnkPokenavStruct_Sub1 *gUnknown_02039304; extern u16 gKeyRepeatStartDelay; +extern u16 gScriptItemId; // remove after merge of #349 Pokeblock void launch_c3_walk_stairs_and_run_once(void (*const)(void)); void sub_81361E4(void); @@ -46,6 +48,10 @@ void sub_8136808(void); void sub_8136D8C(void); u8 sub_81370A4(u8); void sub_81369CC(void); +void sub_8136EF0(void); +void sub_8137138(void); +void sub_8136C6C(void); +bool8 sub_8136D00(void); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -217,7 +223,7 @@ void sub_8136294(void) gUnknown_02039304->unk50++; break; case 17: - sub_80F567C(&gUnknown_083DFEC4->unk8ff0, &gUnknown_083DFEC4->unk9004); + sub_80F567C(&gUnknown_083DFEC4->unk8ff0, gUnknown_083DFEC4->unk9004); sub_80F5B38(); gUnknown_02039304->unk50++; break; @@ -228,7 +234,7 @@ void sub_8136294(void) } break; case 19: - sub_80F556C(&gUnknown_083DFEC4->unk9004); + sub_80F556C(gUnknown_083DFEC4->unk9004); gUnknown_02039304->unk50++; break; case 20: @@ -443,3 +449,50 @@ void sub_81368A4(void) break; } } + +void sub_81369CC(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + gUnknown_02039304->pokemon = &gPlayerParty[0]; + gUnknown_02039304->pokemon = &gPlayerParty[gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx]; + move_anim_execute(); + gUnknown_02039304->unk50++; + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + gUnknown_02039304->unk50++; + break; + case 2: + sub_8136EF0(); + sub_80F567C(gUnknown_02039304->unk5c, gUnknown_083DFEC4->unk9040); + sub_80F5550(gUnknown_083DFEC4->unk9004[gUnknown_083DFEC4->unk8fe9], gUnknown_083DFEC4->unk9040); + sub_8137138(); + gUnknown_02039304->unk50++; + break; + case 3: + if (!sub_80F555C()) + { + sub_80F7224(sub_81370A4(gUnknown_083DFEC4->unk87DC)); + sub_80F3D00(); + gUnknown_02039304->unk52 = 0; + gUnknown_02039304->unk50++; + } + break; + case 4: + if ((++gUnknown_02039304->unk52) > 16) + { + sub_8136C6C(); + gUnknown_02039304->unk50++; + } + break; + case 5: + if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00()) + { + sub_810CA6C((u8)gScriptItemId); + launch_c3_walk_stairs_and_run_once(sub_8136B44); + } + break; + } +} -- cgit v1.2.3 From 66f219dba7d19cc5561cd12fb81b4add8eb888e0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 28 Jun 2017 21:53:45 -0400 Subject: through sub_8136C40 --- src/use_pokeblock.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 861a3efcd..e6875645b 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -5,6 +5,8 @@ #include "global.h" #include "main.h" #include "rom4.h" +#include "string_util.h" +#include "strings.h" #include "pokemon.h" #include "pokenav.h" #include "palette.h" @@ -496,3 +498,50 @@ void sub_81369CC(void) break; } } + +void sub_8136B44(void) +{ + switch (gUnknown_02039304->unk50) + { + case 0: + BeginNormalPaletteFade(-1, 0, 0, 16, 0); + gUnknown_02039304->unk50++; + break; + case 1: + if (!gPaletteFade.active) + { + gUnknown_02039304->unk50 = 2; + } + break; + case 2: + sub_80F5BDC(); + gUnknown_02039304->unk50++; + break; + case 3: + SetMainCallback2(gUnknown_02039304->callback); + break; + } +} + +void sub_8136BB8(void) +{ + GetMonData(&gPlayerParty[sub_81370A4(gUnknown_083DFEC4->unk87DC)], MON_DATA_NICKNAME, gUnknown_02039304->stringBuffer); + StringGetEnd10(gUnknown_02039304->stringBuffer); + StringAppend(gUnknown_02039304->stringBuffer, gOtherText_GetsAPokeBlock); + BasicInitMenuWindow(&gWindowConfig_81E709C); + MenuDrawTextWindow(0, 16, 29, 19); + MenuPrint(gUnknown_02039304->stringBuffer, 1, 17); + DisplayYesNoMenu(23, 10, 1); + MoveMenuCursor(0); +} + +s8 sub_8136C40(void) +{ + s8 retval = ProcessMenuInputNoWrap(); + if ((u8)(retval + 1) < 3) + { + MenuZeroFillScreen(); + BasicInitMenuWindow(&gWindowConfig_81E7080); + } + return retval; +} -- cgit v1.2.3 From 062f0b5bd9fe3e804ca9e2b4f6b2bae89f94ab61 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Jun 2017 08:34:48 -0400 Subject: sub_8136C6C --- src/use_pokeblock.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index e6875645b..0c2ba8642 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -54,6 +54,8 @@ void sub_8136EF0(void); void sub_8137138(void); void sub_8136C6C(void); bool8 sub_8136D00(void); +void sub_8136DC0(u8 *, u8, u8); +void sub_8136DA0(u8 *); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -545,3 +547,19 @@ s8 sub_8136C40(void) } return retval; } + +void sub_8136C6C(void) +{ + BasicInitMenuWindow(&gWindowConfig_81E709C); + MenuDrawTextWindow(0, 16, 29, 19); + for (gUnknown_02039304->unk53 = 0; gUnknown_02039304->unk53 < 5 && gUnknown_02039304->unk61[gUnknown_02039304->unk53] == 0; gUnknown_02039304->unk53++); + if (gUnknown_02039304->unk53 < 5) + { + sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]); + } + else + { + sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, 0); + } + sub_8136DA0(gUnknown_02039304->stringBuffer); +} -- cgit v1.2.3 From 4e02c236d8594ab81ae46c54d6f1ccc8e7929bea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Jun 2017 08:49:55 -0400 Subject: Nonmatching sub_8136D00 --- src/use_pokeblock.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 0c2ba8642..7590b19ff 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -21,11 +21,11 @@ asm(".text\n" ".include \"constants/gba_constants.inc\""); +extern struct UnkPokenavStruct_Sub1 *gUnknown_02039304; extern MainCallback gUnknown_02039308; extern struct Pokeblock *gUnknown_0203930C; -u8 gUnknown_02039310; +extern u8 gUnknown_02039310; -extern struct UnkPokenavStruct_Sub1 *gUnknown_02039304; extern u16 gKeyRepeatStartDelay; extern u16 gScriptItemId; // remove after merge of #349 Pokeblock @@ -563,3 +563,78 @@ void sub_8136C6C(void) } sub_8136DA0(gUnknown_02039304->stringBuffer); } + +#ifdef NONMATCHING +bool8 sub_8136D00(void) +{ + while (1) + { + if (++gUnknown_02039304->unk53 >= 5) + { + break; + } + if (gUnknown_02039304->unk61[gUnknown_02039304->unk53] != 0) + { + sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]); + sub_8136DA0(gUnknown_02039304->stringBuffer); + return TRUE; + } + } + gUnknown_02039304->unk53 = 5; + return FALSE; +} +#else +__attribute__((naked)) +bool8 sub_8136D00(void) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tldr r4, _08136D30 @ =gUnknown_02039304\n" + "\tadds r3, r4, 0\n" + "\tmovs r5, 0x5\n" + "_08136D08:\n" + "\tldr r0, [r3]\n" + "\tadds r0, 0x53\n" + "\tldrb r1, [r0]\n" + "\tadds r1, 0x1\n" + "\tstrb r1, [r0]\n" + "\tldr r2, [r3]\n" + "\tadds r1, r2, 0\n" + "\tadds r1, 0x53\n" + "\tldrb r0, [r1]\n" + "\tcmp r0, 0x4\n" + "\tbhi _08136D34\n" + "\tadds r0, r2, 0\n" + "\tadds r0, 0x61\n" + "\tldrb r1, [r1]\n" + "\tadds r0, r1\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _08136D3A\n" + "\tb _08136D08\n" + "\t.align 2, 0\n" + "_08136D30: .4byte gUnknown_02039304\n" + "_08136D34:\n" + "\tstrb r5, [r1]\n" + "\tmovs r0, 0\n" + "\tb _08136D5A\n" + "_08136D3A:\n" + "\tldr r2, [r4]\n" + "\tadds r0, r2, 0\n" + "\tadds r0, 0x10\n" + "\tadds r1, r2, 0\n" + "\tadds r1, 0x53\n" + "\tldrb r1, [r1]\n" + "\tadds r2, 0x61\n" + "\tadds r2, r1\n" + "\tldrb r2, [r2]\n" + "\tbl sub_8136DC0\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x10\n" + "\tbl sub_8136DA0\n" + "\tmovs r0, 0x1\n" + "_08136D5A:\n" + "\tpop {r4,r5}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif -- cgit v1.2.3 From eefb510a3c442d6997a6a681e919046a775766be Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Jun 2017 21:19:45 -0400 Subject: Nonmatching sub_8136DC0 --- src/use_pokeblock.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 7590b19ff..efa3b6200 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -7,6 +7,7 @@ #include "rom4.h" #include "string_util.h" #include "strings.h" +#include "sprite.h" #include "pokemon.h" #include "pokenav.h" #include "palette.h" @@ -18,6 +19,34 @@ #include "pokeblock_feed.h" #include "use_pokeblock.h" +#define GFX_TAG_CONDITIONUPDOWN 0 +#define GFX_TAG_UNKNOWN02030400 1 + +#ifndef GERMAN +const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal"); +const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); +#endif + +const u32 gUnknown_08406118[] = { + MON_DATA_COOL, + MON_DATA_TOUGH, + MON_DATA_SMART, + MON_DATA_CUTE, + MON_DATA_BEAUTY +}; + +const struct SpritePalette gUnknown_0840612C = { + (u16 *const)&gUnknown_02030400, GFX_TAG_UNKNOWN02030400 +}; + +const u8 *const gUnknown_08406134[] = { + OtherText_Coolness, + OtherText_Toughness, + OtherText_Smartness, + OtherText_Cuteness, + OtherText_Beauty +}; + asm(".text\n" ".include \"constants/gba_constants.inc\""); @@ -54,8 +83,8 @@ void sub_8136EF0(void); void sub_8137138(void); void sub_8136C6C(void); bool8 sub_8136D00(void); -void sub_8136DC0(u8 *, u8, u8); -void sub_8136DA0(u8 *); +void sub_8136DC0(u8 *, u8, s16); +void sub_8136DA0(const u8 *); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -638,3 +667,81 @@ bool8 sub_8136D00(void) "\tbx r1"); } #endif + +void sub_8136D60(void) +{ + BasicInitMenuWindow(&gWindowConfig_81E709C); + MenuDrawTextWindow(0, 16, 29, 19); + MenuPrint(gOtherText_WontEat, 1, 17); +} + +void sub_8136D8C(void) +{ + MenuZeroFillScreen(); + BasicInitMenuWindow(&gWindowConfig_81E7080); +} + +void sub_8136DA0(const u8 *message) +{ + MenuDrawTextWindow(0, 16, 29, 19); + MenuPrint(message, 1, 17); +} + +#ifdef NONMATCHING +void sub_8136DC0(u8 *dest, u8 a1, s16 a2) +{ + u16 v0 = a2; + if (a2 != 0) + { + if ((v0 = max(a2, 0)) == 0); + StringCopy(dest, gUnknown_08406134[a1]); + StringAppend(dest, gOtherText_WasEnhanced); + } + else + { + StringCopy(dest, gOtherText_NothingChanged); + } +} +#else +__attribute__((naked)) +void sub_8136DC0(u8 *dest, u8 a1, s16 a2) +{ + asm_unified("\tpush {r4,lr}\n" + "\tadds r4, r0, 0\n" + "\tlsls r1, 24\n" + "\tlsrs r3, r1, 24\n" + "\tlsls r2, 16\n" + "\tlsrs r0, r2, 16\n" + "\tasrs r2, 16\n" + "\tcmp r2, 0\n" + "\tbeq _08136DFC\n" + "\tcmp r2, 0\n" + "\tble _08136DD8\n" + "\tmovs r0, 0\n" + "_08136DD8:\n" + "\tlsls r0, 16\n" + "\tldr r1, _08136DF4 @ =gUnknown_08406134\n" + "\tlsls r0, r3, 2\n" + "\tadds r0, r1\n" + "\tldr r1, [r0]\n" + "\tadds r0, r4, 0\n" + "\tbl StringCopy\n" + "\tldr r1, _08136DF8 @ =gOtherText_WasEnhanced\n" + "\tadds r0, r4, 0\n" + "\tbl StringAppend\n" + "\tb _08136E04\n" + "\t.align 2, 0\n" + "_08136DF4: .4byte gUnknown_08406134\n" + "_08136DF8: .4byte gOtherText_WasEnhanced\n" + "_08136DFC:\n" + "\tldr r1, _08136E0C @ =gOtherText_NothingChanged\n" + "\tadds r0, r4, 0\n" + "\tbl StringCopy\n" + "_08136E04:\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08136E0C: .4byte gOtherText_NothingChanged"); +} +#endif -- cgit v1.2.3 From 1bb72454b44307b772660e54318598f0cea274cc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Jun 2017 21:39:25 -0400 Subject: sub_8136E40 --- src/use_pokeblock.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index efa3b6200..c4b0d4e2e 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -85,6 +85,7 @@ void sub_8136C6C(void); bool8 sub_8136D00(void); void sub_8136DC0(u8 *, u8, s16); void sub_8136DA0(const u8 *); +void sub_8136F74(struct Pokeblock *, struct Pokemon *); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -745,3 +746,40 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2) "_08136E0C: .4byte gOtherText_NothingChanged"); } #endif + +void sub_8136E10(struct Pokemon *pokemon, u8 *data) +{ + u16 i; + for (i=0; i<5; i++) + { + data[i] = GetMonData(pokemon, gUnknown_08406118[i]); + } +} + +void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon) +{ + u16 i; + s16 cstat; + u8 data; + if (GetMonData(pokemon, MON_DATA_SHEEN) != 255) + { + sub_8136F74(pokeblock, pokemon); + for (i=0; i<5; i++) + { + data = GetMonData(pokemon, gUnknown_08406118[i]); + cstat = data + gUnknown_02039304->unk66[i]; + if (cstat < 0) + cstat = 0; + if (cstat > 255) + cstat = 255; + data = cstat; + SetMonData(pokemon, gUnknown_08406118[i], &data); + } + cstat = (u8)GetMonData(pokemon, MON_DATA_SHEEN); + cstat = cstat + pokeblock->feel; + if (cstat > 255) + cstat = 255; + data = cstat; + SetMonData(pokemon, MON_DATA_SHEEN, &data); + } +} -- cgit v1.2.3 From eb9df8bc6699093ef8f3c9ccb985bec9809910c7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Jun 2017 21:48:53 -0400 Subject: sub_8136EF0 --- src/use_pokeblock.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index c4b0d4e2e..e21984180 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -783,3 +783,17 @@ void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon) SetMonData(pokemon, MON_DATA_SHEEN, &data); } } + +void sub_8136EF0(void) +{ + u16 i; + struct Pokemon *pokemon = gPlayerParty; + pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx; + sub_8136E10(pokemon, gUnknown_02039304->unk57); + sub_8136E40(gUnknown_02039304->pokeblock, pokemon); + sub_8136E10(pokemon, gUnknown_02039304->unk5c); + for (i=0; i<5; i++) + { + gUnknown_02039304->unk61[i] = gUnknown_02039304->unk5c[i] - gUnknown_02039304->unk57[i]; + } +} -- cgit v1.2.3 From fe40c6053622e89dbc0f9e26493946fa098765fb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Jun 2017 22:06:27 -0400 Subject: sub_8136F74 --- src/use_pokeblock.c | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index e21984180..5a14f74fa 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -20,7 +20,6 @@ #include "use_pokeblock.h" #define GFX_TAG_CONDITIONUPDOWN 0 -#define GFX_TAG_UNKNOWN02030400 1 #ifndef GERMAN const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal"); @@ -35,8 +34,8 @@ const u32 gUnknown_08406118[] = { MON_DATA_BEAUTY }; -const struct SpritePalette gUnknown_0840612C = { - (u16 *const)&gUnknown_02030400, GFX_TAG_UNKNOWN02030400 +const u8 gUnknown_0840612C[] = { + 0, 4, 3, 2, 1 }; const u8 *const gUnknown_08406134[] = { @@ -797,3 +796,35 @@ void sub_8136EF0(void) gUnknown_02039304->unk61[i] = gUnknown_02039304->unk5c[i] - gUnknown_02039304->unk57[i]; } } + +void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) +{ + s8 direction; + s8 i; + s16 amount; + s8 boost; + s8 taste; + gUnknown_02039304->unk66[0] = pokeblock->spicy; + gUnknown_02039304->unk66[1] = pokeblock->sour; + gUnknown_02039304->unk66[2] = pokeblock->bitter; + gUnknown_02039304->unk66[3] = pokeblock->sweet; + gUnknown_02039304->unk66[4] = pokeblock->dry; + if (gUnknown_02039312 > 0) + direction = 1; + else if (gUnknown_02039312 < 0) + direction = -1; + else + return; + for (i=0; i<5; i++) + { + amount = gUnknown_02039304->unk66[i]; + boost = amount / 10; + if (amount % 10 >= 5) // round to the nearest + boost++; + taste = sub_8040A54(pokemon, gUnknown_0840612C[i]); + if (taste == direction) + { + gUnknown_02039304->unk66[i] += boost * taste; + } + } +} -- cgit v1.2.3 From 05c997bd75ce375425f1941c86b7643973e41e3f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Jun 2017 22:17:58 -0400 Subject: sub_81370A4 --- src/use_pokeblock.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 5a14f74fa..b29cb7454 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -828,3 +828,27 @@ void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon) } } } + +bool8 sub_8137058(void) +{ + struct Pokemon *pokemon = gPlayerParty; + pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx; + if (GetMonData(pokemon, MON_DATA_SHEEN) == 255) + return TRUE; + return FALSE; +} + +u8 sub_81370A4(u8 a0) +{ + u8 i; + for (i=0; i Date: Thu, 29 Jun 2017 22:22:56 -0400 Subject: Through sub_8137124 --- src/use_pokeblock.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index b29cb7454..c21e3719a 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -852,3 +852,22 @@ u8 sub_81370A4(u8 a0) } return 0; } + +u8 sub_81370E4(u8 a0) +{ + u8 ct; + u8 i; + for (i=0, ct=0; i Date: Thu, 29 Jun 2017 22:32:23 -0400 Subject: Decompile use_pokeblock data --- src/use_pokeblock.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index c21e3719a..6ca3437fd 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -46,6 +46,56 @@ const u8 *const gUnknown_08406134[] = { OtherText_Beauty }; +const struct SpriteSheet gSpriteSheet_ConditionUpDown = { + (u8 *)ConditionUpDownTiles, + sizeof ConditionUpDownTiles, + GFX_TAG_CONDITIONUPDOWN +}; + +const struct SpritePalette gSpritePalette_ConditionUpDown = { + ConditionUpDownPalette, + GFX_TAG_CONDITIONUPDOWN +}; + +const struct Coords16 gUnknown_08406158[] = { + {0x9c, 0x1e}, + {0x75, 0x35}, + {0x75, 0x70}, + {0xc5, 0x70}, + {0xc5, 0x35} +}; + +const struct OamData gOamData_840616C = { + .shape = 1, + .size = 2, + .priority = 1 +}; + +const union AnimCmd gSpriteAnim_8406174[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_840617C[] = { + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8406184[] = { + gSpriteAnim_8406174, + gSpriteAnim_840617C +}; + +const struct SpriteTemplate gSpriteTemplate_840618C = { + GFX_TAG_CONDITIONUPDOWN, + GFX_TAG_CONDITIONUPDOWN, + &gOamData_840616C, + gSpriteAnimTable_8406184, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + asm(".text\n" ".include \"constants/gba_constants.inc\""); -- cgit v1.2.3 From 06f5a396016aee2406749633b627bb9d729744ff Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 29 Jun 2017 22:42:28 -0400 Subject: Remaining functions in use_pokeblock --- src/use_pokeblock.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 6ca3437fd..a62821a90 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -57,7 +57,7 @@ const struct SpritePalette gSpritePalette_ConditionUpDown = { GFX_TAG_CONDITIONUPDOWN }; -const struct Coords16 gUnknown_08406158[] = { +const s16 gUnknown_08406158[][2] = { {0x9c, 0x1e}, {0x75, 0x35}, {0x75, 0x70}, @@ -135,6 +135,7 @@ bool8 sub_8136D00(void); void sub_8136DC0(u8 *, u8, s16); void sub_8136DA0(const u8 *); void sub_8136F74(struct Pokeblock *, struct Pokemon *); +void sub_81371DC(struct Sprite *); void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback) { @@ -921,3 +922,40 @@ u8 sub_8137124(u8 a0) { return sub_81370A4(a0); } + +void sub_8137138(void) +{ + u16 flavor; + u8 spriteidx; + LoadSpriteSheet(&gSpriteSheet_ConditionUpDown); + LoadSpritePalette(&gSpritePalette_ConditionUpDown); + gUnknown_02039304->unk54 = 0; + for (flavor=0; flavor<5; flavor++) + { + if (gUnknown_02039304->unk61[flavor] != 0) + { + spriteidx = CreateSprite(&gSpriteTemplate_840618C, gUnknown_08406158[flavor][0], gUnknown_08406158[flavor][1], 0); + if (spriteidx != MAX_SPRITES) + { + if (gUnknown_02039304->unk61[flavor] != 0) + { + gSprites[spriteidx].callback = sub_81371DC; + } + gUnknown_02039304->unk54++; + } + } + } +} + +void sub_81371DC(struct Sprite *sprite) +{ + if (sprite->data0 <= 5) + sprite->pos2.y -= 2; + else if (sprite->data0 <= 11) + sprite->pos2.y += 2; + if ((++sprite->data0) > 60) + { + DestroySprite(sprite); + gUnknown_02039304->unk54--; + } +} -- cgit v1.2.3 From a07701d4e1f115c5ed1686419c12f9bdcfda6aca Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 30 Jun 2017 08:38:48 -0400 Subject: Attempt to get German to build --- src/use_pokeblock.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index a62821a90..40c960cf9 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -21,7 +21,10 @@ #define GFX_TAG_CONDITIONUPDOWN 0 -#ifndef GERMAN +#ifdef GERMAN +const u16 ConditionUpDownPalette[16]; +const u32 ConditionUpDownTiles[0x80]; +#else const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal"); const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); #endif -- cgit v1.2.3 From 282cae4a9fbd019a973fb6618337d29a61f97f42 Mon Sep 17 00:00:00 2001 From: scnorton Date: Fri, 30 Jun 2017 09:44:28 -0400 Subject: Address review items by Marijn vd Werf --- src/use_pokeblock.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 40c960cf9..ce83bc1c2 100755 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -22,8 +22,8 @@ #define GFX_TAG_CONDITIONUPDOWN 0 #ifdef GERMAN -const u16 ConditionUpDownPalette[16]; -const u32 ConditionUpDownTiles[0x80]; +extern const u16 ConditionUpDownPalette[16]; +extern const u32 ConditionUpDownTiles[0x80]; #else const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal"); const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); @@ -108,7 +108,7 @@ extern struct Pokeblock *gUnknown_0203930C; extern u8 gUnknown_02039310; extern u16 gKeyRepeatStartDelay; -extern u16 gScriptItemId; // remove after merge of #349 Pokeblock +extern u16 gScriptItemId; // FIXME: remove after merge of #349 Pokeblock void launch_c3_walk_stairs_and_run_once(void (*const)(void)); void sub_81361E4(void); -- cgit v1.2.3 From a157df839902a28059c702e89a1d13a21ccc6b0a Mon Sep 17 00:00:00 2001 From: Touched Date: Sat, 24 Jun 2017 13:35:37 +0200 Subject: Decompile asm/rotating_gate.s --- src/rotating_gate.c | 718 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 718 insertions(+) create mode 100644 src/rotating_gate.c (limited to 'src') diff --git a/src/rotating_gate.c b/src/rotating_gate.c new file mode 100644 index 000000000..f8e5fac21 --- /dev/null +++ b/src/rotating_gate.c @@ -0,0 +1,718 @@ +#include "global.h" +#include "bike.h" +#include "event_data.h" +#include "fieldmap.h" +#include "sound.h" +#include "sprite.h" + +struct UnknownStruct +{ + /* 0x0 */ struct Coords16 pos; + /* 0x4 */ u8 e; + /* 0x5 */ u8 f; + /* 0x6 */ u8 g; + /* 0x7 */ u8 h; +}; + +struct UnknownStruct2 +{ + s8 a; + s8 b; + u8 c; + u8 d; +}; + +extern const struct SpriteSheet gRotatingGatesGraphicsTable[]; +extern /* const */ struct UnknownStruct gUnknown_083D2964[]; +extern /* const */ struct UnknownStruct gUnknown_083D299C[]; +extern const struct SpriteTemplate gSpriteTemplate_83D60A4; +extern const struct SpriteTemplate gSpriteTemplate_83D608C; + +extern u8 gUnknown_020387F0[10]; // puzzle oam ID list + +extern struct UnknownStruct *gUnknown_02038800; +extern u8 gUnknown_02038804; // puzzle count + +extern struct UnknownStruct2 gUnknown_083D611C[5]; +extern struct UnknownStruct2 gUnknown_083D60FC[5]; +extern const u8 gUnknown_083D613C[12][8]; + +extern const u8 gUnknown_083D60BC[4][4]; +extern const u8 gUnknown_083D60CC[4][4]; +extern const u8 gUnknown_083D60DC[4][4]; +extern const u8 gUnknown_083D60EC[4][4]; + +u8 sub_80C7BAC(u8 i, s16 a, s16 b); +void sub_8060388(s16 x, s16 y, s16 *outX, s16 *outY); +void sub_80C7D14(struct Sprite *sprite); + +int GetCurrentMapRotatingGatePuzzleType(void) +{ + if (gSaveBlock1.location.mapGroup == 0xC && gSaveBlock1.location.mapNum == 0x1) + { + return 1; + } + + if (gSaveBlock1.location.mapGroup == 0x1d && gSaveBlock1.location.mapNum == 0x8) + { + return 2; + } + + return 0; +} + +// ResetSomething +void sub_80C79CC(void) +{ + int i; + u8 *ptr; + + ptr = (u8 *)GetVarPointer(0x4000); + + for (i = 0; i < gUnknown_02038804; i++) + { + ptr[i] = gUnknown_02038800[i].f; + } +} + +// GetSomething +/* u8 */ int sub_80C7A08(u8 a) +{ + u8 *ptr; + ptr = (u8 *)GetVarPointer(0x4000); + return ptr[a]; +} + +// SetSomething +void sub_80C7A24(u8 a, u8 b) +{ + u8 *ptr; + ptr = (u8 *)GetVarPointer(0x4000); + ptr[a] = b; +} + +// RotateInDirectionProbably +void sub_80C7A44(u8 a, u32 b) +{ + u8 r1; + r1 = sub_80C7A08(a); + + if (b == 1) + { + if (r1) + { + r1--; + } + else + { + r1 = 3; + } + } + else + { + r1 = ++r1 % 4; + } + + sub_80C7A24(a, r1); +} + +// Configure +void sub_80C7A80(void) +{ + int a = GetCurrentMapRotatingGatePuzzleType(); + u32 i; + + switch (a) + { + case 1: + gUnknown_02038800 = gUnknown_083D2964; + gUnknown_02038804 = 7; + break; + case 2: + gUnknown_02038800 = gUnknown_083D299C; + gUnknown_02038804 = 0xE; + break; + case 0: + default: + return; + } + + for (i = 0; i < 14; i++) + { + gUnknown_020387F0[i] = MAX_SPRITES; + } +} + +void sub_80C7ADC(s16 a, s16 b) +{ + u8 i; + s16 x = gSaveBlock1.pos.x - 2; + s16 x2 = gSaveBlock1.pos.x + 0x11; + s16 y = gSaveBlock1.pos.y - 2; + s16 y2 = gSaveBlock1.pos.y + 0xe; + + s16 x3, y3; + + for (i = 0; i < gUnknown_02038804; i++) + { + x3 = gUnknown_02038800[i].pos.x + 7; + y3 = gUnknown_02038800[i].pos.y + 7; + + if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && gUnknown_020387F0[i] == MAX_SPRITES) + { + gUnknown_020387F0[i] = sub_80C7BAC(i, a, b); + } + } +} + +// CreateSprite +u8 sub_80C7BAC(u8 i, s16 a, s16 b) +{ + struct Sprite *sprite; // r4 + struct SpriteTemplate template; + struct UnknownStruct *unk; + u8 id; // r5 + s16 x, y; + + unk = &gUnknown_02038800[i]; + + if (unk->e == 0 || unk->e == 4) + { + template = gSpriteTemplate_83D60A4; + } + else + { + template = gSpriteTemplate_83D608C; + } + + template.tileTag = unk->e + 0x1300; + + id = CreateSprite(&template, 0, 0, 0x94); + if (id == MAX_SPRITES) + { + return MAX_SPRITES; + } + + x = unk->pos.x + 7; + y = unk->pos.y + 7; + + sprite = &gSprites[id]; + sprite->data0 = i; + sprite->coordOffsetEnabled = 1; + + sub_8060388(x + a, y + b, &sprite->pos1.x, &sprite->pos1.y); + sub_80C7D14(sprite); + StartSpriteAffineAnim(sprite, sub_80C7A08(i)); + + return id; +} + +// RotateGateWithSE +void sub_80C7C94(struct Sprite *sprite) +{ + u8 a; // r5 + u8 b; + u8 affineAnimation; + + a = sprite->data1; + b = sprite->data2; + + sub_80C7D14(sprite); + + if (a == 1) + { + affineAnimation = b + 4; + + if (GetPlayerSpeed() != 1) + affineAnimation += 8; + + PlaySE(48); + StartSpriteAffineAnim(sprite, affineAnimation); + } + else if (a == 2) + { + affineAnimation = b + 8; + + if (GetPlayerSpeed() != 1) + affineAnimation += 8; + + PlaySE(48); + StartSpriteAffineAnim(sprite, affineAnimation); + } + + sprite->data1 = 0; +} + +// See sub_806487C (field_map_obj_helpers.c) +void sub_80C7D14(struct Sprite *sprite) +{ + u16 x; + s16 x2; + u16 y; + s16 y2; + + sprite->invisible = 0; + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + + x2 = x + 0x40; // Dimensions of the rotating gate + y2 = y + 0x40; + + // TODO: Make this 0x10 a constant + if ((s16)x > DISPLAY_WIDTH + 0x10 - 1 || x2 < -0x10) + { + sprite->invisible = 1; + } + + if ((s16)y > DISPLAY_HEIGHT + 0x10 - 1 || y2 < -0x10) + { + sprite->invisible = 1; + } +} + +void LoadRotatingGatePics(void) +{ + LoadSpriteSheets(gRotatingGatesGraphicsTable); +} + +void sub_80C7DC0(void) +{ + s16 x; + s16 x2; + s16 y; + s16 y2; + s16 xGate; + s16 yGate; + int i; + struct Sprite *sprite; + + x = gSaveBlock1.pos.x - 2; + x2 = gSaveBlock1.pos.x + 17; + y = gSaveBlock1.pos.y - 2; + y2 = gSaveBlock1.pos.y + 14; + + for (i = 0; i < gUnknown_02038804; i++) + { + xGate = gUnknown_02038800[i].pos.x + 7; + yGate = gUnknown_02038800[i].pos.y + 7; + + if (gUnknown_020387F0[i] == MAX_SPRITES) + continue; + + if (xGate < x || xGate > x2 || yGate < y || yGate > y2) + { + sprite = &gSprites[gUnknown_020387F0[i]]; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + gUnknown_020387F0[i] = MAX_SPRITES; + } + } +} + +#ifdef NONMATCHING +int sub_80C7E8C(u8 a, int puzzleType) +{ + struct UnknownStruct2 *unk1; + u8 unk2; + s16 x; + s16 y; + int unk3; + int i; + int j; + int unk4; + const u8 *unk5; + int unk6; + u8 unk7; + int wat; + + if (puzzleType == 1) + unk1 = gUnknown_083D611C; + else if (puzzleType == 2) + unk1 = gUnknown_083D60FC; + else + return 0; + + unk2 = sub_80C7A08(a); + + unk3 = gUnknown_02038800[a].e; + x = gUnknown_02038800[a].pos.x + 7; + y = gUnknown_02038800[a].pos.y + 7; + + for (i = 0; i <= 3; i++) + { + j = 0; + unk4 = unk2 + i; + wat = unk2 + i; + unk5 = &gUnknown_083D613C[unk3][i * 2]; + + for (; j <= 1; j++) + { + unk6 = wat; + if (wat < 0) + unk6 = unk4 + 3; + + unk7 = (2 * (wat - ((unk6 >> 2) << 2)) + j); + + if (*unk5) + { + if (MapGridIsImpassableAt(unk1[unk7].a + x, unk1[unk7].b + y) == 1) + return 0; + } + unk5++; + } + } + + return 1; +} +#else +__attribute__((naked)) int sub_80C7E8C(u8 a, int puzzleType) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r1, 0x1\n\ + bne _080C7EAC\n\ + ldr r0, _080C7EA8 @ =gUnknown_083D611C\n\ + mov r10, r0\n\ + b _080C7EB8\n\ + .align 2, 0\n\ +_080C7EA8: .4byte gUnknown_083D611C\n\ +_080C7EAC:\n\ + cmp r1, 0x2\n\ + beq _080C7EB4\n\ +_080C7EB0:\n\ + movs r0, 0\n\ + b _080C7F48\n\ +_080C7EB4:\n\ + ldr r1, _080C7F58 @ =gUnknown_083D60FC\n\ + mov r10, r1\n\ +_080C7EB8:\n\ + adds r0, r4, 0\n\ + bl sub_80C7A08\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp]\n\ + ldr r0, _080C7F5C @ =gUnknown_02038800\n\ + ldr r1, [r0]\n\ + lsls r0, r4, 3\n\ + adds r0, r1\n\ + ldrb r2, [r0, 0x4]\n\ + ldrh r1, [r0]\n\ + adds r1, 0x7\n\ + ldrh r0, [r0, 0x2]\n\ + adds r0, 0x7\n\ + movs r3, 0\n\ + lsls r2, 3\n\ + str r2, [sp, 0x4]\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + mov r9, r1\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + mov r8, r0\n\ +_080C7EE8:\n\ + movs r6, 0\n\ + ldr r2, [sp]\n\ + adds r7, r2, r3\n\ + lsls r0, r3, 1\n\ + adds r5, r7, 0\n\ + ldr r1, [sp, 0x4]\n\ + adds r0, r1\n\ + ldr r2, _080C7F60 @ =gUnknown_083D613C\n\ + adds r4, r0, r2\n\ +_080C7EFA:\n\ + adds r0, r5, 0\n\ + cmp r5, 0\n\ + bge _080C7F02\n\ + adds r0, r7, 0x3\n\ +_080C7F02:\n\ + asrs r0, 2\n\ + lsls r0, 2\n\ + subs r0, r5, r0\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + ldrb r0, [r4]\n\ + cmp r0, 0\n\ + beq _080C7F38\n\ + lsls r1, 2\n\ + add r1, r10\n\ + movs r0, 0\n\ + ldrsb r0, [r1, r0]\n\ + add r0, r9\n\ + ldrb r1, [r1, 0x1]\n\ + lsls r1, 24\n\ + asrs r1, 24\n\ + add r1, r8\n\ + str r3, [sp, 0x8]\n\ + bl MapGridIsImpassableAt\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r3, [sp, 0x8]\n\ + cmp r0, 0x1\n\ + beq _080C7EB0\n\ +_080C7F38:\n\ + adds r4, 0x1\n\ + adds r6, 0x1\n\ + cmp r6, 0x1\n\ + ble _080C7EFA\n\ + adds r3, 0x1\n\ + cmp r3, 0x3\n\ + ble _080C7EE8\n\ + movs r0, 0x1\n\ +_080C7F48:\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080C7F58: .4byte gUnknown_083D60FC\n\ +_080C7F5C: .4byte gUnknown_02038800\n\ +_080C7F60: .4byte gUnknown_083D613C\n\ +.syntax divided\n"); +} +#endif + +#ifdef NONMATCHING +int sub_80C7F64(u8 a, u8 b) +{ + int unk1; + int unk2; + int unk4; + int unk5; + int unk6; + int unk7; + + unk5 = a >> 1; + unk1 = b & 1; + unk2 = unk5 - sub_80C7A08(a) + 4; + unk7 = unk2 < 0 ? unk2 + 3 : unk2; + unk4 = (unk7 - ((unk7 >> 2) << 2)); + unk6 = gUnknown_02038800[a].e; + return gUnknown_083D613C[unk6][(s8)unk4 * 2 + unk1]; +} +#else +__attribute__((naked)) int sub_80C7F64(u8 a, u8 b) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + adds r4, r1, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r6, r0, 0\n\ + lsls r4, 24\n\ + lsrs r5, r4, 24\n\ + lsrs r4, 25\n\ + movs r0, 0x1\n\ + ands r5, r0\n\ + adds r0, r6, 0\n\ + bl sub_80C7A08\n\ + subs r4, r0\n\ + adds r1, r4, 0x4\n\ + adds r0, r1, 0\n\ + cmp r1, 0\n\ + bge _080C7F8A\n\ + adds r0, r4, 0x7\n\ +_080C7F8A:\n\ + asrs r0, 2\n\ + lsls r0, 2\n\ + subs r0, r1, r0\n\ + ldr r1, _080C7FB0 @ =gUnknown_02038800\n\ + ldr r2, [r1]\n\ + lsls r1, r6, 3\n\ + adds r1, r2\n\ + ldrb r1, [r1, 0x4]\n\ + ldr r2, _080C7FB4 @ =gUnknown_083D613C\n\ + lsls r0, 24\n\ + asrs r0, 23\n\ + adds r0, r5\n\ + lsls r1, 3\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080C7FB0: .4byte gUnknown_02038800\n\ +_080C7FB4: .4byte gUnknown_083D613C\n\ +.syntax divided\n"); +} +#endif + +void sub_80C7FB8(u8 a, int b) +{ + struct Sprite *sprite; + + if (gUnknown_020387F0[a] != MAX_SPRITES) + { + sprite = &gSprites[gUnknown_020387F0[a]]; + sprite->data1 = b; + sprite->data2 = sub_80C7A08(a); + } +} + +#ifdef NONMATCHING +u8 sub_80C7FEC(u8 a, s16 b, s16 c) +{ + register const u8(*ptr)[][4] asm("r3"); + + if (a == 2) + ptr = &gUnknown_083D60BC; + else if (a == 1) + ptr = &gUnknown_083D60CC; + else if (a == 3) + ptr = &gUnknown_083D60DC; + else if (a == 4) + ptr = &gUnknown_083D60EC; + else + return 0xFF; + + return (*ptr)[c][b]; +} +#else +__attribute__((naked)) u8 sub_80C7FEC(u8 a, s16 b, s16 c) +{ + asm(".syntax unified\n\ + push {lr}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r3, r0, 0\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + cmp r0, 0x2\n\ + bne _080C8008\n\ + ldr r3, _080C8004 @ =gUnknown_083D60BC\n\ + b _080C802A\n\ + .align 2, 0\n\ +_080C8004: .4byte gUnknown_083D60BC\n\ +_080C8008:\n\ + cmp r0, 0x1\n\ + bne _080C8014\n\ + ldr r3, _080C8010 @ =gUnknown_083D60CC\n\ + b _080C802A\n\ + .align 2, 0\n\ +_080C8010: .4byte gUnknown_083D60CC\n\ +_080C8014:\n\ + cmp r0, 0x3\n\ + bne _080C8020\n\ + ldr r3, _080C801C @ =gUnknown_083D60DC\n\ + b _080C802A\n\ + .align 2, 0\n\ +_080C801C: .4byte gUnknown_083D60DC\n\ +_080C8020:\n\ + cmp r3, 0x4\n\ + beq _080C8028\n\ + movs r0, 0xFF\n\ + b _080C8038\n\ +_080C8028:\n\ + ldr r3, _080C803C @ =gUnknown_083D60EC\n\ +_080C802A:\n\ + lsls r0, r2, 16\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + asrs r0, 14\n\ + adds r0, r1\n\ + adds r0, r3, r0\n\ + ldrb r0, [r0]\n\ +_080C8038:\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_080C803C: .4byte gUnknown_083D60EC\n\ +.syntax divided\n"); +} +#endif + +void sub_80C8040(void) +{ + if (GetCurrentMapRotatingGatePuzzleType()) + { + sub_80C7A80(); + sub_80C79CC(); + } +} + +void RotatingGatePuzzleCameraUpdate(u16 a, u16 b) +{ + if (GetCurrentMapRotatingGatePuzzleType()) + { + sub_80C7ADC(a, b); + sub_80C7DC0(); + } +} + +void sub_80C8080(void) +{ + if (GetCurrentMapRotatingGatePuzzleType()) + { + LoadRotatingGatePics(); + sub_80C7A80(); + sub_80C7ADC(0, 0); + } +} + +bool8 CheckForRotatingGatePuzzleCollision(u8 a, s16 x, s16 y) +{ + int i; + s16 gateX; + s16 gateY; + register u32 check asm("r0"); + int upperNibble; + int lowerNibble; + s16 finalX; + s16 finalY; + + if (!GetCurrentMapRotatingGatePuzzleType()) + { + return 0; + } + + for (i = 0; i < gUnknown_02038804; i++) + { + gateX = gUnknown_02038800[i].pos.x + 7; + gateY = gUnknown_02038800[i].pos.y + 7; + + if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1) + { + finalX = x - gateX + 2; + finalY = y - gateY + 2; + check = sub_80C7FEC(a, finalX, finalY); + + if (check != 255) + { + upperNibble = check >> 4; + lowerNibble = check & 0xF; + + asm("" ::"r"(lowerNibble)); + + if (sub_80C7F64(i, lowerNibble)) + { + if (sub_80C7E8C(i, upperNibble)) + { + sub_80C7FB8(i, upperNibble); + sub_80C7A44(i, upperNibble); + return 0; + } + + return 1; + } + } + } + } + + return 0; +} -- cgit v1.2.3 From 4ccd42ebf610fb1c4e423dbad8674a35ffccc9d2 Mon Sep 17 00:00:00 2001 From: Touched Date: Sun, 25 Jun 2017 21:32:27 +0200 Subject: Decompile data/rotating_gate.s --- src/rotating_gate.c | 399 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 356 insertions(+), 43 deletions(-) (limited to 'src') diff --git a/src/rotating_gate.c b/src/rotating_gate.c index f8e5fac21..e22be3221 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -22,25 +22,338 @@ struct UnknownStruct2 u8 d; }; -extern const struct SpriteSheet gRotatingGatesGraphicsTable[]; -extern /* const */ struct UnknownStruct gUnknown_083D2964[]; -extern /* const */ struct UnknownStruct gUnknown_083D299C[]; -extern const struct SpriteTemplate gSpriteTemplate_83D60A4; -extern const struct SpriteTemplate gSpriteTemplate_83D608C; +static const struct UnknownStruct sUnknown_083D2964[] = { + { { 12, 5 }, 3, 0, 0, 0 }, + { { 14, 7 }, 3, 3, 0, 0 }, + { { 16, 4 }, 5, 1, 0, 0 }, + { { 15, 14 }, 1, 0, 0, 0 }, + { { 18, 13 }, 4, 2, 0, 0 }, + { { 8, 20 }, 4, 2, 0, 0 }, + { { 16, 20 }, 7, 1, 0, 0 }, +}; -extern u8 gUnknown_020387F0[10]; // puzzle oam ID list +static const struct UnknownStruct sUnknown_083D299C[] = { + { { 13, 3 }, 4, 3, 0, 0 }, + { { 12, 6 }, 4, 2, 0, 0 }, + { { 3, 6 }, 4, 2, 0, 0 }, + { { 3, 9 }, 5, 3, 0, 0 }, + { { 8, 8 }, 0, 1, 0, 0 }, + { { 2, 12 }, 6, 2, 0, 0 }, + { { 9, 13 }, 1, 0, 0, 0 }, + { { 3, 14 }, 2, 1, 0, 0 }, + { { 9, 15 }, 3, 2, 0, 0 }, + { { 3, 18 }, 5, 2, 0, 0 }, + { { 2, 19 }, 4, 0, 0, 0 }, + { { 5, 21 }, 0, 0, 0, 0 }, + { { 9, 19 }, 3, 3, 0, 0 }, + { { 12, 20 }, 4, 1, 0, 0 }, +}; -extern struct UnknownStruct *gUnknown_02038800; -extern u8 gUnknown_02038804; // puzzle count +static const u8 RotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/1.4bpp"); +static const u8 RotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/2.4bpp"); +static const u8 RotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/3.4bpp"); +static const u8 RotatingGateTiles_5[] = INCBIN_U8("graphics/rotating_gates/5.4bpp"); +static const u8 RotatingGateTiles_6[] = INCBIN_U8("graphics/rotating_gates/6.4bpp"); +static const u8 RotatingGateTiles_7[] = INCBIN_U8("graphics/rotating_gates/7.4bpp"); +static const u8 RotatingGateTiles_0[] = INCBIN_U8("graphics/rotating_gates/0.4bpp"); +static const u8 RotatingGateTiles_4[] = INCBIN_U8("graphics/rotating_gates/4.4bpp"); + +static const struct OamData gOamData_83D5E0C = { + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = 0, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 5, + .affineParam = 0, +}; + +// Smaller +static const struct OamData gOamData_83D5E14 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = 0, + .mosaic = 0, + .bpp = ST_OAM_4BPP, + .shape = ST_OAM_SQUARE, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 5, + .affineParam = 0, +}; + +static const struct SpriteSheet gRotatingGatesGraphicsTable[] = { + { RotatingGateTiles_0, 0x200, 0x1300 }, + { RotatingGateTiles_1, 0x800, 0x1301 }, + { RotatingGateTiles_2, 0x800, 0x1302 }, + { RotatingGateTiles_3, 0x800, 0x1303 }, + { RotatingGateTiles_4, 0x200, 0x1304 }, + { RotatingGateTiles_5, 0x800, 0x1305 }, + { RotatingGateTiles_6, 0x800, 0x1306 }, + { RotatingGateTiles_7, 0x800, 0x1307 }, + { NULL }, +}; + +static const union AnimCmd gSpriteAnim_83D5E64[] = { + ANIMCMD_FRAME(0, 0), ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_83D5E6C[] = { + ANIMCMD_FRAME(0, 0), ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_83D5E74[] = { + gSpriteAnim_83D5E64, +}; + +static const union AnimCmd *const gSpriteAnimTable_83D5E78[] = { + gSpriteAnim_83D5E6C, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5E7C[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5E8C[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5E9C[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_JUMP(0), +}; -extern struct UnknownStruct2 gUnknown_083D611C[5]; -extern struct UnknownStruct2 gUnknown_083D60FC[5]; -extern const u8 gUnknown_083D613C[12][8]; +static const union AffineAnimCmd gSpriteAffineAnim_83D5EAC[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5EBC[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5ED4[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5EEC[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5F04[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5F1C[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5F34[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5F4C[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5F64[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5F7C[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5F94[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5FAC[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), + AFFINEANIMCMD_END, +}; -extern const u8 gUnknown_083D60BC[4][4]; -extern const u8 gUnknown_083D60CC[4][4]; -extern const u8 gUnknown_083D60DC[4][4]; -extern const u8 gUnknown_083D60EC[4][4]; +static const union AffineAnimCmd gSpriteAffineAnim_83D5FC4[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5FDC[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D5FF4[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D600C[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_83D6024[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), + AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83D603C[] = { + gSpriteAffineAnim_83D5E7C, + gSpriteAffineAnim_83D5E8C, + gSpriteAffineAnim_83D5E9C, + gSpriteAffineAnim_83D5EAC, + gSpriteAffineAnim_83D5F1C, + gSpriteAffineAnim_83D5F64, + gSpriteAffineAnim_83D5F4C, + gSpriteAffineAnim_83D5F34, + gSpriteAffineAnim_83D5EBC, + gSpriteAffineAnim_83D5ED4, + gSpriteAffineAnim_83D5EEC, + gSpriteAffineAnim_83D5F04, + gSpriteAffineAnim_83D5FDC, + gSpriteAffineAnim_83D6024, + gSpriteAffineAnim_83D600C, + gSpriteAffineAnim_83D5FF4, + gSpriteAffineAnim_83D5F7C, + gSpriteAffineAnim_83D5F94, + gSpriteAffineAnim_83D5FAC, + gSpriteAffineAnim_83D5FC4, +}; + +void sub_80C7C94(struct Sprite *sprite); + +static const struct SpriteTemplate gSpriteTemplate_83D608C = { + .tileTag = 4864, + .paletteTag = 0xFFFF, + .oam = &gOamData_83D5E0C, + .anims = gSpriteAnimTable_83D5E74, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D603C, + .callback = sub_80C7C94, +}; + +static const struct SpriteTemplate gSpriteTemplate_83D60A4 = { + .tileTag = 4864, + .paletteTag = 0xFFFF, + .oam = &gOamData_83D5E14, + .anims = gSpriteAnimTable_83D5E78, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83D603C, + .callback = sub_80C7C94, +}; + +static const u8 sUnknown_083D60BC[4][4] = { + { 255, 255, 255, 255 }, { 39, 38, 18, 19 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, +}; + +static const u8 sUnknown_083D60CC[4][4] = { + { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 23, 22, 34, 35 }, { 255, 255, 255, 255 }, +}; + +static const u8 sUnknown_083D60DC[4][4] = { + { 255, 17, 255, 255 }, { 255, 16, 255, 255 }, { 255, 36, 255, 255 }, { 255, 37, 255, 255 }, +}; + +static const u8 sUnknown_083D60EC[4][4] = { + { 255, 255, 33, 255 }, { 255, 255, 32, 255 }, { 255, 255, 20, 255 }, { 255, 255, 21, 255 }, +}; + +static const struct UnknownStruct2 sUnknown_083D60FC[] = { + { 0, -1, 0, 0 }, + { 1, -2, 0, 0 }, + { 0, 0, 0, 0 }, + { 1, 0, 0, 0 }, + { -1, 0, 0, 0 }, + { -1, 1, 0, 0 }, + { -1, -1, 0, 0 }, + { -2, -1, 0, 0 }, +}; + +static const struct UnknownStruct2 sUnknown_083D611C[] = { + { -1, -1, 0, 0 }, + { -1, -2, 0, 0 }, + { 0, -1, 0, 0 }, + { 1, -1, 0, 0 }, + { 0, 0, 0, 0 }, + { 0, 1, 0, 0 }, + { -1, 0, 0, 0 }, + { -2, 0, 0, 0 }, +}; + +static const u8 sUnknown_083D613C[12][8] = { + { + 1, 0, 1, 0, 0, 0, 0, 0, + }, + { + 1, 1, 1, 0, 0, 0, 0, 0, + }, + { + 1, 0, 1, 1, 0, 0, 0, 0, + }, + { + 1, 1, 1, 1, 0, 0, 0, 0, + }, + { + 1, 0, 1, 0, 1, 0, 0, 0, + }, + { + 1, 1, 1, 0, 1, 0, 0, 0, + }, + { + 1, 0, 1, 1, 1, 0, 0, 0, + }, + { + 1, 0, 1, 0, 1, 1, 0, 0, + }, + { + 1, 1, 1, 1, 1, 0, 0, 0, + }, + { + 1, 1, 1, 0, 1, 1, 0, 0, + }, + { + 1, 0, 1, 1, 1, 1, 0, 0, + }, + { + 1, 1, 1, 1, 1, 1, 0, 0, + }, +}; + +extern u8 gUnknown_020387F0[10]; // puzzle oam ID list +extern const struct UnknownStruct *gUnknown_02038800; +extern u8 gUnknown_02038804; // puzzle count u8 sub_80C7BAC(u8 i, s16 a, s16 b); void sub_8060388(s16 x, s16 y, s16 *outX, s16 *outY); @@ -125,11 +438,11 @@ void sub_80C7A80(void) switch (a) { case 1: - gUnknown_02038800 = gUnknown_083D2964; + gUnknown_02038800 = sUnknown_083D2964; gUnknown_02038804 = 7; break; case 2: - gUnknown_02038800 = gUnknown_083D299C; + gUnknown_02038800 = sUnknown_083D299C; gUnknown_02038804 = 0xE; break; case 0: @@ -170,7 +483,7 @@ u8 sub_80C7BAC(u8 i, s16 a, s16 b) { struct Sprite *sprite; // r4 struct SpriteTemplate template; - struct UnknownStruct *unk; + const struct UnknownStruct *unk; u8 id; // r5 s16 x, y; @@ -312,7 +625,7 @@ void sub_80C7DC0(void) #ifdef NONMATCHING int sub_80C7E8C(u8 a, int puzzleType) { - struct UnknownStruct2 *unk1; + const struct UnknownStruct2 *unk1; u8 unk2; s16 x; s16 y; @@ -326,9 +639,9 @@ int sub_80C7E8C(u8 a, int puzzleType) int wat; if (puzzleType == 1) - unk1 = gUnknown_083D611C; + unk1 = sUnknown_083D611C; else if (puzzleType == 2) - unk1 = gUnknown_083D60FC; + unk1 = sUnknown_083D60FC; else return 0; @@ -343,7 +656,7 @@ int sub_80C7E8C(u8 a, int puzzleType) j = 0; unk4 = unk2 + i; wat = unk2 + i; - unk5 = &gUnknown_083D613C[unk3][i * 2]; + unk5 = &sUnknown_083D613C[unk3][i * 2]; for (; j <= 1; j++) { @@ -378,11 +691,11 @@ __attribute__((naked)) int sub_80C7E8C(u8 a, int puzzleType) lsrs r4, r0, 24\n\ cmp r1, 0x1\n\ bne _080C7EAC\n\ - ldr r0, _080C7EA8 @ =gUnknown_083D611C\n\ + ldr r0, _080C7EA8 @ =sUnknown_083D611C\n\ mov r10, r0\n\ b _080C7EB8\n\ .align 2, 0\n\ -_080C7EA8: .4byte gUnknown_083D611C\n\ +_080C7EA8: .4byte sUnknown_083D611C\n\ _080C7EAC:\n\ cmp r1, 0x2\n\ beq _080C7EB4\n\ @@ -390,7 +703,7 @@ _080C7EB0:\n\ movs r0, 0\n\ b _080C7F48\n\ _080C7EB4:\n\ - ldr r1, _080C7F58 @ =gUnknown_083D60FC\n\ + ldr r1, _080C7F58 @ =sUnknown_083D60FC\n\ mov r10, r1\n\ _080C7EB8:\n\ adds r0, r4, 0\n\ @@ -424,7 +737,7 @@ _080C7EE8:\n\ adds r5, r7, 0\n\ ldr r1, [sp, 0x4]\n\ adds r0, r1\n\ - ldr r2, _080C7F60 @ =gUnknown_083D613C\n\ + ldr r2, _080C7F60 @ =sUnknown_083D613C\n\ adds r4, r0, r2\n\ _080C7EFA:\n\ adds r0, r5, 0\n\ @@ -477,9 +790,9 @@ _080C7F48:\n\ pop {r1}\n\ bx r1\n\ .align 2, 0\n\ -_080C7F58: .4byte gUnknown_083D60FC\n\ +_080C7F58: .4byte sUnknown_083D60FC\n\ _080C7F5C: .4byte gUnknown_02038800\n\ -_080C7F60: .4byte gUnknown_083D613C\n\ +_080C7F60: .4byte sUnknown_083D613C\n\ .syntax divided\n"); } #endif @@ -500,7 +813,7 @@ int sub_80C7F64(u8 a, u8 b) unk7 = unk2 < 0 ? unk2 + 3 : unk2; unk4 = (unk7 - ((unk7 >> 2) << 2)); unk6 = gUnknown_02038800[a].e; - return gUnknown_083D613C[unk6][(s8)unk4 * 2 + unk1]; + return sUnknown_083D613C[unk6][(s8)unk4 * 2 + unk1]; } #else __attribute__((naked)) int sub_80C7F64(u8 a, u8 b) @@ -533,7 +846,7 @@ _080C7F8A:\n\ lsls r1, r6, 3\n\ adds r1, r2\n\ ldrb r1, [r1, 0x4]\n\ - ldr r2, _080C7FB4 @ =gUnknown_083D613C\n\ + ldr r2, _080C7FB4 @ =sUnknown_083D613C\n\ lsls r0, 24\n\ asrs r0, 23\n\ adds r0, r5\n\ @@ -546,7 +859,7 @@ _080C7F8A:\n\ bx r1\n\ .align 2, 0\n\ _080C7FB0: .4byte gUnknown_02038800\n\ -_080C7FB4: .4byte gUnknown_083D613C\n\ +_080C7FB4: .4byte sUnknown_083D613C\n\ .syntax divided\n"); } #endif @@ -569,13 +882,13 @@ u8 sub_80C7FEC(u8 a, s16 b, s16 c) register const u8(*ptr)[][4] asm("r3"); if (a == 2) - ptr = &gUnknown_083D60BC; + ptr = &sUnknown_083D60BC; else if (a == 1) - ptr = &gUnknown_083D60CC; + ptr = &sUnknown_083D60CC; else if (a == 3) - ptr = &gUnknown_083D60DC; + ptr = &sUnknown_083D60DC; else if (a == 4) - ptr = &gUnknown_083D60EC; + ptr = &sUnknown_083D60EC; else return 0xFF; @@ -595,31 +908,31 @@ __attribute__((naked)) u8 sub_80C7FEC(u8 a, s16 b, s16 c) lsrs r2, 16\n\ cmp r0, 0x2\n\ bne _080C8008\n\ - ldr r3, _080C8004 @ =gUnknown_083D60BC\n\ + ldr r3, _080C8004 @ =sUnknown_083D60BC\n\ b _080C802A\n\ .align 2, 0\n\ -_080C8004: .4byte gUnknown_083D60BC\n\ +_080C8004: .4byte sUnknown_083D60BC\n\ _080C8008:\n\ cmp r0, 0x1\n\ bne _080C8014\n\ - ldr r3, _080C8010 @ =gUnknown_083D60CC\n\ + ldr r3, _080C8010 @ =sUnknown_083D60CC\n\ b _080C802A\n\ .align 2, 0\n\ -_080C8010: .4byte gUnknown_083D60CC\n\ +_080C8010: .4byte sUnknown_083D60CC\n\ _080C8014:\n\ cmp r0, 0x3\n\ bne _080C8020\n\ - ldr r3, _080C801C @ =gUnknown_083D60DC\n\ + ldr r3, _080C801C @ =sUnknown_083D60DC\n\ b _080C802A\n\ .align 2, 0\n\ -_080C801C: .4byte gUnknown_083D60DC\n\ +_080C801C: .4byte sUnknown_083D60DC\n\ _080C8020:\n\ cmp r3, 0x4\n\ beq _080C8028\n\ movs r0, 0xFF\n\ b _080C8038\n\ _080C8028:\n\ - ldr r3, _080C803C @ =gUnknown_083D60EC\n\ + ldr r3, _080C803C @ =sUnknown_083D60EC\n\ _080C802A:\n\ lsls r0, r2, 16\n\ lsls r1, 16\n\ @@ -632,7 +945,7 @@ _080C8038:\n\ pop {r1}\n\ bx r1\n\ .align 2, 0\n\ -_080C803C: .4byte gUnknown_083D60EC\n\ +_080C803C: .4byte sUnknown_083D60EC\n\ .syntax divided\n"); } #endif -- cgit v1.2.3 From a27a90423d9e46461e803f9049fb4b90600c5003 Mon Sep 17 00:00:00 2001 From: Touched Date: Mon, 26 Jun 2017 15:08:59 +0200 Subject: Label rotating_gate.c --- src/rotating_gate.c | 902 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 549 insertions(+), 353 deletions(-) (limited to 'src') diff --git a/src/rotating_gate.c b/src/rotating_gate.c index e22be3221..665a16ae4 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -1,64 +1,236 @@ #include "global.h" #include "bike.h" #include "event_data.h" +#include "field_map_obj.h" #include "fieldmap.h" +#include "map_constants.h" +#include "songs.h" #include "sound.h" #include "sprite.h" -struct UnknownStruct +#define ROTATING_GATE_TILE_TAG 0x1300 +#define ROTATING_GATE_PUZZLE_MAX 14 +#define GATE_ARM_MAX_LENGTH 2 + +#define GATE_ROTATION(rotationDirection, arm, longArm) \ + ((rotationDirection & 15) << 4) | ((arm & 7) << 1) | (longArm & 1) +#define GATE_ROTATION_CLOCKWISE(arm, longArm) GATE_ROTATION(ROTATE_CLOCKWISE, arm, longArm) +#define GATE_ROTATION_ANTICLOCKWISE(arm, longArm) GATE_ROTATION(ROTATE_ANTICLOCKWISE, arm, longArm) +#define GATE_ROTATION_NONE 255 + +static void SpriteCallback_RotatingGate(struct Sprite *sprite); +static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY); +static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite); + +enum +{ + /* + * | + * +-- + */ + GATE_SHAPE_L1, + + /* + * | + * | + * +-- + */ + GATE_SHAPE_L2, + + /* + * | + * +---- + */ + GATE_SHAPE_L3, + + /* + * | + * | + * +---- + */ + GATE_SHAPE_L4, + + /* + * | + * +-- + * | + */ + GATE_SHAPE_T1, + + /* + * | + * | + * +-- + * | + */ + GATE_SHAPE_T2, + + /* + * | + * +---- + * | + */ + GATE_SHAPE_T3, + + /* + * An unused T-shape gate + * | + * +-- + * | + * | + */ + GATE_SHAPE_T4, + + /* + * An unused T-shape gate + * | + * | + * +---- + * | + */ + GATE_SHAPE_UNUSED_T1, + + /* + * An unused T-shape gate + * | + * | + * +-- + * | + * | + */ + GATE_SHAPE_UNUSED_T2, + + /* + * An unused T-shape gate + * | + * +---- + * | + * | + */ + GATE_SHAPE_UNUSED_T3, + + /* + * An unused T-shape gate + * | + * | + * +---- + * | + * | + */ + GATE_SHAPE_UNUSED_T4, +}; + +enum +{ + /* + * 0 degrees (clockwise) + * | + * +-- + * | + */ + GATE_ORIENTATION_0, + + /* + * 90 degress (clockwise) + * --+-- + * | + */ + GATE_ORIENTATION_90, + + /* + * 180 degrees (clockwise) + * | + * --+ + * | + */ + GATE_ORIENTATION_180, + + /* + * 270 degrees (clockwise) + * | + * --+-- + */ + GATE_ORIENTATION_270, + + GATE_ORIENTATION_MAX, +}; + +// Describes the location of the gates "arms" when the gate has not +// been rotated (i.e. rotated 0 degrees) +enum +{ + GATE_ARM_NORTH, + GATE_ARM_EAST, + GATE_ARM_SOUTH, + GATE_ARM_WEST, +}; + +enum +{ + ROTATE_NONE, + ROTATE_ANTICLOCKWISE, + ROTATE_CLOCKWISE, +}; + +enum +{ + PUZZLE_NONE, + PUZZLE_FORTREE_CITY_GYM, + PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6, +}; + +struct RotatingGatePuzzle { - /* 0x0 */ struct Coords16 pos; - /* 0x4 */ u8 e; - /* 0x5 */ u8 f; - /* 0x6 */ u8 g; - /* 0x7 */ u8 h; + struct Coords16 pos; + u8 shape; + u8 orientation; }; -struct UnknownStruct2 +struct Coords8 { - s8 a; - s8 b; - u8 c; - u8 d; + s8 deltaX; + s8 deltaY; }; -static const struct UnknownStruct sUnknown_083D2964[] = { - { { 12, 5 }, 3, 0, 0, 0 }, - { { 14, 7 }, 3, 3, 0, 0 }, - { { 16, 4 }, 5, 1, 0, 0 }, - { { 15, 14 }, 1, 0, 0, 0 }, - { { 18, 13 }, 4, 2, 0, 0 }, - { { 8, 20 }, 4, 2, 0, 0 }, - { { 16, 20 }, 7, 1, 0, 0 }, +// Fortree +static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] = { + { { 12, 5 }, GATE_SHAPE_L4, GATE_ORIENTATION_0 }, + { { 14, 7 }, GATE_SHAPE_L4, GATE_ORIENTATION_270 }, + { { 16, 4 }, GATE_SHAPE_T2, GATE_ORIENTATION_90 }, + { { 15, 14 }, GATE_SHAPE_L2, GATE_ORIENTATION_0 }, + { { 18, 13 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 }, + { { 8, 20 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 }, + { { 16, 20 }, GATE_SHAPE_T4, GATE_ORIENTATION_90 }, }; -static const struct UnknownStruct sUnknown_083D299C[] = { - { { 13, 3 }, 4, 3, 0, 0 }, - { { 12, 6 }, 4, 2, 0, 0 }, - { { 3, 6 }, 4, 2, 0, 0 }, - { { 3, 9 }, 5, 3, 0, 0 }, - { { 8, 8 }, 0, 1, 0, 0 }, - { { 2, 12 }, 6, 2, 0, 0 }, - { { 9, 13 }, 1, 0, 0, 0 }, - { { 3, 14 }, 2, 1, 0, 0 }, - { { 9, 15 }, 3, 2, 0, 0 }, - { { 3, 18 }, 5, 2, 0, 0 }, - { { 2, 19 }, 4, 0, 0, 0 }, - { { 5, 21 }, 0, 0, 0, 0 }, - { { 9, 19 }, 3, 3, 0, 0 }, - { { 12, 20 }, 4, 1, 0, 0 }, +// Trickhouse +static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] = { + { { 13, 3 }, GATE_SHAPE_T1, GATE_ORIENTATION_270 }, + { { 12, 6 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 }, + { { 3, 6 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 }, + { { 3, 9 }, GATE_SHAPE_T2, GATE_ORIENTATION_270 }, + { { 8, 8 }, GATE_SHAPE_L1, GATE_ORIENTATION_90 }, + { { 2, 12 }, GATE_SHAPE_T3, GATE_ORIENTATION_180 }, + { { 9, 13 }, GATE_SHAPE_L2, GATE_ORIENTATION_0 }, + { { 3, 14 }, GATE_SHAPE_L3, GATE_ORIENTATION_90 }, + { { 9, 15 }, GATE_SHAPE_L4, GATE_ORIENTATION_180 }, + { { 3, 18 }, GATE_SHAPE_T2, GATE_ORIENTATION_180 }, + { { 2, 19 }, GATE_SHAPE_T1, GATE_ORIENTATION_0 }, + { { 5, 21 }, GATE_SHAPE_L1, GATE_ORIENTATION_0 }, + { { 9, 19 }, GATE_SHAPE_L4, GATE_ORIENTATION_270 }, + { { 12, 20 }, GATE_SHAPE_T1, GATE_ORIENTATION_90 }, }; -static const u8 RotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/1.4bpp"); -static const u8 RotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/2.4bpp"); -static const u8 RotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/3.4bpp"); -static const u8 RotatingGateTiles_5[] = INCBIN_U8("graphics/rotating_gates/5.4bpp"); -static const u8 RotatingGateTiles_6[] = INCBIN_U8("graphics/rotating_gates/6.4bpp"); -static const u8 RotatingGateTiles_7[] = INCBIN_U8("graphics/rotating_gates/7.4bpp"); -static const u8 RotatingGateTiles_0[] = INCBIN_U8("graphics/rotating_gates/0.4bpp"); -static const u8 RotatingGateTiles_4[] = INCBIN_U8("graphics/rotating_gates/4.4bpp"); +static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/1.4bpp"); +static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/rotating_gates/2.4bpp"); +static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/rotating_gates/3.4bpp"); +static const u8 sRotatingGateTiles_5[] = INCBIN_U8("graphics/rotating_gates/5.4bpp"); +static const u8 sRotatingGateTiles_6[] = INCBIN_U8("graphics/rotating_gates/6.4bpp"); +static const u8 sRotatingGateTiles_7[] = INCBIN_U8("graphics/rotating_gates/7.4bpp"); +static const u8 sRotatingGateTiles_0[] = INCBIN_U8("graphics/rotating_gates/0.4bpp"); +static const u8 sRotatingGateTiles_4[] = INCBIN_U8("graphics/rotating_gates/4.4bpp"); -static const struct OamData gOamData_83D5E0C = { +static const struct OamData sOamData_RotatingGateLarge = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = 0, @@ -74,8 +246,7 @@ static const struct OamData gOamData_83D5E0C = { .affineParam = 0, }; -// Smaller -static const struct OamData gOamData_83D5E14 = { +static const struct OamData sOamData_RotatingGateRegular = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = 0, @@ -91,291 +262,331 @@ static const struct OamData gOamData_83D5E14 = { .affineParam = 0, }; -static const struct SpriteSheet gRotatingGatesGraphicsTable[] = { - { RotatingGateTiles_0, 0x200, 0x1300 }, - { RotatingGateTiles_1, 0x800, 0x1301 }, - { RotatingGateTiles_2, 0x800, 0x1302 }, - { RotatingGateTiles_3, 0x800, 0x1303 }, - { RotatingGateTiles_4, 0x200, 0x1304 }, - { RotatingGateTiles_5, 0x800, 0x1305 }, - { RotatingGateTiles_6, 0x800, 0x1306 }, - { RotatingGateTiles_7, 0x800, 0x1307 }, +static const struct SpriteSheet sRotatingGatesGraphicsTable[] = { + { sRotatingGateTiles_0, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L1 }, + { sRotatingGateTiles_1, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L2 }, + { sRotatingGateTiles_2, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L3 }, + { sRotatingGateTiles_3, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L4 }, + { sRotatingGateTiles_4, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T1 }, + { sRotatingGateTiles_5, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T2 }, + { sRotatingGateTiles_6, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T3 }, + { sRotatingGateTiles_7, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T4 }, { NULL }, }; -static const union AnimCmd gSpriteAnim_83D5E64[] = { +static const union AnimCmd sSpriteAnim_RotatingGateLarge[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -static const union AnimCmd gSpriteAnim_83D5E6C[] = { +static const union AnimCmd sSpriteAnim_RotatingGateRegular[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -static const union AnimCmd *const gSpriteAnimTable_83D5E74[] = { - gSpriteAnim_83D5E64, +static const union AnimCmd *const sSpriteAnimTable_RotatingGateLarge[] = { + sSpriteAnim_RotatingGateLarge, }; -static const union AnimCmd *const gSpriteAnimTable_83D5E78[] = { - gSpriteAnim_83D5E6C, +static const union AnimCmd *const sSpriteAnimTable_RotatingGateRegular[] = { + sSpriteAnim_RotatingGateRegular, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5E7C[] = { +static const union AffineAnimCmd sSpriteAffineAnim_Rotated0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5E8C[] = { +static const union AffineAnimCmd sSpriteAffineAnim_Rotated90[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5E9C[] = { +static const union AffineAnimCmd sSpriteAffineAnim_Rotated180[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5EAC[] = { +static const union AffineAnimCmd sSpriteAffineAnim_Rotated270[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_JUMP(0), }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5EBC[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5ED4[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise90to180[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5EEC[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise180to270[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5F04[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise270to360[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5F1C[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise360to270[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5F34[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5F4C[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise180to90[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5F64[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise90to0[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5F7C[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90Faster[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5F94[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise90to180Faster[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5FAC[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise180to270Faster[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5FC4[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise270to360Faster[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5FDC[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise360to270Faster[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D5FF4[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180Faster[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D600C[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise180to90Faster[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd gSpriteAffineAnim_83D6024[] = { +static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise90to0Faster[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8), AFFINEANIMCMD_END, }; -static const union AffineAnimCmd *const gSpriteAffineAnimTable_83D603C[] = { - gSpriteAffineAnim_83D5E7C, - gSpriteAffineAnim_83D5E8C, - gSpriteAffineAnim_83D5E9C, - gSpriteAffineAnim_83D5EAC, - gSpriteAffineAnim_83D5F1C, - gSpriteAffineAnim_83D5F64, - gSpriteAffineAnim_83D5F4C, - gSpriteAffineAnim_83D5F34, - gSpriteAffineAnim_83D5EBC, - gSpriteAffineAnim_83D5ED4, - gSpriteAffineAnim_83D5EEC, - gSpriteAffineAnim_83D5F04, - gSpriteAffineAnim_83D5FDC, - gSpriteAffineAnim_83D6024, - gSpriteAffineAnim_83D600C, - gSpriteAffineAnim_83D5FF4, - gSpriteAffineAnim_83D5F7C, - gSpriteAffineAnim_83D5F94, - gSpriteAffineAnim_83D5FAC, - gSpriteAffineAnim_83D5FC4, +static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] = { + sSpriteAffineAnim_Rotated0, + sSpriteAffineAnim_Rotated90, + sSpriteAffineAnim_Rotated180, + sSpriteAffineAnim_Rotated270, + sSpriteAffineAnim_RotatingAnticlockwise360to270, + sSpriteAffineAnim_RotatingAnticlockwise90to0, + sSpriteAffineAnim_RotatingAnticlockwise180to90, + sSpriteAffineAnim_RotatingAnticlockwise270to180, + sSpriteAffineAnim_RotatingClockwise0to90, + sSpriteAffineAnim_RotatingClockwise90to180, + sSpriteAffineAnim_RotatingClockwise180to270, + sSpriteAffineAnim_RotatingClockwise270to360, + sSpriteAffineAnim_RotatingAnticlockwise360to270Faster, + sSpriteAffineAnim_RotatingAnticlockwise90to0Faster, + sSpriteAffineAnim_RotatingAnticlockwise180to90Faster, + sSpriteAffineAnim_RotatingAnticlockwise270to180Faster, + sSpriteAffineAnim_RotatingClockwise0to90Faster, + sSpriteAffineAnim_RotatingClockwise90to180Faster, + sSpriteAffineAnim_RotatingClockwise180to270Faster, + sSpriteAffineAnim_RotatingClockwise270to360Faster, }; -void sub_80C7C94(struct Sprite *sprite); - -static const struct SpriteTemplate gSpriteTemplate_83D608C = { - .tileTag = 4864, +static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = { + .tileTag = ROTATING_GATE_TILE_TAG, .paletteTag = 0xFFFF, - .oam = &gOamData_83D5E0C, - .anims = gSpriteAnimTable_83D5E74, + .oam = &sOamData_RotatingGateLarge, + .anims = sSpriteAnimTable_RotatingGateLarge, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83D603C, - .callback = sub_80C7C94, + .affineAnims = sSpriteAffineAnimTable_RotatingGate, + .callback = SpriteCallback_RotatingGate, }; -static const struct SpriteTemplate gSpriteTemplate_83D60A4 = { - .tileTag = 4864, +static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = { + .tileTag = ROTATING_GATE_TILE_TAG, .paletteTag = 0xFFFF, - .oam = &gOamData_83D5E14, - .anims = gSpriteAnimTable_83D5E78, + .oam = &sOamData_RotatingGateRegular, + .anims = sSpriteAnimTable_RotatingGateRegular, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83D603C, - .callback = sub_80C7C94, + .affineAnims = sSpriteAffineAnimTable_RotatingGate, + .callback = SpriteCallback_RotatingGate, }; -static const u8 sUnknown_083D60BC[4][4] = { - { 255, 255, 255, 255 }, { 39, 38, 18, 19 }, { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, +// These structures describe what happens to the gate if you hit it at +// a given coordinate in a 4x4 grid when walking in the specified +// direction. Either the gate does not rotate, or it rotates in the +// given direction. This information is compared against the gate +// "arm" layout to see if there is an arm at the position in order to +// produce the final rotation. +static const u8 sRotatingGate_RotationInfoNorth[4][4] = { + { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, + { GATE_ROTATION_CLOCKWISE(GATE_ARM_WEST, 1), + GATE_ROTATION_CLOCKWISE(GATE_ARM_WEST, 0), + GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_EAST, 0), + GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_EAST, 1) }, + { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, + { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, }; -static const u8 sUnknown_083D60CC[4][4] = { - { 255, 255, 255, 255 }, { 255, 255, 255, 255 }, { 23, 22, 34, 35 }, { 255, 255, 255, 255 }, +static const u8 sRotatingGate_RotationInfoSouth[4][4] = { + { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, + { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, + { GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_WEST, 1), + GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_WEST, 0), + GATE_ROTATION_CLOCKWISE(GATE_ARM_EAST, 0), + GATE_ROTATION_CLOCKWISE(GATE_ARM_EAST, 1) }, + { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE }, }; -static const u8 sUnknown_083D60DC[4][4] = { - { 255, 17, 255, 255 }, { 255, 16, 255, 255 }, { 255, 36, 255, 255 }, { 255, 37, 255, 255 }, +static const u8 sRotatingGate_RotationInfoWest[4][4] = { + { GATE_ROTATION_NONE, + GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_NORTH, 1), + GATE_ROTATION_NONE, + GATE_ROTATION_NONE }, + { GATE_ROTATION_NONE, + GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_NORTH, 0), + GATE_ROTATION_NONE, + GATE_ROTATION_NONE }, + { GATE_ROTATION_NONE, + GATE_ROTATION_CLOCKWISE(GATE_ARM_SOUTH, 0), + GATE_ROTATION_NONE, + GATE_ROTATION_NONE }, + { GATE_ROTATION_NONE, + GATE_ROTATION_CLOCKWISE(GATE_ARM_SOUTH, 1), + GATE_ROTATION_NONE, + GATE_ROTATION_NONE }, }; -static const u8 sUnknown_083D60EC[4][4] = { - { 255, 255, 33, 255 }, { 255, 255, 32, 255 }, { 255, 255, 20, 255 }, { 255, 255, 21, 255 }, +static const u8 sRotatingGate_RotationInfoEast[4][4] = { + { GATE_ROTATION_NONE, + GATE_ROTATION_NONE, + GATE_ROTATION_CLOCKWISE(GATE_ARM_NORTH, 1), + GATE_ROTATION_NONE }, + { GATE_ROTATION_NONE, + GATE_ROTATION_NONE, + GATE_ROTATION_CLOCKWISE(GATE_ARM_NORTH, 0), + GATE_ROTATION_NONE }, + { GATE_ROTATION_NONE, + GATE_ROTATION_NONE, + GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_SOUTH, 0), + GATE_ROTATION_NONE }, + { GATE_ROTATION_NONE, + GATE_ROTATION_NONE, + GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_SOUTH, 1), + GATE_ROTATION_NONE }, }; -static const struct UnknownStruct2 sUnknown_083D60FC[] = { - { 0, -1, 0, 0 }, - { 1, -2, 0, 0 }, - { 0, 0, 0, 0 }, - { 1, 0, 0, 0 }, - { -1, 0, 0, 0 }, - { -1, 1, 0, 0 }, - { -1, -1, 0, 0 }, - { -2, -1, 0, 0 }, +// These tables describe the relative coordinate positions the arms +// must move through in order to be rotated. +static const struct Coords8 sRotatingGate_ArmPositionsClockwiseRotation[] = { + { 0, -1 }, { 1, -2 }, { 0, 0 }, { 1, 0 }, { -1, 0 }, { -1, 1 }, { -1, -1 }, { -2, -1 }, }; -static const struct UnknownStruct2 sUnknown_083D611C[] = { - { -1, -1, 0, 0 }, - { -1, -2, 0, 0 }, - { 0, -1, 0, 0 }, - { 1, -1, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { -1, 0, 0, 0 }, - { -2, 0, 0, 0 }, +static const struct Coords8 sRotatingGate_ArmPositionsAntiClockwiseRotation[] = { + { -1, -1 }, { -1, -2 }, { 0, -1 }, { 1, -1 }, { 0, 0 }, { 0, 1 }, { -1, 0 }, { -2, 0 }, }; -static const u8 sUnknown_083D613C[12][8] = { +// Describes where the gates "arms" are in the order north, east, south, west. +// These are adjusted using the current orientation to perform collision checking +static const u8 sRotatingGate_ArmLayout[][GATE_ARM_WEST + 1][GATE_ARM_MAX_LENGTH] = { + // L-shape gates { - 1, 0, 1, 0, 0, 0, 0, 0, + { 1, 0 }, { 1, 0 }, { 0, 0 }, { 0, 0 }, }, { - 1, 1, 1, 0, 0, 0, 0, 0, + { 1, 1 }, { 1, 0 }, { 0, 0 }, { 0, 0 }, }, { - 1, 0, 1, 1, 0, 0, 0, 0, + { 1, 0 }, { 1, 1 }, { 0, 0 }, { 0, 0 }, }, { - 1, 1, 1, 1, 0, 0, 0, 0, + { 1, 1 }, { 1, 1 }, { 0, 0 }, { 0, 0 }, }, + + // T-shape gates { - 1, 0, 1, 0, 1, 0, 0, 0, + { 1, 0 }, { 1, 0 }, { 1, 0 }, { 0, 0 }, }, { - 1, 1, 1, 0, 1, 0, 0, 0, + { 1, 1 }, { 1, 0 }, { 1, 0 }, { 0, 0 }, }, { - 1, 0, 1, 1, 1, 0, 0, 0, + { 1, 0 }, { 1, 1 }, { 1, 0 }, { 0, 0 }, }, { - 1, 0, 1, 0, 1, 1, 0, 0, + { 1, 0 }, { 1, 0 }, { 1, 1 }, { 0, 0 }, }, + + // Unused T-shape gates + // These have 2-3 long arms and cannot actually be used anywhere + // since configuration for them is missing from the other tables. { - 1, 1, 1, 1, 1, 0, 0, 0, + { 1, 1 }, { 1, 1 }, { 1, 0 }, { 0, 0 }, }, { - 1, 1, 1, 0, 1, 1, 0, 0, + { 1, 1 }, { 1, 0 }, { 1, 1 }, { 0, 0 }, }, { - 1, 0, 1, 1, 1, 1, 0, 0, + { 1, 0 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, }, { - 1, 1, 1, 1, 1, 1, 0, 0, + { 1, 1 }, { 1, 1 }, { 1, 1 }, { 0, 0 }, }, }; -extern u8 gUnknown_020387F0[10]; // puzzle oam ID list -extern const struct UnknownStruct *gUnknown_02038800; +extern u8 gUnknown_020387F0[ROTATING_GATE_PUZZLE_MAX]; // puzzle oam ID list +extern const struct RotatingGatePuzzle *gUnknown_02038800; // sRotatingGatePuzzleConfiguration extern u8 gUnknown_02038804; // puzzle count -u8 sub_80C7BAC(u8 i, s16 a, s16 b); -void sub_8060388(s16 x, s16 y, s16 *outX, s16 *outY); -void sub_80C7D14(struct Sprite *sprite); - -int GetCurrentMapRotatingGatePuzzleType(void) +static int GetCurrentMapRotatingGatePuzzleType(void) { - if (gSaveBlock1.location.mapGroup == 0xC && gSaveBlock1.location.mapNum == 0x1) + if (gSaveBlock1.location.mapGroup == MAP_GROUP_FORTREE_CITY_GYM && + gSaveBlock1.location.mapNum == MAP_ID_FORTREE_CITY_GYM) { - return 1; + return PUZZLE_FORTREE_CITY_GYM; } - if (gSaveBlock1.location.mapGroup == 0x1d && gSaveBlock1.location.mapNum == 0x8) + if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_TRICK_HOUSE_PUZZLE6 && + gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_TRICK_HOUSE_PUZZLE6) { - return 2; + return PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6; } - return 0; + return PUZZLE_NONE; } -// ResetSomething -void sub_80C79CC(void) +static void RotatingGate_ResetAllGateOrientations(void) { int i; u8 *ptr; @@ -384,81 +595,77 @@ void sub_80C79CC(void) for (i = 0; i < gUnknown_02038804; i++) { - ptr[i] = gUnknown_02038800[i].f; + ptr[i] = gUnknown_02038800[i].orientation; } } -// GetSomething -/* u8 */ int sub_80C7A08(u8 a) +static int RotatingGate_GetGateOrientation(u8 gateId) { - u8 *ptr; - ptr = (u8 *)GetVarPointer(0x4000); - return ptr[a]; + return ((u8 *)GetVarPointer(0x4000))[gateId]; } -// SetSomething -void sub_80C7A24(u8 a, u8 b) +static void RotatingGate_SetGateOrientation(u8 gateId, u8 orientation) { - u8 *ptr; - ptr = (u8 *)GetVarPointer(0x4000); - ptr[a] = b; + ((u8 *)GetVarPointer(0x4000))[gateId] = orientation; } -// RotateInDirectionProbably -void sub_80C7A44(u8 a, u32 b) +static void RotatingGate_RotateInDirection(u8 gateId, u32 rotationDirection) { - u8 r1; - r1 = sub_80C7A08(a); + u8 orientation = RotatingGate_GetGateOrientation(gateId); - if (b == 1) + if (rotationDirection == ROTATE_ANTICLOCKWISE) { - if (r1) + if (orientation) { - r1--; + orientation--; } else { - r1 = 3; + orientation = GATE_ORIENTATION_270; } } else { - r1 = ++r1 % 4; + orientation = ++orientation % GATE_ORIENTATION_MAX; } - sub_80C7A24(a, r1); + RotatingGate_SetGateOrientation(gateId, orientation); } -// Configure -void sub_80C7A80(void) +static void RotatingGate_LoadPuzzleConfig(void) { - int a = GetCurrentMapRotatingGatePuzzleType(); + int puzzleType = GetCurrentMapRotatingGatePuzzleType(); u32 i; - switch (a) + switch (puzzleType) { - case 1: - gUnknown_02038800 = sUnknown_083D2964; - gUnknown_02038804 = 7; + case PUZZLE_FORTREE_CITY_GYM: + gUnknown_02038800 = sRotatingGate_FortreePuzzleConfig; + gUnknown_02038804 = + sizeof(sRotatingGate_FortreePuzzleConfig) / sizeof(struct RotatingGatePuzzle); break; - case 2: - gUnknown_02038800 = sUnknown_083D299C; - gUnknown_02038804 = 0xE; + case PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6: + gUnknown_02038800 = sRotatingGate_TrickHousePuzzleConfig; + gUnknown_02038804 = + sizeof(sRotatingGate_TrickHousePuzzleConfig) / sizeof(struct RotatingGatePuzzle); break; - case 0: + case PUZZLE_NONE: default: return; } - for (i = 0; i < 14; i++) + for (i = 0; i < ROTATING_GATE_PUZZLE_MAX; i++) { gUnknown_020387F0[i] = MAX_SPRITES; } } -void sub_80C7ADC(s16 a, s16 b) +static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) { u8 i; + + // Calculate the bounding box of the camera + // Same as RotatingGate_DestroyGatesOutsideViewport s16 x = gSaveBlock1.pos.x - 2; s16 x2 = gSaveBlock1.pos.x + 0x11; s16 y = gSaveBlock1.pos.y - 2; @@ -473,91 +680,88 @@ void sub_80C7ADC(s16 a, s16 b) if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && gUnknown_020387F0[i] == MAX_SPRITES) { - gUnknown_020387F0[i] = sub_80C7BAC(i, a, b); + gUnknown_020387F0[i] = RotatingGate_CreateGate(i, deltaX, deltaY); } } } -// CreateSprite -u8 sub_80C7BAC(u8 i, s16 a, s16 b) +static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) { - struct Sprite *sprite; // r4 + struct Sprite *sprite; struct SpriteTemplate template; - const struct UnknownStruct *unk; - u8 id; // r5 + const struct RotatingGatePuzzle *gate; + u8 spriteId; s16 x, y; - unk = &gUnknown_02038800[i]; + gate = &gUnknown_02038800[gateId]; - if (unk->e == 0 || unk->e == 4) + if (gate->shape == GATE_SHAPE_L1 || gate->shape == GATE_SHAPE_T1) { - template = gSpriteTemplate_83D60A4; + template = sSpriteTemplate_RotatingGateRegular; } else { - template = gSpriteTemplate_83D608C; + template = sSpriteTemplate_RotatingGateLarge; } - template.tileTag = unk->e + 0x1300; + template.tileTag = gate->shape + ROTATING_GATE_TILE_TAG; - id = CreateSprite(&template, 0, 0, 0x94); - if (id == MAX_SPRITES) + spriteId = CreateSprite(&template, 0, 0, 0x94); + if (spriteId == MAX_SPRITES) { return MAX_SPRITES; } - x = unk->pos.x + 7; - y = unk->pos.y + 7; + x = gate->pos.x + 7; + y = gate->pos.y + 7; - sprite = &gSprites[id]; - sprite->data0 = i; + sprite = &gSprites[spriteId]; + sprite->data0 = gateId; sprite->coordOffsetEnabled = 1; - sub_8060388(x + a, y + b, &sprite->pos1.x, &sprite->pos1.y); - sub_80C7D14(sprite); - StartSpriteAffineAnim(sprite, sub_80C7A08(i)); + sub_8060388(x + deltaX, y + deltaY, &sprite->pos1.x, &sprite->pos1.y); + RotatingGate_HideGatesOutsideViewport(sprite); + StartSpriteAffineAnim(sprite, RotatingGate_GetGateOrientation(gateId)); - return id; + return spriteId; } -// RotateGateWithSE -void sub_80C7C94(struct Sprite *sprite) +static void SpriteCallback_RotatingGate(struct Sprite *sprite) { - u8 a; // r5 - u8 b; + u8 rotationDirection; + u8 orientation; u8 affineAnimation; - a = sprite->data1; - b = sprite->data2; + rotationDirection = sprite->data1; + orientation = sprite->data2; - sub_80C7D14(sprite); + RotatingGate_HideGatesOutsideViewport(sprite); - if (a == 1) + if (rotationDirection == ROTATE_ANTICLOCKWISE) { - affineAnimation = b + 4; + affineAnimation = orientation + 4; if (GetPlayerSpeed() != 1) affineAnimation += 8; - PlaySE(48); + PlaySE(SE_HI_TURUN); StartSpriteAffineAnim(sprite, affineAnimation); } - else if (a == 2) + else if (rotationDirection == ROTATE_CLOCKWISE) { - affineAnimation = b + 8; + affineAnimation = orientation + 8; if (GetPlayerSpeed() != 1) affineAnimation += 8; - PlaySE(48); + PlaySE(SE_HI_TURUN); StartSpriteAffineAnim(sprite, affineAnimation); } - sprite->data1 = 0; + sprite->data1 = ROTATE_NONE; } -// See sub_806487C (field_map_obj_helpers.c) -void sub_80C7D14(struct Sprite *sprite) +static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite) { u16 x; s16 x2; @@ -571,7 +775,6 @@ void sub_80C7D14(struct Sprite *sprite) x2 = x + 0x40; // Dimensions of the rotating gate y2 = y + 0x40; - // TODO: Make this 0x10 a constant if ((s16)x > DISPLAY_WIDTH + 0x10 - 1 || x2 < -0x10) { sprite->invisible = 1; @@ -583,12 +786,12 @@ void sub_80C7D14(struct Sprite *sprite) } } -void LoadRotatingGatePics(void) +static void LoadRotatingGatePics(void) { - LoadSpriteSheets(gRotatingGatesGraphicsTable); + LoadSpriteSheets(sRotatingGatesGraphicsTable); } -void sub_80C7DC0(void) +static void RotatingGate_DestroyGatesOutsideViewport(void) { s16 x; s16 x2; @@ -599,10 +802,11 @@ void sub_80C7DC0(void) int i; struct Sprite *sprite; + // Same as RotatingGate_CreateGatesWithinViewport x = gSaveBlock1.pos.x - 2; - x2 = gSaveBlock1.pos.x + 17; + x2 = gSaveBlock1.pos.x + 0x11; y = gSaveBlock1.pos.y - 2; - y2 = gSaveBlock1.pos.y + 14; + y2 = gSaveBlock1.pos.y + 0xe; for (i = 0; i < gUnknown_02038804; i++) { @@ -623,62 +827,57 @@ void sub_80C7DC0(void) } #ifdef NONMATCHING -int sub_80C7E8C(u8 a, int puzzleType) +static int RotatingGate_CanRotate(u8 gateId, int rotationDirection) { - const struct UnknownStruct2 *unk1; - u8 unk2; + const struct Coords8 *armPos; + u8 orientation; s16 x; s16 y; - int unk3; + int shape; int i; int j; - int unk4; - const u8 *unk5; - int unk6; - u8 unk7; - int wat; - - if (puzzleType == 1) - unk1 = sUnknown_083D611C; - else if (puzzleType == 2) - unk1 = sUnknown_083D60FC; + int armOrientation; + const u8 *gateArmCollisionData; + u8 armIndex; + + if (rotationDirection == ROTATE_ANTICLOCKWISE) + armPos = sRotatingGate_ArmPositionsAntiClockwiseRotation; + else if (rotationDirection == ROTATE_CLOCKWISE) + armPos = sRotatingGate_ArmPositionsClockwiseRotation; else return 0; - unk2 = sub_80C7A08(a); + orientation = RotatingGate_GetGateOrientation(gateId); - unk3 = gUnknown_02038800[a].e; - x = gUnknown_02038800[a].pos.x + 7; - y = gUnknown_02038800[a].pos.y + 7; + shape = gUnknown_02038800[gateId].shape; + x = gUnknown_02038800[gateId].pos.x + 7; + y = gUnknown_02038800[gateId].pos.y + 7; - for (i = 0; i <= 3; i++) + // Loop through the gate's "arms" clockwise (north, south, east, west) + for (i = GATE_ARM_NORTH; i <= GATE_ARM_WEST; i++) { - j = 0; - unk4 = unk2 + i; - wat = unk2 + i; - unk5 = &sUnknown_083D613C[unk3][i * 2]; + armOrientation = orientation + i; + gateArmCollisionData = sRotatingGate_ArmLayout[shape][i]; - for (; j <= 1; j++) + // Ensure that no part of the arm collides with the map + for (j = 0; j < GATE_ARM_MAX_LENGTH; j++) { - unk6 = wat; - if (wat < 0) - unk6 = unk4 + 3; - - unk7 = (2 * (wat - ((unk6 >> 2) << 2)) + j); + armIndex = 2 * (armOrientation % 4) + j; - if (*unk5) + if (*gateArmCollisionData) { - if (MapGridIsImpassableAt(unk1[unk7].a + x, unk1[unk7].b + y) == 1) + if (MapGridIsImpassableAt( + armPos[armIndex].deltaX + x, armPos[armIndex].deltaY + y) == 1) return 0; } - unk5++; + gateArmCollisionData++; } } return 1; } #else -__attribute__((naked)) int sub_80C7E8C(u8 a, int puzzleType) +__attribute__((naked)) static int RotatingGate_CanRotate(u8 a, int puzzleType) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -691,11 +890,11 @@ __attribute__((naked)) int sub_80C7E8C(u8 a, int puzzleType) lsrs r4, r0, 24\n\ cmp r1, 0x1\n\ bne _080C7EAC\n\ - ldr r0, _080C7EA8 @ =sUnknown_083D611C\n\ + ldr r0, _080C7EA8 @ =sRotatingGate_ArmPositionsAntiClockwiseRotation\n\ mov r10, r0\n\ b _080C7EB8\n\ .align 2, 0\n\ -_080C7EA8: .4byte sUnknown_083D611C\n\ +_080C7EA8: .4byte sRotatingGate_ArmPositionsAntiClockwiseRotation\n\ _080C7EAC:\n\ cmp r1, 0x2\n\ beq _080C7EB4\n\ @@ -703,11 +902,11 @@ _080C7EB0:\n\ movs r0, 0\n\ b _080C7F48\n\ _080C7EB4:\n\ - ldr r1, _080C7F58 @ =sUnknown_083D60FC\n\ + ldr r1, _080C7F58 @ =sRotatingGate_ArmPositionsClockwiseRotation\n\ mov r10, r1\n\ _080C7EB8:\n\ adds r0, r4, 0\n\ - bl sub_80C7A08\n\ + bl RotatingGate_GetGateOrientation\n\ lsls r0, 24\n\ lsrs r0, 24\n\ str r0, [sp]\n\ @@ -737,7 +936,7 @@ _080C7EE8:\n\ adds r5, r7, 0\n\ ldr r1, [sp, 0x4]\n\ adds r0, r1\n\ - ldr r2, _080C7F60 @ =sUnknown_083D613C\n\ + ldr r2, _080C7F60 @ =sRotatingGate_ArmLayout\n\ adds r4, r0, r2\n\ _080C7EFA:\n\ adds r0, r5, 0\n\ @@ -790,33 +989,30 @@ _080C7F48:\n\ pop {r1}\n\ bx r1\n\ .align 2, 0\n\ -_080C7F58: .4byte sUnknown_083D60FC\n\ +_080C7F58: .4byte sRotatingGate_ArmPositionsClockwiseRotation\n\ _080C7F5C: .4byte gUnknown_02038800\n\ -_080C7F60: .4byte sUnknown_083D613C\n\ +_080C7F60: .4byte sRotatingGate_ArmLayout\n\ .syntax divided\n"); } #endif #ifdef NONMATCHING -int sub_80C7F64(u8 a, u8 b) +static int RotatingGate_HasArm(u8 gateId, u8 armInfo) { - int unk1; - int unk2; - int unk4; - int unk5; - int unk6; - int unk7; - - unk5 = a >> 1; - unk1 = b & 1; - unk2 = unk5 - sub_80C7A08(a) + 4; - unk7 = unk2 < 0 ? unk2 + 3 : unk2; - unk4 = (unk7 - ((unk7 >> 2) << 2)); - unk6 = gUnknown_02038800[a].e; - return sUnknown_083D613C[unk6][(s8)unk4 * 2 + unk1]; + int isLongArm; + s8 armOrientation; + int arm; + int shape; + + arm = armInfo >> 1; + isLongArm = armInfo & 1; + + armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4; + shape = gUnknown_02038800[gateId].shape; + return sRotatingGate_ArmLayout[shape][armOrientation][isLongArm]; } #else -__attribute__((naked)) int sub_80C7F64(u8 a, u8 b) +__attribute__((naked)) static int RotatingGate_HasArm(u8 a, u8 b) { asm(".syntax unified\n\ push {r4-r6,lr}\n\ @@ -830,7 +1026,7 @@ __attribute__((naked)) int sub_80C7F64(u8 a, u8 b) movs r0, 0x1\n\ ands r5, r0\n\ adds r0, r6, 0\n\ - bl sub_80C7A08\n\ + bl RotatingGate_GetGateOrientation\n\ subs r4, r0\n\ adds r1, r4, 0x4\n\ adds r0, r1, 0\n\ @@ -846,7 +1042,7 @@ _080C7F8A:\n\ lsls r1, r6, 3\n\ adds r1, r2\n\ ldrb r1, [r1, 0x4]\n\ - ldr r2, _080C7FB4 @ =sUnknown_083D613C\n\ + ldr r2, _080C7FB4 @ =sRotatingGate_ArmLayout\n\ lsls r0, 24\n\ asrs r0, 23\n\ adds r0, r5\n\ @@ -859,43 +1055,43 @@ _080C7F8A:\n\ bx r1\n\ .align 2, 0\n\ _080C7FB0: .4byte gUnknown_02038800\n\ -_080C7FB4: .4byte sUnknown_083D613C\n\ +_080C7FB4: .4byte sRotatingGate_ArmLayout\n\ .syntax divided\n"); } #endif -void sub_80C7FB8(u8 a, int b) +static void RotatingGate_TriggerRotationAnimation(u8 gateId, int rotationDirection) { struct Sprite *sprite; - if (gUnknown_020387F0[a] != MAX_SPRITES) + if (gUnknown_020387F0[gateId] != MAX_SPRITES) { - sprite = &gSprites[gUnknown_020387F0[a]]; - sprite->data1 = b; - sprite->data2 = sub_80C7A08(a); + sprite = &gSprites[gUnknown_020387F0[gateId]]; + sprite->data1 = rotationDirection; + sprite->data2 = RotatingGate_GetGateOrientation(gateId); } } #ifdef NONMATCHING -u8 sub_80C7FEC(u8 a, s16 b, s16 c) +static u8 RotatingGate_GetRotationInfo(u8 direction, s16 x, s16 y) { register const u8(*ptr)[][4] asm("r3"); - if (a == 2) - ptr = &sUnknown_083D60BC; - else if (a == 1) - ptr = &sUnknown_083D60CC; - else if (a == 3) - ptr = &sUnknown_083D60DC; - else if (a == 4) - ptr = &sUnknown_083D60EC; + if (direction == DIR_NORTH) + ptr = &sRotatingGate_RotationInfoNorth; + else if (direction == DIR_SOUTH) + ptr = &sRotatingGate_RotationInfoSouth; + else if (direction == DIR_WEST) + ptr = &sRotatingGate_RotationInfoWest; + else if (direction == DIR_EAST) + ptr = &sRotatingGate_RotationInfoEast; else - return 0xFF; + return GATE_ROTATION_NONE; - return (*ptr)[c][b]; + return (*ptr)[y][x]; } #else -__attribute__((naked)) u8 sub_80C7FEC(u8 a, s16 b, s16 c) +__attribute__((naked)) static u8 RotatingGate_GetRotationInfo(u8 a, s16 b, s16 c) { asm(".syntax unified\n\ push {lr}\n\ @@ -908,31 +1104,31 @@ __attribute__((naked)) u8 sub_80C7FEC(u8 a, s16 b, s16 c) lsrs r2, 16\n\ cmp r0, 0x2\n\ bne _080C8008\n\ - ldr r3, _080C8004 @ =sUnknown_083D60BC\n\ + ldr r3, _080C8004 @ =sRotatingGate_RotationInfoNorth\n\ b _080C802A\n\ .align 2, 0\n\ -_080C8004: .4byte sUnknown_083D60BC\n\ +_080C8004: .4byte sRotatingGate_RotationInfoNorth\n\ _080C8008:\n\ cmp r0, 0x1\n\ bne _080C8014\n\ - ldr r3, _080C8010 @ =sUnknown_083D60CC\n\ + ldr r3, _080C8010 @ =sRotatingGate_RotationInfoSouth\n\ b _080C802A\n\ .align 2, 0\n\ -_080C8010: .4byte sUnknown_083D60CC\n\ +_080C8010: .4byte sRotatingGate_RotationInfoSouth\n\ _080C8014:\n\ cmp r0, 0x3\n\ bne _080C8020\n\ - ldr r3, _080C801C @ =sUnknown_083D60DC\n\ + ldr r3, _080C801C @ =sRotatingGate_RotationInfoWest\n\ b _080C802A\n\ .align 2, 0\n\ -_080C801C: .4byte sUnknown_083D60DC\n\ +_080C801C: .4byte sRotatingGate_RotationInfoWest\n\ _080C8020:\n\ cmp r3, 0x4\n\ beq _080C8028\n\ movs r0, 0xFF\n\ b _080C8038\n\ _080C8028:\n\ - ldr r3, _080C803C @ =sUnknown_083D60EC\n\ + ldr r3, _080C803C @ =sRotatingGate_RotationInfoEast\n\ _080C802A:\n\ lsls r0, r2, 16\n\ lsls r1, 16\n\ @@ -945,7 +1141,7 @@ _080C8038:\n\ pop {r1}\n\ bx r1\n\ .align 2, 0\n\ -_080C803C: .4byte sUnknown_083D60EC\n\ +_080C803C: .4byte sRotatingGate_RotationInfoEast\n\ .syntax divided\n"); } #endif @@ -954,17 +1150,17 @@ void sub_80C8040(void) { if (GetCurrentMapRotatingGatePuzzleType()) { - sub_80C7A80(); - sub_80C79CC(); + RotatingGate_LoadPuzzleConfig(); + RotatingGate_ResetAllGateOrientations(); } } -void RotatingGatePuzzleCameraUpdate(u16 a, u16 b) +void RotatingGatePuzzleCameraUpdate(u16 deltaX, u16 deltaY) { if (GetCurrentMapRotatingGatePuzzleType()) { - sub_80C7ADC(a, b); - sub_80C7DC0(); + RotatingGate_CreateGatesWithinViewport(deltaX, deltaY); + RotatingGate_DestroyGatesOutsideViewport(); } } @@ -973,21 +1169,21 @@ void sub_80C8080(void) if (GetCurrentMapRotatingGatePuzzleType()) { LoadRotatingGatePics(); - sub_80C7A80(); - sub_80C7ADC(0, 0); + RotatingGate_LoadPuzzleConfig(); + RotatingGate_CreateGatesWithinViewport(0, 0); } } -bool8 CheckForRotatingGatePuzzleCollision(u8 a, s16 x, s16 y) +bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y) { int i; s16 gateX; s16 gateY; - register u32 check asm("r0"); - int upperNibble; - int lowerNibble; - s16 finalX; - s16 finalY; + register u32 rotationInfo asm("r0"); + int rotationDirection; + int armInfo; + s16 centerX; + s16 centerY; if (!GetCurrentMapRotatingGatePuzzleType()) { @@ -1001,23 +1197,23 @@ bool8 CheckForRotatingGatePuzzleCollision(u8 a, s16 x, s16 y) if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1) { - finalX = x - gateX + 2; - finalY = y - gateY + 2; - check = sub_80C7FEC(a, finalX, finalY); + centerX = x - gateX + 2; + centerY = y - gateY + 2; + rotationInfo = RotatingGate_GetRotationInfo(direction, centerX, centerY); - if (check != 255) + if (rotationInfo != GATE_ROTATION_NONE) { - upperNibble = check >> 4; - lowerNibble = check & 0xF; + rotationDirection = rotationInfo >> 4; + armInfo = rotationInfo & 0xF; - asm("" ::"r"(lowerNibble)); + asm("" ::"r"(armInfo)); - if (sub_80C7F64(i, lowerNibble)) + if (RotatingGate_HasArm(i, armInfo)) { - if (sub_80C7E8C(i, upperNibble)) + if (RotatingGate_CanRotate(i, rotationDirection)) { - sub_80C7FB8(i, upperNibble); - sub_80C7A44(i, upperNibble); + RotatingGate_TriggerRotationAnimation(i, rotationDirection); + RotatingGate_RotateInDirection(i, rotationDirection); return 0; } -- cgit v1.2.3 From b3e72c0e2841f19928b284b789b2d91222d056f8 Mon Sep 17 00:00:00 2001 From: Touched Date: Fri, 30 Jun 2017 21:30:57 +0200 Subject: Rename rotating gate global EWRAM variables --- src/rotating_gate.c | 71 +++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/rotating_gate.c b/src/rotating_gate.c index 665a16ae4..6fc10f2a3 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -565,9 +565,9 @@ static const u8 sRotatingGate_ArmLayout[][GATE_ARM_WEST + 1][GATE_ARM_MAX_LENGTH }, }; -extern u8 gUnknown_020387F0[ROTATING_GATE_PUZZLE_MAX]; // puzzle oam ID list -extern const struct RotatingGatePuzzle *gUnknown_02038800; // sRotatingGatePuzzleConfiguration -extern u8 gUnknown_02038804; // puzzle count +extern u8 gRotatingGate_GateSpriteIds[ROTATING_GATE_PUZZLE_MAX]; +extern const struct RotatingGatePuzzle *gRotatingGate_PuzzleConfig; +extern u8 gRotatingGate_PuzzleCount; static int GetCurrentMapRotatingGatePuzzleType(void) { @@ -593,9 +593,9 @@ static void RotatingGate_ResetAllGateOrientations(void) ptr = (u8 *)GetVarPointer(0x4000); - for (i = 0; i < gUnknown_02038804; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - ptr[i] = gUnknown_02038800[i].orientation; + ptr[i] = gRotatingGate_PuzzleConfig[i].orientation; } } @@ -640,13 +640,13 @@ static void RotatingGate_LoadPuzzleConfig(void) switch (puzzleType) { case PUZZLE_FORTREE_CITY_GYM: - gUnknown_02038800 = sRotatingGate_FortreePuzzleConfig; - gUnknown_02038804 = + gRotatingGate_PuzzleConfig = sRotatingGate_FortreePuzzleConfig; + gRotatingGate_PuzzleCount = sizeof(sRotatingGate_FortreePuzzleConfig) / sizeof(struct RotatingGatePuzzle); break; case PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6: - gUnknown_02038800 = sRotatingGate_TrickHousePuzzleConfig; - gUnknown_02038804 = + gRotatingGate_PuzzleConfig = sRotatingGate_TrickHousePuzzleConfig; + gRotatingGate_PuzzleCount = sizeof(sRotatingGate_TrickHousePuzzleConfig) / sizeof(struct RotatingGatePuzzle); break; case PUZZLE_NONE: @@ -656,7 +656,7 @@ static void RotatingGate_LoadPuzzleConfig(void) for (i = 0; i < ROTATING_GATE_PUZZLE_MAX; i++) { - gUnknown_020387F0[i] = MAX_SPRITES; + gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; } } @@ -673,14 +673,15 @@ static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY) s16 x3, y3; - for (i = 0; i < gUnknown_02038804; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - x3 = gUnknown_02038800[i].pos.x + 7; - y3 = gUnknown_02038800[i].pos.y + 7; + x3 = gRotatingGate_PuzzleConfig[i].pos.x + 7; + y3 = gRotatingGate_PuzzleConfig[i].pos.y + 7; - if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && gUnknown_020387F0[i] == MAX_SPRITES) + if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 && + gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) { - gUnknown_020387F0[i] = RotatingGate_CreateGate(i, deltaX, deltaY); + gRotatingGate_GateSpriteIds[i] = RotatingGate_CreateGate(i, deltaX, deltaY); } } } @@ -693,7 +694,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) u8 spriteId; s16 x, y; - gate = &gUnknown_02038800[gateId]; + gate = &gRotatingGate_PuzzleConfig[gateId]; if (gate->shape == GATE_SHAPE_L1 || gate->shape == GATE_SHAPE_T1) { @@ -808,20 +809,20 @@ static void RotatingGate_DestroyGatesOutsideViewport(void) y = gSaveBlock1.pos.y - 2; y2 = gSaveBlock1.pos.y + 0xe; - for (i = 0; i < gUnknown_02038804; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - xGate = gUnknown_02038800[i].pos.x + 7; - yGate = gUnknown_02038800[i].pos.y + 7; + xGate = gRotatingGate_PuzzleConfig[i].pos.x + 7; + yGate = gRotatingGate_PuzzleConfig[i].pos.y + 7; - if (gUnknown_020387F0[i] == MAX_SPRITES) + if (gRotatingGate_GateSpriteIds[i] == MAX_SPRITES) continue; if (xGate < x || xGate > x2 || yGate < y || yGate > y2) { - sprite = &gSprites[gUnknown_020387F0[i]]; + sprite = &gSprites[gRotatingGate_GateSpriteIds[i]]; FreeSpriteOamMatrix(sprite); DestroySprite(sprite); - gUnknown_020387F0[i] = MAX_SPRITES; + gRotatingGate_GateSpriteIds[i] = MAX_SPRITES; } } } @@ -849,9 +850,9 @@ static int RotatingGate_CanRotate(u8 gateId, int rotationDirection) orientation = RotatingGate_GetGateOrientation(gateId); - shape = gUnknown_02038800[gateId].shape; - x = gUnknown_02038800[gateId].pos.x + 7; - y = gUnknown_02038800[gateId].pos.y + 7; + shape = gRotatingGate_PuzzleConfig[gateId].shape; + x = gRotatingGate_PuzzleConfig[gateId].pos.x + 7; + y = gRotatingGate_PuzzleConfig[gateId].pos.y + 7; // Loop through the gate's "arms" clockwise (north, south, east, west) for (i = GATE_ARM_NORTH; i <= GATE_ARM_WEST; i++) @@ -910,7 +911,7 @@ _080C7EB8:\n\ lsls r0, 24\n\ lsrs r0, 24\n\ str r0, [sp]\n\ - ldr r0, _080C7F5C @ =gUnknown_02038800\n\ + ldr r0, _080C7F5C @ =gRotatingGate_PuzzleConfig\n\ ldr r1, [r0]\n\ lsls r0, r4, 3\n\ adds r0, r1\n\ @@ -990,7 +991,7 @@ _080C7F48:\n\ bx r1\n\ .align 2, 0\n\ _080C7F58: .4byte sRotatingGate_ArmPositionsClockwiseRotation\n\ -_080C7F5C: .4byte gUnknown_02038800\n\ +_080C7F5C: .4byte gRotatingGate_PuzzleConfig\n\ _080C7F60: .4byte sRotatingGate_ArmLayout\n\ .syntax divided\n"); } @@ -1008,7 +1009,7 @@ static int RotatingGate_HasArm(u8 gateId, u8 armInfo) isLongArm = armInfo & 1; armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4; - shape = gUnknown_02038800[gateId].shape; + shape = gRotatingGate_PuzzleConfig[gateId].shape; return sRotatingGate_ArmLayout[shape][armOrientation][isLongArm]; } #else @@ -1037,7 +1038,7 @@ _080C7F8A:\n\ asrs r0, 2\n\ lsls r0, 2\n\ subs r0, r1, r0\n\ - ldr r1, _080C7FB0 @ =gUnknown_02038800\n\ + ldr r1, _080C7FB0 @ =gRotatingGate_PuzzleConfig\n\ ldr r2, [r1]\n\ lsls r1, r6, 3\n\ adds r1, r2\n\ @@ -1054,7 +1055,7 @@ _080C7F8A:\n\ pop {r1}\n\ bx r1\n\ .align 2, 0\n\ -_080C7FB0: .4byte gUnknown_02038800\n\ +_080C7FB0: .4byte gRotatingGate_PuzzleConfig\n\ _080C7FB4: .4byte sRotatingGate_ArmLayout\n\ .syntax divided\n"); } @@ -1064,9 +1065,9 @@ static void RotatingGate_TriggerRotationAnimation(u8 gateId, int rotationDirecti { struct Sprite *sprite; - if (gUnknown_020387F0[gateId] != MAX_SPRITES) + if (gRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES) { - sprite = &gSprites[gUnknown_020387F0[gateId]]; + sprite = &gSprites[gRotatingGate_GateSpriteIds[gateId]]; sprite->data1 = rotationDirection; sprite->data2 = RotatingGate_GetGateOrientation(gateId); } @@ -1190,10 +1191,10 @@ bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y) return 0; } - for (i = 0; i < gUnknown_02038804; i++) + for (i = 0; i < gRotatingGate_PuzzleCount; i++) { - gateX = gUnknown_02038800[i].pos.x + 7; - gateY = gUnknown_02038800[i].pos.y + 7; + gateX = gRotatingGate_PuzzleConfig[i].pos.x + 7; + gateY = gRotatingGate_PuzzleConfig[i].pos.y + 7; if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1) { -- cgit v1.2.3 From c2daf4f6c9f915e1fcc7c76c2a3ed2ce5b4eb637 Mon Sep 17 00:00:00 2001 From: Touched Date: Fri, 30 Jun 2017 21:34:15 +0200 Subject: Rename rotating gate exported functions --- src/rom4.c | 2 +- src/rotating_gate.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/rom4.c b/src/rom4.c index 2ddd5ed9f..bfc8e0e44 100644 --- a/src/rom4.c +++ b/src/rom4.c @@ -1672,7 +1672,7 @@ void mli4_mapscripts_and_other(void) void sub_8054E20(void) { sub_805B710(0, 0); - sub_80C8080(); + RotatingGate_InitPuzzleAndGraphics(); } void sub_8054E34(void) diff --git a/src/rotating_gate.c b/src/rotating_gate.c index 6fc10f2a3..d12a21240 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -1147,7 +1147,7 @@ _080C803C: .4byte sRotatingGate_RotationInfoEast\n\ } #endif -void sub_80C8040(void) +void RotatingGate_InitPuzzle(void) { if (GetCurrentMapRotatingGatePuzzleType()) { @@ -1165,7 +1165,7 @@ void RotatingGatePuzzleCameraUpdate(u16 deltaX, u16 deltaY) } } -void sub_80C8080(void) +void RotatingGate_InitPuzzleAndGraphics(void) { if (GetCurrentMapRotatingGatePuzzleType()) { -- cgit v1.2.3 From 22da2dfafc892e8d07af95e715cb1ae889bccd5c Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 30 Jun 2017 15:39:17 -0400 Subject: finish decompiling sound_check_menu.c except for sub_80BAE78 --- src/battle_ai.c | 2 +- src/sound_check_menu.c | 444 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 434 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/battle_ai.c b/src/battle_ai.c index fabe0b61d..691270d69 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -1993,7 +1993,7 @@ static void BattleAICmd_get_item(void) index = gBankTarget; // this hack and a half matches. whatever. i dont care. someone else fix this mess later. PS: still cant fix this. - AI_THINKING_STRUCT->funcResult = ewram[0x160CC + (index * 2)]; + AI_THINKING_STRUCT->funcResult = ewram[MULTI_DIM_ARR(index, B_16, 0x160CC)]; gAIScriptPtr += 2; } diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 8736a63f1..d1b234ed1 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -8,6 +8,8 @@ #include "menu.h" #include "songs.h" #include "title_screen.h" +#include "sound.h" +#include "pokedex_cry_screen.h" // local task defines #define WINDOW_SELECTED data[0] @@ -43,11 +45,6 @@ enum MAX }; -extern void sub_80BAF84(u8); -extern void sub_80BB25C(u8); -extern void sub_80BA68C(u8); -extern void sub_80BAE78(int, int, int, int); - extern struct ToneData voicegroup_84537C0[]; extern struct ToneData voicegroup_8452590[]; extern struct ToneData voicegroup_8453DC0[]; @@ -58,6 +55,7 @@ extern struct ToneData voicegroup_84549C0[]; extern struct ToneData voicegroup_8453790[]; extern u8 gUnknown_083D0300[18]; +extern s8 gUnknown_083D03F8[5]; extern int gUnknown_020387B4[9]; extern int gUnknown_083D039C[16]; @@ -68,8 +66,11 @@ extern u8 gUnknown_020387B2; extern u8 gUnknown_020387D8; extern u8 gUnknown_020387D9; extern u8 gUnknown_020387B0; +extern u16 gUnknown_03005D34; +extern u8 gUnknown_03005E98; extern struct MusicPlayerInfo *gUnknown_03005D30; +extern struct MusicPlayerInfo gMPlay_BGM; extern u8 *gBGMNames[]; extern u8 *gSENames[]; @@ -96,10 +97,15 @@ extern u8 gDebugText_Reverse[]; extern u8 gDebugText_Stereo[]; extern u8 gUnknown_083D03DC[]; extern u8 gUnknown_083D03DE[]; +extern u8 gOtherText_SE[]; +extern u8 gOtherText_Pan[]; +extern u8 gOtherText_LR[]; +extern u8 gOtherText_RL[]; void sub_80BA258(u8); void sub_80BA384(u8); void sub_80BA65C(u8); +void sub_80BA68C(u8); void sub_80BA6B8(u8); void sub_80BA700(u16, u16, u16); void sub_80BA79C(u8 *, u16, u16); @@ -108,6 +114,13 @@ void sub_80BAA48(u8); void sub_80BACDC(s8); void sub_80BAD5C(void); void sub_80BAE10(u8, u8); +void sub_80BAE78(int, u16, u16, u8); +void sub_80BAF84(u8); +void sub_80BB038(u8); +void sub_80BB1D4(void); +void sub_80BB25C(u8); +void sub_80BB3B4(u8); +void sub_80BB494(void); void sub_80BA0A8(void) { @@ -969,11 +982,11 @@ void sub_80BACDC(s8 var) memcpy(minMaxArray, gUnknown_083D039C, sizeof minMaxArray); gUnknown_020387B4[gUnknown_020387B3] += var; - if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[ARR_2D(gUnknown_020387B3, MAX)]) - gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[ARR_2D(gUnknown_020387B3, MIN)]; + if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]) + gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]; - if(gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[ARR_2D(gUnknown_020387B3, MIN)]) - gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[ARR_2D(gUnknown_020387B3, MAX)]; + if(gUnknown_020387B4[gUnknown_020387B3] < minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MIN)]) + gUnknown_020387B4[gUnknown_020387B3] = minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]; } void sub_80BAD5C(void) @@ -1000,6 +1013,415 @@ void sub_80BAE10(u8 var1, u8 var2) memcpy(str1, gUnknown_083D03DC, sizeof str1); memcpy(str2, gUnknown_083D03DE, sizeof str2); - MenuPrint(str2, gUnknown_083D0300[ARR_2D(var1, 0)], gUnknown_083D0300[ARR_2D(var1, 1)]); - MenuPrint(str1, gUnknown_083D0300[ARR_2D(var2, 0)], gUnknown_083D0300[ARR_2D(var2, 1)]); + MenuPrint(str2, gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 1)]); + MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); +} + +/*void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) +{ + u32 powers[6]; + u8 str[8]; + u8 i; + u8 someVar, someVar2; + + memcpy(powers, gUnknown_083D03E0, sizeof powers); + + for(i = 0; i < var4; i++) + str[i] = 0; + + str[var4 + 1] = 0xFF; + someVar = 0; + + if(var1 < 0) // make absolute value? wtf + { + var1 = -var1; // just use abs? + someVar = 1; + } + + // _080BAED6 + someVar2 = 0; + if(var4 == 1) + someVar2 = 1; + + // _080BAEE2 + for(;;) + { + + } +}*/ + +// no. +__attribute__((naked)) +void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x2C\n\ + mov r8, r0\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + lsls r3, 24\n\ + lsrs r7, r3, 24\n\ + mov r1, sp\n\ + ldr r0, _080BAF80 @ =gUnknown_083D03E0\n\ + ldm r0!, {r3-r5}\n\ + stm r1!, {r3-r5}\n\ + ldm r0!, {r3-r5}\n\ + stm r1!, {r3-r5}\n\ + movs r5, 0\n\ + add r0, sp, 0x18\n\ + mov r9, r0\n\ + cmp r5, r7\n\ + bgt _080BAEC0\n\ + mov r4, r9\n\ + movs r3, 0\n\ +_080BAEAC:\n\ + lsls r0, r5, 24\n\ + asrs r0, 24\n\ + adds r1, r4, r0\n\ + strb r3, [r1]\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, r7\n\ + ble _080BAEAC\n\ +_080BAEC0:\n\ + adds r0, r7, 0x1\n\ + add r0, r9\n\ + movs r1, 0xFF\n\ + strb r1, [r0]\n\ + movs r1, 0\n\ + mov r3, r8\n\ + cmp r3, 0\n\ + bge _080BAED6\n\ + negs r3, r3\n\ + mov r8, r3\n\ + movs r1, 0x1\n\ +_080BAED6:\n\ + movs r4, 0\n\ + mov r10, r4\n\ + cmp r7, 0x1\n\ + bne _080BAEE2\n\ + movs r5, 0x1\n\ + mov r10, r5\n\ +_080BAEE2:\n\ + subs r0, r7, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r0, r5, 24\n\ + lsls r6, 24\n\ + str r6, [sp, 0x24]\n\ + lsls r2, 24\n\ + str r2, [sp, 0x28]\n\ + cmp r0, 0\n\ + blt _080BAF62\n\ + str r1, [sp, 0x20]\n\ +_080BAEF8:\n\ + asrs r6, r0, 24\n\ + lsls r0, r6, 2\n\ + add r0, sp\n\ + ldr r1, [r0]\n\ + mov r0, r8\n\ + bl __divsi3\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + cmp r0, 0\n\ + bne _080BAF1A\n\ + mov r0, r10\n\ + cmp r0, 0\n\ + bne _080BAF1A\n\ + lsls r4, r5, 24\n\ + cmp r6, 0\n\ + bne _080BAF46\n\ +_080BAF1A:\n\ + lsls r4, r5, 24\n\ + ldr r3, [sp, 0x20]\n\ + cmp r3, 0\n\ + beq _080BAF34\n\ + mov r5, r10\n\ + cmp r5, 0\n\ + bne _080BAF34\n\ + asrs r0, r4, 24\n\ + subs r0, r7, r0\n\ + subs r0, 0x1\n\ + add r0, r9\n\ + movs r1, 0xAE\n\ + strb r1, [r0]\n\ +_080BAF34:\n\ + asrs r1, r4, 24\n\ + subs r1, r7, r1\n\ + add r1, r9\n\ + lsls r0, r2, 24\n\ + asrs r0, 24\n\ + subs r0, 0x5F\n\ + strb r0, [r1]\n\ + movs r0, 0x1\n\ + mov r10, r0\n\ +_080BAF46:\n\ + asrs r4, 24\n\ + lsls r0, r4, 2\n\ + add r0, sp\n\ + ldr r1, [r0]\n\ + mov r0, r8\n\ + bl __modsi3\n\ + mov r8, r0\n\ + subs r4, 0x1\n\ + lsls r4, 24\n\ + lsrs r5, r4, 24\n\ + lsls r0, r5, 24\n\ + cmp r0, 0\n\ + bge _080BAEF8\n\ +_080BAF62:\n\ + ldr r3, [sp, 0x24]\n\ + lsrs r1, r3, 24\n\ + ldr r4, [sp, 0x28]\n\ + lsrs r2, r4, 24\n\ + mov r0, r9\n\ + bl MenuPrint\n\ + add sp, 0x2C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080BAF80: .4byte gUnknown_083D03E0\n\ + .syntax divided"); +} + +void sub_80BAF84(u8 taskId) +{ + u8 seStr[3]; + u8 panStr[4]; + u8 playingStr[9]; + + memcpy(seStr, gOtherText_SE, sizeof seStr); + memcpy(panStr, gOtherText_Pan, sizeof panStr); + memcpy(playingStr, gDebugText_Playing, sizeof playingStr); + + REG_DISPCNT = 0x3140; + MenuDrawTextWindow(0, 0, 0x1D, 0x13); + MenuPrint(seStr, 3, 2); + MenuPrint(panStr, 3, 4); + MenuPrint(playingStr, 3, 8); + REG_WIN0H = 0xF0; + REG_WIN0V = 0xA0; + gUnknown_020387B4[CRY_TEST_UNK0] = 1; + gUnknown_020387B4[CRY_TEST_PANPOT] = 0; + gUnknown_020387B4[CRY_TEST_CHORUS] = 0; + gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; + gUnknown_020387B4[CRY_TEST_RELEASE] = 0; + sub_80BB1D4(); + gTasks[taskId].func = sub_80BB038; +} + +void sub_80BB038(u8 taskId) +{ + sub_80BB1D4(); + if(gUnknown_020387B4[CRY_TEST_PROGRESS]) + { + if(gUnknown_020387B4[CRY_TEST_RELEASE]) + { + gUnknown_020387B4[CRY_TEST_RELEASE]--; + } + else // _080BB05C + { + s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; + if(panpot != -128) + { + if(panpot == 0x7F) + { + gUnknown_020387B4[CRY_TEST_CHORUS] += 2; + if(gUnknown_020387B4[CRY_TEST_CHORUS] < 0x3F) + SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); + } + } + else // _080BB08C + { + gUnknown_020387B4[CRY_TEST_CHORUS] -= 2; + if(gUnknown_020387B4[CRY_TEST_CHORUS] > -0x40) + SE12PanpotControl(gUnknown_020387B4[CRY_TEST_CHORUS]); + } + } + } + // _080BB0A2 + if(gMain.newKeys & 0x2) + { + REG_DISPCNT = 0x7140; + REG_WIN0H = 0x11DF; + REG_WIN0V = 0x11F; + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + gTasks[taskId].func = sub_80BA258; + return; + } + if(gMain.newKeys & 0x1) // _080BB104 + { + s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; + if(panpot != -128) + { + if(panpot == 0x7F) + { + PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], -0x40); + gUnknown_020387B4[CRY_TEST_CHORUS] = -0x40; + gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; + gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E; + return; + } + } + else // _080BB140 + { + PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], 0x3F); + gUnknown_020387B4[CRY_TEST_CHORUS] = 0x3F; + gUnknown_020387B4[CRY_TEST_PROGRESS] = 1; + gUnknown_020387B4[CRY_TEST_RELEASE] = 0x1E; + return; + } + // _080BB154 + PlaySE12WithPanning(gUnknown_020387B4[CRY_TEST_UNK0], panpot); + gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; + return; + } + if(gMain.newKeys & 0x200) // _080BB15E + { + gUnknown_020387B4[CRY_TEST_PANPOT]++; + if(gUnknown_020387B4[CRY_TEST_PANPOT] > 4) + gUnknown_020387B4[CRY_TEST_PANPOT] = 0; + } + if(gMain.newKeys & 0x100) // _080BB176 + { + gUnknown_020387B4[CRY_TEST_PANPOT]--; + if(gUnknown_020387B4[CRY_TEST_PANPOT] < 0) + gUnknown_020387B4[CRY_TEST_PANPOT] = 4; + } + if(gMain.newAndRepeatedKeys & 0x10) // _080BB192 + { + gUnknown_020387B4[CRY_TEST_UNK0]++; + if(gUnknown_020387B4[CRY_TEST_UNK0] > 0xF7) + gUnknown_020387B4[CRY_TEST_UNK0] = 0; + } + else if(gMain.newAndRepeatedKeys & 0x20) // _080BB1B0 + { + gUnknown_020387B4[CRY_TEST_UNK0]--; + if(gUnknown_020387B4[CRY_TEST_UNK0] < 0) + gUnknown_020387B4[CRY_TEST_UNK0] = 0xF7; + } +} + +void sub_80BB1D4(void) +{ + u8 lrStr[5]; + u8 rlStr[5]; + + memcpy(lrStr, gOtherText_LR, sizeof lrStr); + memcpy(rlStr, gOtherText_RL, sizeof rlStr); + + sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); + + switch(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]) + { + case 0x7F: + MenuPrint(lrStr, 7, 4); + break; + case -0x80: + MenuPrint(rlStr, 7, 4); + break; + default: + sub_80BAE78(gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]], 7, 4, 3); + break; + } + sub_80BAE78(IsSEPlaying(), 12, 8, 1); +} + +void sub_80BB25C(u8 taskId) +{ + struct CryRelatedStruct cryStruct, cryStruct2; + u8 zero; + + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + gUnknown_03005D34 = 1; + ResetSpriteData(); + FreeAllSpritePalettes(); + + cryStruct.unk0 = 0x2000; + cryStruct.unk2 = 29; + cryStruct.paletteNo = 12; + cryStruct.yPos = 30; + cryStruct.xPos = 4; + + zero = 0; // wtf? + gUnknown_03005E98 = 0; + + while(sub_8119E3C(&cryStruct, 3) == FALSE); + + cryStruct2.unk0 = 0; + cryStruct2.unk2 = 15; + cryStruct2.paletteNo = 13; + cryStruct2.xPos = 12; + cryStruct2.yPos = 12; + + zero = 0; // wtf? + gUnknown_03005E98 = 0; + + while(ShowPokedexCryScreen(&cryStruct2, 2) == FALSE); + + MenuDrawTextWindow(0, 16, 5, 19); + sub_80BB494(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG2CNT = 0xF01; + REG_BG3CNT = 0x1D03; + REG_DISPCNT = 0x1d40; + m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2); + gTasks[taskId].func = sub_80BB3B4; +} + +void sub_80BB3B4(u8 taskId) +{ + sub_8119F88(3); + + if(gMain.newKeys & 0x1) + { + sub_811A050(gUnknown_03005D34); + } + if(gMain.newKeys & 0x100) + { + StopCryAndClearCrySongs(); + } + if(gMain.newAndRepeatedKeys & 0x40) + { + if(--gUnknown_03005D34 == 0) + gUnknown_03005D34 = 384; // total species + sub_80BB494(); + } + if(gMain.newAndRepeatedKeys & 0x80) + { + if(++gUnknown_03005D34 > 384) + gUnknown_03005D34 = 1; // total species + sub_80BB494(); + } + if(gMain.newKeys & 0x2) + { + REG_DISPCNT = 0x7140; + REG_WIN0H = 0x11DF; + REG_WIN0V = 0x11F; + MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); + gTasks[taskId].func = sub_80BA258; + DestroyCryMeterNeedleSprite(); + } +} + +void sub_80BB494(void) +{ + sub_80BAE78(gUnknown_03005D34, 1, 17, 3); } -- cgit v1.2.3 From d9878add7e63f765f9a6dc3217324e23c7b5a2a1 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 30 Jun 2017 15:40:19 -0400 Subject: formatting --- src/battle_ai.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/battle_ai.c b/src/battle_ai.c index 691270d69..fa018ba22 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -1993,7 +1993,7 @@ static void BattleAICmd_get_item(void) index = gBankTarget; // this hack and a half matches. whatever. i dont care. someone else fix this mess later. PS: still cant fix this. - AI_THINKING_STRUCT->funcResult = ewram[MULTI_DIM_ARR(index, B_16, 0x160CC)]; + AI_THINKING_STRUCT->funcResult = ewram[MULTI_DIM_ARR(index, B_16, 0x160CC)]; gAIScriptPtr += 2; } -- cgit v1.2.3 From 1b9318d8af8181ab9a4f64170d193c4b76d84dc3 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 30 Jun 2017 15:53:41 -0400 Subject: label data locals and remove fake news --- src/sound_check_menu.c | 93 ++++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index d1b234ed1..12cde5da8 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -16,6 +16,9 @@ #define BGM_INDEX data[1] #define SE_INDEX data[2] #define UNK_DATA3 data[3] +#define UNK_DATA4 data[4] +// data 5-7 are not used +// i dont have a define for data 8 yet because its used in a nonmatching and I can't be sure yet its actually used. // window selections enum @@ -245,65 +248,65 @@ bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput { if(gMain.newKeys & R_BUTTON) // driver test { - gTasks[taskId].func = sub_80BA800; + TASK.FUNC = sub_80BA800; return FALSE; } if(gMain.newKeys & L_BUTTON) { - gTasks[taskId].func = sub_80BAF84; + TASK.FUNC = sub_80BAF84; return FALSE; } if(gMain.newKeys & START_BUTTON) { - gTasks[taskId].func = sub_80BB25C; + TASK.FUNC = sub_80BB25C; return FALSE; } if(gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match. { - if(gTasks[taskId].data[0] != 0) // is playing? + if(TASK.WINDOW_SELECTED != 0) // is playing? { - if(gTasks[taskId].data[4] != 0) + if(TASK.UNK_DATA4 != 0) { - if(gTasks[taskId].data[2] != 0) // why are you insiting on a non signed halfword? + if(TASK.SE_INDEX != 0) // why are you insiting on a non signed halfword? { - m4aSongNumStop(gTasks[taskId].data[4]); + m4aSongNumStop(TASK.UNK_DATA4); } else { - m4aSongNumStop(gTasks[taskId].data[2]); - gTasks[taskId].data[4] = gTasks[taskId].data[2]; + m4aSongNumStop(TASK.SE_INDEX); + TASK.UNK_DATA4 = TASK.SE_INDEX; return FALSE; } } - else if(gTasks[taskId].data[2] == 0) // _080BA4BA + else if(TASK.SE_INDEX == 0) // _080BA4BA { return FALSE; } // _080BA4C4 - m4aSongNumStart(gTasks[taskId].data[2]); - gTasks[taskId].data[4] = gTasks[taskId].data[2]; + m4aSongNumStart(TASK.SE_INDEX); + TASK.UNK_DATA4 = TASK.SE_INDEX; return FALSE; } else // _080BA4D0 { - if(gTasks[taskId].data[3] != 0) + if(TASK.UNK_DATA3 != 0) { - if(gTasks[taskId].data[1] != 0) + if(TASK.BGM_INDEX != 0) { - m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP); + m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP); } else // _080BA500 { - m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP); - gTasks[taskId].data[3] = gTasks[taskId].data[1]; + m4aSongNumStop(TASK.UNK_DATA3 + BGM_STOP); + TASK.UNK_DATA3 = TASK.BGM_INDEX; return FALSE; } } - else if(gTasks[taskId].data[1] == 0) // _080BA514 + else if(TASK.BGM_INDEX == 0) // _080BA514 return FALSE; - m4aSongNumStart(gTasks[taskId].data[1] + BGM_STOP); - gTasks[taskId].data[3] = gTasks[taskId].data[1]; + m4aSongNumStart(TASK.BGM_INDEX + BGM_STOP); + TASK.UNK_DATA3 = TASK.BGM_INDEX; } return FALSE; } @@ -311,17 +314,17 @@ bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput { m4aSongNumStart(5); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gTasks[taskId].func = sub_80BA68C; + TASK.FUNC = sub_80BA68C; return FALSE; } if(gMain.newAndRepeatedKeys & DPAD_UP) { - gTasks[taskId].data[8] ^= A_BUTTON; // huh? + TASK.data[8] ^= A_BUTTON; // huh? return TRUE; } if(gMain.newAndRepeatedKeys & DPAD_DOWN) { - gTasks[taskId].data[8] ^= A_BUTTON; // huh? + TASK.data[8] ^= A_BUTTON; // huh? return TRUE; } else @@ -329,48 +332,48 @@ bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT; if(keys) { - if(gTasks[taskId].data[0] != 0) + if(TASK.WINDOW_SELECTED != 0) { - if(gTasks[taskId].data[2] > 0) + if(TASK.SE_INDEX > 0) { - gTasks[taskId].data[2]--; + TASK.SE_INDEX--; } else { - gTasks[taskId].data[2] = 0xF7; + TASK.SE_INDEX = 0xF7; } } - else if(gTasks[taskId].data[1] > 0) + else if(TASK.BGM_INDEX > 0) { - gTasks[taskId].data[1]--; + TASK.BGM_INDEX--; } else { - gTasks[taskId].data[1] = 0x75; + TASK.BGM_INDEX = 0x75; } return TRUE; } if(gMain.newAndRepeatedKeys & DPAD_LEFT) { - if(gTasks[taskId].data[0] != 0) + if(TASK.WINDOW_SELECTED != 0) { - if(gTasks[taskId].data[2] < 0xF7) + if(TASK.SE_INDEX < 0xF7) { - gTasks[taskId].data[2]++; + TASK.SE_INDEX++; } else { - gTasks[taskId].data[2] = keys; // ?? + TASK.SE_INDEX = keys; // ?? } } - else if(gTasks[taskId].data[1] < 0x75) + else if(TASK.BGM_INDEX < 0x75) { - gTasks[taskId].data[1]++; + TASK.BGM_INDEX++; return TRUE; } else { - gTasks[taskId].data[1] = gTasks[taskId].data[2]; + TASK.BGM_INDEX = TASK.SE_INDEX; return TRUE; } return TRUE; @@ -709,7 +712,7 @@ _080BA658: .4byte gUnknown_020387B0\n\ void sub_80BA65C(u8 taskId) { if(sub_80BA400(taskId) != FALSE) - gTasks[taskId].func = sub_80BA384; + TASK.FUNC = sub_80BA384; } void sub_80BA68C(u8 taskId) @@ -849,7 +852,7 @@ void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu gUnknown_020387B4[CRY_TEST_PRIORITY] = 2; sub_80BAD5C(); sub_80BAE10(0, 0); - gTasks[taskId].func = sub_80BAA48; + TASK.FUNC = sub_80BAA48; } void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput @@ -860,7 +863,7 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput REG_WIN0H = 0x11DF; REG_WIN0V = 0x11F; MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - gTasks[taskId].func = sub_80BA258; + TASK.FUNC = sub_80BA258; return; } if(gMain.newAndRepeatedKeys & 0x40) // _080BAAA8 @@ -1221,7 +1224,7 @@ void sub_80BAF84(u8 taskId) gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; gUnknown_020387B4[CRY_TEST_RELEASE] = 0; sub_80BB1D4(); - gTasks[taskId].func = sub_80BB038; + TASK.FUNC = sub_80BB038; } void sub_80BB038(u8 taskId) @@ -1260,7 +1263,7 @@ void sub_80BB038(u8 taskId) REG_WIN0H = 0x11DF; REG_WIN0V = 0x11F; MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - gTasks[taskId].func = sub_80BA258; + TASK.FUNC = sub_80BA258; return; } if(gMain.newKeys & 0x1) // _080BB104 @@ -1383,7 +1386,7 @@ void sub_80BB25C(u8 taskId) REG_BG3CNT = 0x1D03; REG_DISPCNT = 0x1d40; m4aMPlayFadeOutTemporarily(&gMPlay_BGM, 2); - gTasks[taskId].func = sub_80BB3B4; + TASK.FUNC = sub_80BB3B4; } void sub_80BB3B4(u8 taskId) @@ -1407,7 +1410,7 @@ void sub_80BB3B4(u8 taskId) if(gMain.newAndRepeatedKeys & 0x80) { if(++gUnknown_03005D34 > 384) - gUnknown_03005D34 = 1; // total species + gUnknown_03005D34 = 1; sub_80BB494(); } if(gMain.newKeys & 0x2) @@ -1416,7 +1419,7 @@ void sub_80BB3B4(u8 taskId) REG_WIN0H = 0x11DF; REG_WIN0V = 0x11F; MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); - gTasks[taskId].func = sub_80BA258; + TASK.FUNC = sub_80BA258; DestroyCryMeterNeedleSprite(); } } -- cgit v1.2.3 From 6607a006745aab863eb9689fd2404837ac3d453f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 30 Jun 2017 18:59:17 -0400 Subject: add data to C file --- src/sound_check_menu.c | 960 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 925 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 12cde5da8..fc6da433b 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -57,11 +57,7 @@ extern struct ToneData voicegroup_8453190[]; extern struct ToneData voicegroup_84549C0[]; extern struct ToneData voicegroup_8453790[]; -extern u8 gUnknown_083D0300[18]; -extern s8 gUnknown_083D03F8[5]; - extern int gUnknown_020387B4[9]; -extern int gUnknown_083D039C[16]; extern s8 gUnknown_020387B3; extern u8 gUnknown_020387B1; @@ -75,35 +71,808 @@ extern u8 gUnknown_03005E98; extern struct MusicPlayerInfo *gUnknown_03005D30; extern struct MusicPlayerInfo gMPlay_BGM; -extern u8 *gBGMNames[]; -extern u8 *gSENames[]; - -extern u8 gDebugText_SoundCheckJap[]; -extern u8 gDebugText_BGM[]; -extern u8 gDebugText_SE[]; -extern u8 gDebugText_ABDesc[]; -extern u8 gDebugText_UpDown[]; -extern u8 gDebugText_DriverTest[]; -extern u8 gDebugText_BBack[]; -extern u8 gDebugText_APlay[]; -extern u8 gDebugText_Voice[]; -extern u8 gDebugText_Volume[]; -extern u8 gDebugText_Panpot[]; -extern u8 gDebugText_Pitch[]; -extern u8 gDebugText_Length[]; -extern u8 gDebugText_Release[]; -extern u8 gDebugText_Progress[]; -extern u8 gDebugText_Chorus[]; -extern u8 gDebugText_Priority[]; -extern u8 gDebugText_Playing[]; -extern u8 gDebugText_Reverse[]; -extern u8 gDebugText_Stereo[]; -extern u8 gUnknown_083D03DC[]; -extern u8 gUnknown_083D03DE[]; -extern u8 gOtherText_SE[]; -extern u8 gOtherText_Pan[]; -extern u8 gOtherText_LR[]; -extern u8 gOtherText_RL[]; +static const u8 gDebugText_SoundCheckJap[] = _("サウンドチェック"); +static const u8 gDebugText_BGM[] = _("BGM"); +static const u8 gDebugText_SE[] = _("SE "); +static const u8 gDebugText_ABDesc[] = _("A‥さいせい B‥おわり"); +static const u8 gDebugText_UpDown[] = _("L‥UP R‥DOWN"); +static const u8 gDebugText_DriverTest[] = _("R‥DRIVER-TEST"); + +// ideally this should be a multi Coords8 struct, but it wont match when its treated like a struct. +static const u8 gUnknown_083D0300[] = { 1, 1, 1, 3, 1, 5, 1, 7, 1, 9, 1, 11, 1, 13, 1, 15, 1, 17 }; + +static const u8 gDebugText_BBack[] = _("Bぼたんで もどる"); +static const u8 gDebugText_APlay[] = _("Aぼたんで さいせい"); +static const u8 gDebugText_Voice[] = _("VOICE‥‥‥‥"); +static const u8 gDebugText_Volume[] = _("VOLUME‥‥‥"); +static const u8 gDebugText_Panpot[] = _("PANPOT‥‥‥"); +static const u8 gDebugText_Pitch[] = _("PITCH‥‥‥‥"); +static const u8 gDebugText_Length[] = _("LENGTH‥‥‥"); +static const u8 gDebugText_Release[] = _("RELEASE‥‥"); +static const u8 gDebugText_Progress[] = _("PROGRESS‥"); +static const u8 gDebugText_Chorus[] = _("CHORUS‥‥‥"); +static const u8 gDebugText_Priority[] = _("PRIORITY‥"); +static const u8 gDebugText_Playing[] = _("さいせいちゆう‥"); // 再生中 (playing) +static const u8 gDebugText_Reverse[] = _("はんてん‥‥‥‥"); // 反転 (reverse) +static const u8 gDebugText_Stereo[] = _("すてれお‥‥‥‥"); // stereo + +// also ideally should be a MinMax struct, but any attempt to make this into a struct causes it to not match due to the weird multi dim access. +static const int gUnknown_083D039C[16] = +{ + 0, 387, + 0, 127, + -127, 127, + -128, 32639, + 0, 65535, + 0, 255, + 0, 65535, + -64, 63 +}; + +static const u8 gUnknown_083D03DC[] = _("▶"); +static const u8 gUnknown_083D03DE[] = _(" "); + +// why not just use Powers of ten from string_util? +static const int gUnknown_083D03E0[6] = +{ + 1, + 10, + 100, + 1000, + 10000, + 100000 +}; + +static const s8 gUnknown_083D03F8[5] = { 0x3F, 0x00, 0xC0, 0x7F, 0x80 }; + +static const u8 gOtherText_SE[] = _("SE"); +static const u8 gOtherText_Pan[] = _("PAN"); +static const u8 gOtherText_LR[] = _(" LR"); +static const u8 gOtherText_RL[] = _(" RL"); + +// bgm names +static const u8 BGMName_STOP[] = _("STOP"); +static const u8 BGMName_TETSUJI[] = _("TETSUJI"); +static const u8 BGMName_FIELD13[] = _("FIELD13"); +static const u8 BGMName_KACHI22[] = _("KACHI22"); +static const u8 BGMName_KACHI2[] = _("KACHI2"); +static const u8 BGMName_KACHI3[] = _("KACHI3"); +static const u8 BGMName_KACHI5[] = _("KACHI5"); +static const u8 BGMName_PCC[] = _("PCC"); +static const u8 BGMName_NIBI[] = _("NIBI"); +static const u8 BGMName_SUIKUN[] = _("SUIKUN"); +static const u8 BGMName_DOORO1[] = _("DOORO1"); +static const u8 BGMName_DOORO_X1[] = _("DOORO-X1"); +static const u8 BGMName_DOORO_X3[] = _("DOORO-X3"); +static const u8 BGMName_MACHI_S2[] = _("MACHI-S2"); +static const u8 BGMName_MACHI_S4[] = _("MACHI-S4"); +static const u8 BGMName_GIM[] = _("GIM"); +static const u8 BGMName_NAMINORI[] = _("NAMINORI"); +static const u8 BGMName_DAN01[] = _("DAN01"); +static const u8 BGMName_FANFA1[] = _("FANFA1"); +static const u8 BGMName_ME_ASA[] = _("ME-ASA"); +static const u8 BGMName_ME_BACHI[] = _("ME-BACHI"); +static const u8 BGMName_FANFA4[] = _("FANFA4"); +static const u8 BGMName_FANFA5[] = _("FANFA5"); +static const u8 BGMName_ME_WAZA[] = _("ME-WAZA"); +static const u8 BGMName_BIJYUTU[] = _("BIJYUTU"); +static const u8 BGMName_DOORO_X4[] = _("DOORO-X4"); +static const u8 BGMName_FUNE_KAN[] = _("FUNE-KAN"); +static const u8 BGMName_ME_SHINKA[] = _("ME-SHINKA"); +static const u8 BGMName_SHINKA[] = _("SHINKA"); +static const u8 BGMName_ME_WASURE[] = _("ME-WASURE"); +static const u8 BGMName_SYOUJOEYE[] = _("SYOUJOEYE"); +static const u8 BGMName_BOYEYE[] = _("BOYEYE"); +static const u8 BGMName_DAN02[] = _("DAN02"); +static const u8 BGMName_MACHI_S3[] = _("MACHI-S3"); +static const u8 BGMName_ODAMAKI[] = _("ODAMAKI"); +static const u8 BGMName_B_TOWER[] = _("B-TOWER"); +static const u8 BGMName_SWIMEYE[] = _("SWIMEYE"); +static const u8 BGMName_DAN03[] = _("DAN03"); +static const u8 BGMName_ME_KINOMI[] = _("ME-KINOMI"); +static const u8 BGMName_ME_TAMA[] = _("ME-TAMA"); +static const u8 BGMName_ME_B_BIG[] = _("ME-B-BIG"); +static const u8 BGMName_ME_B_SMALL[] = _("ME-B-SMALL"); +static const u8 BGMName_ME_ZANNEN[] = _("ME-ZANNEN"); +static const u8 BGMName_BD_TIME[] = _("BD-TIME"); +static const u8 BGMName_TEST1[] = _("TEST1"); +static const u8 BGMName_TEST2[] = _("TEST2"); +static const u8 BGMName_TEST3[] = _("TEST3"); +static const u8 BGMName_TEST4[] = _("TEST4"); +static const u8 BGMName_TEST[] = _("TEST"); +static const u8 BGMName_GOMACHI0[] = _("GOMACHI0"); +static const u8 BGMName_GOTOWN[] = _("GOTOWN"); +static const u8 BGMName_POKECEN[] = _("POKECEN"); +static const u8 BGMName_NEXTROAD[] = _("NEXTROAD"); +static const u8 BGMName_GRANROAD[] = _("GRANROAD"); +static const u8 BGMName_CYCLING[] = _("CYCLING"); +static const u8 BGMName_FRIENDLY[] = _("FRIENDLY"); +static const u8 BGMName_MISHIRO[] = _("MISHIRO"); +static const u8 BGMName_TOZAN[] = _("TOZAN"); +static const u8 BGMName_GIRLEYE[] = _("GIRLEYE"); +static const u8 BGMName_MINAMO[] = _("MINAMO"); +static const u8 BGMName_ASHROAD[] = _("ASHROAD"); +static const u8 BGMName_EVENT0[] = _("EVENT0"); +static const u8 BGMName_DEEPDEEP[] = _("DEEPDEEP"); +static const u8 BGMName_KACHI1[] = _("KACHI1"); +static const u8 BGMName_TITLE3[] = _("TITLE3"); +static const u8 BGMName_DEMO1[] = _("DEMO1"); +static const u8 BGMName_GIRL_SUP[] = _("GIRL-SUP"); +static const u8 BGMName_HAGESHII[] = _("HAGESHII"); +static const u8 BGMName_KAKKOII[] = _("KAKKOII"); +static const u8 BGMName_KAZANBAI[] = _("KAZANBAI"); +static const u8 BGMName_AQA_0[] = _("AQA-0"); +static const u8 BGMName_TSURETEK[] = _("TSURETEK"); +static const u8 BGMName_BOY_SUP[] = _("BOY-SUP"); +static const u8 BGMName_RAINBOW[] = _("RAINBOW"); +static const u8 BGMName_AYASII[] = _("AYASII"); +static const u8 BGMName_KACHI4[] = _("KACHI4"); +static const u8 BGMName_ROPEWAY[] = _("ROPEWAY"); +static const u8 BGMName_CASINO[] = _("CASINO"); +static const u8 BGMName_HIGHTOWN[] = _("HIGHTOWN"); +static const u8 BGMName_SAFARI[] = _("SAFARI"); +static const u8 BGMName_C_ROAD[] = _("C-ROAD"); +static const u8 BGMName_AJITO[] = _("AJITO"); +static const u8 BGMName_M_BOAT[] = _("M-BOAT"); +static const u8 BGMName_M_DUNGON[] = _("M-DUNGON"); +static const u8 BGMName_FINECITY[] = _("FINECITY"); +static const u8 BGMName_MACHUPI[] = _("MACHUPI"); +static const u8 BGMName_P_SCHOOL[] = _("P-SCHOOL"); +static const u8 BGMName_DENDOU[] = _("DENDOU"); +static const u8 BGMName_TONEKUSA[] = _("TONEKUSA"); +static const u8 BGMName_MABOROSI[] = _("MABOROSI"); +static const u8 BGMName_CON_FAN[] = _("CON-FAN"); +static const u8 BGMName_CONTEST0[] = _("CONTEST0"); +static const u8 BGMName_MGM0[] = _("MGM0"); +static const u8 BGMName_T_BATTLE[] = _("T-BATTLE"); +static const u8 BGMName_OOAME[] = _("OOAME"); +static const u8 BGMName_HIDERI[] = _("HIDERI"); +static const u8 BGMName_RUNECITY[] = _("RUNECITY"); +static const u8 BGMName_CON_K[] = _("CON-K"); +static const u8 BGMName_EIKOU_R[] = _("EIKOU-R"); +static const u8 BGMName_KARAKURI[] = _("KARAKURI"); +static const u8 BGMName_HUTAGO[] = _("HUTAGO"); +static const u8 BGMName_SITENNOU[] = _("SITENNOU"); +static const u8 BGMName_YAMA_EYE[] = _("YAMA-EYE"); +static const u8 BGMName_CONLOBBY[] = _("CONLOBBY"); +static const u8 BGMName_INTER_V[] = _("INTER-V"); +static const u8 BGMName_DAIGO[] = _("DAIGO"); +static const u8 BGMName_THANKFOR[] = _("THANKFOR"); +static const u8 BGMName_END[] = _("END"); +static const u8 BGMName_BATTLE27[] = _("BATTLE27"); +static const u8 BGMName_BATTLE31[] = _("BATTLE31"); +static const u8 BGMName_BATTLE20[] = _("BATTLE20"); +static const u8 BGMName_BATTLE32[] = _("BATTLE32"); +static const u8 BGMName_BATTLE33[] = _("BATTLE33"); +static const u8 BGMName_BATTLE36[] = _("BATTLE36"); +static const u8 BGMName_BATTLE34[] = _("BATTLE34"); +static const u8 BGMName_BATTLE35[] = _("BATTLE35"); +static const u8 BGMName_BATTLE38[] = _("BATTLE38"); +static const u8 BGMName_BATTLE30[] = _("BATTLE30"); + +static const u8 *const gBGMNames[] = +{ + BGMName_STOP, + BGMName_TETSUJI, + BGMName_FIELD13, + BGMName_KACHI22, + BGMName_KACHI2, + BGMName_KACHI3, + BGMName_KACHI5, + BGMName_PCC, + BGMName_NIBI, + BGMName_SUIKUN, + BGMName_DOORO1, + BGMName_DOORO_X1, + BGMName_DOORO_X3, + BGMName_MACHI_S2, + BGMName_MACHI_S4, + BGMName_GIM, + BGMName_NAMINORI, + BGMName_DAN01, + BGMName_FANFA1, + BGMName_ME_ASA, + BGMName_ME_BACHI, + BGMName_FANFA4, + BGMName_FANFA5, + BGMName_ME_WAZA, + BGMName_BIJYUTU, + BGMName_DOORO_X4, + BGMName_FUNE_KAN, + BGMName_ME_SHINKA, + BGMName_SHINKA, + BGMName_ME_WASURE, + BGMName_SYOUJOEYE, + BGMName_BOYEYE, + BGMName_DAN02, + BGMName_MACHI_S3, + BGMName_ODAMAKI, + BGMName_B_TOWER, + BGMName_SWIMEYE, + BGMName_DAN03, + BGMName_ME_KINOMI, + BGMName_ME_TAMA, + BGMName_ME_B_BIG, + BGMName_ME_B_SMALL, + BGMName_ME_ZANNEN, + BGMName_BD_TIME, + BGMName_TEST1, + BGMName_TEST2, + BGMName_TEST3, + BGMName_TEST4, + BGMName_TEST, + BGMName_GOMACHI0, + BGMName_GOTOWN, + BGMName_POKECEN, + BGMName_NEXTROAD, + BGMName_GRANROAD, + BGMName_CYCLING, + BGMName_FRIENDLY, + BGMName_MISHIRO, + BGMName_TOZAN, + BGMName_GIRLEYE, + BGMName_MINAMO, + BGMName_ASHROAD, + BGMName_EVENT0, + BGMName_DEEPDEEP, + BGMName_KACHI1, + BGMName_TITLE3, + BGMName_DEMO1, + BGMName_GIRL_SUP, + BGMName_HAGESHII, + BGMName_KAKKOII, + BGMName_KAZANBAI, + BGMName_AQA_0, + BGMName_TSURETEK, + BGMName_BOY_SUP, + BGMName_RAINBOW, + BGMName_AYASII, + BGMName_KACHI4, + BGMName_ROPEWAY, + BGMName_CASINO, + BGMName_HIGHTOWN, + BGMName_SAFARI, + BGMName_C_ROAD, + BGMName_AJITO, + BGMName_M_BOAT, + BGMName_M_DUNGON, + BGMName_FINECITY, + BGMName_MACHUPI, + BGMName_P_SCHOOL, + BGMName_DENDOU, + BGMName_TONEKUSA, + BGMName_MABOROSI, + BGMName_CON_FAN, + BGMName_CONTEST0, + BGMName_MGM0, + BGMName_T_BATTLE, + BGMName_OOAME, + BGMName_HIDERI, + BGMName_RUNECITY, + BGMName_CON_K, + BGMName_EIKOU_R, + BGMName_KARAKURI, + BGMName_HUTAGO, + BGMName_SITENNOU, + BGMName_YAMA_EYE, + BGMName_CONLOBBY, + BGMName_INTER_V, + BGMName_DAIGO, + BGMName_THANKFOR, + BGMName_END, + BGMName_BATTLE27, + BGMName_BATTLE31, + BGMName_BATTLE20, + BGMName_BATTLE32, + BGMName_BATTLE33, + BGMName_BATTLE36, + BGMName_BATTLE34, + BGMName_BATTLE35, + BGMName_BATTLE38, + BGMName_BATTLE30 +}; + +// SE names +static const u8 SEName_STOP[] = _("STOP"); +static const u8 SEName_KAIFUKU[] = _("KAIFUKU"); +static const u8 SEName_PC_LOGON[] = _("PC-LOGON"); +static const u8 SEName_PC_OFF[] = _("PC-OFF"); +static const u8 SEName_PC_ON[] = _("PC-ON"); +static const u8 SEName_SELECT[] = _("SELECT"); +static const u8 SEName_WIN_OPEN[] = _("WIN-OPEN"); +static const u8 SEName_WALL_HIT[] = _("WALL-HIT"); +static const u8 SEName_DOOR[] = _("DOOR"); +static const u8 SEName_KAIDAN[] = _("KAIDAN"); +static const u8 SEName_DANSA[] = _("DANSA"); +static const u8 SEName_JITENSYA[] = _("JITENSYA"); +static const u8 SEName_KOUKA_L[] = _("KOUKA-L"); +static const u8 SEName_KOUKA_M[] = _("KOUKA-M"); +static const u8 SEName_KOUKA_H[] = _("KOUKA-H"); +static const u8 SEName_BOWA2[] = _("BOWA2"); +static const u8 SEName_POKE_DEAD[] = _("POKE-DEAD"); +static const u8 SEName_NIGERU[] = _("NIGERU"); +static const u8 SEName_JIDO_DOA[] = _("JIDO-DOA"); +static const u8 SEName_NAMINORI[] = _("NAMINORI"); +static const u8 SEName_BAN[] = _("BAN"); +static const u8 SEName_PIN[] = _("PIN"); +static const u8 SEName_BOO[] = _("BOO"); +static const u8 SEName_BOWA[] = _("BOWA"); +static const u8 SEName_JYUNI[] = _("JYUNI"); +static const u8 SEName_A[] = _("A"); +static const u8 SEName_I[] = _("I"); +static const u8 SEName_U[] = _("U"); +static const u8 SEName_E[] = _("E"); +static const u8 SEName_O[] = _("O"); +static const u8 SEName_N[] = _("N"); +static const u8 SEName_SEIKAI[] = _("SEIKAI"); +static const u8 SEName_HAZURE[] = _("HAZURE"); +static const u8 SEName_EXP[] = _("EXP"); +static const u8 SEName_JITE_PYOKO[] = _("JITE-PYOKO"); +static const u8 SEName_MU_PACHI[] = _("MU-PACHI"); +static const u8 SEName_TK_KASYA[] = _("TK-KASYA"); +static const u8 SEName_FU_ZAKU[] = _("FU-ZAKU"); +static const u8 SEName_FU_ZAKU2[] = _("FU-ZAKU2"); +static const u8 SEName_FU_ZUZUZU[] = _("FU-ZUZUZU"); +static const u8 SEName_RU_GASHIN[] = _("RU-GASHIN"); +static const u8 SEName_RU_GASYAN[] = _("RU-GASYAN"); +static const u8 SEName_RU_BARI[] = _("RU-BARI"); +static const u8 SEName_RU_HYUU[] = _("RU-HYUU"); +static const u8 SEName_KI_GASYAN[] = _("KI-GASYAN"); +static const u8 SEName_TK_WARPIN[] = _("TK-WARPIN"); +static const u8 SEName_TK_WARPOUT[] = _("TK-WARPOUT"); +static const u8 SEName_TU_SAA[] = _("TU-SAA"); +static const u8 SEName_HI_TURUN[] = _("HI-TURUN"); +static const u8 SEName_TRACK_MOVE[] = _("TRACK-MOVE"); +static const u8 SEName_TRACK_STOP[] = _("TRACK-STOP"); +static const u8 SEName_TRACK_HAIK[] = _("TRACK-HAIK"); +static const u8 SEName_TRACK_DOOR[] = _("TRACK-DOOR"); +static const u8 SEName_MOTER[] = _("MOTER"); +static const u8 SEName_CARD[] = _("CARD"); +static const u8 SEName_SAVE[] = _("SAVE"); +static const u8 SEName_KON[] = _("KON"); +static const u8 SEName_KON2[] = _("KON2"); +static const u8 SEName_KON3[] = _("KON3"); +static const u8 SEName_KON4[] = _("KON4"); +static const u8 SEName_SUIKOMU[] = _("SUIKOMU"); +static const u8 SEName_NAGERU[] = _("NAGERU"); +static const u8 SEName_TOY_C[] = _("TOY-C"); +static const u8 SEName_TOY_D[] = _("TOY-D"); +static const u8 SEName_TOY_E[] = _("TOY-E"); +static const u8 SEName_TOY_F[] = _("TOY-F"); +static const u8 SEName_TOY_G[] = _("TOY-G"); +static const u8 SEName_TOY_A[] = _("TOY-A"); +static const u8 SEName_TOY_B[] = _("TOY-B"); +static const u8 SEName_TOY_C1[] = _("TOY-C1"); +static const u8 SEName_MIZU[] = _("MIZU"); +static const u8 SEName_HASHI[] = _("HASHI"); +static const u8 SEName_DAUGI[] = _("DAUGI"); +static const u8 SEName_PINPON[] = _("PINPON"); +static const u8 SEName_FUUSEN1[] = _("FUUSEN1"); +static const u8 SEName_FUUSEN2[] = _("FUUSEN2"); +static const u8 SEName_FUUSEN3[] = _("FUUSEN3"); +static const u8 SEName_TOY_KABE[] = _("TOY-KABE"); +static const u8 SEName_TOY_DANGO[] = _("TOY-DANGO"); +static const u8 SEName_DOKU[] = _("DOKU"); +static const u8 SEName_ESUKA[] = _("ESUKA"); +static const u8 SEName_T_AME[] = _("T-AME"); +static const u8 SEName_T_AME_E[] = _("T-AME-E"); +static const u8 SEName_T_OOAME[] = _("T-OOAME"); +static const u8 SEName_T_OOAME_E[] = _("T-OOAME-E"); +static const u8 SEName_T_KOAME[] = _("T-KOAME"); +static const u8 SEName_T_KOAME_E[] = _("T-KOAME-E"); +static const u8 SEName_T_KAMI[] = _("T-KAMI"); +static const u8 SEName_T_KAMI2[] = _("T-KAMI2"); +static const u8 SEName_ELEBETA[] = _("ELEBETA"); +static const u8 SEName_HINSI[] = _("HINSI"); +static const u8 SEName_EXPMAX[] = _("EXPMAX"); +static const u8 SEName_TAMAKORO[] = _("TAMAKORO"); +static const u8 SEName_TAMAKORO_E[] = _("TAMAKORO-E"); +static const u8 SEName_BASABASA[] = _("BASABASA"); +static const u8 SEName_REGI[] = _("REGI"); +static const u8 SEName_C_GAJI[] = _("C-GAJI"); +static const u8 SEName_C_MAKU_U[] = _("C-MAKU-U"); +static const u8 SEName_C_MAKU_D[] = _("C-MAKU-D"); +static const u8 SEName_C_PASI[] = _("C-PASI"); +static const u8 SEName_C_SYU[] = _("C-SYU"); +static const u8 SEName_C_PIKON[] = _("C-PIKON"); +static const u8 SEName_REAPOKE[] = _("REAPOKE"); +static const u8 SEName_OP_BASYU[] = _("OP-BASYU"); +static const u8 SEName_BT_START[] = _("BT-START"); +static const u8 SEName_DENDOU[] = _("DENDOU"); +static const u8 SEName_JIHANKI[] = _("JIHANKI"); +static const u8 SEName_TAMA[] = _("TAMA"); +static const u8 SEName_Z_SCROLL[] = _("Z-SCROLL"); +static const u8 SEName_Z_PAGE[] = _("Z-PAGE"); +static const u8 SEName_PN_ON[] = _("PN-ON"); +static const u8 SEName_PN_OFF[] = _("PN-OFF"); +static const u8 SEName_Z_SEARCH[] = _("Z-SEARCH"); +static const u8 SEName_TAMAGO[] = _("TAMAGO"); +static const u8 SEName_TB_START[] = _("TB-START"); +static const u8 SEName_TB_KON[] = _("TB-KON"); +static const u8 SEName_TB_KARA[] = _("TB-KARA"); +static const u8 SEName_BIDORO[] = _("BIDORO"); +static const u8 SEName_W085[] = _("W085"); +static const u8 SEName_W085B[] = _("W085B"); +static const u8 SEName_W231[] = _("W231"); +static const u8 SEName_W171[] = _("W171"); +static const u8 SEName_W233[] = _("W233"); +static const u8 SEName_W233B[] = _("W233B"); +static const u8 SEName_W145[] = _("W145"); +static const u8 SEName_W145B[] = _("W145B"); +static const u8 SEName_W145C[] = _("W145C"); +static const u8 SEName_W240[] = _("W240"); +static const u8 SEName_W015[] = _("W015"); +static const u8 SEName_W081[] = _("W081"); +static const u8 SEName_W081B[] = _("W081B"); +static const u8 SEName_W088[] = _("W088"); +static const u8 SEName_W016[] = _("W016"); +static const u8 SEName_W016B[] = _("W016B"); +static const u8 SEName_W003[] = _("W003"); +static const u8 SEName_W104[] = _("W104"); +static const u8 SEName_W013[] = _("W013"); +static const u8 SEName_W196[] = _("W196"); +static const u8 SEName_W086[] = _("W086"); +static const u8 SEName_W004[] = _("W004"); +static const u8 SEName_W025[] = _("W025"); +static const u8 SEName_W025B[] = _("W025B"); +static const u8 SEName_W152[] = _("W152"); +static const u8 SEName_W026[] = _("W026"); +static const u8 SEName_W172[] = _("W172"); +static const u8 SEName_W172B[] = _("W172B"); +static const u8 SEName_W053[] = _("W053"); +static const u8 SEName_W007[] = _("W007"); +static const u8 SEName_W092[] = _("W092"); +static const u8 SEName_W221[] = _("W221"); +static const u8 SEName_W221B[] = _("W221B"); +static const u8 SEName_W052[] = _("W052"); +static const u8 SEName_W036[] = _("W036"); +static const u8 SEName_W059[] = _("W059"); +static const u8 SEName_W059B[] = _("W059B"); +static const u8 SEName_W010[] = _("W010"); +static const u8 SEName_W011[] = _("W011"); +static const u8 SEName_W017[] = _("W017"); +static const u8 SEName_W019[] = _("W019"); +static const u8 SEName_W028[] = _("W028"); +static const u8 SEName_W013B[] = _("W013B"); +static const u8 SEName_W044[] = _("W044"); +static const u8 SEName_W029[] = _("W029"); +static const u8 SEName_W057[] = _("W057"); +static const u8 SEName_W056[] = _("W056"); +static const u8 SEName_W250[] = _("W250"); +static const u8 SEName_W030[] = _("W030"); +static const u8 SEName_W039[] = _("W039"); +static const u8 SEName_W054[] = _("W054"); +static const u8 SEName_W077[] = _("W077"); +static const u8 SEName_W020[] = _("W020"); +static const u8 SEName_W082[] = _("W082"); +static const u8 SEName_W047[] = _("W047"); +static const u8 SEName_W195[] = _("W195"); +static const u8 SEName_W006[] = _("W006"); +static const u8 SEName_W091[] = _("W091"); +static const u8 SEName_W146[] = _("W146"); +static const u8 SEName_W120[] = _("W120"); +static const u8 SEName_W153[] = _("W153"); +static const u8 SEName_W071B[] = _("W071B"); +static const u8 SEName_W071[] = _("W071"); +static const u8 SEName_W103[] = _("W103"); +static const u8 SEName_W062[] = _("W062"); +static const u8 SEName_W062B[] = _("W062B"); +static const u8 SEName_W048[] = _("W048"); +static const u8 SEName_W187[] = _("W187"); +static const u8 SEName_W118[] = _("W118"); +static const u8 SEName_W155[] = _("W155"); +static const u8 SEName_W122[] = _("W122"); +static const u8 SEName_W060[] = _("W060"); +static const u8 SEName_W185[] = _("W185"); +static const u8 SEName_W014[] = _("W014"); +static const u8 SEName_W043[] = _("W043"); +static const u8 SEName_W207[] = _("W207"); +static const u8 SEName_W207B[] = _("W207B"); +static const u8 SEName_W215[] = _("W215"); +static const u8 SEName_W109[] = _("W109"); +static const u8 SEName_W173[] = _("W173"); +static const u8 SEName_W280[] = _("W280"); +static const u8 SEName_W202[] = _("W202"); +static const u8 SEName_W060B[] = _("W060B"); +static const u8 SEName_W076[] = _("W076"); +static const u8 SEName_W080[] = _("W080"); +static const u8 SEName_W100[] = _("W100"); +static const u8 SEName_W107[] = _("W107"); +static const u8 SEName_W166[] = _("W166"); +static const u8 SEName_W129[] = _("W129"); +static const u8 SEName_W115[] = _("W115"); +static const u8 SEName_W112[] = _("W112"); +static const u8 SEName_W197[] = _("W197"); +static const u8 SEName_W199[] = _("W199"); +static const u8 SEName_W236[] = _("W236"); +static const u8 SEName_W204[] = _("W204"); +static const u8 SEName_W268[] = _("W268"); +static const u8 SEName_W070[] = _("W070"); +static const u8 SEName_W063[] = _("W063"); +static const u8 SEName_W127[] = _("W127"); +static const u8 SEName_W179[] = _("W179"); +static const u8 SEName_W151[] = _("W151"); +static const u8 SEName_W201[] = _("W201"); +static const u8 SEName_W161[] = _("W161"); +static const u8 SEName_W161B[] = _("W161B"); +static const u8 SEName_W227[] = _("W227"); +static const u8 SEName_W227B[] = _("W227B"); +static const u8 SEName_W226[] = _("W226"); +static const u8 SEName_W208[] = _("W208"); +static const u8 SEName_W213[] = _("W213"); +static const u8 SEName_W213B[] = _("W213B"); +static const u8 SEName_W234[] = _("W234"); +static const u8 SEName_W260[] = _("W260"); +static const u8 SEName_W328[] = _("W328"); +static const u8 SEName_W320[] = _("W320"); +static const u8 SEName_W255[] = _("W255"); +static const u8 SEName_W291[] = _("W291"); +static const u8 SEName_W089[] = _("W089"); +static const u8 SEName_W239[] = _("W239"); +static const u8 SEName_W230[] = _("W230"); +static const u8 SEName_W281[] = _("W281"); +static const u8 SEName_W327[] = _("W327"); +static const u8 SEName_W287[] = _("W287"); +static const u8 SEName_W257[] = _("W257"); +static const u8 SEName_W253[] = _("W253"); +static const u8 SEName_W258[] = _("W258"); +static const u8 SEName_W322[] = _("W322"); +static const u8 SEName_W298[] = _("W298"); +static const u8 SEName_W287B[] = _("W287B"); +static const u8 SEName_W114[] = _("W114"); +static const u8 SEName_W063B[] = _("W063B"); + +static const u8 *const gSENames[] = +{ + SEName_STOP, + SEName_KAIFUKU, + SEName_PC_LOGON, + SEName_PC_OFF, + SEName_PC_ON, + SEName_SELECT, + SEName_WIN_OPEN, + SEName_WALL_HIT, + SEName_DOOR, + SEName_KAIDAN, + SEName_DANSA, + SEName_JITENSYA, + SEName_KOUKA_L, + SEName_KOUKA_M, + SEName_KOUKA_H, + SEName_BOWA2, + SEName_POKE_DEAD, + SEName_NIGERU, + SEName_JIDO_DOA, + SEName_NAMINORI, + SEName_BAN, + SEName_PIN, + SEName_BOO, + SEName_BOWA, + SEName_JYUNI, + SEName_A, + SEName_I, + SEName_U, + SEName_E, + SEName_O, + SEName_N, + SEName_SEIKAI, + SEName_HAZURE, + SEName_EXP, + SEName_JITE_PYOKO, + SEName_MU_PACHI, + SEName_TK_KASYA, + SEName_FU_ZAKU, + SEName_FU_ZAKU2, + SEName_FU_ZUZUZU, + SEName_RU_GASHIN, + SEName_RU_GASYAN, + SEName_RU_BARI, + SEName_RU_HYUU, + SEName_KI_GASYAN, + SEName_TK_WARPIN, + SEName_TK_WARPOUT, + SEName_TU_SAA, + SEName_HI_TURUN, + SEName_TRACK_MOVE, + SEName_TRACK_STOP, + SEName_TRACK_HAIK, + SEName_TRACK_DOOR, + SEName_MOTER, + SEName_CARD, + SEName_SAVE, + SEName_KON, + SEName_KON2, + SEName_KON3, + SEName_KON4, + SEName_SUIKOMU, + SEName_NAGERU, + SEName_TOY_C, + SEName_TOY_D, + SEName_TOY_E, + SEName_TOY_F, + SEName_TOY_G, + SEName_TOY_A, + SEName_TOY_B, + SEName_TOY_C1, + SEName_MIZU, + SEName_HASHI, + SEName_DAUGI, + SEName_PINPON, + SEName_FUUSEN1, + SEName_FUUSEN2, + SEName_FUUSEN3, + SEName_TOY_KABE, + SEName_TOY_DANGO, + SEName_DOKU, + SEName_ESUKA, + SEName_T_AME, + SEName_T_AME_E, + SEName_T_OOAME, + SEName_T_OOAME_E, + SEName_T_KOAME, + SEName_T_KOAME_E, + SEName_T_KAMI, + SEName_T_KAMI2, + SEName_ELEBETA, + SEName_HINSI, + SEName_EXPMAX, + SEName_TAMAKORO, + SEName_TAMAKORO_E, + SEName_BASABASA, + SEName_REGI, + SEName_C_GAJI, + SEName_C_MAKU_U, + SEName_C_MAKU_D, + SEName_C_PASI, + SEName_C_SYU, + SEName_C_PIKON, + SEName_REAPOKE, + SEName_OP_BASYU, + SEName_BT_START, + SEName_DENDOU, + SEName_JIHANKI, + SEName_TAMA, + SEName_Z_SCROLL, + SEName_Z_PAGE, + SEName_PN_ON, + SEName_PN_OFF, + SEName_Z_SEARCH, + SEName_TAMAGO, + SEName_TB_START, + SEName_TB_KON, + SEName_TB_KARA, + SEName_BIDORO, + SEName_W085, + SEName_W085B, + SEName_W231, + SEName_W171, + SEName_W233, + SEName_W233B, + SEName_W145, + SEName_W145B, + SEName_W145C, + SEName_W240, + SEName_W015, + SEName_W081, + SEName_W081B, + SEName_W088, + SEName_W016, + SEName_W016B, + SEName_W003, + SEName_W104, + SEName_W013, + SEName_W196, + SEName_W086, + SEName_W004, + SEName_W025, + SEName_W025B, + SEName_W152, + SEName_W026, + SEName_W172, + SEName_W172B, + SEName_W053, + SEName_W007, + SEName_W092, + SEName_W221, + SEName_W221B, + SEName_W052, + SEName_W036, + SEName_W059, + SEName_W059B, + SEName_W010, + SEName_W011, + SEName_W017, + SEName_W019, + SEName_W028, + SEName_W013B, + SEName_W044, + SEName_W029, + SEName_W057, + SEName_W056, + SEName_W250, + SEName_W030, + SEName_W039, + SEName_W054, + SEName_W077, + SEName_W020, + SEName_W082, + SEName_W047, + SEName_W195, + SEName_W006, + SEName_W091, + SEName_W146, + SEName_W120, + SEName_W153, + SEName_W071B, + SEName_W071, + SEName_W103, + SEName_W062, + SEName_W062B, + SEName_W048, + SEName_W187, + SEName_W118, + SEName_W155, + SEName_W122, + SEName_W060, + SEName_W185, + SEName_W014, + SEName_W043, + SEName_W207, + SEName_W207B, + SEName_W215, + SEName_W109, + SEName_W173, + SEName_W280, + SEName_W202, + SEName_W060B, + SEName_W076, + SEName_W080, + SEName_W100, + SEName_W107, + SEName_W166, + SEName_W129, + SEName_W115, + SEName_W112, + SEName_W197, + SEName_W199, + SEName_W236, + SEName_W204, + SEName_W268, + SEName_W070, + SEName_W063, + SEName_W127, + SEName_W179, + SEName_W151, + SEName_W201, + SEName_W161, + SEName_W161B, + SEName_W227, + SEName_W227B, + SEName_W226, + SEName_W208, + SEName_W213, + SEName_W213B, + SEName_W234, + SEName_W260, + SEName_W328, + SEName_W320, + SEName_W255, + SEName_W291, + SEName_W089, + SEName_W239, + SEName_W230, + SEName_W281, + SEName_W327, + SEName_W287, + SEName_W257, + SEName_W253, + SEName_W258, + SEName_W322, + SEName_W298, + SEName_W287B, + SEName_W114, + SEName_W063B +}; void sub_80BA258(u8); void sub_80BA384(u8); @@ -111,7 +880,7 @@ void sub_80BA65C(u8); void sub_80BA68C(u8); void sub_80BA6B8(u8); void sub_80BA700(u16, u16, u16); -void sub_80BA79C(u8 *, u16, u16); +void sub_80BA79C(const u8 *const, u16, u16); void sub_80BA800(u8); void sub_80BAA48(u8); void sub_80BACDC(s8); @@ -769,7 +1538,7 @@ void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? MenuPrint(str, x, y); } -void sub_80BA79C(u8 *string, u16 x, u16 y) +void sub_80BA79C(const u8 *const string, u16 x, u16 y) { u8 i; u8 str[11]; @@ -1020,6 +1789,61 @@ void sub_80BAE10(u8 var1, u8 var2) MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); } +/* +sub_80BAE10: + push {r4, r5, r6, lr} + mov r6, r8 + push {r6} + add sp, sp, #0xfffffff8 + add r4, r0, #0 + add r5, r1, #0 + lsl r4, r4, #0x18 + lsr r4, r4, #0x18 + lsl r5, r5, #0x18 + lsr r5, r5, #0x18 + ldr r1, .L133 + mov r0, sp + mov r2, #0x2 + bl memcpy + add r0, sp, #0x4 + mov r8, r0 + ldr r1, .L133+0x4 + mov r2, #0x2 + bl memcpy + ldr r6, .L133+0x8 + lsl r4, r4, #0x1 + add r0, r4, r6 + ldrb r1, [r0] + add r4, r4, #0x1 + add r4, r4, r6 + ldrb r2, [r4] + mov r0, r8 + bl MenuPrint + lsl r5, r5, #0x1 + add r0, r5, r6 + ldrb r1, [r0] + add r5, r5, #0x1 + add r5, r5, r6 + ldrb r2, [r5] + mov r0, sp + bl MenuPrint + add sp, sp, #0x8 + pop {r3} + mov r8, r3 + pop {r4, r5, r6} + pop {r0} + bx r0 +.L134: + .align 2, 0 +.L133: + .word gUnknown_083D03DC + .word gUnknown_083D03DE + .word gUnknown_083D0300 +.Lfe16: + .size sub_80BAE10,.Lfe16-sub_80BAE10 + .align 2, 0 +*/ + /*void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) { u32 powers[6]; @@ -1344,6 +2168,72 @@ void sub_80BB1D4(void) sub_80BAE78(IsSEPlaying(), 12, 8, 1); } +/* + thumb_func_start sub_80BB1D4 +sub_80BB1D4: @ 80BB1D4 + push {r4,r5,lr} + sub sp, 0x10 + ldr r1, _080BB218 @ =gOtherText_LR + mov r0, sp + movs r2, 0x5 + bl memcpy + add r5, sp, 0x8 + ldr r1, _080BB21C @ =gOtherText_RL + adds r0, r5, 0 + movs r2, 0x5 + bl memcpy + ldr r4, _080BB220 @ =gUnknown_020387B4 + ldr r0, [r4] + movs r1, 0x7 + movs r2, 0x2 + movs r3, 0x3 + bl sub_80BAE78 + ldr r1, _080BB224 @ =gUnknown_083D03F8 + ldr r0, [r4, 0x8] + adds r0, r1 + movs r1, 0 + ldrsb r1, [r0, r1] + movs r0, 0x80 + negs r0, r0 + cmp r1, r0 + beq _080BB228 + cmp r1, 0x7F + bne _080BB234 + mov r0, sp + b _080BB22A + .align 2, 0 +_080BB218: .4byte gOtherText_LR +_080BB21C: .4byte gOtherText_RL +_080BB220: .4byte gUnknown_020387B4 +_080BB224: .4byte gUnknown_083D03F8 +_080BB228: + adds r0, r5, 0 +_080BB22A: + movs r1, 0x7 + movs r2, 0x4 + bl MenuPrint + b _080BB240 +_080BB234: + adds r0, r1, 0 + movs r1, 0x7 + movs r2, 0x4 + movs r3, 0x3 + bl sub_80BAE78 +_080BB240: + bl IsSEPlaying + lsls r0, 24 + lsrs r0, 24 + movs r1, 0xC + movs r2, 0x8 + movs r3, 0x1 + bl sub_80BAE78 + add sp, 0x10 + pop {r4,r5} + pop {r0} + bx r0 + thumb_func_end sub_80BB1D4 +*/ + void sub_80BB25C(u8 taskId) { struct CryRelatedStruct cryStruct, cryStruct2; -- cgit v1.2.3 From 90eaf7b902429321a2a2073fcff37379d755e749 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 30 Jun 2017 19:02:06 -0400 Subject: whoops --- src/sound_check_menu.c | 55 -------------------------------------------------- 1 file changed, 55 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index fc6da433b..356eef11c 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -1789,61 +1789,6 @@ void sub_80BAE10(u8 var1, u8 var2) MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); } -/* -sub_80BAE10: - push {r4, r5, r6, lr} - mov r6, r8 - push {r6} - add sp, sp, #0xfffffff8 - add r4, r0, #0 - add r5, r1, #0 - lsl r4, r4, #0x18 - lsr r4, r4, #0x18 - lsl r5, r5, #0x18 - lsr r5, r5, #0x18 - ldr r1, .L133 - mov r0, sp - mov r2, #0x2 - bl memcpy - add r0, sp, #0x4 - mov r8, r0 - ldr r1, .L133+0x4 - mov r2, #0x2 - bl memcpy - ldr r6, .L133+0x8 - lsl r4, r4, #0x1 - add r0, r4, r6 - ldrb r1, [r0] - add r4, r4, #0x1 - add r4, r4, r6 - ldrb r2, [r4] - mov r0, r8 - bl MenuPrint - lsl r5, r5, #0x1 - add r0, r5, r6 - ldrb r1, [r0] - add r5, r5, #0x1 - add r5, r5, r6 - ldrb r2, [r5] - mov r0, sp - bl MenuPrint - add sp, sp, #0x8 - pop {r3} - mov r8, r3 - pop {r4, r5, r6} - pop {r0} - bx r0 -.L134: - .align 2, 0 -.L133: - .word gUnknown_083D03DC - .word gUnknown_083D03DE - .word gUnknown_083D0300 -.Lfe16: - .size sub_80BAE10,.Lfe16-sub_80BAE10 - .align 2, 0 -*/ - /*void sub_80BAE78(int var1, u16 var2, u16 var3, u8 var4) { u32 powers[6]; -- cgit v1.2.3 From 13d7308a8f8cb5d57599ebf946aa8d956aa4508f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 30 Jun 2017 19:04:38 -0400 Subject: whoops 2 electric boogaloo --- src/sound_check_menu.c | 66 -------------------------------------------------- 1 file changed, 66 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 356eef11c..202bf857e 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -2113,72 +2113,6 @@ void sub_80BB1D4(void) sub_80BAE78(IsSEPlaying(), 12, 8, 1); } -/* - thumb_func_start sub_80BB1D4 -sub_80BB1D4: @ 80BB1D4 - push {r4,r5,lr} - sub sp, 0x10 - ldr r1, _080BB218 @ =gOtherText_LR - mov r0, sp - movs r2, 0x5 - bl memcpy - add r5, sp, 0x8 - ldr r1, _080BB21C @ =gOtherText_RL - adds r0, r5, 0 - movs r2, 0x5 - bl memcpy - ldr r4, _080BB220 @ =gUnknown_020387B4 - ldr r0, [r4] - movs r1, 0x7 - movs r2, 0x2 - movs r3, 0x3 - bl sub_80BAE78 - ldr r1, _080BB224 @ =gUnknown_083D03F8 - ldr r0, [r4, 0x8] - adds r0, r1 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0x80 - negs r0, r0 - cmp r1, r0 - beq _080BB228 - cmp r1, 0x7F - bne _080BB234 - mov r0, sp - b _080BB22A - .align 2, 0 -_080BB218: .4byte gOtherText_LR -_080BB21C: .4byte gOtherText_RL -_080BB220: .4byte gUnknown_020387B4 -_080BB224: .4byte gUnknown_083D03F8 -_080BB228: - adds r0, r5, 0 -_080BB22A: - movs r1, 0x7 - movs r2, 0x4 - bl MenuPrint - b _080BB240 -_080BB234: - adds r0, r1, 0 - movs r1, 0x7 - movs r2, 0x4 - movs r3, 0x3 - bl sub_80BAE78 -_080BB240: - bl IsSEPlaying - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xC - movs r2, 0x8 - movs r3, 0x1 - bl sub_80BAE78 - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80BB1D4 -*/ - void sub_80BB25C(u8 taskId) { struct CryRelatedStruct cryStruct, cryStruct2; -- cgit v1.2.3 From 8059cdb262be63f8e6a879c716e7a0fa664a547d Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Fri, 30 Jun 2017 19:11:48 -0400 Subject: clean up memcpy size declares --- src/sound_check_menu.c | 109 ++++++++++++++++++++++++------------------------- 1 file changed, 54 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 202bf857e..c16e20196 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -969,20 +969,19 @@ void CB2_StartSoundCheckMenu(void) // Task_InitSoundCheckMenu void sub_80BA258(u8 taskId) { - u8 soundcheckStr[9]; - u8 bgmStr[4]; - u8 seStr[4]; - u8 abDescStr[13]; - u8 upDownStr[12]; - u8 driverStr[14]; - - // these probably used size of the strings themselves, but they are not in the C file yet. - memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof soundcheckStr); - memcpy(bgmStr, gDebugText_BGM, sizeof bgmStr); - memcpy(seStr, gDebugText_SE, sizeof seStr); - memcpy(abDescStr, gDebugText_ABDesc, sizeof abDescStr); - memcpy(upDownStr, gDebugText_UpDown, sizeof upDownStr); - memcpy(driverStr, gDebugText_DriverTest, sizeof driverStr); + u8 soundcheckStr[sizeof gDebugText_SoundCheckJap]; + u8 bgmStr[sizeof gDebugText_BGM]; + u8 seStr[sizeof gDebugText_SE]; + u8 abDescStr[sizeof gDebugText_ABDesc]; + u8 upDownStr[sizeof gDebugText_UpDown]; + u8 driverStr[sizeof gDebugText_DriverTest]; + + memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof gDebugText_SoundCheckJap); + memcpy(bgmStr, gDebugText_BGM, sizeof gDebugText_BGM); + memcpy(seStr, gDebugText_SE, sizeof gDebugText_SE); + memcpy(abDescStr, gDebugText_ABDesc, sizeof gDebugText_ABDesc); + memcpy(upDownStr, gDebugText_UpDown, sizeof gDebugText_UpDown); + memcpy(driverStr, gDebugText_DriverTest, sizeof gDebugText_DriverTest); if(!gPaletteFade.active) { @@ -1556,35 +1555,35 @@ void sub_80BA79C(const u8 *const string, u16 x, u16 y) void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu { - u8 bbackStr[10]; - u8 aplayStr[11]; - u8 voiceStr[10]; - u8 volumeStr[10]; - u8 panpotStr[10]; - u8 pitchStr[10]; - u8 lengthStr[10]; - u8 releaseStr[10]; - u8 progressStr[10]; - u8 chorusStr[10]; - u8 priorityStr[10]; - u8 playingStr[9]; - u8 reverseStr[9]; - u8 stereoStr[9]; - - memcpy(bbackStr, gDebugText_BBack, sizeof bbackStr); - memcpy(aplayStr, gDebugText_APlay, sizeof aplayStr); - memcpy(voiceStr, gDebugText_Voice, sizeof voiceStr); - memcpy(volumeStr, gDebugText_Volume, sizeof volumeStr); - memcpy(panpotStr, gDebugText_Panpot, sizeof panpotStr); - memcpy(pitchStr, gDebugText_Pitch, sizeof pitchStr); - memcpy(lengthStr, gDebugText_Length, sizeof lengthStr); - memcpy(releaseStr, gDebugText_Release, sizeof releaseStr); - memcpy(progressStr, gDebugText_Progress, sizeof progressStr); - memcpy(chorusStr, gDebugText_Chorus, sizeof chorusStr); - memcpy(priorityStr, gDebugText_Priority, sizeof priorityStr); - memcpy(playingStr, gDebugText_Playing, sizeof playingStr); - memcpy(reverseStr, gDebugText_Reverse, sizeof reverseStr); - memcpy(stereoStr, gDebugText_Stereo, sizeof stereoStr); + u8 bbackStr[sizeof gDebugText_BBack]; + u8 aplayStr[sizeof gDebugText_APlay]; + u8 voiceStr[sizeof gDebugText_Voice]; + u8 volumeStr[sizeof gDebugText_Volume]; + u8 panpotStr[sizeof gDebugText_Panpot]; + u8 pitchStr[sizeof gDebugText_Pitch]; + u8 lengthStr[sizeof gDebugText_Length]; + u8 releaseStr[sizeof gDebugText_Release]; + u8 progressStr[sizeof gDebugText_Progress]; + u8 chorusStr[sizeof gDebugText_Chorus]; + u8 priorityStr[sizeof gDebugText_Priority]; + u8 playingStr[sizeof gDebugText_Playing]; + u8 reverseStr[sizeof gDebugText_Reverse]; + u8 stereoStr[sizeof gDebugText_Stereo]; + + memcpy(bbackStr, gDebugText_BBack, sizeof gDebugText_BBack); + memcpy(aplayStr, gDebugText_APlay, sizeof gDebugText_APlay); + memcpy(voiceStr, gDebugText_Voice, sizeof gDebugText_Voice); + memcpy(volumeStr, gDebugText_Volume, sizeof gDebugText_Volume); + memcpy(panpotStr, gDebugText_Panpot, sizeof gDebugText_Panpot); + memcpy(pitchStr, gDebugText_Pitch, sizeof gDebugText_Pitch); + memcpy(lengthStr, gDebugText_Length, sizeof gDebugText_Length); + memcpy(releaseStr, gDebugText_Release, sizeof gDebugText_Release); + memcpy(progressStr, gDebugText_Progress, sizeof gDebugText_Progress); + memcpy(chorusStr, gDebugText_Chorus, sizeof gDebugText_Chorus); + memcpy(priorityStr, gDebugText_Priority, sizeof gDebugText_Priority); + memcpy(playingStr, gDebugText_Playing, sizeof gDebugText_Playing); + memcpy(reverseStr, gDebugText_Reverse, sizeof gDebugText_Reverse); + memcpy(stereoStr, gDebugText_Stereo, sizeof gDebugText_Stereo); REG_DISPCNT = 0x3140; MenuDrawTextWindow(0, 0, 0x1D, 0x13); @@ -1749,9 +1748,9 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput void sub_80BACDC(s8 var) { - int minMaxArray[16]; + int minMaxArray[ARRAY_COUNT(gUnknown_083D039C)]; - memcpy(minMaxArray, gUnknown_083D039C, sizeof minMaxArray); + memcpy(minMaxArray, gUnknown_083D039C, sizeof gUnknown_083D039C); gUnknown_020387B4[gUnknown_020387B3] += var; if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]) @@ -1779,11 +1778,11 @@ void sub_80BAD5C(void) void sub_80BAE10(u8 var1, u8 var2) { - u8 str1[2]; - u8 str2[2]; + u8 str1[sizeof gUnknown_083D03DC]; + u8 str2[sizeof gUnknown_083D03DE]; - memcpy(str1, gUnknown_083D03DC, sizeof str1); - memcpy(str2, gUnknown_083D03DE, sizeof str2); + memcpy(str1, gUnknown_083D03DC, sizeof gUnknown_083D03DC); + memcpy(str2, gUnknown_083D03DE, sizeof gUnknown_083D03DE); MenuPrint(str2, gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 1)]); MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); @@ -1972,13 +1971,13 @@ _080BAF80: .4byte gUnknown_083D03E0\n\ void sub_80BAF84(u8 taskId) { - u8 seStr[3]; - u8 panStr[4]; - u8 playingStr[9]; + u8 seStr[sizeof gOtherText_SE]; + u8 panStr[sizeof gOtherText_Pan]; + u8 playingStr[sizeof gDebugText_Playing]; - memcpy(seStr, gOtherText_SE, sizeof seStr); - memcpy(panStr, gOtherText_Pan, sizeof panStr); - memcpy(playingStr, gDebugText_Playing, sizeof playingStr); + memcpy(seStr, gOtherText_SE, sizeof gOtherText_SE); + memcpy(panStr, gOtherText_Pan, sizeof gOtherText_Pan); + memcpy(playingStr, gDebugText_Playing, sizeof gDebugText_Playing); REG_DISPCNT = 0x3140; MenuDrawTextWindow(0, 0, 0x1D, 0x13); -- cgit v1.2.3 From 956cf9ad866615beea26c61b5e0839cb0d841730 Mon Sep 17 00:00:00 2001 From: JaceCearK1 Date: Sat, 1 Jul 2017 21:16:11 +0200 Subject: Fix German Sapphire's Default #1 Player Names --- src/strings.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/strings.c b/src/strings.c index cc0641dce..be1bd94c7 100644 --- a/src/strings.c +++ b/src/strings.c @@ -976,7 +976,7 @@ const u8 gBirchText_Girl[] = _("MÄDEL"); const u8 gBirchText_NewName[] = _("NEUER NAME"); #ifdef SAPPHIRE -const u8 gDefaultBoyName1[] = _("SEAN"); +const u8 gDefaultBoyName1[] = _("SEBOLD"); #else const u8 gDefaultBoyName1[] = _("ROLAND"); #endif @@ -985,7 +985,7 @@ const u8 gDefaultBoyName3[] = _("HELGE"); const u8 gDefaultBoyName4[] = _("JAN"); #ifdef SAPPHIRE -const u8 gDefaultGirlName1[] = _("MARINA"); +const u8 gDefaultGirlName1[] = _("MARTINA"); #else const u8 gDefaultGirlName1[] = _("PETRA"); #endif -- cgit v1.2.3 From ab03d23dc5cd1d791df3cebaf000166987fe6720 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 1 Jul 2017 20:57:29 -0400 Subject: win range macros --- src/sound_check_menu.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index c16e20196..8ad846748 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -941,10 +941,10 @@ void CB2_StartSoundCheckMenu(void) SetUpWindowConfig(&gWindowConfig_81E6C3C); InitMenuWindow(&gWindowConfig_81E6CE4); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - REG_WIN0H = 0; - REG_WIN0V = 0; - REG_WIN1H = 0; - REG_WIN1V = 0; + REG_WIN0H = WIN_RANGE(0, 0); + REG_WIN0V = WIN_RANGE(0, 0); + REG_WIN1H = WIN_RANGE(0, 0); + REG_WIN1V = WIN_RANGE(0, 0); REG_WININ = 0x1111; REG_WINOUT = 0x31; REG_BLDCNT = 0xE1; @@ -996,8 +996,8 @@ void sub_80BA258(u8 taskId) MenuPrint(upDownStr, 14, 13); MenuPrint(driverStr, 14, 18); TASK.FUNC = sub_80BA384; - REG_WIN0H = 0x11DF; - REG_WIN0V = 0x11F; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); } } @@ -1498,12 +1498,12 @@ void sub_80BA6B8(u8 windowType) { case BGM_WINDOW: default: - REG_WIN1H = 0x11DF; - REG_WIN1V = 0x2957; + REG_WIN1H = WIN_RANGE(17, 223); + REG_WIN1V = WIN_RANGE(41, 87); break; case SE_WINDOW: - REG_WIN1H = 0x11DF; - REG_WIN1V = 0x618F; + REG_WIN1H = WIN_RANGE(17, 223); + REG_WIN1V = WIN_RANGE(97, 143); break; } } @@ -1601,8 +1601,8 @@ void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu MenuPrint(playingStr, 0x13, 0x10); MenuPrint(reverseStr, 0x13, 0xE); MenuPrint(stereoStr, 0x13, 0xC); - REG_WIN0H = 0xF0; - REG_WIN0V = 0xA0; + REG_WIN0H = WIN_RANGE(0, 240); + REG_WIN0V = WIN_RANGE(0, 160); gUnknown_020387B3 = 0; gUnknown_020387B1 = 0; gUnknown_020387B2 = 0; @@ -1628,8 +1628,8 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput if(gMain.newKeys & 0x2) { REG_DISPCNT = 0x7140; - REG_WIN0H = 0x11DF; - REG_WIN0V = 0x11F; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); TASK.FUNC = sub_80BA258; return; @@ -1984,8 +1984,8 @@ void sub_80BAF84(u8 taskId) MenuPrint(seStr, 3, 2); MenuPrint(panStr, 3, 4); MenuPrint(playingStr, 3, 8); - REG_WIN0H = 0xF0; - REG_WIN0V = 0xA0; + REG_WIN0H = WIN_RANGE(0, 240); + REG_WIN0V = WIN_RANGE(0, 160); gUnknown_020387B4[CRY_TEST_UNK0] = 1; gUnknown_020387B4[CRY_TEST_PANPOT] = 0; gUnknown_020387B4[CRY_TEST_CHORUS] = 0; @@ -2028,8 +2028,8 @@ void sub_80BB038(u8 taskId) if(gMain.newKeys & 0x2) { REG_DISPCNT = 0x7140; - REG_WIN0H = 0x11DF; - REG_WIN0V = 0x11F; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); TASK.FUNC = sub_80BA258; return; @@ -2184,8 +2184,8 @@ void sub_80BB3B4(u8 taskId) if(gMain.newKeys & 0x2) { REG_DISPCNT = 0x7140; - REG_WIN0H = 0x11DF; - REG_WIN0V = 0x11F; + REG_WIN0H = WIN_RANGE(17, 223); + REG_WIN0V = WIN_RANGE(1, 31); MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); TASK.FUNC = sub_80BA258; DestroyCryMeterNeedleSprite(); -- cgit v1.2.3 From 5f3d11e9dee2d6025c938f97a05d0a8de7df5e3a Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 1 Jul 2017 21:01:04 -0400 Subject: button defines --- src/sound_check_menu.c | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 8ad846748..732452d6f 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -1625,7 +1625,7 @@ void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput { - if(gMain.newKeys & 0x2) + if(gMain.newKeys & B_BUTTON) { REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); @@ -1634,7 +1634,7 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput TASK.FUNC = sub_80BA258; return; } - if(gMain.newAndRepeatedKeys & 0x40) // _080BAAA8 + if(gMain.newAndRepeatedKeys & DPAD_UP) // _080BAAA8 { u8 backupVar = gUnknown_020387B3; if(--gUnknown_020387B3 < 0) @@ -1643,7 +1643,7 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput sub_80BAE10(backupVar, gUnknown_020387B3); return; } - if(gMain.newAndRepeatedKeys & 0x80) // _080BAAD0 + if(gMain.newAndRepeatedKeys & DPAD_DOWN) // _080BAAD0 { u8 backupVar = gUnknown_020387B3; if(++gUnknown_020387B3 > 8) @@ -1652,44 +1652,44 @@ void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput sub_80BAE10(backupVar, gUnknown_020387B3); return; } - if(gMain.newKeys & 0x8) // _080BAAF8 + if(gMain.newKeys & START_BUTTON) // _080BAAF8 { gUnknown_020387D8 ^= 1; sub_80BAD5C(); return; } - if(gMain.newKeys & 0x4) // _080BAB14 + if(gMain.newKeys & SELECT_BUTTON) // _080BAB14 { gUnknown_020387D9 ^= 1; sub_80BAD5C(); SetPokemonCryStereo(gUnknown_020387D9); return; } - if(gMain.newAndRepeatedKeys & 0x100) // _080BAB38 + if(gMain.newAndRepeatedKeys & R_BUTTON) // _080BAB38 { sub_80BACDC(10); sub_80BAD5C(); return; } - if(gMain.newAndRepeatedKeys & 0x200) // _080BAB46 + if(gMain.newAndRepeatedKeys & L_BUTTON) // _080BAB46 { sub_80BACDC(-10); sub_80BAD5C(); return; } - if(gMain.newAndRepeatedKeys & 0x20) // _080BAB56 + if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BAB56 { sub_80BACDC(-1); sub_80BAD5C(); return; } - if(gMain.newAndRepeatedKeys & 0x10) // _080BAB64 + if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BAB64 { sub_80BACDC(1); sub_80BAD5C(); return; } - if(gMain.newKeys & 0x1) // _080BAB78 + if(gMain.newKeys & A_BUTTON) // _080BAB78 { u8 divide, remaining; @@ -2025,7 +2025,7 @@ void sub_80BB038(u8 taskId) } } // _080BB0A2 - if(gMain.newKeys & 0x2) + if(gMain.newKeys & B_BUTTON) { REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); @@ -2034,7 +2034,7 @@ void sub_80BB038(u8 taskId) TASK.FUNC = sub_80BA258; return; } - if(gMain.newKeys & 0x1) // _080BB104 + if(gMain.newKeys & A_BUTTON) // _080BB104 { s8 panpot = gUnknown_083D03F8[gUnknown_020387B4[CRY_TEST_PANPOT]]; if(panpot != -128) @@ -2061,25 +2061,25 @@ void sub_80BB038(u8 taskId) gUnknown_020387B4[CRY_TEST_PROGRESS] = 0; return; } - if(gMain.newKeys & 0x200) // _080BB15E + if(gMain.newKeys & L_BUTTON) // _080BB15E { gUnknown_020387B4[CRY_TEST_PANPOT]++; if(gUnknown_020387B4[CRY_TEST_PANPOT] > 4) gUnknown_020387B4[CRY_TEST_PANPOT] = 0; } - if(gMain.newKeys & 0x100) // _080BB176 + if(gMain.newKeys & R_BUTTON) // _080BB176 { gUnknown_020387B4[CRY_TEST_PANPOT]--; if(gUnknown_020387B4[CRY_TEST_PANPOT] < 0) gUnknown_020387B4[CRY_TEST_PANPOT] = 4; } - if(gMain.newAndRepeatedKeys & 0x10) // _080BB192 + if(gMain.newAndRepeatedKeys & DPAD_RIGHT) // _080BB192 { gUnknown_020387B4[CRY_TEST_UNK0]++; if(gUnknown_020387B4[CRY_TEST_UNK0] > 0xF7) gUnknown_020387B4[CRY_TEST_UNK0] = 0; } - else if(gMain.newAndRepeatedKeys & 0x20) // _080BB1B0 + else if(gMain.newAndRepeatedKeys & DPAD_LEFT) // _080BB1B0 { gUnknown_020387B4[CRY_TEST_UNK0]--; if(gUnknown_020387B4[CRY_TEST_UNK0] < 0) @@ -2161,27 +2161,27 @@ void sub_80BB3B4(u8 taskId) { sub_8119F88(3); - if(gMain.newKeys & 0x1) + if(gMain.newKeys & A_BUTTON) { sub_811A050(gUnknown_03005D34); } - if(gMain.newKeys & 0x100) + if(gMain.newKeys & R_BUTTON) { StopCryAndClearCrySongs(); } - if(gMain.newAndRepeatedKeys & 0x40) + if(gMain.newAndRepeatedKeys & DPAD_UP) { if(--gUnknown_03005D34 == 0) gUnknown_03005D34 = 384; // total species sub_80BB494(); } - if(gMain.newAndRepeatedKeys & 0x80) + if(gMain.newAndRepeatedKeys & DPAD_DOWN) { if(++gUnknown_03005D34 > 384) gUnknown_03005D34 = 1; sub_80BB494(); } - if(gMain.newKeys & 0x2) + if(gMain.newKeys & B_BUTTON) { REG_DISPCNT = 0x7140; REG_WIN0H = WIN_RANGE(17, 223); -- cgit v1.2.3 From 6493e7bbc7673f906ee7c009e80bed3d7b552620 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 1 Jul 2017 21:06:34 -0400 Subject: sizeof --- src/sound_check_menu.c | 116 ++++++++++++++++++++++++------------------------- 1 file changed, 58 insertions(+), 58 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 732452d6f..078b1d072 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -969,19 +969,19 @@ void CB2_StartSoundCheckMenu(void) // Task_InitSoundCheckMenu void sub_80BA258(u8 taskId) { - u8 soundcheckStr[sizeof gDebugText_SoundCheckJap]; - u8 bgmStr[sizeof gDebugText_BGM]; - u8 seStr[sizeof gDebugText_SE]; - u8 abDescStr[sizeof gDebugText_ABDesc]; - u8 upDownStr[sizeof gDebugText_UpDown]; - u8 driverStr[sizeof gDebugText_DriverTest]; - - memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof gDebugText_SoundCheckJap); - memcpy(bgmStr, gDebugText_BGM, sizeof gDebugText_BGM); - memcpy(seStr, gDebugText_SE, sizeof gDebugText_SE); - memcpy(abDescStr, gDebugText_ABDesc, sizeof gDebugText_ABDesc); - memcpy(upDownStr, gDebugText_UpDown, sizeof gDebugText_UpDown); - memcpy(driverStr, gDebugText_DriverTest, sizeof gDebugText_DriverTest); + u8 soundcheckStr[sizeof(gDebugText_SoundCheckJap)]; + u8 bgmStr[sizeof(gDebugText_BGM)]; + u8 seStr[sizeof(gDebugText_SE)]; + u8 abDescStr[sizeof(gDebugText_ABDesc)]; + u8 upDownStr[sizeof(gDebugText_UpDown)]; + u8 driverStr[sizeof(gDebugText_DriverTest)]; + + memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof(gDebugText_SoundCheckJap)); + memcpy(bgmStr, gDebugText_BGM, sizeof(gDebugText_BGM)); + memcpy(seStr, gDebugText_SE, sizeof(gDebugText_SE)); + memcpy(abDescStr, gDebugText_ABDesc, sizeof(gDebugText_ABDesc)); + memcpy(upDownStr, gDebugText_UpDown, sizeof(gDebugText_UpDown)); + memcpy(driverStr, gDebugText_DriverTest, sizeof(gDebugText_DriverTest)); if(!gPaletteFade.active) { @@ -1555,35 +1555,35 @@ void sub_80BA79C(const u8 *const string, u16 x, u16 y) void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu { - u8 bbackStr[sizeof gDebugText_BBack]; - u8 aplayStr[sizeof gDebugText_APlay]; - u8 voiceStr[sizeof gDebugText_Voice]; - u8 volumeStr[sizeof gDebugText_Volume]; - u8 panpotStr[sizeof gDebugText_Panpot]; - u8 pitchStr[sizeof gDebugText_Pitch]; - u8 lengthStr[sizeof gDebugText_Length]; - u8 releaseStr[sizeof gDebugText_Release]; - u8 progressStr[sizeof gDebugText_Progress]; - u8 chorusStr[sizeof gDebugText_Chorus]; - u8 priorityStr[sizeof gDebugText_Priority]; - u8 playingStr[sizeof gDebugText_Playing]; - u8 reverseStr[sizeof gDebugText_Reverse]; - u8 stereoStr[sizeof gDebugText_Stereo]; - - memcpy(bbackStr, gDebugText_BBack, sizeof gDebugText_BBack); - memcpy(aplayStr, gDebugText_APlay, sizeof gDebugText_APlay); - memcpy(voiceStr, gDebugText_Voice, sizeof gDebugText_Voice); - memcpy(volumeStr, gDebugText_Volume, sizeof gDebugText_Volume); - memcpy(panpotStr, gDebugText_Panpot, sizeof gDebugText_Panpot); - memcpy(pitchStr, gDebugText_Pitch, sizeof gDebugText_Pitch); - memcpy(lengthStr, gDebugText_Length, sizeof gDebugText_Length); - memcpy(releaseStr, gDebugText_Release, sizeof gDebugText_Release); - memcpy(progressStr, gDebugText_Progress, sizeof gDebugText_Progress); - memcpy(chorusStr, gDebugText_Chorus, sizeof gDebugText_Chorus); - memcpy(priorityStr, gDebugText_Priority, sizeof gDebugText_Priority); - memcpy(playingStr, gDebugText_Playing, sizeof gDebugText_Playing); - memcpy(reverseStr, gDebugText_Reverse, sizeof gDebugText_Reverse); - memcpy(stereoStr, gDebugText_Stereo, sizeof gDebugText_Stereo); + u8 bbackStr[sizeof(gDebugText_BBack)]; + u8 aplayStr[sizeof(gDebugText_APlay)]; + u8 voiceStr[sizeof(gDebugText_Voice)]; + u8 volumeStr[sizeof(gDebugText_Volume)]; + u8 panpotStr[sizeof(gDebugText_Panpot)]; + u8 pitchStr[sizeof(gDebugText_Pitch)]; + u8 lengthStr[sizeof(gDebugText_Length)]; + u8 releaseStr[sizeof(gDebugText_Release)]; + u8 progressStr[sizeof(gDebugText_Progress)]; + u8 chorusStr[sizeof(gDebugText_Chorus)]; + u8 priorityStr[sizeof(gDebugText_Priority)]; + u8 playingStr[sizeof(gDebugText_Playing)]; + u8 reverseStr[sizeof(gDebugText_Reverse)]; + u8 stereoStr[sizeof(gDebugText_Stereo)]; + + memcpy(bbackStr, gDebugText_BBack, sizeof(gDebugText_BBack)); + memcpy(aplayStr, gDebugText_APlay, sizeof(gDebugText_APlay)); + memcpy(voiceStr, gDebugText_Voice, sizeof(gDebugText_Voice)); + memcpy(volumeStr, gDebugText_Volume, sizeof(gDebugText_Volume)); + memcpy(panpotStr, gDebugText_Panpot, sizeof(gDebugText_Panpot)); + memcpy(pitchStr, gDebugText_Pitch, sizeof(gDebugText_Pitch)); + memcpy(lengthStr, gDebugText_Length, sizeof(gDebugText_Length)); + memcpy(releaseStr, gDebugText_Release, sizeof(gDebugText_Release)); + memcpy(progressStr, gDebugText_Progress, sizeof(gDebugText_Progress)); + memcpy(chorusStr, gDebugText_Chorus, sizeof(gDebugText_Chorus)); + memcpy(priorityStr, gDebugText_Priority, sizeof(gDebugText_Priority)); + memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing)); + memcpy(reverseStr, gDebugText_Reverse, sizeof(gDebugText_Reverse)); + memcpy(stereoStr, gDebugText_Stereo, sizeof(gDebugText_Stereo)); REG_DISPCNT = 0x3140; MenuDrawTextWindow(0, 0, 0x1D, 0x13); @@ -1750,7 +1750,7 @@ void sub_80BACDC(s8 var) { int minMaxArray[ARRAY_COUNT(gUnknown_083D039C)]; - memcpy(minMaxArray, gUnknown_083D039C, sizeof gUnknown_083D039C); + memcpy(minMaxArray, gUnknown_083D039C, sizeof(gUnknown_083D039C)); gUnknown_020387B4[gUnknown_020387B3] += var; if(gUnknown_020387B4[gUnknown_020387B3] > minMaxArray[MULTI_DIM_ARR(gUnknown_020387B3, B_16, MAX)]) @@ -1778,11 +1778,11 @@ void sub_80BAD5C(void) void sub_80BAE10(u8 var1, u8 var2) { - u8 str1[sizeof gUnknown_083D03DC]; - u8 str2[sizeof gUnknown_083D03DE]; + u8 str1[sizeof(gUnknown_083D03DC)]; + u8 str2[sizeof(gUnknown_083D03DE)]; - memcpy(str1, gUnknown_083D03DC, sizeof gUnknown_083D03DC); - memcpy(str2, gUnknown_083D03DE, sizeof gUnknown_083D03DE); + memcpy(str1, gUnknown_083D03DC, sizeof(gUnknown_083D03DC)); + memcpy(str2, gUnknown_083D03DE, sizeof(gUnknown_083D03DE)); MenuPrint(str2, gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var1, B_16, 1)]); MenuPrint(str1, gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 0)], gUnknown_083D0300[MULTI_DIM_ARR(var2, B_16, 1)]); @@ -1795,7 +1795,7 @@ void sub_80BAE10(u8 var1, u8 var2) u8 i; u8 someVar, someVar2; - memcpy(powers, gUnknown_083D03E0, sizeof powers); + memcpy(powers, gUnknown_083D03E0, sizeof(powers); for(i = 0; i < var4; i++) str[i] = 0; @@ -1971,13 +1971,13 @@ _080BAF80: .4byte gUnknown_083D03E0\n\ void sub_80BAF84(u8 taskId) { - u8 seStr[sizeof gOtherText_SE]; - u8 panStr[sizeof gOtherText_Pan]; - u8 playingStr[sizeof gDebugText_Playing]; + u8 seStr[sizeof(gOtherText_SE)]; + u8 panStr[sizeof(gOtherText_Pan)]; + u8 playingStr[sizeof(gDebugText_Playing)]; - memcpy(seStr, gOtherText_SE, sizeof gOtherText_SE); - memcpy(panStr, gOtherText_Pan, sizeof gOtherText_Pan); - memcpy(playingStr, gDebugText_Playing, sizeof gDebugText_Playing); + memcpy(seStr, gOtherText_SE, sizeof(gOtherText_SE)); + memcpy(panStr, gOtherText_Pan, sizeof(gOtherText_Pan)); + memcpy(playingStr, gDebugText_Playing, sizeof(gDebugText_Playing)); REG_DISPCNT = 0x3140; MenuDrawTextWindow(0, 0, 0x1D, 0x13); @@ -2089,11 +2089,11 @@ void sub_80BB038(u8 taskId) void sub_80BB1D4(void) { - u8 lrStr[5]; - u8 rlStr[5]; + u8 lrStr[sizeof(gOtherText_LR)]; + u8 rlStr[sizeof(gOtherText_RL)]; - memcpy(lrStr, gOtherText_LR, sizeof lrStr); - memcpy(rlStr, gOtherText_RL, sizeof rlStr); + memcpy(lrStr, gOtherText_LR, sizeof(lrStr)); + memcpy(rlStr, gOtherText_RL, sizeof(rlStr)); sub_80BAE78(gUnknown_020387B4[CRY_TEST_UNK0], 7, 2, 3); -- cgit v1.2.3 From 87dc53438e56c09f72e0d30eab5a565137d16b63 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 1 Jul 2017 21:15:03 -0400 Subject: text defines --- src/sound_check_menu.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index 078b1d072..b23a2098d 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -1518,22 +1518,22 @@ void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? for(i = 0; i < 3; i++) str[i] = 0; // initialize array - str[3] = 0xB0; - str[4] = 0xFF; + str[3] = CHAR_3PERIODS; + str[4] = EOS; someBool = FALSE; divisorValue = soundIndex / 100; if(divisorValue) { - str[0] = divisorValue + 0xA1; + str[0] = divisorValue + CHAR_0; someBool = TRUE; } divisorValue = (soundIndex % 100) / 10; if(divisorValue || someBool != FALSE) - str[1] = divisorValue + 0xA1; + str[1] = divisorValue + CHAR_0; - str[2] = ((soundIndex % 100) % 10) + 0xA1; + str[2] = ((soundIndex % 100) % 10) + CHAR_0; MenuPrint(str, x, y); } @@ -1545,9 +1545,9 @@ void sub_80BA79C(const u8 *const string, u16 x, u16 y) for(i = 0; i < 11; i++) str[i] = 0; // format string. - str[10] = 0xFF; // the above for loop formats the last element of the array unnecessarily. + str[10] = EOS; // the above for loop formats the last element of the array unnecessarily. - for(i = 0; string[i] != 0xFF && i < 10; i++) + for(i = 0; string[i] != EOS && i < 10; i++) str[i] = string[i]; MenuPrint(str, x, y); @@ -1800,7 +1800,7 @@ void sub_80BAE10(u8 var1, u8 var2) for(i = 0; i < var4; i++) str[i] = 0; - str[var4 + 1] = 0xFF; + str[var4 + 1] = CHAR_0; someVar = 0; if(var1 < 0) // make absolute value? wtf -- cgit v1.2.3 From 5e1d6e8aab08c7d96ccffa03c00311717bbf3f7f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 1 Jul 2017 21:34:13 -0400 Subject: i dont want to give this commit a name --- src/sound_check_menu.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index b23a2098d..a8126b407 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -71,6 +71,26 @@ extern u8 gUnknown_03005E98; extern struct MusicPlayerInfo *gUnknown_03005D30; extern struct MusicPlayerInfo gMPlay_BGM; +void sub_80BA258(u8); +void sub_80BA384(u8); +void sub_80BA65C(u8); +void sub_80BA68C(u8); +void sub_80BA6B8(u8); +void sub_80BA700(u16, u16, u16); +void sub_80BA79C(const u8 *const, u16, u16); +void sub_80BA800(u8); +void sub_80BAA48(u8); +void sub_80BACDC(s8); +void sub_80BAD5C(void); +void sub_80BAE10(u8, u8); +void sub_80BAE78(int, u16, u16, u8); +void sub_80BAF84(u8); +void sub_80BB038(u8); +void sub_80BB1D4(void); +void sub_80BB25C(u8); +void sub_80BB3B4(u8); +void sub_80BB494(void); + static const u8 gDebugText_SoundCheckJap[] = _("サウンドチェック"); static const u8 gDebugText_BGM[] = _("BGM"); static const u8 gDebugText_SE[] = _("SE "); @@ -874,26 +894,6 @@ static const u8 *const gSENames[] = SEName_W063B }; -void sub_80BA258(u8); -void sub_80BA384(u8); -void sub_80BA65C(u8); -void sub_80BA68C(u8); -void sub_80BA6B8(u8); -void sub_80BA700(u16, u16, u16); -void sub_80BA79C(const u8 *const, u16, u16); -void sub_80BA800(u8); -void sub_80BAA48(u8); -void sub_80BACDC(s8); -void sub_80BAD5C(void); -void sub_80BAE10(u8, u8); -void sub_80BAE78(int, u16, u16, u8); -void sub_80BAF84(u8); -void sub_80BB038(u8); -void sub_80BB1D4(void); -void sub_80BB25C(u8); -void sub_80BB3B4(u8); -void sub_80BB494(void); - void sub_80BA0A8(void) { RunTasks(); -- cgit v1.2.3 From 3f3316e08ff6e4f901c2b03c62ff0074a4e1b90f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 1 Jul 2017 22:03:20 -0400 Subject: i don't want to give this commit a name either --- src/sound_check_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/sound_check_menu.c b/src/sound_check_menu.c index a8126b407..13a6f6f3e 100755 --- a/src/sound_check_menu.c +++ b/src/sound_check_menu.c @@ -1518,7 +1518,7 @@ void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ? for(i = 0; i < 3; i++) str[i] = 0; // initialize array - str[3] = CHAR_3PERIODS; + str[3] = CHAR_ELLIPSIS; str[4] = EOS; someBool = FALSE; -- cgit v1.2.3 From 42562fd8dfe66b2469a4f2a71ac204b2a74ac84a Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 6 Jul 2017 18:10:03 -0500 Subject: decompile sub_80A3118 - sub_80A317C --- src/item.c | 8 --- src/item_menu.c | 208 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 208 insertions(+), 8 deletions(-) create mode 100644 src/item_menu.c (limited to 'src') diff --git a/src/item.c b/src/item.c index 2eb013490..a5ed99a82 100644 --- a/src/item.c +++ b/src/item.c @@ -8,14 +8,6 @@ extern u8 gUnknown_02038560; extern struct Item gItems[]; -struct BagPocket -{ - struct ItemSlot *itemSlots; - u8 capacity; -}; - -extern struct BagPocket gBagPockets[5]; - enum { ITEMS_POCKET, diff --git a/src/item_menu.c b/src/item_menu.c new file mode 100644 index 000000000..0ce37f908 --- /dev/null +++ b/src/item_menu.c @@ -0,0 +1,208 @@ +#include "global.h" +#include "item.h" +#include "main.h" +#include "menu.h" +#include "menu_helpers.h" +#include "palette.h" +#include "rom4.h" +#include "sprite.h" +#include "task.h" +#include "text.h" +#include "unknown_task.h" + +extern u8 ewram[]; + +struct UnknownStruct1 +{ + u8 unk0; + u8 unk1; +}; + +extern s8 gUnknown_02038559; +extern u8 gUnknown_0203855A; +extern u8 gUnknown_0203855B; +extern u8 gUnknown_0203855C; +extern u8 gUnknown_03000701; +extern struct UnknownStruct1 gUnknown_03005D10[]; +extern struct ItemSlot *gUnknown_03005D24; + +extern void gpu_pal_allocator_reset__manage_upper_four(void); +extern void sub_80F9020(void); +extern void sub_80F9988(); + +void sub_80A34E8(void); +u8 sub_80A3520(void); +void sub_80A362C(void); +void sub_80A3740(void); +void sub_80A39B8(u16 *, u8); +void sub_80A3AC0(u16 *, u8); +void sub_80A3C34(); +void sub_80A3D08(void); +void sub_80A3D40(void); +void sub_80A48E8(); +void ItemListMenu_InitDescription(); +void ItemListMenu_InitMenu(void); +void sub_80A740C(void); +void sub_80A751C(void); +void sub_80A7630(void); +void sub_80A770C(void); +void sub_80A7828(void); +void sub_80A78B8(void); +void CreateBagSprite(void); +void CreateBagPokeballSprite(); + +void sub_80A3118(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTasks(); + sub_80A740C(); + UpdatePaletteFade(); +} + +void sub_80A3134(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + + { + const void *src = gBGTilemapBuffers[1]; + void *dst = (void *)(VRAM + 0x2000); + + DmaCopy16(3, src, dst, 0x800); + } + + { + const void *src = gBGTilemapBuffers[2]; + void *dst = (void *)(VRAM + 0x6000); + + DmaCopy16(3, src, dst, 0x800); + } +} + +bool8 sub_80A317C(void) +{ + u32 val; + u16 savedIme; + + switch (gMain.state) + { + case 0: + sub_80F9438(); + sub_80A34E8(); + gMain.state++; + break; + case 1: + remove_some_task(); + gMain.state++; + break; + case 2: + gpu_pal_allocator_reset__manage_upper_four(); + gMain.state++; + break; + case 3: + sub_80F9020(); + ewram[0x1FFFF] = 0; + gMain.state++; + break; + case 4: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + gMain.state++; + break; + case 5: + ResetSpriteData(); + gMain.state++; + break; + case 6: + if (sub_80A3520() == 0) + break; + gMain.state++; + break; + case 7: + SetUpWindowConfig(&gWindowConfig_81E6DFC); + gMain.state++; + break; + case 8: + MultistepInitMenuWindowBegin(&gWindowConfig_81E6DFC); + gMain.state++; + break; + case 9: + if (!MultistepInitMenuWindowContinue()) + break; + gMain.state++; + break; + case 10: + sub_80F944C(); + LoadScrollIndicatorPalette(); + CreateVerticalScrollIndicators(0, 172, 12); + CreateVerticalScrollIndicators(1, 172, 148); + CreateVerticalScrollIndicators(2, 28, 88); + CreateVerticalScrollIndicators(3, 100, 88); + sub_80F9988(0, 2); + sub_80F9988(1, 2); + sub_80F9988(2, 2); + sub_80F9988(3, 2); + if (gUnknown_03000701 == 4 || gUnknown_03000701 == 5) + { + sub_80F979C(2, 1); + sub_80F979C(3, 1); + } + gMain.state++; + break; + case 11: + gUnknown_0203855A = 16; + sub_80A39B8(gBGTilemapBuffers[2], gUnknown_02038559 + 1); + sub_80A3AC0(gBGTilemapBuffers[2], gUnknown_02038559); + sub_80A3D08(); + // What is this? + sub_80A3C34(gBagPockets[2].itemSlots, *(u32 *)&gBagPockets[2].capacity); + sub_80A3C34(gBagPockets[3].itemSlots, *(u32 *)&gBagPockets[3].capacity); + sub_80A3D40(); + gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots; + sub_80A362C(); + gMain.state++; + break; + case 12: + sub_80A48E8(0xFFFF, 0, 7); + val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + ItemListMenu_InitDescription((s16)gUnknown_03005D24[val].itemId); + ItemListMenu_InitMenu(); + gUnknown_0203855B = gUnknown_02038559 + 1; + gUnknown_0203855C = 0; + gMain.state++; + break; + case 13: + CreateBagSprite(); + CreateBagPokeballSprite(0); + sub_80A3740(); + gMain.state++; + break; + case 14: + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= 8; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + gPaletteFade.bufferTransferDisabled = FALSE; + gMain.state++; + break; + case 15: + if (sub_8055870() == TRUE) + break; + gMain.state++; + break; + case 16: + SetVBlankCallback(sub_80A3134); + SetMainCallback2(sub_80A3118); + sub_80A751C(); + sub_80A7630(); + sub_80A770C(); + sub_80A7828(); + sub_80A78B8(); + return TRUE; + } + return FALSE; +} -- cgit v1.2.3 From ad7a7222a538380b446f9aecde44c5222ff3b68a Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Thu, 6 Jul 2017 19:25:06 -0500 Subject: decompile sub_80A34B4 - ClearBag --- src/item_menu.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 133 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 0ce37f908..bbb91296f 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,4 +1,6 @@ #include "global.h" +#include "decompress.h" +#include "graphics.h" #include "item.h" #include "main.h" #include "menu.h" @@ -16,12 +18,15 @@ struct UnknownStruct1 { u8 unk0; u8 unk1; + u8 unk2; + u8 unk3; }; extern s8 gUnknown_02038559; extern u8 gUnknown_0203855A; extern u8 gUnknown_0203855B; extern u8 gUnknown_0203855C; +extern u8 gUnknown_03000700; extern u8 gUnknown_03000701; extern struct UnknownStruct1 gUnknown_03005D10[]; extern struct ItemSlot *gUnknown_03005D24; @@ -30,8 +35,12 @@ extern void gpu_pal_allocator_reset__manage_upper_four(void); extern void sub_80F9020(void); extern void sub_80F9988(); +extern const struct CompressedSpriteSheet gUnknown_083C1CC8; +extern const struct CompressedSpriteSheet gUnknown_083C1CD0; +extern const struct CompressedSpritePalette gUnknown_083C1CD8; + void sub_80A34E8(void); -u8 sub_80A3520(void); +bool8 sub_80A3520(void); void sub_80A362C(void); void sub_80A3740(void); void sub_80A39B8(u16 *, u8); @@ -116,7 +125,7 @@ bool8 sub_80A317C(void) gMain.state++; break; case 6: - if (sub_80A3520() == 0) + if (sub_80A3520() == FALSE) break; gMain.state++; break; @@ -206,3 +215,125 @@ bool8 sub_80A317C(void) } return FALSE; } + +bool8 sub_80A34B4(void) +{ + do + { + if (sub_80A317C() == TRUE) + { + gUnknown_03000700 = 0; + ResetTasks(); + return TRUE; + } + } while (sub_80F9344() != 1); + return FALSE; +} + +void sub_80A34E8(void) +{ + sub_80F9368(); + REG_BG2CNT = 0x0C06; + REG_BG1CNT = 0x0405; + REG_DISPCNT = 0x1740; + REG_BLDCNT = 0; +} + +bool8 sub_80A3520(void) +{ + switch (ewram[0x1FFFF]) + { + case 0: + LZDecompressVram(gBagScreen_Gfx, (void *)(VRAM + 0x4000)); + ewram[0x1FFFF]++; + break; + case 1: + CpuCopy16(gUnknown_08E77004, gBGTilemapBuffers[2], 0x800); + ewram[0x1FFFF]++; + break; + case 2: + if (gSaveBlock2.playerGender == MALE || gUnknown_03000701 == 7) + LoadCompressedPalette(gBagScreenMale_Pal, 0, 64); + else + LoadCompressedPalette(gBagScreenFemale_Pal, 0, 64); + ewram[0x1FFFF]++; + break; + case 3: + if (gSaveBlock2.playerGender == MALE || gUnknown_03000701 == 7) + LoadCompressedObjectPic(&gUnknown_083C1CC8); + else + LoadCompressedObjectPic(&gUnknown_083C1CD0); + ewram[0x1FFFF]++; + break; + case 4: + LoadCompressedObjectPalette(&gUnknown_083C1CD8); + ewram[0x1FFFF] = 0; + return TRUE; + } + return FALSE; +} + +void sub_80A362C(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + u8 r3; + + if (gUnknown_03000701 == 5) + r3 = gUnknown_03005D10[i].unk2 - 1; + else + r3 = gUnknown_03005D10[i].unk2; + + if (gUnknown_03005D10[i].unk1 != 0) + { + if (gUnknown_03005D10[i].unk1 + gUnknown_03005D10[i].unk3 > r3) + gUnknown_03005D10[i].unk1 = r3 - gUnknown_03005D10[i].unk3; + } + else + { + if (gUnknown_03005D10[i].unk0 > r3) + gUnknown_03005D10[i].unk0 = r3; + } + } +} + +void sub_80A3684(void) +{ + u16 i; + + for (i = 0; i < 5; i++) + { + gUnknown_03005D10[i].unk0 = 0; + gUnknown_03005D10[i].unk1 = 0; + gUnknown_03005D10[i].unk2 = 0; + gUnknown_03005D10[i].unk3 = 0; + } + gUnknown_02038559 = 0; +} + +void sub_80A36B8(u16 *a, u8 b, u8 c, u8 d, u8 e) +{ + u16 i; + u16 j; + + for (i = c; i <= c + e; i++) + { + for (j = b; j <= b + d; j++) + { + u32 index = j + i * 32; + + a[index] = 0; + } + } +} + +void ClearBag(void) +{ + u16 i; + + for (i = 0; i < 5; i++) + ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity); + sub_80A3684(); +} -- cgit v1.2.3 From 343bf63601f35c7e0ebcf1bbcbc4ae80ccf366d4 Mon Sep 17 00:00:00 2001 From: yenatch Date: Thu, 6 Jul 2017 22:10:33 -0400 Subject: Fix fldeff_softboiled warnings --- src/fldeff_softboiled.c | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index 45f319c62..cb26d9966 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -10,22 +10,7 @@ #include "strings.h" #include "task.h" -struct UnknownStruct1 { - u8 filler0[0x259]; - u8 unk259; - u8 filler25A[6]; - u8 unk260; - u8 unk261; - u8 unk262; - s16 unk264; - s16 unk266; - u8 filler268[10]; - u16 unk272; - u8 filler274[14]; - u16 unk282; -}; - -struct UnknownStruct2 { +struct Struct2001000 { u8 unk0; u8 unk1; u8 unk2; @@ -33,7 +18,7 @@ struct UnknownStruct2 { void *unkC; }; -struct UnknownStruct3 { +struct Struct201C000 { struct Pokemon *unk0; u8 filler4[1]; u8 unk5; @@ -53,9 +38,9 @@ struct UnknownStruct3 { #define WINDOW_RIGHT 29 #endif -#define EWRAM_1000 (*(struct UnknownStruct2 *)(unk_2000000 + 0x1000)) -#define EWRAM_1B000 (*(struct UnknownStruct1 *)(unk_2000000 + 0x1B000)) -#define EWRAM_1C000 (*(struct UnknownStruct3 *)(unk_2000000 + 0x1C000)) +#define EWRAM_1000 (*(struct Struct2001000 *)(unk_2000000 + 0x1000)) +#define EWRAM_1B000_2 (*(struct Struct201B000 *)(unk_2000000 + 0x1B000)) +#define EWRAM_1C000 (*(struct Struct201C000 *)(unk_2000000 + 0x1C000)) // extern extern u8 gUnknown_0202E8F6; @@ -89,7 +74,7 @@ bool8 SetUpFieldMove_SoftBoiled(void) { void sub_8133D28(u8 taskid) { EWRAM_1000.unkC = sub_8133D50; - EWRAM_1B000.unk272 = 3; + EWRAM_1B000_2.unk272 = 3; sub_808A004(taskid); } @@ -137,7 +122,7 @@ static void sub_8133D50(u8 taskId) { sub_806D5A4(); gTasks[taskId].func = sub_806FA18; - EWRAM_1B000.unk282 = gTasks[taskId].data[11]; + EWRAM_1B000_2.unk282 = gTasks[taskId].data[11]; } static void sub_8133E74(u8 taskId) { @@ -160,7 +145,7 @@ static void sub_8133EB8(u8 taskId) { static void sub_8133EF8(void) { sub_806CCE4(); - EWRAM_1B000.unk261 = 2; + EWRAM_1B000_2.unk261 = 2; DestroySprite(&gSprites[EWRAM_1000.unk1]); MenuZeroFillWindowRect(WINDOW_LEFT, 14, WINDOW_RIGHT, 19); sub_806D538(0, 0); -- cgit v1.2.3 From a661bbf4ea77e98df4f45353082d9681058e387f Mon Sep 17 00:00:00 2001 From: yenatch Date: Thu, 6 Jul 2017 22:11:33 -0400 Subject: Fix battle_anim_80A7E7C warnings Use TASK from task.h --- src/battle_anim_80A7E7C.c | 117 +++++++++++++++++++++++----------------------- 1 file changed, 58 insertions(+), 59 deletions(-) (limited to 'src') diff --git a/src/battle_anim_80A7E7C.c b/src/battle_anim_80A7E7C.c index 34c11a352..31984977f 100644 --- a/src/battle_anim_80A7E7C.c +++ b/src/battle_anim_80A7E7C.c @@ -5,7 +5,6 @@ #include "task.h" #include "trig.h" -#define TASK gTasks[task] #define SPRITE gSprites[TASK.data[0]] extern s16 gBattleAnimArgs[8]; @@ -16,29 +15,29 @@ extern u16 gMovePowerMoveAnim; extern u8 gBattleAnimPlayerMonIndex; extern u8 gBattleAnimEnemyMonIndex; -static void sub_80A7EF0(u8 task); -static void sub_80A808C(u8 task); -static void sub_80A81D8(u8 task); -static void sub_80A8374(u8 task); -static void sub_80A8488(u8 task); +static void sub_80A7EF0(u8 taskId); +static void sub_80A808C(u8 taskId); +static void sub_80A81D8(u8 taskId); +static void sub_80A8374(u8 taskId); +static void sub_80A8488(u8 taskId); static void sub_80A85A4(struct Sprite *sprite); void sub_80A8614(struct Sprite* sprite); static void sub_80A86F4(struct Sprite *sprite); static void sub_80A88F0(struct Sprite *sprite); -static void sub_80A89B4(u8 task); -static void sub_80A8A18(u8 task); -static void sub_80A8C0C(u8 task); -static void sub_80A8D8C(u8 task); -void sub_80A8FD8(u8 task); +static void sub_80A89B4(u8 taskId); +static void sub_80A8A18(u8 taskId); +static void sub_80A8C0C(u8 taskId); +static void sub_80A8D8C(u8 taskId); +void sub_80A8FD8(u8 taskId); static void sub_80A913C(u8 taskId); -void sub_80A7E7C(u8 task) +void sub_80A7E7C(u8 taskId) { u8 sprite; sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); if (sprite == 0xff) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } gSprites[sprite].pos2.x = gBattleAnimArgs[1]; @@ -50,10 +49,10 @@ void sub_80A7E7C(u8 task) TASK.data[4] = gBattleAnimArgs[1]; TASK.data[5] = gBattleAnimArgs[2]; TASK.func = sub_80A7EF0; - sub_80A7EF0(task); + sub_80A7EF0(taskId); } -static void sub_80A7EF0(u8 task) +static void sub_80A7EF0(u8 taskId) { if (TASK.data[3] == 0) { @@ -78,7 +77,7 @@ static void sub_80A7EF0(u8 task) { SPRITE.pos2.x = 0; SPRITE.pos2.y = 0; - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } @@ -89,7 +88,7 @@ static void sub_80A7EF0(u8 task) } -void sub_80A7FA0(u8 task) +void sub_80A7FA0(u8 taskId) { u8 sprite; bool8 r6; @@ -100,7 +99,7 @@ void sub_80A7FA0(u8 task) sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); if (sprite == 0xff) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } @@ -134,7 +133,7 @@ void sub_80A7FA0(u8 task) } if (r6) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } gSprites[sprite].pos2.x = gBattleAnimArgs[1]; @@ -146,10 +145,10 @@ void sub_80A7FA0(u8 task) TASK.data[4] = gBattleAnimArgs[1]; TASK.data[5] = gBattleAnimArgs[2]; TASK.func = sub_80A808C; - sub_80A808C(task); + sub_80A808C(taskId); } -static void sub_80A808C(u8 task) +static void sub_80A808C(u8 taskId) { if (TASK.data[3] == 0) { @@ -174,7 +173,7 @@ static void sub_80A808C(u8 task) { SPRITE.pos2.x = 0; SPRITE.pos2.y = 0; - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } @@ -184,13 +183,13 @@ static void sub_80A808C(u8 task) } } -void sub_80A8154(u8 task) +void sub_80A8154(u8 taskId) { u8 sprite; sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); if (sprite == 0xff) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } gSprites[sprite].pos2.x += gBattleAnimArgs[1]; @@ -203,10 +202,10 @@ void sub_80A8154(u8 task) TASK.data[5] = gBattleAnimArgs[1] * 2; TASK.data[6] = gBattleAnimArgs[2] * 2; TASK.func = sub_80A81D8; - sub_80A81D8(task); + sub_80A81D8(taskId); } -static void sub_80A81D8(u8 task) +static void sub_80A81D8(u8 taskId) { if (TASK.data[3] == 0) { @@ -233,7 +232,7 @@ static void sub_80A81D8(u8 task) SPRITE.pos2.x -= TASK.data[5] / 2; SPRITE.pos2.y -= TASK.data[6] / 2; } - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } @@ -243,7 +242,7 @@ static void sub_80A81D8(u8 task) } } -void sub_80A8314(u8 task) +void sub_80A8314(u8 taskId) { u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]); gSprites[sprite].pos2.x = gBattleAnimArgs[1]; @@ -253,10 +252,10 @@ void sub_80A8314(u8 task) TASK.data[3] = gBattleAnimArgs[3]; TASK.data[4] = gBattleAnimArgs[4]; TASK.func = sub_80A8374; - sub_80A8374(task); + sub_80A8374(taskId); } -static void sub_80A8374(u8 task) +static void sub_80A8374(u8 taskId) { s16 x; u8 sprite; @@ -276,12 +275,12 @@ static void sub_80A8374(u8 task) gSprites[sprite].pos2.y = TASK.data[9] >> 8; if (--TASK.data[4] == 0) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } -void sub_80A8408(u8 task) +void sub_80A8408(u8 taskId) { u8 i; u8 sprite; @@ -302,10 +301,10 @@ void sub_80A8408(u8 task) TASK.data[3] = gBattleAnimArgs[3]; TASK.data[4] = v1; TASK.func = sub_80A8488; - sub_80A8488(task); + sub_80A8488(taskId); } -static void sub_80A8488(u8 task) +static void sub_80A8488(u8 taskId) { u8 sprite; sprite = TASK.data[0]; @@ -322,18 +321,18 @@ static void sub_80A8488(u8 task) { gSprites[sprite].pos2.x = 0; gSprites[sprite].pos2.y = 0; - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } -void sub_80A8500(u8 task) +void sub_80A8500(u8 taskId) { if (GetBankSide(gBattleAnimPlayerMonIndex)) { gBattleAnimArgs[1] = -gBattleAnimArgs[1]; } - sub_80A8408(task); + sub_80A8408(taskId); } void sub_80A8530(struct Sprite *sprite) @@ -538,7 +537,7 @@ static void sub_80A88F0(struct Sprite *sprite) move_anim_8072740(sprite); } -void sub_80A8920(u8 task) +void sub_80A8920(u8 taskId) { s16 r7; r7 = 0x8000 / gBattleAnimArgs[3]; @@ -558,7 +557,7 @@ void sub_80A8920(u8 task) TASK.func = sub_80A89B4; } -static void sub_80A89B4(u8 task) +static void sub_80A89B4(u8 taskId) { u8 spriteId; spriteId = TASK.data[0]; @@ -572,7 +571,7 @@ static void sub_80A89B4(u8 task) } } -static void sub_80A8A18(u8 task) +static void sub_80A8A18(u8 taskId) { u8 spriteId; if (TASK.data[4] > 0) @@ -586,15 +585,15 @@ static void sub_80A8A18(u8 task) gSprites[spriteId].pos2.x = (TASK.data[12] >> 8) + (TASK.data[11] >> 8); if (--TASK.data[6] == 0) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } } -static void sub_80A8B3C(u8 task); +static void sub_80A8B3C(u8 taskId); -void sub_80A8A80(u8 task) +void sub_80A8A80(u8 taskId) { u8 spriteId; switch (gBattleAnimArgs[0]) @@ -606,7 +605,7 @@ void sub_80A8A80(u8 task) case 2: if (!b_side_obj__get_some_boolean(gBattleAnimPlayerMonIndex ^ 2)) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } spriteId = gObjectBankIDs[gBattleAnimPlayerMonIndex ^ 2]; @@ -614,13 +613,13 @@ void sub_80A8A80(u8 task) case 3: if (!b_side_obj__get_some_boolean(gBattleAnimEnemyMonIndex ^ 2)) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } spriteId = gObjectBankIDs[gBattleAnimEnemyMonIndex ^ 2]; break; default: - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } TASK.data[0] = spriteId; @@ -635,18 +634,18 @@ void sub_80A8A80(u8 task) TASK.func = sub_80A8B3C; } -static void sub_80A8B3C(u8 task) +static void sub_80A8B3C(u8 taskId) { u8 spriteId = TASK.data[0]; gSprites[spriteId].pos2.x += TASK.data[1]; if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x + 0x20 > 0x130u) { - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } -void sub_80A8B88(u8 task) +void sub_80A8B88(u8 taskId) { u8 spriteId; if (GetBankSide(gBattleAnimPlayerMonIndex)) @@ -671,7 +670,7 @@ void sub_80A8B88(u8 task) TASK.func = sub_80A8C0C; } -static void sub_80A8C0C(u8 task) +static void sub_80A8C0C(u8 taskId) { s16 y; u8 spriteId; @@ -706,13 +705,13 @@ static void sub_80A8C0C(u8 task) { gSprites[spriteId].pos2.x = 0; gSprites[spriteId].pos2.y = 0; - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } } -void sub_80A8D34(u8 task) +void sub_80A8D34(u8 taskId) { u8 spriteId; spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[3]); @@ -727,7 +726,7 @@ void sub_80A8D34(u8 task) TASK.func = sub_80A8D8C; } -static void sub_80A8D8C(u8 task) +static void sub_80A8D8C(u8 taskId) { u8 spriteId; TASK.data[10] += TASK.data[0]; @@ -746,13 +745,13 @@ static void sub_80A8D8C(u8 task) else { sub_8078F40(spriteId); - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; } } } -void sub_80A8E04(u8 task) +void sub_80A8E04(u8 taskId) { u8 spriteId; spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); @@ -796,7 +795,7 @@ void sub_80A8E04(u8 task) TASK.func = sub_80A8FD8; } -void sub_80A8EFC(u8 task) +void sub_80A8EFC(u8 taskId) { u8 spriteId; spriteId = obj_id_for_side_relative_to_move(gBattleAnimArgs[2]); @@ -834,7 +833,7 @@ void sub_80A8EFC(u8 task) TASK.func = sub_80A8FD8; } -void sub_80A8FD8(u8 task) +void sub_80A8FD8(u8 taskId) { TASK.data[3] += TASK.data[4]; obj_id_set_rotscale(TASK.data[5], 0x100, 0x100, TASK.data[3]); @@ -850,7 +849,7 @@ void sub_80A8FD8(u8 task) sub_8078F40(TASK.data[5]); case 0: default: - DestroyAnimVisualTask(task); + DestroyAnimVisualTask(taskId); return; case 2: TASK.data[1] = 0; @@ -861,7 +860,7 @@ void sub_80A8FD8(u8 task) } } -void sub_80A9058(u8 task) +void sub_80A9058(u8 taskId) { if (!gBattleAnimArgs[0]) { -- cgit v1.2.3 From 9a57e785576c658980e7cac5d3531181ccc64d42 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 8 Jul 2017 12:16:19 -0500 Subject: decompile sub_80A3740 - swap32 --- src/item.c | 153 ++++++++++++++++++++++++++++++++++++ src/item_menu.c | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 389 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/item.c b/src/item.c index a5ed99a82..33aa87768 100644 --- a/src/item.c +++ b/src/item.c @@ -129,6 +129,7 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count) return TRUE; } +#ifdef NONMATCHING bool8 AddBagItem(u16 itemId, u16 count) { u8 i; @@ -193,6 +194,158 @@ bool8 AddBagItem(u16 itemId, u16 count) memcpy(gBagPockets[pocket].itemSlots, newItems, gBagPockets[pocket].capacity * sizeof(struct ItemSlot)); return TRUE; } +#else +__attribute__((naked)) +bool8 AddBagItem(u16 itemId, u16 count) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6,r7}\n\ + sub sp, 0x100\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + lsls r1, 16\n\ + lsrs r4, r1, 16\n\ + bl ItemId_GetPocket\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080A9510\n\ + mov r0, r8\n\ + bl ItemId_GetPocket\n\ + subs r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r6, r0, 24\n\ + ldr r1, _080A94F8 @ =gBagPockets\n\ + lsls r0, r6, 3\n\ + adds r5, r0, r1\n\ + ldr r1, [r5]\n\ + ldrb r2, [r5, 0x4]\n\ + lsls r2, 2\n\ + mov r0, sp\n\ + bl memcpy\n\ + ldr r7, _080A94FC @ =0x000003e7\n\ + cmp r6, 0x3\n\ + beq _080A9468\n\ + movs r7, 0x63\n\ +_080A9468:\n\ + movs r1, 0\n\ + ldrb r0, [r5, 0x4]\n\ + cmp r1, r0\n\ + bcs _080A94B2\n\ + subs r0, r6, 0x2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r12, r0\n\ +_080A9478:\n\ + lsls r0, r1, 2\n\ + mov r2, sp\n\ + adds r3, r2, r0\n\ + ldrh r0, [r3]\n\ + cmp r0, r8\n\ + bne _080A94A6\n\ + ldrh r2, [r3, 0x2]\n\ + adds r0, r2, r4\n\ + cmp r0, r7\n\ + ble _080A9500\n\ + mov r0, r12\n\ + cmp r0, 0x1\n\ + bls _080A9510\n\ + subs r0, r7, r2\n\ + subs r0, r4, r0\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + strh r7, [r3, 0x2]\n\ + ldr r2, _080A94F8 @ =gBagPockets\n\ + mov r9, r2\n\ + lsls r3, r6, 3\n\ + cmp r4, 0\n\ + beq _080A9516\n\ +_080A94A6:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + ldrb r0, [r5, 0x4]\n\ + cmp r1, r0\n\ + bcc _080A9478\n\ +_080A94B2:\n\ + ldr r2, _080A94F8 @ =gBagPockets\n\ + mov r9, r2\n\ + lsls r3, r6, 3\n\ + cmp r4, 0\n\ + beq _080A9516\n\ + movs r1, 0\n\ + adds r0, r3, r2\n\ + ldrb r0, [r0, 0x4]\n\ + cmp r1, r0\n\ + bcs _080A94F2\n\ + mov r6, r9\n\ + adds r5, r3, r6\n\ +_080A94CA:\n\ + lsls r0, r1, 2\n\ + mov r6, sp\n\ + adds r2, r6, r0\n\ + ldrh r0, [r2]\n\ + cmp r0, 0\n\ + bne _080A94E6\n\ + mov r0, r8\n\ + strh r0, [r2]\n\ + cmp r4, r7\n\ + bls _080A9514\n\ + subs r0, r4, r7\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + strh r7, [r2, 0x2]\n\ +_080A94E6:\n\ + adds r0, r1, 0x1\n\ + lsls r0, 24\n\ + lsrs r1, r0, 24\n\ + ldrb r2, [r5, 0x4]\n\ + cmp r1, r2\n\ + bcc _080A94CA\n\ +_080A94F2:\n\ + cmp r4, 0\n\ + beq _080A9516\n\ + b _080A9510\n\ + .align 2, 0\n\ +_080A94F8: .4byte gBagPockets\n\ +_080A94FC: .4byte 0x000003e7\n\ +_080A9500:\n\ + strh r0, [r3, 0x2]\n\ + ldr r0, _080A950C @ =gBagPockets\n\ + lsls r1, r6, 3\n\ + adds r1, r0\n\ + b _080A951A\n\ + .align 2, 0\n\ +_080A950C: .4byte gBagPockets\n\ +_080A9510:\n\ + movs r0, 0\n\ + b _080A9528\n\ +_080A9514:\n\ + strh r4, [r2, 0x2]\n\ +_080A9516:\n\ + mov r6, r9\n\ + adds r1, r3, r6\n\ +_080A951A:\n\ + ldr r0, [r1]\n\ + ldrb r2, [r1, 0x4]\n\ + lsls r2, 2\n\ + mov r1, sp\n\ + bl memcpy\n\ + movs r0, 0x1\n\ +_080A9528:\n\ + add sp, 0x100\n\ + pop {r3,r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided\n"); +} +#endif bool8 RemoveBagItem(u16 itemId, u16 count) { diff --git a/src/item_menu.c b/src/item_menu.c index bbb91296f..91853588b 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -8,6 +8,8 @@ #include "palette.h" #include "rom4.h" #include "sprite.h" +#include "strings.h" +#include "strings2.h" #include "task.h" #include "text.h" #include "unknown_task.h" @@ -22,38 +24,98 @@ struct UnknownStruct1 u8 unk3; }; +extern u8 gUnknown_02038558; extern s8 gUnknown_02038559; extern u8 gUnknown_0203855A; extern u8 gUnknown_0203855B; extern u8 gUnknown_0203855C; +extern u8 gUnknown_02038562; +extern u8 gUnknown_02038564; extern u8 gUnknown_03000700; extern u8 gUnknown_03000701; +extern const u8 *gUnknown_03000704; extern struct UnknownStruct1 gUnknown_03005D10[]; extern struct ItemSlot *gUnknown_03005D24; +extern bool8 gLinkOpen; extern void gpu_pal_allocator_reset__manage_upper_four(void); extern void sub_80F9020(void); extern void sub_80F9988(); +extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); extern const struct CompressedSpriteSheet gUnknown_083C1CC8; extern const struct CompressedSpriteSheet gUnknown_083C1CD0; extern const struct CompressedSpritePalette gUnknown_083C1CD8; +const struct BagPocket gBagPockets[NUM_BAG_POCKETS] = +{ + // pointer to items, capacity + {gSaveBlock1.bagPocket_Items, 20}, + {gSaveBlock1.bagPocket_PokeBalls, 16}, + {gSaveBlock1.bagPocket_TMHM, 64}, + {gSaveBlock1.bagPocket_Berries, 46}, + {gSaveBlock1.bagPocket_KeyItems, 20}, +}; + +void sub_80A5B78(u8); +void sub_80A5F14(u8); +void sub_80A5F80(u8); +void sub_80A5FAC(u8); +void ItemMenu_UseInBattle(u8); +void sub_80A7124(u8); +void ItemMenu_Give(u8); +void sub_80A6178(u8); +void sub_80A69E0(u8); + +const struct MenuAction2 gUnknown_083C1640[] = +{ + {OtherText_Use, sub_80A5B78}, + {OtherText_Toss, sub_80A5F14}, + {gOtherText_CancelNoTerminator, sub_80A5F80}, + {OtherText_Register, sub_80A5FAC}, + {OtherText_Use, ItemMenu_UseInBattle}, + {gOtherText_CancelNoTerminator, sub_80A7124}, + {OtherText_Give2, ItemMenu_Give}, + {OtherText_CheckTag, sub_80A6178}, + {gOtherText_CancelWithTerminator, NULL}, + {OtherText_Confirm, sub_80A69E0}, +}; + +extern const u8 gUnknown_083C1690[][6]; +/* +const u8 gUnknown_083C1690[][6] = +{ + {0, 1, 6, 2, 0, 0}, + {6, 1, 8, 2, 0, 0}, + {0, 8, 6, 2, 0, 0}, + {7, 0, 1, 8, 6, 2}, + {0, 8, 3, 2, 0, 0}, +}; +*/ + void sub_80A34E8(void); bool8 sub_80A3520(void); void sub_80A362C(void); void sub_80A3740(void); +void sub_80A396C(u16 *, u8, u8, u8); void sub_80A39B8(u16 *, u8); +void sub_80A39E4(u16 *, u8, u8, s8); void sub_80A3AC0(u16 *, u8); -void sub_80A3C34(); +void sub_80A3C34(struct ItemSlot *, u32); void sub_80A3D08(void); +void sub_80A3D24(u8); void sub_80A3D40(void); void sub_80A48E8(); void ItemListMenu_InitDescription(); +void ItemListMenu_ChangeDescription(); +void sub_80A4F68(u8); +void sub_80A50C8(u8); void ItemListMenu_InitMenu(void); void sub_80A740C(void); void sub_80A751C(void); +void sub_80A7590(void); void sub_80A7630(void); +void sub_80A76A0(void); void sub_80A770C(void); void sub_80A7828(void); void sub_80A78B8(void); @@ -337,3 +399,176 @@ void ClearBag(void) ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity); sub_80A3684(); } + +extern const u16 gUnknown_083C1704[]; + +void sub_80A3740(void) +{ + u16 arr[2]; + + // TODO: This is a local array + memcpy(arr, gUnknown_083C1704, 4); + LoadPalette(&arr[1], 0xD1, sizeof(arr[1])); + LoadPalette(&arr[0], 0xD8, sizeof(arr[0])); +} + +void sub_80A3770(void) +{ + if (gUnknown_03000701 == 0) + { + gUnknown_03000704 = gUnknown_083C1690[gUnknown_02038559]; + if (gUnknown_02038559 != 3) + gUnknown_02038564 = 4; + else + gUnknown_02038564 = 6; + } +} + +void sub_80A37C0(u8 taskId) +{ + gTasks[taskId].func = sub_80A50C8; + StartVerticalScrollIndicators(0); + StartVerticalScrollIndicators(1); + StartVerticalScrollIndicators(2); + StartVerticalScrollIndicators(3); +} + +void sub_80A37F8(u8 taskId) +{ + u8 r5 = gUnknown_0203855A; + + if (r5 < 16) + { + gUnknown_0203855A++; + sub_80A396C(gBGTilemapBuffers[2], r5, gUnknown_0203855A, 0x4F); + sub_80A39E4(gBGTilemapBuffers[2], gUnknown_02038559 + 1, gUnknown_0203855A / 2, gTasks[taskId].data[5]); + gUnknown_02038558 = 1; + sub_80A48E8(taskId, r5 / 2, gUnknown_0203855A / 2 - 1); + gUnknown_02038558 = 0; + return; + } + + if (gLinkOpen == TRUE) + { + u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + + ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562); + gUnknown_02038562++; + } + else + { + while (gUnknown_02038562 < 3) + { + u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + + ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562); + gUnknown_02038562++; + } + } + if (gUnknown_02038562 == 3) + { + gUnknown_0203855A = 16; + gUnknown_0203855B = gUnknown_02038559 + 1; + sub_80A37C0(FindTaskIdByFunc(sub_80A4F68)); + DestroyTask(taskId); + ItemListMenu_InitMenu(); + sub_80F979C(2, 0); + sub_80F979C(3, 0); + } +} + +void sub_80A3954(u16 *a) +{ + CpuCopy16(gUnknown_08E77004, a, 0x800); +} + +void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) +{ + u16 *dst = a + 14 + (b + 2) * 32; + u16 i; + + while (c > b++) + { + for (i = 0; i < 15; i++) + dst[i] = d; + dst += 32; + } +} + +void sub_80A39B8(u16 *a, u8 b) +{ + u8 var = b * 2; + + sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2); +} + +void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) +{ + u16 r2 = b * 2; + u16 r7; + + if (d == -1) + { + r7 = (b + 1) * 2; + if (b == 5) + r7 = 2; + + sub_809D104(a, 4, 10, gUnknown_08E96EC8, 8 - c, r2, c, 2); + sub_809D104(a, c + 4, 10, gUnknown_08E96EC8, 0, r7, 8 - c, 2); + } + else if (d == 1) + { + r7 = (b - 1) * 2; + if (b == 1) + r7 = 10; + + sub_809D104(a, 4, 10, gUnknown_08E96EC8, c, r7, 8 - c, 2); + sub_809D104(a, 12 - c, 10, gUnknown_08E96EC8, 0, r2, c, 2); + } +} + +void sub_80A3AC0(u16 *a, u8 b) +{ + u8 i; + + for (i = 0; i < 5; i++) + { + if (i == b) + a[0x125 + i] = 0x107D; + else + a[0x125 + i] = 0x107C; + } +} + +void sub_80A3B04(u16 *a, s8 b) +{ + u8 taskId; + + gUnknown_02038559 += b; + if (gUnknown_02038559 >= NUM_BAG_POCKETS) + gUnknown_02038559 = 0; + if (gUnknown_02038559 < 0) + gUnknown_02038559 = NUM_BAG_POCKETS - 1; + sub_80A76A0(); + sub_80A7590(); + gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots; + sub_80A3D24(gUnknown_02038559); + gUnknown_0203855A = 0; + sub_80A3954(a); + sub_80A396C(a, 0, 16, 3); + sub_80A39B8(a, 0); + gUnknown_0203855B = 6; + gUnknown_02038562 = 0; + taskId = FindTaskIdByFunc(sub_80A37F8); + if (taskId == 0xFF) + taskId = CreateTask(sub_80A37F8, 8); + gTasks[taskId].data[5] = b; +} + +void swap32(struct ItemSlot *a, struct ItemSlot *b) +{ + struct ItemSlot temp = *a; + + *a = *b; + *b = temp; +} -- cgit v1.2.3 From e41832e3c7afd0072216aaaf08b9e56c7bb42413 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 8 Jul 2017 18:06:19 -0500 Subject: decompile RemoveEmptyItemSlots - sub_80A444C --- src/item.c | 2 + src/item_menu.c | 481 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 463 insertions(+), 20 deletions(-) (limited to 'src') diff --git a/src/item.c b/src/item.c index 33aa87768..6070a0329 100644 --- a/src/item.c +++ b/src/item.c @@ -129,6 +129,8 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count) return TRUE; } +// This function matches if gBagPockets is declared non-const, +// but it should be fixed anyway. #ifdef NONMATCHING bool8 AddBagItem(u16 itemId, u16 count) { diff --git a/src/item_menu.c b/src/item_menu.c index 91853588b..575dbbfab 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "data2.h" #include "decompress.h" #include "graphics.h" #include "item.h" @@ -6,10 +7,14 @@ #include "menu.h" #include "menu_helpers.h" #include "palette.h" +#include "party_menu.h" #include "rom4.h" +#include "songs.h" +#include "sound.h" #include "sprite.h" #include "strings.h" #include "strings2.h" +#include "string_util.h" #include "task.h" #include "text.h" #include "unknown_task.h" @@ -24,8 +29,9 @@ struct UnknownStruct1 u8 unk3; }; +extern u8 gUnknown_02038540[]; extern u8 gUnknown_02038558; -extern s8 gUnknown_02038559; +extern s8 gUnknown_02038559; // selected pocket extern u8 gUnknown_0203855A; extern u8 gUnknown_0203855B; extern u8 gUnknown_0203855C; @@ -35,7 +41,7 @@ extern u8 gUnknown_03000700; extern u8 gUnknown_03000701; extern const u8 *gUnknown_03000704; extern struct UnknownStruct1 gUnknown_03005D10[]; -extern struct ItemSlot *gUnknown_03005D24; +extern struct ItemSlot *gUnknown_03005D24; // selected pocket item slots extern bool8 gLinkOpen; extern void gpu_pal_allocator_reset__manage_upper_four(void); @@ -101,10 +107,11 @@ void sub_80A396C(u16 *, u8, u8, u8); void sub_80A39B8(u16 *, u8); void sub_80A39E4(u16 *, u8, u8, s8); void sub_80A3AC0(u16 *, u8); -void sub_80A3C34(struct ItemSlot *, u32); +void SortItemSlots(struct BagPocket); void sub_80A3D08(void); void sub_80A3D24(u8); void sub_80A3D40(void); +void sub_80A40D0(void); void sub_80A48E8(); void ItemListMenu_InitDescription(); void ItemListMenu_ChangeDescription(); @@ -113,8 +120,10 @@ void sub_80A50C8(u8); void ItemListMenu_InitMenu(void); void sub_80A740C(void); void sub_80A751C(void); +void sub_80A7528(); void sub_80A7590(void); void sub_80A7630(void); +void sub_80A763C(void); void sub_80A76A0(void); void sub_80A770C(void); void sub_80A7828(void); @@ -227,9 +236,8 @@ bool8 sub_80A317C(void) sub_80A39B8(gBGTilemapBuffers[2], gUnknown_02038559 + 1); sub_80A3AC0(gBGTilemapBuffers[2], gUnknown_02038559); sub_80A3D08(); - // What is this? - sub_80A3C34(gBagPockets[2].itemSlots, *(u32 *)&gBagPockets[2].capacity); - sub_80A3C34(gBagPockets[3].itemSlots, *(u32 *)&gBagPockets[3].capacity); + SortItemSlots(gBagPockets[2]); + SortItemSlots(gBagPockets[3]); sub_80A3D40(); gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots; sub_80A362C(); @@ -405,7 +413,7 @@ extern const u16 gUnknown_083C1704[]; void sub_80A3740(void) { u16 arr[2]; - + // TODO: This is a local array memcpy(arr, gUnknown_083C1704, 4); LoadPalette(&arr[1], 0xD1, sizeof(arr[1])); @@ -436,7 +444,7 @@ void sub_80A37C0(u8 taskId) void sub_80A37F8(u8 taskId) { u8 r5 = gUnknown_0203855A; - + if (r5 < 16) { gUnknown_0203855A++; @@ -447,11 +455,11 @@ void sub_80A37F8(u8 taskId) gUnknown_02038558 = 0; return; } - + if (gLinkOpen == TRUE) { u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; - + ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562); gUnknown_02038562++; } @@ -460,7 +468,7 @@ void sub_80A37F8(u8 taskId) while (gUnknown_02038562 < 3) { u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; - + ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562); gUnknown_02038562++; } @@ -486,7 +494,7 @@ void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) { u16 *dst = a + 14 + (b + 2) * 32; u16 i; - + while (c > b++) { for (i = 0; i < 15; i++) @@ -498,7 +506,7 @@ void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) void sub_80A39B8(u16 *a, u8 b) { u8 var = b * 2; - + sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2); } @@ -506,13 +514,13 @@ void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) { u16 r2 = b * 2; u16 r7; - + if (d == -1) { r7 = (b + 1) * 2; if (b == 5) r7 = 2; - + sub_809D104(a, 4, 10, gUnknown_08E96EC8, 8 - c, r2, c, 2); sub_809D104(a, c + 4, 10, gUnknown_08E96EC8, 0, r7, 8 - c, 2); } @@ -521,7 +529,7 @@ void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) r7 = (b - 1) * 2; if (b == 1) r7 = 10; - + sub_809D104(a, 4, 10, gUnknown_08E96EC8, c, r7, 8 - c, 2); sub_809D104(a, 12 - c, 10, gUnknown_08E96EC8, 0, r2, c, 2); } @@ -530,7 +538,7 @@ void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) void sub_80A3AC0(u16 *a, u8 b) { u8 i; - + for (i = 0; i < 5; i++) { if (i == b) @@ -543,7 +551,7 @@ void sub_80A3AC0(u16 *a, u8 b) void sub_80A3B04(u16 *a, s8 b) { u8 taskId; - + gUnknown_02038559 += b; if (gUnknown_02038559 >= NUM_BAG_POCKETS) gUnknown_02038559 = 0; @@ -565,10 +573,443 @@ void sub_80A3B04(u16 *a, s8 b) gTasks[taskId].data[5] = b; } -void swap32(struct ItemSlot *a, struct ItemSlot *b) +static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b) { struct ItemSlot temp = *a; - + *a = *b; *b = temp; } + +void RemoveEmptyItemSlots(struct BagPocket pocket) +{ + u16 i; + u16 j; + + for (i = 0; i < pocket.capacity - 1; i++) + { + for (j = i + 1; j < pocket.capacity; j++) + { + if (pocket.itemSlots[i].quantity == 0) + SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]); + } + } +} + +void SortItemSlots(struct BagPocket pocket) +{ + u16 i; + u16 j; + + for (i = 0; i < pocket.capacity; i++) + { + for (j = i + 1; j < pocket.capacity; j++) + { + if (pocket.itemSlots[i].quantity != 0 && pocket.itemSlots[j].quantity != 0 + && pocket.itemSlots[i].itemId > pocket.itemSlots[j].itemId) + SwapItemSlots(&pocket.itemSlots[i], &pocket.itemSlots[j]); + } + } +} + +void sub_80A3CA8(u8 pocketNum) +{ + u16 i; + + gUnknown_03005D10[pocketNum].unk2 = 0; + for (i = 0; i < gBagPockets[pocketNum].capacity; i++) + { + if (gBagPockets[pocketNum].itemSlots[i].quantity != 0) + gUnknown_03005D10[pocketNum].unk2++; + } + RemoveEmptyItemSlots(gBagPockets[pocketNum]); +} + +void sub_80A3D08(void) +{ + u8 i; + + for (i = 0; i < NUM_BAG_POCKETS; i++) + sub_80A3CA8(i); +} + +void sub_80A3D24(u8 pocketNum) +{ + if (gUnknown_03005D10[pocketNum].unk2 >= 7) + gUnknown_03005D10[pocketNum].unk3 = 7; + else + gUnknown_03005D10[pocketNum].unk3 = gUnknown_03005D10[pocketNum].unk2; +} + +void sub_80A3D40(void) +{ + u8 i; + + for (i = 0; i < NUM_BAG_POCKETS; i++) + sub_80A3D24(i); +} + +void sub_80A3D5C(u8 taskId) +{ + u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + + gUnknown_03005D24[val].quantity -= gTasks[taskId].data[1]; + if (gUnknown_03005D24[val].quantity == 0) + { + if (gSaveBlock1.registeredItem == gUnknown_03005D24[val].itemId) + { + sub_80A40D0(); + gSaveBlock1.registeredItem = 0; + } + gUnknown_03005D24[val].itemId = 0; + if (gUnknown_03005D10[gUnknown_02038559].unk1 + 7 == gUnknown_03005D10[gUnknown_02038559].unk2 + && gUnknown_03005D10[gUnknown_02038559].unk1 != 0) + gUnknown_03005D10[gUnknown_02038559].unk1--; + sub_80A3CA8(gUnknown_02038559); + } + sub_80A3D24(gUnknown_02038559); +} + +void sub_80A3E0C(void) +{ + u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + + if (gUnknown_03005D24[val].quantity == 0) + { + gUnknown_03005D24[val].itemId = 0; + if (gUnknown_03005D10[gUnknown_02038559].unk1 + 7 == gUnknown_03005D10[gUnknown_02038559].unk2 + && gUnknown_03005D10[gUnknown_02038559].unk1 != 0) + gUnknown_03005D10[gUnknown_02038559].unk1--; + sub_80A3CA8(gUnknown_02038559); + } + sub_80A3D24(gUnknown_02038559); +} + +void nullsub_16(void) +{ +} + +void sub_80A3E70(u8 a, u8 b) +{ + struct ItemSlot temp = gUnknown_03005D24[a]; + + gUnknown_03005D24[a] = gUnknown_03005D24[b]; + gUnknown_03005D24[b] = temp; +} + +void sub_80A3E90(u8 taskId) +{ + PlaySE(SE_SELECT); + nullsub_16(); + sub_80A3E70( + gTasks[taskId].data[10] - 1, + gUnknown_03005D10[gUnknown_02038559].unk0 + gUnknown_03005D10[gUnknown_02038559].unk1); + gTasks[taskId].data[10] = 0; + sub_80A763C(); + sub_80A7528(0); + ItemListMenu_InitMenu(); +} + +void sub_80A3EF4(u8 taskId) +{ + u8 r2; + + PlaySE(SE_SELECT); + nullsub_16(); + r2 = gTasks[taskId].data[10] - gUnknown_03005D10[gUnknown_02038559].unk1 - 1; + gTasks[taskId].data[10] = 0; + if (r2 < 8) + sub_80A48E8(taskId, r2); + sub_80A7528(0); +} + +void sub_80A3F50(u8 taskId) +{ + gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A7528(1); +} + +void sub_80A3FA0(u16 *a, u8 b, u8 c, u8 d, u8 e, u16 f) +{ + s16 i; + s16 j; + + for (i = c; i < c + e; i++) + { + for (j = b; j < b + d; j++) + { + u32 index = j + i * 32; + + a[index] = f; + } + } +} + +void sub_80A4008(u16 *a, u8 b, u8 c, u8 d, u8 e) +{ + sub_80A3FA0(a, b, c, d, e, 1); +} + +void sub_80A4030(u32 a) +{ + u16 *ptr1 = gBGTilemapBuffers[2] + 0x5A; + + ptr1 += a * 64; + ptr1[0] = 0x5A; + ptr1[1] = 0x5B; + ptr1[2] = 0x5C; + ptr1[32] = 0x6A; + ptr1[33] = 0x6B; + ptr1[34] = 0x6C; +} + +void sub_80A405C(u8 a) +{ + u16 i; + u16 *ptr; + + ptr = gBGTilemapBuffers[2] + 0x5A; + for (i = 0; i < 16; i++) + { + ptr[0] = 0x4F; + ptr[1] = 0x4F; + ptr[2] = 0x4F; + ptr += 32; + } + + ptr = gBGTilemapBuffers[2] + 0x5A + a * 64; + ptr[0] = 0x5A; + ptr[1] = 0x5B; + ptr[2] = 0x5C; + ptr[32] = 0x6A; + ptr[33] = 0x6B; + ptr[34] = 0x6C; +} + +void sub_80A40AC(u8 a) +{ + u16 *ptr = gBGTilemapBuffers[2] + 0x5A; + + ptr += a * 64; + ptr[0] = 0x4F; + ptr[1] = 0x4F; + ptr[2] = 0x4F; + ptr[32] = 0x4F; + ptr[33] = 0x4F; + ptr[34] = 0x4F; +} + +void sub_80A40D0(void) +{ + u8 i; + + for (i = 0; i < 8; i++) + { + if (gUnknown_03005D10[gUnknown_02038559].unk1 + i == gUnknown_03005D10[gUnknown_02038559].unk2) + break; + if (gUnknown_03005D24[gUnknown_03005D10[gUnknown_02038559].unk1 + i].itemId == gSaveBlock1.registeredItem) + { + sub_80A40AC(i); + break; + } + } +} + +void sub_80A413C(void) +{ + sub_80A40D0(); + sub_80A405C(gUnknown_03005D10[gUnknown_02038559].unk0); +} + +void sub_80A4164(u8 *a, u16 b, int c, u8 d) +{ + *a++ = CHAR_MULT_SIGN; + a[0] = EXT_CTRL_CODE_BEGIN; + a[1] = 0x14; + a[2] = 6; + a += 3; + ConvertIntToDecimalStringN(a, b, c, d); +} + +void sub_80A418C(u16 a, int b, u8 c, u8 d, u8 e) +{ + sub_80A4164(gStringVar1, a, b, e); + MenuPrint(gStringVar1, c, d); +} + +void sub_80A41D4(void) +{ + sub_80A763C(); +} + +void sub_80A41E0(u8 *a, u16 b, const u8 *c, u16 d, u8 e) +{ + a[0] = EXT_CTRL_CODE_BEGIN; + a[1] = 0x13; + a[2] = 8; + a += 3; + a = ConvertIntToDecimalStringN(a, b, STR_CONV_MODE_LEADING_ZEROS, 2); + a[0] = EXT_CTRL_CODE_BEGIN; + a[1] = 0x13; + a[2] = 0x18; + a += 3; + a = sub_8072C74(a, c, 0x78 - (e + 1) * 6, 0); + *a++ = CHAR_MULT_SIGN; + sub_8072C14(a, d, 0x78, 1); +} + +u8 *sub_80A425C(u8 taskId, u8 *text, u8 c) +{ + if (gTasks[taskId].data[10] - gUnknown_03005D10[gUnknown_02038559].unk1 - 1 == c) + { + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 1; + text[2] = 2; + text += 3; + } + return text; +} + +bool8 sub_80A42B0(u8 a, int b) +{ + u8 r5; + u16 *ptr; + u8 *r8 = gUnknown_02038540; + + if (gUnknown_03005D10[gUnknown_02038559].unk1 + a > gUnknown_03005D10[gUnknown_02038559].unk2) + return TRUE; + if (gUnknown_03005D10[gUnknown_02038559].unk1 + a == gUnknown_03005D10[gUnknown_02038559].unk2) + { + if (gUnknown_03000701 == 5) + return TRUE; + r5 = a * 2 + 2; + sub_8072C74(gStringVar1, gOtherText_CloseBag, 0x78, 0); + MenuPrint(gStringVar1, 14, r5); + ptr = gBGTilemapBuffers[2] + 14 + r5 * 32; + ptr[0] = 0x4F; + ptr[1] = 0x4F; + ptr[32] = 0x4F; + ptr[33] = 0x4F; + if (a == 7) + return TRUE; + if ((b == 1 && r8[2] != 0) || b == 2) + MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 13); + else + MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 17); + return TRUE; + } + return FALSE; +} + +void sub_80A4380(u16 a, u8 b, int c, int d) +{ + while (b <= c) + { + u8 r4; + u8 r5; + u8 *text; + + if (sub_80A42B0(b, d) == TRUE) + break; + r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b; + r5 = b * 2 + 2; + text = gStringVar1; + text = sub_80A425C(a, text, b); + text = sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x66, 0); + *text++ = CHAR_MULT_SIGN; + sub_8072C14(text, gUnknown_03005D24[r4].quantity, 0x78, 1); + MenuPrint(gStringVar1, 14, r5); + b++; + } +} + +void sub_80A444C(u16 a, u8 b, int c, int d) +{ + while (b <= c) + { + u8 r4; + u8 r5; + u8 *text; + + if (sub_80A42B0(b, d) == TRUE) + break; + r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b; + r5 = b * 2 + 2; + text = gStringVar1; + text = sub_80A425C(a, text, b); +#if ENGLISH + sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x60, 0); +#else + sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x63, 0); +#endif + MenuPrint(gStringVar1, 14, r5); + if (gUnknown_02038558 != 0) + { + if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem) + sub_80A4030(b); + } + else + { + if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem) + sub_80A405C(b); + else + sub_80A40AC(b); + } + b++; + } +} + +/* +void sub_80A4548(u16 a, u8 b, int c, int d) +{ + while (b <= c) + { + u8 r4; + u8 sp10; + u32 r5; + u8 *text; + + if (sub_80A42B0(b, d) == TRUE) + break; + r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b; + sp10 = b * 2 + 2; + r5 = sp10 * 32 + 14; + text = gStringVar1; + text = sub_80A425C(a, text, b); + if (gUnknown_03005D24[r4].itemId < 0x153) + { + const u8 *r2; + + gBGTilemapBuffers[2][r5 + 0] = 0x59; + gBGTilemapBuffers[2][r5 + 1] = 0x4F; + gBGTilemapBuffers[2][r5 + 32] = 0x69; + gBGTilemapBuffers[2][r5 + 33] = 0x4F; + r2 = gMoveNames[ItemIdToBattleMoveId(gUnknown_03005D24[r4].itemId)]; + sub_80A41E0(text, gUnknown_03005D24[r4].itemId - 288, r2, gUnknown_03005D24[r4].quantity, 2); + } + else + { + const u8 *moveName; + + gBGTilemapBuffers[2][r5 + 0] = 0x105D; + gBGTilemapBuffers[2][r5 + 1] = 0x105E; + gBGTilemapBuffers[2][r5 + 32] = 0x106D; + gBGTilemapBuffers[2][r5 + 33] = 0x106E; + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 0x13; + text[2] = 0x11; + text += 3; + text = ConvertIntToDecimalString(text, gUnknown_03005D24[r4].itemId); + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 0x13; + text[2] = 0x18; + text += 3; + moveName = gMoveNames[ItemIdToBattleMoveId(gUnknown_03005D24[r4].itemId)]; + sub_8072C74(text, moveName, 0x78, 0); + } + MenuPrint(gStringVar1, 14, sp10); + b++; + } +} +*/ \ No newline at end of file -- cgit v1.2.3 From fb441feac3d9515bdfc93a2ead6c1d16c73f3a06 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 8 Jul 2017 20:10:39 -0500 Subject: can't get sub_80A4548 to match --- src/item_menu.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 215 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 575dbbfab..741cc147d 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -960,7 +960,8 @@ void sub_80A444C(u16 a, u8 b, int c, int d) } } -/* +// more gBGTilemapBuffers shenanigans +#ifdef NONMATCHING void sub_80A4548(u16 a, u8 b, int c, int d) { while (b <= c) @@ -1012,4 +1013,216 @@ void sub_80A4548(u16 a, u8 b, int c, int d) b++; } } -*/ \ No newline at end of file +#else +__attribute__((naked)) +void sub_80A4548(u16 a, u8 b, int c, int d) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x14\n\ + str r2, [sp, 0x8]\n\ + str r3, [sp, 0xC]\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x4]\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r8, r1\n\ + ldr r0, _080A456C @ =gBGTilemapBuffers + 0x1000\n\ + mov r9, r0\n\ + b _080A46C2\n\ + .align 2, 0\n\ +_080A456C: .4byte gBGTilemapBuffers + 0x1000\n\ +_080A4570:\n\ + ldr r1, _080A461C @ =gUnknown_03005D10\n\ + ldr r0, _080A4620 @ =gUnknown_02038559\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r4, [r0, 0x1]\n\ + add r4, r8\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + mov r1, r8\n\ + lsls r0, r1, 25\n\ + movs r3, 0x80\n\ + lsls r3, 18\n\ + adds r0, r3\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x10]\n\ + lsls r0, 5\n\ + adds r0, 0xE\n\ + adds r5, r0, 0\n\ + ldr r6, _080A4624 @ =gStringVar1\n\ + ldr r1, [sp, 0x4]\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + adds r1, r6, 0\n\ + mov r2, r8\n\ + bl sub_80A425C\n\ + adds r6, r0, 0\n\ + ldr r3, _080A4628 @ =gUnknown_03005D24\n\ + mov r10, r3\n\ + ldr r0, [r3]\n\ + lsls r7, r4, 2\n\ + adds r3, r7, r0\n\ + ldrh r1, [r3]\n\ + movs r0, 0xA9\n\ + lsls r0, 1\n\ + cmp r1, r0\n\ + bhi _080A4634\n\ + lsls r0, r5, 1\n\ + add r0, r9\n\ + movs r1, 0x59\n\ + strh r1, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 1\n\ + add r0, r9\n\ + movs r2, 0x4F\n\ + strh r2, [r0]\n\ + adds r0, r5, 0\n\ + adds r0, 0x20\n\ + lsls r0, 1\n\ + add r0, r9\n\ + movs r1, 0x69\n\ + strh r1, [r0]\n\ + adds r0, r5, 0\n\ + adds r0, 0x21\n\ + lsls r0, 1\n\ + add r0, r9\n\ + strh r2, [r0]\n\ + ldrh r0, [r3]\n\ + bl ItemIdToBattleMoveId\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xD\n\ + adds r2, r0, 0\n\ + muls r2, r1\n\ + ldr r0, _080A462C @ =gMoveNames\n\ + adds r2, r0\n\ + mov r1, r10\n\ + ldr r0, [r1]\n\ + adds r0, r7, r0\n\ + ldr r3, _080A4630 @ =0xfffffee0\n\ + adds r1, r3, 0\n\ + ldrh r3, [r0]\n\ + adds r1, r3\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + ldrh r3, [r0, 0x2]\n\ + movs r0, 0x2\n\ + str r0, [sp]\n\ + adds r0, r6, 0\n\ + bl sub_80A41E0\n\ + b _080A46AE\n\ + .align 2, 0\n\ +_080A461C: .4byte gUnknown_03005D10\n\ +_080A4620: .4byte gUnknown_02038559\n\ +_080A4624: .4byte gStringVar1\n\ +_080A4628: .4byte gUnknown_03005D24\n\ +_080A462C: .4byte gMoveNames\n\ +_080A4630: .4byte 0xfffffee0\n\ +_080A4634:\n\ + lsls r0, r5, 1\n\ + add r0, r9\n\ + ldr r1, _080A46EC @ =0x0000105d\n\ + strh r1, [r0]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 1\n\ + add r0, r9\n\ + adds r1, 0x1\n\ + strh r1, [r0]\n\ + adds r0, r5, 0\n\ + adds r0, 0x20\n\ + lsls r0, 1\n\ + add r0, r9\n\ + adds r1, 0xF\n\ + strh r1, [r0]\n\ + adds r0, r5, 0\n\ + adds r0, 0x21\n\ + lsls r0, 1\n\ + add r0, r9\n\ + adds r1, 0x1\n\ + strh r1, [r0]\n\ + movs r0, 0xFC\n\ + strb r0, [r6]\n\ + movs r4, 0x13\n\ + strb r4, [r6, 0x1]\n\ + movs r0, 0x11\n\ + strb r0, [r6, 0x2]\n\ + adds r6, 0x3\n\ + mov r1, r10\n\ + ldr r0, [r1]\n\ + adds r0, r7, r0\n\ + ldrh r1, [r0]\n\ + ldr r3, _080A46F0 @ =0xfffffeae\n\ + adds r1, r3\n\ + adds r0, r6, 0\n\ + bl ConvertIntToDecimalString\n\ + adds r6, r0, 0\n\ + movs r0, 0xFC\n\ + strb r0, [r6]\n\ + strb r4, [r6, 0x1]\n\ + movs r0, 0x18\n\ + strb r0, [r6, 0x2]\n\ + adds r6, 0x3\n\ + mov r1, r10\n\ + ldr r0, [r1]\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + bl ItemIdToBattleMoveId\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xD\n\ + muls r1, r0\n\ + ldr r0, _080A46F4 @ =gMoveNames\n\ + adds r1, r0\n\ + adds r0, r6, 0\n\ + movs r2, 0x78\n\ + movs r3, 0\n\ + bl sub_8072C74\n\ +_080A46AE:\n\ + ldr r0, _080A46F8 @ =gStringVar1\n\ + movs r1, 0xE\n\ + ldr r2, [sp, 0x10]\n\ + bl MenuPrint\n\ + mov r0, r8\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ +_080A46C2:\n\ + ldr r3, [sp, 0x8]\n\ + cmp r8, r3\n\ + bgt _080A46DA\n\ + mov r0, r8\n\ + ldr r1, [sp, 0xC]\n\ + bl sub_80A42B0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + beq _080A46DA\n\ + b _080A4570\n\ +_080A46DA:\n\ + add sp, 0x14\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080A46EC: .4byte 0x0000105d\n\ +_080A46F0: .4byte 0xfffffeae\n\ +_080A46F4: .4byte gMoveNames\n\ +_080A46F8: .4byte gStringVar1\n\ + .syntax divided\n"); +} +#endif -- cgit v1.2.3 From 42aaa52c94aa59cb62f2f598af5dd25ae9d8537e Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 8 Jul 2017 21:59:22 -0500 Subject: decompile sub_80A46FC - ItemListMenu_InitDescription --- src/item_menu.c | 147 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 118 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 741cc147d..3e7a4629f 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -112,8 +112,8 @@ void sub_80A3D08(void); void sub_80A3D24(u8); void sub_80A3D40(void); void sub_80A40D0(void); -void sub_80A48E8(); -void ItemListMenu_InitDescription(); +void sub_80A48E8(u16, int, int); +void ItemListMenu_InitDescription(s16); void ItemListMenu_ChangeDescription(); void sub_80A4F68(u8); void sub_80A50C8(u8); @@ -246,7 +246,7 @@ bool8 sub_80A317C(void) case 12: sub_80A48E8(0xFFFF, 0, 7); val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; - ItemListMenu_InitDescription((s16)gUnknown_03005D24[val].itemId); + ItemListMenu_InitDescription(gUnknown_03005D24[val].itemId); ItemListMenu_InitMenu(); gUnknown_0203855B = gUnknown_02038559 + 1; gUnknown_0203855C = 0; @@ -719,7 +719,7 @@ void sub_80A3EF4(u8 taskId) r2 = gTasks[taskId].data[10] - gUnknown_03005D10[gUnknown_02038559].unk1 - 1; gTasks[taskId].data[10] = 0; if (r2 < 8) - sub_80A48E8(taskId, r2); + sub_80A48E8(taskId, r2, r2); sub_80A7528(0); } @@ -902,42 +902,45 @@ bool8 sub_80A42B0(u8 a, int b) return FALSE; } -void sub_80A4380(u16 a, u8 b, int c, int d) +void sub_80A4380(u16 a, int b, int c, int d) { - while (b <= c) + u8 i; + + for (i = b; i <= c; i++) { u8 r4; u8 r5; u8 *text; - if (sub_80A42B0(b, d) == TRUE) + if (sub_80A42B0(i, d) == TRUE) break; - r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b; - r5 = b * 2 + 2; + r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i; + r5 = i * 2 + 2; text = gStringVar1; - text = sub_80A425C(a, text, b); + text = sub_80A425C(a, text, i); text = sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x66, 0); *text++ = CHAR_MULT_SIGN; sub_8072C14(text, gUnknown_03005D24[r4].quantity, 0x78, 1); MenuPrint(gStringVar1, 14, r5); - b++; } } -void sub_80A444C(u16 a, u8 b, int c, int d) +void sub_80A444C(u16 a, int b, int c, int d) { - while (b <= c) + u8 i; + + for (i = b; i <= c; i++) { u8 r4; u8 r5; u8 *text; - if (sub_80A42B0(b, d) == TRUE) + if (sub_80A42B0(i, d) == TRUE) break; - r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b; - r5 = b * 2 + 2; + r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i; + r5 = i * 2 + 2; text = gStringVar1; - text = sub_80A425C(a, text, b); + text = sub_80A425C(a, text, i); #if ENGLISH sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x60, 0); #else @@ -947,37 +950,38 @@ void sub_80A444C(u16 a, u8 b, int c, int d) if (gUnknown_02038558 != 0) { if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem) - sub_80A4030(b); + sub_80A4030(i); } else { if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem) - sub_80A405C(b); + sub_80A405C(i); else - sub_80A40AC(b); + sub_80A40AC(i); } - b++; } } // more gBGTilemapBuffers shenanigans #ifdef NONMATCHING -void sub_80A4548(u16 a, u8 b, int c, int d) +void sub_80A4548(u16 a, int b, int c, int d) { - while (b <= c) + u8 i; + + for (i = b; i <= c; i++) { u8 r4; u8 sp10; u32 r5; u8 *text; - if (sub_80A42B0(b, d) == TRUE) + if (sub_80A42B0(i, d) == TRUE) break; - r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + b; - sp10 = b * 2 + 2; + r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i; + sp10 = i * 2 + 2; r5 = sp10 * 32 + 14; text = gStringVar1; - text = sub_80A425C(a, text, b); + text = sub_80A425C(a, text, i); if (gUnknown_03005D24[r4].itemId < 0x153) { const u8 *r2; @@ -1010,12 +1014,11 @@ void sub_80A4548(u16 a, u8 b, int c, int d) sub_8072C74(text, moveName, 0x78, 0); } MenuPrint(gStringVar1, 14, sp10); - b++; } } #else __attribute__((naked)) -void sub_80A4548(u16 a, u8 b, int c, int d) +void sub_80A4548(u16 a, int b, int c, int d) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1226,3 +1229,89 @@ _080A46F8: .4byte gStringVar1\n\ .syntax divided\n"); } #endif + +void sub_80A46FC(u16 a, int b, int c, int d) +{ + u8 i; + + for (i = b; i <= c; i++) + { + u8 r4; + u8 r5; + u8 *text; + register int var asm("r0"); + + if (sub_80A42B0(i, d) == TRUE) + break; + r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i; + r5 = i * 2 + 2; + + var = 14 + r5 * 32; + gBGTilemapBuffers[2][var] = 0x59; + var += 32; + gBGTilemapBuffers[2][var] = 0x69; + + text = gStringVar1; + text = sub_80A425C(a, text, i); + CopyItemName(gUnknown_03005D24[r4].itemId, gStringVar2); + sub_80A41E0(text, gUnknown_03005D24[r4].itemId - 0x84, gStringVar2, gUnknown_03005D24[r4].quantity, 3); + MenuPrint(gStringVar1, 14, r5); + } +} + +void sub_80A47E8(u16 a, int b, int c, int d) +{ + switch (gUnknown_02038559) + { + case 0: + case 1: + sub_80A4380(a, b, c, d); + break; + case 4: + sub_80A444C(a, b, c, d); + break; + case 2: + sub_80A4548(a, b, c, d); + break; + case 3: + sub_80A46FC(a, b, c, d); + break; + } + if (gUnknown_03005D10[gUnknown_02038559].unk1 != 0) + sub_80F979C(0, 0); + else + sub_80F979C(0, 1); + if ((gUnknown_03000701 != 5 && gUnknown_03005D10[gUnknown_02038559].unk1 + 8 < gUnknown_03005D10[gUnknown_02038559].unk2 + 1) + || (gUnknown_03000701 == 5 && gUnknown_03005D10[gUnknown_02038559].unk1 + 8 < gUnknown_03005D10[gUnknown_02038559].unk2)) + sub_80F979C(1, 0); + else + sub_80F979C(1, 1); +} + +void sub_80A48E8(u16 a, int b, int c) +{ + sub_80A47E8(a, b, c, 0); +} + +void sub_80A48F8(u16 a) +{ + sub_80A47E8(a, 0, 5, 2); +} + +void ItemListMenu_InitDescription(s16 itemId) +{ + u8 r5; + + if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2) + { + r5 = sub_8072A18(gOtherText_ReturnTo, 4, 0x68, 0x68, 1); + r5 += sub_8072A18(gUnknown_0840E740[gUnknown_03000701].text, 4, 0x78, 0x68, 1); + } + else + { + r5 = sub_8072A18(ItemId_GetDescription(itemId), 4, 0x68, 0x68, 1); + } + + if (r5 < 3) + MenuZeroFillWindowRect(0, 13 + r5 * 2, 13, 20); +} -- cgit v1.2.3 From 4a9e02772870528cc3b9653eb4028b236f3c3aa8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 8 Jul 2017 22:01:23 -0500 Subject: get rid of TextStruct --- src/item_menu.c | 2 +- src/strings.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 3e7a4629f..b8d9f788a 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1305,7 +1305,7 @@ void ItemListMenu_InitDescription(s16 itemId) if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2) { r5 = sub_8072A18(gOtherText_ReturnTo, 4, 0x68, 0x68, 1); - r5 += sub_8072A18(gUnknown_0840E740[gUnknown_03000701].text, 4, 0x78, 0x68, 1); + r5 += sub_8072A18(gUnknown_0840E740[gUnknown_03000701], 4, 0x78, 0x68, 1); } else { diff --git a/src/strings.c b/src/strings.c index cc0641dce..6c605b075 100644 --- a/src/strings.c +++ b/src/strings.c @@ -197,7 +197,7 @@ const u8 OtherText_TheField[] = _("the field."); const u8 OtherText_TheField2[] = _("the field."); const u8 OtherText_ThePC[] = _("the PC."); -const struct TextStruct gUnknown_0840E740[7] = +const u8 *const gUnknown_0840E740[7] = { OtherText_TheField3, OtherText_TheBattle, @@ -1120,7 +1120,7 @@ const u8 OtherText_TheField[] = _("zum Hauptmenü."); const u8 OtherText_TheField2[] = _("zum Hauptmenü."); const u8 OtherText_ThePC[] = _("zum PC."); -const struct TextStruct gUnknown_0840E740[7] = +const u8 *const gUnknown_0840E740[7] = { OtherText_TheField3, OtherText_TheBattle, -- cgit v1.2.3 From 55db40b3302d3b83df4f764952aba94dd81eb8ad Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 9 Jul 2017 00:40:28 -0500 Subject: decompile ItemListMenu_ChangeDescription - sub_80A4F74 --- src/item.c | 2 +- src/item_menu.c | 274 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 272 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/item.c b/src/item.c index 6070a0329..22ac6e7cd 100644 --- a/src/item.c +++ b/src/item.c @@ -587,7 +587,7 @@ u8 *ItemId_GetDescription(u16 itemId) return gItems[SanitizeItemId(itemId)].description; } -bool8 ItemId_CopyDescription(u8 *a, u32 itemId, u32 c) +bool32 ItemId_CopyDescription(u8 *a, u32 itemId, u32 c) { u32 r5 = c + 1; u8 *description = gItems[SanitizeItemId(itemId)].description; diff --git a/src/item_menu.c b/src/item_menu.c index b8d9f788a..972a2c748 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,8 +1,12 @@ #include "global.h" #include "data2.h" #include "decompress.h" +#include "field_player_avatar.h" #include "graphics.h" #include "item.h" +#include "items.h" +#include "item_use.h" +#include "mail_data.h" #include "main.h" #include "menu.h" #include "menu_helpers.h" @@ -48,6 +52,8 @@ extern void gpu_pal_allocator_reset__manage_upper_four(void); extern void sub_80F9020(void); extern void sub_80F9988(); extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); +extern void PauseVerticalScrollIndicator(); +extern u8 sub_80F9284(void); extern const struct CompressedSpriteSheet gUnknown_083C1CC8; extern const struct CompressedSpriteSheet gUnknown_083C1CD0; @@ -114,10 +120,13 @@ void sub_80A3D40(void); void sub_80A40D0(void); void sub_80A48E8(u16, int, int); void ItemListMenu_InitDescription(s16); -void ItemListMenu_ChangeDescription(); +void ItemListMenu_ChangeDescription(s16, int); void sub_80A4F68(u8); void sub_80A50C8(u8); void ItemListMenu_InitMenu(void); +void sub_80A73C0(void); +void sub_80A73F0(void); +void sub_80A73FC(void); void sub_80A740C(void); void sub_80A751C(void); void sub_80A7528(); @@ -127,9 +136,11 @@ void sub_80A763C(void); void sub_80A76A0(void); void sub_80A770C(void); void sub_80A7828(void); +void sub_80A7834(); void sub_80A78B8(void); void CreateBagSprite(void); void CreateBagPokeballSprite(); +void sub_80A7C64(void); void sub_80A3118(void) { @@ -460,7 +471,7 @@ void sub_80A37F8(u8 taskId) { u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; - ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562); + ItemListMenu_ChangeDescription(gUnknown_03005D24[val].itemId, gUnknown_02038562); gUnknown_02038562++; } else @@ -469,7 +480,7 @@ void sub_80A37F8(u8 taskId) { u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; - ItemListMenu_ChangeDescription((s16)gUnknown_03005D24[val].itemId, gUnknown_02038562); + ItemListMenu_ChangeDescription(gUnknown_03005D24[val].itemId, gUnknown_02038562); gUnknown_02038562++; } } @@ -1315,3 +1326,260 @@ void ItemListMenu_InitDescription(s16 itemId) if (r5 < 3) MenuZeroFillWindowRect(0, 13 + r5 * 2, 13, 20); } + +void ItemListMenu_ChangeDescription(s16 itemId, int b) +{ + u8 description[100]; + + if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2) + { + if (b == 0) + { + MenuZeroFillWindowRect(0, 13, 13, 20); + MenuPrint_PixelCoords(gOtherText_ReturnTo, 4, 0x68, 0); + } + else if (b == 1) + { + MenuPrint_PixelCoords(gUnknown_0840E740[gUnknown_03000701], 4, 0x78, 0); + } + } + else + { + if (b == 0) + MenuZeroFillWindowRect(0, 13, 13, 20); + if (ItemId_CopyDescription(description, itemId, b)) + MenuPrint_PixelCoords(description, 4, 104 + b * 16, 0); + } +} + +bool32 sub_80A4A54(u8 *a, const u8 *b, u32 c) +{ + u32 r4 = c + 1; + const u8 *src = b; + u8 *dst = a; + + while (1) + { + if (*src == CHAR_NEWLINE || *src == EOS) + { + if (--r4 == 0) + { + *dst = EOS; + return TRUE; + } + if (*src == EOS) + return FALSE; + dst = a; + src++; + } + else + { + *dst++ = *src++; + } + } +} + +void sub_80A4A98(u8 *a, u32 b) +{ + u8 text[100]; + + if (b == 0) + MenuZeroFillWindowRect(0, 13, 13, 20); + if (sub_80A4A54(text, a, b)) + MenuPrint_PixelCoords(text, 4, 104 + b * 16, 0); +} + +void sub_80A4ADC(u8 taskId) +{ + if (gTasks[taskId].data[10] == 0) + sub_80A7528(0); + PlaySE(SE_SELECT); + gUnknown_0203855C = 1; +} + +void sub_80A4B14(s8 a, u8 b) +{ + gUnknown_03005D10[gUnknown_02038559].unk1 += a; + MoveMenuCursor(0); + sub_80A73C0(); + sub_80A763C(); + sub_80A4ADC(b); +} + +void sub_80A4B58(s8 a, u8 b) +{ + gUnknown_03005D10[gUnknown_02038559].unk0 = MoveMenuCursor(a); + sub_80A73C0(); + sub_80A4ADC(b); +} + +const u8 *sub_80A4B90(u16 itemId) +{ + if (TestPlayerAvatarFlags(6)) + { + if (itemId == ITEM_MACH_BIKE || itemId == ITEM_ACRO_BIKE) + return gOtherText_Walk; + } + if (ItemIsMail(itemId) == TRUE) + return gOtherText_Check; + return gUnknown_083C1640[gUnknown_03000704[0]].text; +} + +void sub_80A4BF0(u16 *a) +{ + u8 i; + + if (gUnknown_02038564 == 4) + { + MenuDrawTextWindow(0, 7, 13, 12); + sub_80A4008(a, 1, 8, 12, 4); + if (sub_80F9344() == 1 && gUnknown_03000701 == 5) + { + sub_80A7834(1, 0); + } + else + { + for (i = 0; i < gUnknown_02038564; i++) + { + const u8 *text; + + if (i == 0) + text = sub_80A4B90(gScriptItemId); + else + text = gUnknown_083C1640[gUnknown_03000704[i]].text; + MenuPrint(text, 1 + (i / 2) * 6, 8 + (i % 2) * 2); + } + } + if (gUnknown_03000701 == 5) + InitMenu(0, 1, 8, gUnknown_02038564, gUnknown_03000700, 1); + else + InitMenu(0, 1, 8, gUnknown_02038564, 0, 1); + sub_8072DCC(0x2F); + } + else + { + MenuDrawTextWindow(0, 5, 13, 12); + sub_80A4008(a, 1, 6, 12, 6); + for (i = 0; i < gUnknown_02038564; i++) + MenuPrint(gUnknown_083C1640[gUnknown_03000704[i]].text, 1 + (i / 3) * 6, 6 + (i % 3) * 2); + InitMenu(0, 1, 6, gUnknown_02038564, 0, 1); + sub_8072DCC(0x2F); + } + sub_80A7528(2); +} + +void sub_80A4DA4(u16 *a) +{ + sub_80A73FC(); + sub_80A36B8(a, 0, 6, 13, 6); + MenuZeroFillWindowRect(0, 5, 13, 12); + sub_80A7590(); +} + +void sub_80A4DD8(u8 taskId, u8 b, u8 c, u8 d, u8 e, u8 f) +{ + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = b + 2; + gTasks[taskId].data[3] = c + 1; + MenuDrawTextWindow(b, c, b + d, c + e); + sub_80A4008(gBGTilemapBuffers[1], b + 1, c + 1, d - 1, e - 1); + sub_80A418C(1, 1, b + 2, c + 1, f); +} + +void sub_80A4E8C(s8 a, u8 b) +{ + PlaySE(SE_SELECT); + sub_80F979C(0, 1); + sub_80F979C(1, 1); + sub_80F979C(2, 1); + sub_80F979C(3, 1); + PauseVerticalScrollIndicator(0); + PauseVerticalScrollIndicator(1); + PauseVerticalScrollIndicator(2); + PauseVerticalScrollIndicator(3); + sub_80A3B04(gBGTilemapBuffers[2], a); + sub_80A3AC0(gBGTilemapBuffers[2], gUnknown_02038559); + sub_80A3770(); + sub_80A7C64(); + CreateBagPokeballSprite(b); +} + +static bool8 sub_80A4F0C(void) +{ + if (gUnknown_03000701 == 5 || gUnknown_03000701 == 4) + return FALSE; + if (gMain.newKeys == DPAD_RIGHT || sub_80F9284() == 2) + { + sub_80A4E8C(1, 2); + return TRUE; + } + if (gMain.newKeys == DPAD_LEFT || sub_80F9284() == 1) + { + sub_80A4E8C(-1, 1); + return TRUE; + } + return FALSE; +} + +void sub_80A4F68(u8 taskId) +{ + sub_80A4F0C(); +} + +bool8 sub_80A4F74(u8 a) +{ + bool8 retVal = FALSE; + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) + { + if (gUnknown_03005D10[gUnknown_02038559].unk0 != 0) + sub_80A4B58(-1, a); + else if (gUnknown_03005D10[gUnknown_02038559].unk1 != 0) + sub_80A4B14(-1, a); + if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) + gMain.keyRepeatCounter = 11; + retVal = TRUE; + } + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) + { + if (gUnknown_03000701 != 5) + { + if (gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk3) + { + if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk2) + sub_80A4B14(1, a); + } + else + { + sub_80A4B58(1, a); + } + } + else + { + if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk2 - 1) + { + if (gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk3) + sub_80A4B58(1, a); + else + sub_80A4B14(1, a); + } + } + retVal = TRUE; + if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) + gMain.keyRepeatCounter = 11; + } + else + { + if (gTasks[a].data[10] == 0 && sub_80A4F0C() == TRUE) + { + sub_80A73F0(); + gTasks[a].func = sub_80A4F68; + retVal = TRUE; + } + else + { + sub_80A73C0(); + } + } + return retVal; +} -- cgit v1.2.3 From 3130e928b5778ac8e963cb8c074c74889d903805 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 9 Jul 2017 00:41:46 -0500 Subject: whitespace --- src/item_menu.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 972a2c748..e4fa382f0 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1330,7 +1330,7 @@ void ItemListMenu_InitDescription(s16 itemId) void ItemListMenu_ChangeDescription(s16 itemId, int b) { u8 description[100]; - + if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2) { if (b == 0) @@ -1357,7 +1357,7 @@ bool32 sub_80A4A54(u8 *a, const u8 *b, u32 c) u32 r4 = c + 1; const u8 *src = b; u8 *dst = a; - + while (1) { if (*src == CHAR_NEWLINE || *src == EOS) @@ -1382,7 +1382,7 @@ bool32 sub_80A4A54(u8 *a, const u8 *b, u32 c) void sub_80A4A98(u8 *a, u32 b) { u8 text[100]; - + if (b == 0) MenuZeroFillWindowRect(0, 13, 13, 20); if (sub_80A4A54(text, a, b)) @@ -1428,7 +1428,7 @@ const u8 *sub_80A4B90(u16 itemId) void sub_80A4BF0(u16 *a) { u8 i; - + if (gUnknown_02038564 == 4) { MenuDrawTextWindow(0, 7, 13, 12); @@ -1529,7 +1529,7 @@ void sub_80A4F68(u8 taskId) bool8 sub_80A4F74(u8 a) { bool8 retVal = FALSE; - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { if (gUnknown_03005D10[gUnknown_02038559].unk0 != 0) -- cgit v1.2.3 From df1eb2b49ebc2e761eb4aa138a0b42ebd5c5e15c Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 9 Jul 2017 01:09:26 -0500 Subject: completely get rid of TextStruct --- src/item_use.c | 6 +++--- src/player_pc.c | 8 ++++---- src/scrcmd.c | 2 +- src/script_menu.c | 2 +- src/tv.c | 18 +++++++++--------- 5 files changed, 18 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/item_use.c b/src/item_use.c index b906f91ad..1750c1584 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -55,7 +55,7 @@ extern u16 gBattleTypeFlags; static const u8 gSSTidalBetaString[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); static const u8 gSSTidalBetaString2[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); -static const struct TextStruct gUnknown_083D61DC[2] = +static const u8 *const gUnknown_083D61DC[2] = { gSSTidalBetaString, gSSTidalBetaString2, @@ -768,11 +768,11 @@ void ItemUseOutOfBattle_SSTicket(u8 taskId) if(gTasks[taskId].data[2] == 0) { MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14); - DisplayItemMessageOnField(taskId, (u8 *)gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)].text, sub_80C9BB8, 1); + DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BB8, 1); } else { - DisplayItemMessageOnField(taskId, (u8 *)gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)].text, sub_80C9BD8, 0); + DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BD8, 0); } } diff --git a/src/player_pc.c b/src/player_pc.c index 38e01b92e..61a260630 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -100,7 +100,7 @@ static void Mailbox_MoveToBag(u8); static void Mailbox_Give(u8); static void Mailbox_Cancel(u8); -static const struct TextStruct gPCText_OptionDescList[] = +static const u8 *const gPCText_OptionDescList[] = { PCText_TakeOutItems, PCText_StoreItems, @@ -319,7 +319,7 @@ static void InitItemStorageMenu(u8 var) MenuDrawTextWindow(0, 0, 11, 9); PrintMenuItems(1, 1, 4, (struct MenuAction *)gPCText_ItemPCOptionsText); InitMenu(0, 1, 1, 4, var, 10); - ItemStorageMenuPrint(gPCText_OptionDescList[var].text); + ItemStorageMenuPrint(gPCText_OptionDescList[var]); } static void ItemStorageMenuPrint(const u8 *textPtr) @@ -334,13 +334,13 @@ static void ItemStorageMenuProcessInput(u8 var) { PlaySE(SE_SELECT); MoveMenuCursor(-1); - ItemStorageMenuPrint(gPCText_OptionDescList[GetMenuCursorPos()].text); + ItemStorageMenuPrint(gPCText_OptionDescList[GetMenuCursorPos()]); } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { PlaySE(SE_SELECT); MoveMenuCursor(1); - ItemStorageMenuPrint(gPCText_OptionDescList[GetMenuCursorPos()].text); + ItemStorageMenuPrint(gPCText_OptionDescList[GetMenuCursorPos()]); } else if (gMain.newKeys & A_BUTTON) { diff --git a/src/scrcmd.c b/src/scrcmd.c index a394f2a55..45552f2fa 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1416,7 +1416,7 @@ bool8 ScrCmd_bufferstd(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); u16 index = VarGet(ScriptReadHalfword(ctx)); - StringCopy(sScriptStringVars[stringVarIndex], gUnknown_083CE048[index].text); + StringCopy(sScriptStringVars[stringVarIndex], gUnknown_083CE048[index]); return FALSE; } diff --git a/src/script_menu.c b/src/script_menu.c index e1ad3f467..f4ac55fb9 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -547,7 +547,7 @@ const struct MultichoiceListStruct gMultichoiceLists[] = {(struct MenuAction *)MultichoiceList_72, 5} }; -const struct TextStruct gUnknown_083CE048[] = +const u8 *const gUnknown_083CE048[] = { OtherText_Cool2, OtherText_Beauty3, diff --git a/src/tv.c b/src/tv.c index 27fe9b84c..4701c7b8e 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1470,16 +1470,16 @@ void sub_80BEF10(u8 strvaridx, u8 rank) switch (rank) { case NORMAL_RANK: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[NORMAL_RANK + 5].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[NORMAL_RANK + 5]); break; case SUPER_RANK: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[SUPER_RANK + 5].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[SUPER_RANK + 5]); break; case HYPER_RANK: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[HYPER_RANK + 5].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[HYPER_RANK + 5]); break; case MASTER_RANK: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[MASTER_RANK + 5].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[MASTER_RANK + 5]); break; } } @@ -1489,19 +1489,19 @@ void CopyContestCategoryToStringVar(u8 strvaridx, u8 category) switch (category) { case CONTEST_COOL: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_COOL].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_COOL]); break; case CONTEST_BEAUTY: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_BEAUTY].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_BEAUTY]); break; case CONTEST_CUTE: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_CUTE].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_CUTE]); break; case CONTEST_SMART: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_SMART].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_SMART]); break; case CONTEST_TOUGH: - StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_TOUGH].text); + StringCopy(gUnknown_083D1464[strvaridx], gUnknown_083CE048[CONTEST_TOUGH]); break; } } -- cgit v1.2.3 From 86487b528ad5dd1de2b645cbc3440850f68bcb11 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 9 Jul 2017 11:12:07 -0500 Subject: decompile sub_80A50C8 --- src/item_menu.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index e4fa382f0..de47cbd17 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -39,6 +39,7 @@ extern s8 gUnknown_02038559; // selected pocket extern u8 gUnknown_0203855A; extern u8 gUnknown_0203855B; extern u8 gUnknown_0203855C; +extern u8 gUnknown_02038560; extern u8 gUnknown_02038562; extern u8 gUnknown_02038564; extern u8 gUnknown_03000700; @@ -54,6 +55,7 @@ extern void sub_80F9988(); extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); extern void PauseVerticalScrollIndicator(); extern u8 sub_80F9284(void); +extern void sub_808B5B4(); extern const struct CompressedSpriteSheet gUnknown_083C1CC8; extern const struct CompressedSpriteSheet gUnknown_083C1CD0; @@ -104,6 +106,7 @@ const u8 gUnknown_083C1690[][6] = {0, 8, 3, 2, 0, 0}, }; */ +extern const TaskFunc gUnknown_083C16BC[][2]; void sub_80A34E8(void); bool8 sub_80A3520(void); @@ -138,6 +141,7 @@ void sub_80A770C(void); void sub_80A7828(void); void sub_80A7834(); void sub_80A78B8(void); +void sub_80A797C(void); void CreateBagSprite(void); void CreateBagPokeballSprite(); void sub_80A7C64(void); @@ -1583,3 +1587,102 @@ bool8 sub_80A4F74(u8 a) } return retVal; } + +void sub_80A50C8(u8 taskId) +{ + s16 *r5 = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + if (sub_80A4F74(taskId) == TRUE) + { + sub_808B5B4(taskId); + return; + } + + if ((gMain.newKeys & SELECT_BUTTON) + && !(gUnknown_02038559 == 3 || gUnknown_02038559 == 2) + && gUnknown_03000701 < 2) + { + if (r5[10] == 0) + { + if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk2) + { + PlaySE(SE_SELECT); + sub_80A3F50(taskId); + } + sub_808B5B4(taskId); + } + else + { + if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk2) + { + PlaySE(SE_SELECT); + sub_80A3E90(taskId); + } + else + { + sub_80A3EF4(taskId); + } + sub_808B5B4(taskId); + } + return; + } + + if (gMain.newKeys & A_BUTTON) + { + if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2) + { + if (r5[10] == 0) + { + gScriptItemId = 0; + gUnknown_083C16BC[gUnknown_03000701][1](taskId); + } + else + { + sub_80A3EF4(taskId); + } + sub_808B5B4(taskId); + } + else + { + if (r5[10] == 0) + { + PlaySE(SE_SELECT); + gUnknown_02038560 = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + gScriptItemId = gUnknown_03005D24[gUnknown_02038560].itemId; + gUnknown_083C16BC[gUnknown_03000701][0](taskId); + sub_80F98A4(0); + sub_80F98A4(1); + sub_80F98A4(2); + sub_80F98A4(3); + sub_80A797C(); + } + else + { + sub_80A3E90(taskId); + } + sub_808B5B4(taskId); + } + return; + } + + if (gMain.newKeys & B_BUTTON) + { + if (r5[10] == 0) + { + if (gUnknown_03000701 != 5) + { + gScriptItemId = 0; + gUnknown_083C16BC[gUnknown_03000701][1](taskId); + } + } + else + { + sub_80A3EF4(taskId); + } + sub_808B5B4(taskId); + return; + } + } +} -- cgit v1.2.3 From bb096eb1367ed9a5e2acc9c68368de71a8f73a3c Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 9 Jul 2017 16:30:01 -0500 Subject: decompile sub_80A52C4 - sub_80A5B78 --- src/item_menu.c | 816 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/player_pc.c | 3 - 2 files changed, 808 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index de47cbd17..31da81e03 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,10 +1,12 @@ #include "global.h" #include "data2.h" #include "decompress.h" +#include "field_effect.h" #include "field_player_avatar.h" #include "graphics.h" #include "item.h" #include "items.h" +#include "item_menu.h" #include "item_use.h" #include "mail_data.h" #include "main.h" @@ -41,6 +43,7 @@ extern u8 gUnknown_0203855B; extern u8 gUnknown_0203855C; extern u8 gUnknown_02038560; extern u8 gUnknown_02038562; +extern u8 gUnknown_02038563; extern u8 gUnknown_02038564; extern u8 gUnknown_03000700; extern u8 gUnknown_03000701; @@ -56,6 +59,8 @@ extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); extern void PauseVerticalScrollIndicator(); extern u8 sub_80F9284(void); extern void sub_808B5B4(); +extern u8 sub_80F92F4(); +extern void sub_80C9C7C(u8); extern const struct CompressedSpriteSheet gUnknown_083C1CC8; extern const struct CompressedSpriteSheet gUnknown_083C1CD0; @@ -95,8 +100,6 @@ const struct MenuAction2 gUnknown_083C1640[] = {OtherText_Confirm, sub_80A69E0}, }; -extern const u8 gUnknown_083C1690[][6]; -/* const u8 gUnknown_083C1690[][6] = { {0, 1, 6, 2, 0, 0}, @@ -105,7 +108,18 @@ const u8 gUnknown_083C1690[][6] = {7, 0, 1, 8, 6, 2}, {0, 8, 3, 2, 0, 0}, }; -*/ + +const u8 gUnknown_083C16AE[][2] = +{ + {6, 2}, + {6, 2}, + {6, 2}, + {6, 2}, + {2, 0}, +}; + +//const u8 gUnknown_083C16B8[] = {7, 9, 8, 2}; + extern const TaskFunc gUnknown_083C16BC[][2]; void sub_80A34E8(void); @@ -126,6 +140,9 @@ void ItemListMenu_InitDescription(s16); void ItemListMenu_ChangeDescription(s16, int); void sub_80A4F68(u8); void sub_80A50C8(u8); +void sub_80A5AE4(u8); +void sub_80A5BF8(u8); +void HandleItemMenuPaletteFade(u8); void ItemListMenu_InitMenu(void); void sub_80A73C0(void); void sub_80A73F0(void); @@ -140,6 +157,7 @@ void sub_80A76A0(void); void sub_80A770C(void); void sub_80A7828(void); void sub_80A7834(); +int sub_80A78A0(); void sub_80A78B8(void); void sub_80A797C(void); void CreateBagSprite(void); @@ -303,7 +321,7 @@ bool8 sub_80A317C(void) bool8 sub_80A34B4(void) { - do + while (1) { if (sub_80A317C() == TRUE) { @@ -311,10 +329,13 @@ bool8 sub_80A34B4(void) ResetTasks(); return TRUE; } - } while (sub_80F9344() != 1); + if (sub_80F9344() == TRUE) + break; + } return FALSE; } + void sub_80A34E8(void) { sub_80F9368(); @@ -837,7 +858,7 @@ void sub_80A413C(void) sub_80A405C(gUnknown_03005D10[gUnknown_02038559].unk0); } -void sub_80A4164(u8 *a, u16 b, int c, u8 d) +void sub_80A4164(u8 *a, u16 b, enum StringConvertMode c, u8 d) { *a++ = CHAR_MULT_SIGN; a[0] = EXT_CTRL_CODE_BEGIN; @@ -847,7 +868,7 @@ void sub_80A4164(u8 *a, u16 b, int c, u8 d) ConvertIntToDecimalStringN(a, b, c, d); } -void sub_80A418C(u16 a, int b, u8 c, u8 d, u8 e) +void sub_80A418C(u16 a, enum StringConvertMode b, u8 c, u8 d, u8 e) { sub_80A4164(gStringVar1, a, b, e); MenuPrint(gStringVar1, c, d); @@ -1437,7 +1458,7 @@ void sub_80A4BF0(u16 *a) { MenuDrawTextWindow(0, 7, 13, 12); sub_80A4008(a, 1, 8, 12, 4); - if (sub_80F9344() == 1 && gUnknown_03000701 == 5) + if (sub_80F9344() == TRUE && gUnknown_03000701 == 5) { sub_80A7834(1, 0); } @@ -1686,3 +1707,782 @@ void sub_80A50C8(u8 taskId) } } } + +bool8 sub_80A52C4(u8 taskId, u16 b) +{ + s16 *taskData = gTasks[taskId].data; + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) + { + if (taskData[1] != b) + taskData[1]++; + else + taskData[1] = 1; + return TRUE; + } + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) + { + if (taskData[1] != 1) + taskData[1]--; + else + taskData[1] = b; + return TRUE; + } + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) + { + if (taskData[1] + 10 < b) + taskData[1] += 10; + else + taskData[1] = b; + return TRUE; + } + + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) + { + if (taskData[1] > 10) + taskData[1] -= 10; + else + taskData[1] = 1; + return TRUE; + } + + return FALSE; +} + +bool8 sub_80A5350(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + if (sub_80A52C4(taskId, gUnknown_03005D24[gUnknown_02038560].quantity) == TRUE) + { + if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 3); + else + sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 2); + return TRUE; + } + return FALSE; +} + +void sub_80A53CC(void) +{ + if (sub_80A34B4() == TRUE) + { + sub_80A3770(); + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + } +} + +void sub_80A53F8(void) +{ + gUnknown_03000701 = 0; + SetMainCallback2(sub_80A53CC); +} + +#ifdef NONMATCHING +void sub_80A5414(u8 taskId) +{ + TaskFunc r5 = NULL; + + if (sub_80A78A0() != 0) + { + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) + { + if ((gUnknown_03000700 & 1) && gUnknown_03000704[gUnknown_03000700 - 1] == 8) + { + PlaySE(SE_SELECT); + gUnknown_03000700 = MoveMenuCursor3(-1); + } + } + //_080A546C + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) + { + if (!(gUnknown_03000700 & 1) && gUnknown_03000704[gUnknown_03000700 + 1] != 8) + { + PlaySE(SE_SELECT); + gUnknown_03000700 = MoveMenuCursor3(1); + } + } + //_080A549C + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) + { + if (gUnknown_03000700 > 1 && gUnknown_03000704[gUnknown_03000700 - 2] != 8) + { + PlaySE(SE_SELECT); + gUnknown_03000700 = MoveMenuCursor3(-2); + } + } + //_080A54CC + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) + { + if (gUnknown_03000700 <= 1 && gUnknown_03000704[gUnknown_03000700 + 2] != 8) + { + PlaySE(SE_SELECT); + gUnknown_03000700 = MoveMenuCursor3(2); + } + } + //_080A5500 + else if (!(gMain.newKeys & A_BUTTON)) + { + if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A4DA4(gBGTilemapBuffers[1]); + r5 = gUnknown_083C1640[gUnknown_03000704[3]].func; + r5(taskId); + } + } + else + { + //_080A5590 + gTasks[taskId].data[10] = 0; + sub_80A4DA4(gBGTilemapBuffers[1]); + r5 = gUnknown_083C1640[gUnknown_03000704[gUnknown_03000700]].func; + r5(taskId); + } + } + //_080A5552 + if (r5 == NULL) + { + if (gUnknown_03000701 == 5) + { + if (gUnknown_03000700 == 0) + { + sub_8072DDC(12); + return; + } + //_080A55D4 + //else + //{ + if (gUnknown_03000700 == 0 || gUnknown_03000700 == 1) + sub_8072DCC(0x2F); + else + sub_8072DCC(0x30); + //} + } + //_080A55E0 + else + { + if (gUnknown_03000700 == 0 || gUnknown_03000700 == 1) + sub_8072DCC(0x2F); + else + sub_8072DCC(0x30); + } + } +} +#else +__attribute__((naked)) +void sub_80A5414(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + movs r5, 0\n\ + bl sub_80A78A0\n\ + cmp r0, 0\n\ + bne _080A5426\n\ + b _080A5552\n\ +_080A5426:\n\ + ldr r2, _080A5460 @ =gMain\n\ + ldrh r0, [r2, 0x30]\n\ + movs r1, 0xF0\n\ + ands r1, r0\n\ + cmp r1, 0x40\n\ + bne _080A546C\n\ + ldr r4, _080A5464 @ =gUnknown_03000700\n\ + ldrb r1, [r4]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080A5440\n\ + b _080A5552\n\ +_080A5440:\n\ + ldrb r1, [r4]\n\ + ldr r0, _080A5468 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + subs r1, 0x1\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x8\n\ + bne _080A5452\n\ + b _080A5552\n\ +_080A5452:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + b _080A54EE\n\ + .align 2, 0\n\ +_080A5460: .4byte gMain\n\ +_080A5464: .4byte gUnknown_03000700\n\ +_080A5468: .4byte gUnknown_03000704\n\ +_080A546C:\n\ + cmp r1, 0x80\n\ + bne _080A549C\n\ + ldr r4, _080A5494 @ =gUnknown_03000700\n\ + ldrb r1, [r4]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080A5552\n\ + ldrb r1, [r4]\n\ + ldr r0, _080A5498 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x1]\n\ + cmp r0, 0x8\n\ + beq _080A5552\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + b _080A54EE\n\ + .align 2, 0\n\ +_080A5494: .4byte gUnknown_03000700\n\ +_080A5498: .4byte gUnknown_03000704\n\ +_080A549C:\n\ + cmp r1, 0x20\n\ + bne _080A54CC\n\ + ldr r4, _080A54C4 @ =gUnknown_03000700\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x1\n\ + bls _080A5552\n\ + adds r1, r0, 0\n\ + ldr r0, _080A54C8 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + subs r1, 0x2\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x8\n\ + beq _080A5552\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + b _080A54EE\n\ + .align 2, 0\n\ +_080A54C4: .4byte gUnknown_03000700\n\ +_080A54C8: .4byte gUnknown_03000704\n\ +_080A54CC:\n\ + cmp r1, 0x10\n\ + bne _080A5500\n\ + ldr r4, _080A54F8 @ =gUnknown_03000700\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x1\n\ + bhi _080A5552\n\ + adds r1, r0, 0\n\ + ldr r0, _080A54FC @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x2]\n\ + cmp r0, 0x8\n\ + beq _080A5552\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x2\n\ +_080A54EE:\n\ + bl MoveMenuCursor3\n\ + strb r0, [r4]\n\ + b _080A5552\n\ + .align 2, 0\n\ +_080A54F8: .4byte gUnknown_03000700\n\ +_080A54FC: .4byte gUnknown_03000704\n\ +_080A5500:\n\ + ldrh r1, [r2, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080A5590\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080A5552\n\ + ldr r1, _080A5570 @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + strh r5, [r0, 0x1C]\n\ + ldr r1, _080A5574 @ =gUnknown_03005D10\n\ + ldr r0, _080A5578 @ =gUnknown_02038559\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r2, [r0]\n\ + adds r0, r4, 0\n\ + adds r1, r2, 0\n\ + bl sub_80A48E8\n\ + ldr r0, _080A557C @ =gBGTilemapBuffers + 0x800\n\ + bl sub_80A4DA4\n\ + ldr r1, _080A5580 @ =gUnknown_083C1640\n\ + ldr r0, _080A5584 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 3\n\ + adds r1, 0x4\n\ + adds r0, r1\n\ + ldr r5, [r0]\n\ + adds r0, r4, 0\n\ + bl _call_via_r5\n\ +_080A5552:\n\ + cmp r5, 0\n\ + bne _080A55FA\n\ + ldr r0, _080A5588 @ =gUnknown_03000701\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x5\n\ + bne _080A55E0\n\ + ldr r0, _080A558C @ =gUnknown_03000700\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080A55D4\n\ + movs r0, 0xC\n\ + bl sub_8072DDC\n\ + b _080A55FA\n\ + .align 2, 0\n\ +_080A5570: .4byte gTasks\n\ +_080A5574: .4byte gUnknown_03005D10\n\ +_080A5578: .4byte gUnknown_02038559\n\ +_080A557C: .4byte gBGTilemapBuffers + 0x800\n\ +_080A5580: .4byte gUnknown_083C1640\n\ +_080A5584: .4byte gUnknown_03000704\n\ +_080A5588: .4byte gUnknown_03000701\n\ +_080A558C: .4byte gUnknown_03000700\n\ +_080A5590:\n\ + ldr r1, _080A55C0 @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + strh r5, [r0, 0x1C]\n\ + ldr r0, _080A55C4 @ =gBGTilemapBuffers + 0x800\n\ + bl sub_80A4DA4\n\ + ldr r1, _080A55C8 @ =gUnknown_083C1640\n\ + ldr r0, _080A55CC @ =gUnknown_03000700\n\ + ldrb r2, [r0]\n\ + ldr r0, _080A55D0 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r1, 0x4\n\ + adds r0, r1\n\ + ldr r5, [r0]\n\ + adds r0, r4, 0\n\ + bl _call_via_r5\n\ + b _080A5552\n\ + .align 2, 0\n\ +_080A55C0: .4byte gTasks\n\ +_080A55C4: .4byte gBGTilemapBuffers + 0x800\n\ +_080A55C8: .4byte gUnknown_083C1640\n\ +_080A55CC: .4byte gUnknown_03000700\n\ +_080A55D0: .4byte gUnknown_03000704\n\ +_080A55D4:\n\ + cmp r0, 0x1\n\ + bls _080A55E8\n\ + movs r0, 0x30\n\ + bl sub_8072DCC\n\ + b _080A55FA\n\ +_080A55E0:\n\ + ldr r0, _080A55F0 @ =gUnknown_03000700\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + bhi _080A55F4\n\ +_080A55E8:\n\ + movs r0, 0x2F\n\ + bl sub_8072DCC\n\ + b _080A55FA\n\ + .align 2, 0\n\ +_080A55F0: .4byte gUnknown_03000700\n\ +_080A55F4:\n\ + movs r0, 0x30\n\ + bl sub_8072DCC\n\ +_080A55FA:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif + +__attribute__((naked)) +void sub_80A5600(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + movs r5, 0\n\ + ldr r2, _080A563C @ =gMain\n\ + ldrh r0, [r2, 0x30]\n\ + movs r1, 0xF0\n\ + ands r1, r0\n\ + cmp r1, 0x40\n\ + bne _080A5648\n\ + ldr r4, _080A5640 @ =gUnknown_03000700\n\ + ldrb r0, [r4]\n\ + cmp r0, 0\n\ + bne _080A561E\n\ + b _080A5736\n\ +_080A561E:\n\ + adds r1, r0, 0\n\ + ldr r0, _080A5644 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + subs r1, 0x1\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x8\n\ + bne _080A5630\n\ + b _080A5736\n\ +_080A5630:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + b _080A56D2\n\ + .align 2, 0\n\ +_080A563C: .4byte gMain\n\ +_080A5640: .4byte gUnknown_03000700\n\ +_080A5644: .4byte gUnknown_03000704\n\ +_080A5648:\n\ + cmp r1, 0x80\n\ + bne _080A5680\n\ + ldr r4, _080A5674 @ =gUnknown_03000700\n\ + ldrb r1, [r4]\n\ + ldr r0, _080A5678 @ =gUnknown_02038564\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + beq _080A5736\n\ + cmp r1, 0x2\n\ + beq _080A5736\n\ + ldr r0, _080A567C @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r0, r1, r0\n\ + ldrb r0, [r0, 0x1]\n\ + cmp r0, 0x8\n\ + beq _080A5736\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x1\n\ + b _080A56D2\n\ + .align 2, 0\n\ +_080A5674: .4byte gUnknown_03000700\n\ +_080A5678: .4byte gUnknown_02038564\n\ +_080A567C: .4byte gUnknown_03000704\n\ +_080A5680:\n\ + cmp r1, 0x20\n\ + bne _080A56B0\n\ + ldr r4, _080A56A8 @ =gUnknown_03000700\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x2\n\ + bls _080A5736\n\ + adds r1, r0, 0\n\ + ldr r0, _080A56AC @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + subs r1, 0x3\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x8\n\ + beq _080A5736\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x3\n\ + negs r0, r0\n\ + b _080A56D2\n\ + .align 2, 0\n\ +_080A56A8: .4byte gUnknown_03000700\n\ +_080A56AC: .4byte gUnknown_03000704\n\ +_080A56B0:\n\ + cmp r1, 0x10\n\ + bne _080A56E4\n\ + ldr r4, _080A56DC @ =gUnknown_03000700\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x2\n\ + bhi _080A5736\n\ + adds r1, r0, 0\n\ + ldr r0, _080A56E0 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r1, r0\n\ + ldrb r0, [r1, 0x3]\n\ + cmp r0, 0x8\n\ + beq _080A5736\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + movs r0, 0x3\n\ +_080A56D2:\n\ + bl MoveMenuCursor3\n\ + strb r0, [r4]\n\ + b _080A5736\n\ + .align 2, 0\n\ +_080A56DC: .4byte gUnknown_03000700\n\ +_080A56E0: .4byte gUnknown_03000704\n\ +_080A56E4:\n\ + ldrh r1, [r2, 0x2E]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080A5768\n\ + movs r0, 0x2\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080A5736\n\ + ldr r1, _080A574C @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + strh r5, [r0, 0x1C]\n\ + ldr r1, _080A5750 @ =gUnknown_03005D10\n\ + ldr r0, _080A5754 @ =gUnknown_02038559\n\ + ldrb r0, [r0]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r2, [r0]\n\ + adds r0, r4, 0\n\ + adds r1, r2, 0\n\ + bl sub_80A48E8\n\ + ldr r0, _080A5758 @ =gBGTilemapBuffers + 0x800\n\ + bl sub_80A4DA4\n\ + ldr r1, _080A575C @ =gUnknown_083C1640\n\ + ldr r0, _080A5760 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x5]\n\ + lsls r0, 3\n\ + adds r1, 0x4\n\ + adds r0, r1\n\ + ldr r5, [r0]\n\ + adds r0, r4, 0\n\ + bl _call_via_r5\n\ +_080A5736:\n\ + cmp r5, 0\n\ + bne _080A57BE\n\ + ldr r0, _080A5764 @ =gUnknown_03000700\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + bne _080A57AC\n\ + movs r0, 0xC\n\ + bl sub_8072DDC\n\ + b _080A57BE\n\ + .align 2, 0\n\ +_080A574C: .4byte gTasks\n\ +_080A5750: .4byte gUnknown_03005D10\n\ +_080A5754: .4byte gUnknown_02038559\n\ +_080A5758: .4byte gBGTilemapBuffers + 0x800\n\ +_080A575C: .4byte gUnknown_083C1640\n\ +_080A5760: .4byte gUnknown_03000704\n\ +_080A5764: .4byte gUnknown_03000700\n\ +_080A5768:\n\ + ldr r1, _080A5798 @ =gTasks\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + strh r5, [r0, 0x1C]\n\ + ldr r0, _080A579C @ =gBGTilemapBuffers + 0x800\n\ + bl sub_80A4DA4\n\ + ldr r1, _080A57A0 @ =gUnknown_083C1640\n\ + ldr r0, _080A57A4 @ =gUnknown_03000700\n\ + ldrb r2, [r0]\n\ + ldr r0, _080A57A8 @ =gUnknown_03000704\n\ + ldr r0, [r0]\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 3\n\ + adds r1, 0x4\n\ + adds r0, r1\n\ + ldr r5, [r0]\n\ + adds r0, r4, 0\n\ + bl _call_via_r5\n\ + b _080A5736\n\ + .align 2, 0\n\ +_080A5798: .4byte gTasks\n\ +_080A579C: .4byte gBGTilemapBuffers + 0x800\n\ +_080A57A0: .4byte gUnknown_083C1640\n\ +_080A57A4: .4byte gUnknown_03000700\n\ +_080A57A8: .4byte gUnknown_03000704\n\ +_080A57AC:\n\ + cmp r0, 0x2\n\ + bhi _080A57B8\n\ + movs r0, 0x2F\n\ + bl sub_8072DCC\n\ + b _080A57BE\n\ +_080A57B8:\n\ + movs r0, 0x30\n\ + bl sub_8072DCC\n\ +_080A57BE:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} + +void sub_80A57C4(void) +{ + u8 r5; + + gUnknown_03000704 = gUnknown_083C16AE[gUnknown_02038559]; + if (gUnknown_02038559 == 4) + { + gUnknown_02038564 = 1; + r5 = 9; + } + else if (sub_80F92F4(gScriptItemId) == 0) + { + gUnknown_03000704 = gUnknown_083C16AE[4]; + gUnknown_02038564 = 1; + r5 = 9; + } + else + { + gUnknown_02038564 = 2; + r5 = 7; + } + sub_80A4008(gBGTilemapBuffers[1], 7, r5 + 1, 6, gUnknown_02038564 * 2); + MenuDrawTextWindow(6, r5, 13, gUnknown_02038564 * 2 + 1 + r5); + sub_80A7834(0, r5); + InitMenu(0, 7, r5 + 1, gUnknown_02038564, 0, 6); +} + +void sub_80A5888(u8 taskId) +{ + if (sub_80A78A0() != 0) + { + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (gUnknown_03000700 != 0) + { + PlaySE(SE_SELECT); + gUnknown_03000700 = MoveMenuCursor(-1); + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (gUnknown_03000700 != gUnknown_02038564 - 1) + { + PlaySE(SE_SELECT); + gUnknown_03000700 = MoveMenuCursor(1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A4DA4(gBGTilemapBuffers[1]); + gUnknown_083C1640[gUnknown_03000704[gUnknown_03000700]].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A4DA4(gBGTilemapBuffers[1]); + gUnknown_083C1640[2].func(taskId); + } + } +} + +void sub_80A599C(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_805469C >> 16; + gTasks[taskId].data[9] = (u32)sub_805469C; + gLastFieldPokeMenuOpened = 0; + sub_80A5AE4(taskId); +} + +void sub_80A59D0(u8 taskId) +{ + gUnknown_03000700 = 0; + if (gUnknown_03000701 == 5) + gUnknown_03000700 = 1; + gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A73FC(); + if (sub_80F9344() == TRUE && gUnknown_03000701 != 5) + { + sub_80A57C4(); + gTasks[taskId].func = sub_80A5888; + } + else + { + sub_80A4BF0(gBGTilemapBuffers[1]); + if (gUnknown_02038559 != 3 || gUnknown_03000701 == 5) + gTasks[taskId].func = sub_80A5414; + else + gTasks[taskId].func = sub_80A5600; + } +} + +void sub_80A5AAC(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = HandleItemMenuPaletteFade; +} + +void sub_80A5AE4(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A5AAC(taskId); +} + +void HandleItemMenuPaletteFade(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + MainCallback cb = (MainCallback)((u16)taskData[8] << 16 | (u16)taskData[9]); + + SetMainCallback2(cb); + gpu_pal_allocator_reset__manage_upper_four(); + DestroyTask(taskId); + } +} + +void sub_80A5B40(void) +{ + while (1) + { + if (sub_80A317C() == TRUE) + { + ResetTasks(); + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_80A5B78(u8 taskId) +{ + if (ItemId_GetFieldFunc(gScriptItemId) != NULL) + { + PlaySE(SE_SELECT); + if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gScriptItemId) == 1) + { + sub_80A5BF8(taskId); + } + else + { + gTasks[taskId].data[2] = 0; + if (gUnknown_02038559 != 3) + ItemId_GetFieldFunc(gScriptItemId)(taskId); + else + sub_80C9C7C(taskId); + } + } +} + +/* +void sub_80A5BF8(u8 taskId) +{ + sub_80A73FC(); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gOtherText_NoPokemon, CleanUpItemMenuMessage, 1); +} +*/ \ No newline at end of file diff --git a/src/player_pc.c b/src/player_pc.c index 61a260630..b432f260e 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -30,9 +30,6 @@ extern void LoadScrollIndicatorPalette(void); extern void ClearMailStruct(struct MailStruct *); extern u8 sub_807D770(void); extern void sub_808B020(void); -extern void sub_80A4164(u8 *, u16, enum StringConvertMode, u8); -extern void sub_80A418C(u16, enum StringConvertMode, int, int, int); -extern void sub_80A6A30(void); extern void sub_80F944C(void); extern u8 *gPcItemMenuOptionOrder; -- cgit v1.2.3 From 968f050850a594d4ccca129abb70cfb8c5a29674 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 9 Jul 2017 19:09:10 -0500 Subject: decompile sub_80A5BF8 - sub_80A631C --- src/item_menu.c | 335 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 322 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 31da81e03..eebf5ab13 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "berry_tag_screen.h" #include "data2.h" #include "decompress.h" #include "field_effect.h" @@ -14,7 +15,9 @@ #include "menu_helpers.h" #include "palette.h" #include "party_menu.h" +#include "pokemon_menu.h" #include "rom4.h" +#include "script.h" #include "songs.h" #include "sound.h" #include "sprite.h" @@ -42,9 +45,11 @@ extern u8 gUnknown_0203855A; extern u8 gUnknown_0203855B; extern u8 gUnknown_0203855C; extern u8 gUnknown_02038560; +extern u8 gUnknown_02038561; extern u8 gUnknown_02038562; extern u8 gUnknown_02038563; extern u8 gUnknown_02038564; +extern void (*gUnknown_03005D00)(u8); extern u8 gUnknown_03000700; extern u8 gUnknown_03000701; extern const u8 *gUnknown_03000704; @@ -61,6 +66,11 @@ extern u8 sub_80F9284(void); extern void sub_808B5B4(); extern u8 sub_80F92F4(); extern void sub_80C9C7C(u8); +extern void pal_fill_black(void); +extern bool8 sub_807D770(void); +extern u8 sub_80F931C(); +extern void sub_808A3F8(u8); +extern void sub_80B3050(void); extern const struct CompressedSpriteSheet gUnknown_083C1CC8; extern const struct CompressedSpriteSheet gUnknown_083C1CD0; @@ -122,6 +132,8 @@ const u8 gUnknown_083C16AE[][2] = extern const TaskFunc gUnknown_083C16BC[][2]; +extern const struct YesNoFuncTable gUnknown_083C16F4; + void sub_80A34E8(void); bool8 sub_80A3520(void); void sub_80A362C(void); @@ -142,7 +154,9 @@ void sub_80A4F68(u8); void sub_80A50C8(u8); void sub_80A5AE4(u8); void sub_80A5BF8(u8); +void Task_CallItemUseOnFieldCallback(u8); void HandleItemMenuPaletteFade(u8); +void sub_8064E2C(void); void ItemListMenu_InitMenu(void); void sub_80A73C0(void); void sub_80A73F0(void); @@ -155,6 +169,7 @@ void sub_80A7630(void); void sub_80A763C(void); void sub_80A76A0(void); void sub_80A770C(void); +void DisplayCannotUseItemMessage(); void sub_80A7828(void); void sub_80A7834(); int sub_80A78A0(); @@ -874,7 +889,7 @@ void sub_80A418C(u16 a, enum StringConvertMode b, u8 c, u8 d, u8 e) MenuPrint(gStringVar1, c, d); } -void sub_80A41D4(void) +void sub_80A41D4(u8 taskId) { sub_80A763C(); } @@ -1711,7 +1726,7 @@ void sub_80A50C8(u8 taskId) bool8 sub_80A52C4(u8 taskId, u16 b) { s16 *taskData = gTasks[taskId].data; - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) { if (taskData[1] != b) @@ -1720,7 +1735,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) taskData[1] = 1; return TRUE; } - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) { if (taskData[1] != 1) @@ -1729,7 +1744,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) taskData[1] = b; return TRUE; } - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) { if (taskData[1] + 10 < b) @@ -1738,7 +1753,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) taskData[1] = b; return TRUE; } - + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) { if (taskData[1] > 10) @@ -1747,14 +1762,14 @@ bool8 sub_80A52C4(u8 taskId, u16 b) taskData[1] = 1; return TRUE; } - + return FALSE; } bool8 sub_80A5350(u8 taskId) { s16 *taskData = gTasks[taskId].data; - + if (sub_80A52C4(taskId, gUnknown_03005D24[gUnknown_02038560].quantity) == TRUE) { if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) @@ -1785,7 +1800,7 @@ void sub_80A53F8(void) void sub_80A5414(u8 taskId) { TaskFunc r5 = NULL; - + if (sub_80A78A0() != 0) { if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) @@ -2326,7 +2341,7 @@ _080A57BE:\n\ void sub_80A57C4(void) { u8 r5; - + gUnknown_03000704 = gUnknown_083C16AE[gUnknown_02038559]; if (gUnknown_02038559 == 4) { @@ -2432,11 +2447,11 @@ void sub_80A5AE4(u8 taskId) void HandleItemMenuPaletteFade(u8 taskId) { s16 *taskData = gTasks[taskId].data; - + if (!gPaletteFade.active) { MainCallback cb = (MainCallback)((u16)taskData[8] << 16 | (u16)taskData[9]); - + SetMainCallback2(cb); gpu_pal_allocator_reset__manage_upper_four(); DestroyTask(taskId); @@ -2478,11 +2493,305 @@ void sub_80A5B78(u8 taskId) } } -/* void sub_80A5BF8(u8 taskId) { sub_80A73FC(); sub_80A7590(); DisplayCannotUseItemMessage(taskId, gOtherText_NoPokemon, CleanUpItemMenuMessage, 1); } -*/ \ No newline at end of file + +void sub_80A5C24(u8 taskId) +{ + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void CleanUpItemMenuMessage(u8 taskId) +{ + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + MenuZeroFillWindowRect(7, 7, 13, 12); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A5C24; +} + +void CleanUpOverworldMessage(u8 taskId) +{ + MenuZeroFillWindowRect(0, 13, 29, 19); + DestroyTask(taskId); + sub_8064E2C(); + ScriptContext2_Disable(); +} + +void ExecuteItemUseFromBlackPalette(void) +{ + pal_fill_black(); + CreateTask(Task_CallItemUseOnFieldCallback, 8); +} + +void Task_CallItemUseOnFieldCallback(u8 taskId) +{ + if (sub_807D770() == TRUE) + gUnknown_03005D00(taskId); +} + +void sub_80A5D04(void) +{ + while (1) + { + if (sub_80A317C() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_80A5D38(u8 taskId) +{ + gTasks[taskId].data[1] = 0; + sub_80A4DA4(gBGTilemapBuffers[1]); + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A5D78(void) +{ + sub_80A4008(gBGTilemapBuffers[1], 8, 8, 5, 4); + DisplayYesNoMenu(7, 7, 1); +} + +void sub_80A5DA0(u16 itemId, u16 quantity) +{ + CopyItemName(itemId, gStringVar1); + if (quantity >= 100) + ConvertIntToDecimalStringN(gStringVar2, quantity, 0, 3); + else + ConvertIntToDecimalStringN(gStringVar2, quantity, 0, 2); + sub_80A4DA4(gBGTilemapBuffers[1]); + sub_80A7528(5); + sub_80A5D78(); +} + +void sub_80A5DF8(void) +{ + sub_80A4DA4(gBGTilemapBuffers[1]); + MenuZeroFillWindowRect(7, 6, 11, 13); + sub_80A7528(4); +} + +void sub_80A5E1C(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + gTasks[taskId].data[10] = 0; + sub_80A41D4(taskId); + sub_80A5D38(taskId); + } +} + +void sub_80A5E60(u8 taskId) +{ + sub_80A5DF8(); + sub_80A3D5C(taskId); + gTasks[taskId].func = sub_80A5E1C; +} + +void sub_80A5E90(u8 taskId) +{ + sub_80A5D38(taskId); +} + +void sub_80A5EA0(u8 taskId) +{ + if (sub_80A5350(taskId) == TRUE) + return; + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_80A5DA0(gScriptItemId, gTasks[taskId].data[1]); + DoYesNoFuncWithChoice(taskId, &gUnknown_083C16F4); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_80A5D38(taskId); + } +} + +void sub_80A5F14(u8 taskId) +{ + PlaySE(SE_SELECT); + gTasks[taskId].func = sub_80A5EA0; + sub_80A7528(3); + if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + sub_80A4DD8(taskId, 6, 9, 7, 3, 3); + else + sub_80A4DD8(taskId, 7, 9, 6, 3, 2); +} + +void sub_80A5F80(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A5FAC(u8 taskId) +{ + PlaySE(SE_SELECT); + if (gSaveBlock1.registeredItem == gScriptItemId) + { + sub_80A40D0(); + gSaveBlock1.registeredItem = 0; + } + else + { + sub_80A413C(); + gSaveBlock1.registeredItem = gScriptItemId; + } + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A6000(u8 taskId) +{ + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A6024(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A6000; + } +} + +void DisplayCannotBeHeldMessage(u8 taskId) +{ + sub_80A73FC(); + CopyItemName(gScriptItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeld); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); +} + +void ItemMenu_Give(u8 taskId) +{ + PlaySE(SE_SELECT); + if (sub_80F931C(gScriptItemId) == 0) + { + sub_80A73FC(); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); + } + else if (ItemId_GetImportance(gScriptItemId) == 0) + { + if (CalculatePlayerPartyCount() == 0) + { + sub_80A5BF8(taskId); + } + else + { + gTasks[taskId].data[8] = (u32)sub_808B020 >> 16; + gTasks[taskId].data[9] = (u32)sub_808B020; + gTasks[taskId].func = HandleItemMenuPaletteFade; + gUnknown_02038561 = 1; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + } + } + else + { + DisplayCannotBeHeldMessage(taskId); + } +} + +void sub_80A6178(u8 taskId) +{ + sub_80A5AE4(taskId); + gTasks[taskId].data[8] = (u32)BerryTagScreen_814625C >> 16; + gTasks[taskId].data[9] = (u32)BerryTagScreen_814625C; +} + +void sub_80A61A8(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A61D0(void) +{ + gUnknown_03000701 = 2; + SetMainCallback2(sub_80A61A8); +} + +void sub_80A61EC(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; + gTasks[taskId].data[9] = (u32)sub_808A3F8; + sub_80A5AE4(taskId); +} + +void sub_80A6214(u8 taskId) +{ + u8 r6 = gUnknown_02038559 + 1; + + if (sub_80F931C(gScriptItemId) == 0) + { + sub_80A73FC(); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gOtherText_CantWriteMail, sub_80A6024, 1); + } + else if (sub_80F92F4(gScriptItemId) == 0) + { + sub_80A73FC(); + CopyItemName(gScriptItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_CantBeHeldHere); + sub_80A7590(); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); + } + else if (r6 != 5 && ItemId_GetImportance(gScriptItemId) == 0) + { + gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; + gTasks[taskId].data[9] = (u32)sub_808A3F8; + sub_80A5AAC(taskId); + } + else + { + DisplayCannotBeHeldMessage(taskId); + } +} + +void sub_80A62D8(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A6300(void) +{ + gUnknown_03000701 = 3; + SetMainCallback2(sub_80A62D8); +} + +void sub_80A631C(u8 taskId) +{ + gFieldCallback = sub_80B3050; + gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; + gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; + sub_80A5AE4(taskId); +} -- cgit v1.2.3 From 5c2c970d012d37a2b582816c6d4636b531dfe3b8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 9 Jul 2017 22:59:49 -0500 Subject: decompile sub_80A6354 - sub_80A6D1C --- src/battle_setup.c | 20 +-- src/field_control_avatar.c | 2 +- src/field_map_obj_helpers.c | 2 +- src/item_menu.c | 419 ++++++++++++++++++++++++++++++++++++++++++-- src/script.c | 10 +- 5 files changed, 426 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/battle_setup.c b/src/battle_setup.c index adcbe8eaa..04674e739 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -845,17 +845,17 @@ void HandleFirstBattleEnd(void) SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); } -u32 TrainerBattleLoadArg32(u8 *ptr) +u32 TrainerBattleLoadArg32(const u8 *ptr) { return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24); } -u16 TrainerBattleLoadArg16(u8 *ptr) +u16 TrainerBattleLoadArg16(const u8 *ptr) { return ptr[0] | (ptr[1] << 8); } -u8 TrainerBattleLoadArg8(u8 *ptr) +u8 TrainerBattleLoadArg8(const u8 *ptr) { return ptr[0]; } @@ -867,16 +867,16 @@ u16 trainerflag_opponent(void) bool32 battle_exit_is_player_defeat(u32 a1) { - switch (a1 - 1) + switch (a1) { - case 1: case 2: - return TRUE; - case 0: case 3: + return TRUE; + case 1: case 4: case 5: case 6: + case 7: return FALSE; } return FALSE; @@ -895,7 +895,7 @@ void sub_80822BC(void) gTrainerBattleEndScript = 0; } -void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, u8 *data) +void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, const u8 *data) { while (1) { @@ -923,7 +923,7 @@ void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, u8 *data) *(u32 *)specs->ptr = 0; break; case 6: - *(u8 **)specs->ptr = data; + *(const u8 **)specs->ptr = data; return; } specs++; @@ -939,7 +939,7 @@ void battle_80801F0(void) } } -u8 *TrainerBattleConfigure(u8 *data) +u8 *TrainerBattleConfigure(const u8 *data) { sub_80822BC(); gTrainerBattleMode = TrainerBattleLoadArg8(data); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 2d8140be5..a4f52f4b9 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -206,7 +206,7 @@ int sub_8068024(struct FieldInput *input) sub_8071310(); return TRUE; } - if (input->pressedSelectButton && sub_80A6D1C() == 1) + if (input->pressedSelectButton && sub_80A6D1C() == TRUE) return TRUE; return FALSE; } diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index 17584c96a..46784cff3 100644 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -34,7 +34,7 @@ bool8 FreezeMapObject(struct MapObject *mapObject) } } -void FreezeMapObjects() +void FreezeMapObjects(void) { u8 i; for (i = 0; i < 16; i++) diff --git a/src/item_menu.c b/src/item_menu.c index eebf5ab13..5c859e684 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -3,6 +3,7 @@ #include "data2.h" #include "decompress.h" #include "field_effect.h" +#include "field_map_obj_helpers.h" #include "field_player_avatar.h" #include "graphics.h" #include "item.h" @@ -11,10 +12,13 @@ #include "item_use.h" #include "mail_data.h" #include "main.h" +#include "map_name_popup.h" #include "menu.h" #include "menu_helpers.h" +#include "money.h" #include "palette.h" #include "party_menu.h" +#include "player_pc.h" #include "pokemon_menu.h" #include "rom4.h" #include "script.h" @@ -56,6 +60,7 @@ extern const u8 *gUnknown_03000704; extern struct UnknownStruct1 gUnknown_03005D10[]; extern struct ItemSlot *gUnknown_03005D24; // selected pocket item slots extern bool8 gLinkOpen; +extern const u8 Event_NoRegisteredItem[]; extern void gpu_pal_allocator_reset__manage_upper_four(void); extern void sub_80F9020(void); @@ -71,6 +76,8 @@ extern bool8 sub_807D770(void); extern u8 sub_80F931C(); extern void sub_808A3F8(u8); extern void sub_80B3050(void); +extern void sub_80546B8(u8); +extern void sub_804E990(u8); extern const struct CompressedSpriteSheet gUnknown_083C1CC8; extern const struct CompressedSpriteSheet gUnknown_083C1CD0; @@ -128,11 +135,42 @@ const u8 gUnknown_083C16AE[][2] = {2, 0}, }; -//const u8 gUnknown_083C16B8[] = {7, 9, 8, 2}; +const u8 gUnknown_083C16B8[] = {7, 9, 8, 2}; + +void sub_80A59D0(u8); +void sub_80A599C(u8); +void sub_80A61EC(u8); +void sub_80A6214(u8); +void sub_80A631C(u8); +void sub_80A6354(u8); +void sub_80A68F0(u8); +void sub_80A6918(u8); +void sub_80A69B8(u8); +void sub_80A6A4C(u8); +void sub_80A6C6C(u8); +void sub_80A7024(u8); +void sub_80A70D8(u8); + +const TaskFunc gUnknown_083C16BC[][2] = +{ + {sub_80A59D0, sub_80A599C}, + {sub_80A7024, sub_80A70D8}, + {sub_80A6214, sub_80A61EC}, + {sub_80A6354, sub_80A631C}, + {sub_80A6918, sub_80A68F0}, + {sub_80A59D0, sub_80A69B8}, + {sub_80A6C6C, sub_80A6A4C}, +}; + +void sub_80A5E60(u8); +void sub_80A5E90(u8); -extern const TaskFunc gUnknown_083C16BC[][2]; +const struct YesNoFuncTable gUnknown_083C16F4 = {sub_80A5E60, sub_80A5E90}; -extern const struct YesNoFuncTable gUnknown_083C16F4; +void sub_80A65AC(u8); +void sub_80A6618(u8); + +const struct YesNoFuncTable gUnknown_083C16FC = {sub_80A65AC, sub_80A6618}; void sub_80A34E8(void); bool8 sub_80A3520(void); @@ -156,7 +194,15 @@ void sub_80A5AE4(u8); void sub_80A5BF8(u8); void Task_CallItemUseOnFieldCallback(u8); void HandleItemMenuPaletteFade(u8); +void sub_80A6444(u8); +void sub_80A648C(u8); +void Task_BuyHowManyDialogueHandleInput(u8); void sub_8064E2C(void); +void BuyMenuPrintItemQuantityAndPrice(u8); +void BuyMenuDisplayMessage(u16, u16); +void sub_80A683C(void); +void sub_80A6870(u16, u8); +void sub_80A699C(void); void ItemListMenu_InitMenu(void); void sub_80A73C0(void); void sub_80A73F0(void); @@ -459,16 +505,12 @@ void ClearBag(void) sub_80A3684(); } -extern const u16 gUnknown_083C1704[]; - void sub_80A3740(void) { - u16 arr[2]; + const u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE}; - // TODO: This is a local array - memcpy(arr, gUnknown_083C1704, 4); - LoadPalette(&arr[1], 0xD1, sizeof(arr[1])); - LoadPalette(&arr[0], 0xD8, sizeof(arr[0])); + LoadPalette(&colors[1], 0xD1, sizeof(colors[1])); + LoadPalette(&colors[0], 0xD8, sizeof(colors[0])); } void sub_80A3770(void) @@ -2795,3 +2837,360 @@ void sub_80A631C(u8 taskId) gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; sub_80A5AE4(taskId); } + +void sub_80A6354(u8 taskId) +{ + sub_80A7590(); + gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A73FC(); + CopyItemName(gScriptItemId, gStringVar2); + if (ItemId_GetPrice(gScriptItemId) == 0) + { + StringExpandPlaceholders(gStringVar4, gOtherText_CantBuyThat); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6444, 1); + } + else + { + StringExpandPlaceholders(gStringVar4, gOtherText_HowManyToSell); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A648C, 1); + } +} + +void sub_80A640C(u8 taskId) +{ + gTasks[taskId].data[10] = 0; + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A6444(u8 taskId) +{ + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A640C; +} + +void sub_80A648C(u8 taskId) +{ + gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; + sub_80A4008(gBGTilemapBuffers[1], 1, 11, 12, 2); + MenuDrawTextWindow(0, 10, 13, 13); + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = 1; + gTasks[taskId].data[3] = 11; + if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + sub_80A418C(1, 1, 1, 11, 3); + else + sub_80A418C(1, 1, 1, 11, 2); + BuyMenuDisplayMessage(gScriptItemId, 1); + sub_80A683C(); +} + +void sub_80A6520(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + BuyMenuPrintItemQuantityAndPrice(taskId); + } +} + +void sub_80A6548(u8 taskId) +{ + sub_80A48F8(taskId); + gTasks[taskId].func = sub_80A6520; +} + +void sub_80A6574(u8 taskId) +{ + PlaySE(SE_REGI); + sub_80A6870(gScriptItemId, gTasks[taskId].data[1]); + gTasks[taskId].func = sub_80A6548; +} + +void sub_80A65AC(u8 taskId) +{ + MenuZeroFillWindowRect(7, 6, 13, 12); + sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); + CopyItemName(gScriptItemId, gStringVar2); + StringExpandPlaceholders(gStringVar4, gOtherText_SoldItem); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6574, 1); + sub_80A3D5C(taskId); +} + +void sub_80A6618(u8 taskId) +{ + MenuZeroFillWindowRect(7, 6, 13, 12); + sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); + BuyMenuPrintItemQuantityAndPrice(taskId); +} + +void sub_80A6650(u8 taskId) +{ + sub_80A5D78(); + DoYesNoFuncWithChoice(taskId, &gUnknown_083C16FC); +} + +void Task_BuyHowManyDialogueHandleInput(u8 taskId) +{ + if (sub_80A5350(taskId) == TRUE) + { + MenuZeroFillWindowRect(6, 11, 12, 11); + BuyMenuDisplayMessage(gScriptItemId, gTasks[taskId].data[1]); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + MenuZeroFillWindowRect(0, 10, 13, 13); + sub_80A36B8(gBGTilemapBuffers[1], 0, 10, 13, 3); + ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gScriptItemId) / 2 * gTasks[taskId].data[1], 0, 6); + StringExpandPlaceholders(gStringVar4, gOtherText_CanPay); + DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6650, 1); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + BuyMenuPrintItemQuantityAndPrice(taskId); + } +} + +void sub_80A6760(u8 taskId) +{ + gTasks[taskId].data[10] = 0; + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void BuyMenuPrintItemQuantityAndPrice(u8 taskId) +{ + sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); + RemoveMoneyLabelObject(0, 0); + MenuZeroFillWindowRect(0, 4, 13, 13); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskId].func = sub_80A6760; +} + +void BuyMenuDisplayMessage(u16 itemId, u16 quantity) +{ + sub_80B7A94(ItemId_GetPrice(itemId) / 2 * quantity, 6, 6, 11); + ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(itemId) / 2 * quantity, 0, 6); +} + +void sub_80A683C(void) +{ + sub_80B7C14(gSaveBlock1.money, 0, 0); + sub_80A4008(gBGTilemapBuffers[1], 1, 1, 12, 2); +} + +void sub_80A6870(u16 itemId, u8 quantity) +{ + sub_80B79B8(&gSaveBlock1.money, ItemId_GetPrice(itemId) / 2 * quantity); + sub_80B7BEC(gSaveBlock1.money, 0, 0); +} + +void sub_80A68A4(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A68CC(void) +{ + gUnknown_02038559 = 3; + gUnknown_03000701 = 4; + SetMainCallback2(sub_80A68A4); +} + +void sub_80A68F0(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; + gTasks[taskId].data[9] = (u32)sub_80546B8; + sub_80A5AE4(taskId); +} + +void sub_80A6918(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; + gTasks[taskId].data[9] = (u32)sub_80546B8; + sub_80A5AAC(taskId); +} + +void sub_80A6940(void) +{ + while (1) + { + if (sub_80A317C() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + sub_80A699C(); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_80A6978(void) +{ + gUnknown_02038559 = 3; + gUnknown_03000701 = 5; + SetMainCallback2(sub_80A6940); +} + +void sub_80A699C(void) +{ + gUnknown_03000704 = gUnknown_083C16B8; + gUnknown_02038564 = 4; +} + +void sub_80A69B8(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; + gTasks[taskId].data[9] = (u32)sub_804E990; + sub_80A5AE4(taskId); +} + +void sub_80A69E0(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; + gTasks[taskId].data[9] = (u32)sub_804E990; + sub_80A5AAC(taskId); +} + +void sub_80A6A08(void) +{ + if (sub_80A34B4() == TRUE) + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); +} + +void sub_80A6A30(void) +{ + gUnknown_03000701 = 6; + SetMainCallback2(sub_80A6A08); +} + +void sub_80A6A4C(u8 taskId) +{ + gFieldCallback = ItemStorage_ReturnToMenuAfterDeposit; + gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; + gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; + sub_80A5AE4(taskId); +} + +void sub_80A6A84(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + sub_80A4DA4(gBGTilemapBuffers[1]); + CopyItemName(gScriptItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, taskData[1], 0, 3); + MenuZeroFillWindowRect(7, 6, 11, 13); + sub_80A7528(7); + sub_80A3D5C(taskId); + gTasks[taskId].func = sub_80A5E1C; +} + +void sub_80A6B00(u8 taskId) +{ + if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + PlaySE(SE_SELECT); + sub_80A5D38(taskId); + } +} + +void sub_80A6B64(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + if (ItemId_GetImportance(gScriptItemId) == 2) + { + gTasks[taskId].func = sub_80A6B00; + sub_80A7528(9); + } + else + { + if (AddPCItem(gScriptItemId, taskData[1]) == TRUE) + { + sub_80A6A84(taskId); + } + else + { + gTasks[taskId].func = sub_80A6B00; + sub_80A7528(8); + } + } +} + +void sub_80A6BE0(u8 taskId) +{ + if (sub_80A5350(taskId) == TRUE) + return; + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_80A4DA4(gBGTilemapBuffers[1]); + sub_80A6B64(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + PlaySE(SE_SELECT); + sub_80A5D38(taskId); + } +} + +void sub_80A6C6C(u8 taskId) +{ + gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A73FC(); + PlaySE(SE_SELECT); + sub_80A7590(); + if (gUnknown_02038559 != 4) + { + gTasks[taskId].func = sub_80A6BE0; + sub_80A7528(6); + if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + sub_80A4DD8(taskId, 6, 9, 7, 3, 3); + else + sub_80A4DD8(taskId, 7, 9, 6, 3, 2); + } + else + { + gTasks[taskId].data[1] = 1; + sub_80A6B64(taskId); + } +} + +bool32 sub_80A6D1C(void) +{ + HideMapNamePopup(); + if (gSaveBlock1.registeredItem != 0) + { + if (CheckBagHasItem(gSaveBlock1.registeredItem, 1) == TRUE) + { + u8 taskId; + + ScriptContext2_Enable(); + FreezeMapObjects(); + sub_80594C0(); + sub_80597F4(); + gScriptItemId = gSaveBlock1.registeredItem; + taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1.registeredItem), 8); + gTasks[taskId].data[2] = 1; + return TRUE; + } + gSaveBlock1.registeredItem = 0; + } + ScriptContext1_SetupScript(Event_NoRegisteredItem); + return TRUE; +} diff --git a/src/script.c b/src/script.c index 488a67de1..c27eb22fe 100644 --- a/src/script.c +++ b/src/script.c @@ -34,7 +34,7 @@ void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTable ctx->stack[i] = 0; } -u8 SetupBytecodeScript(struct ScriptContext *ctx, void *ptr) +u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr) { ctx->scriptPtr = ptr; ctx->mode = 1; @@ -106,7 +106,7 @@ u8 RunScript(struct ScriptContext *ctx) return 1; } -u8 ScriptPush(struct ScriptContext *ctx, u8 *ptr) +u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr) { if (ctx->stackDepth + 1 >= 20) { @@ -120,7 +120,7 @@ u8 ScriptPush(struct ScriptContext *ctx, u8 *ptr) } } -u8 *ScriptPop(struct ScriptContext *ctx) +const u8 *ScriptPop(struct ScriptContext *ctx) { if (ctx->stackDepth == 0) return NULL; @@ -202,7 +202,7 @@ bool8 ScriptContext2_RunScript(void) return 1; } -void ScriptContext1_SetupScript(u8 *ptr) +void ScriptContext1_SetupScript(const u8 *ptr) { InitScriptContext(&sScriptContext1, gScriptCmdTable, gScriptCmdTableEnd); SetupBytecodeScript(&sScriptContext1, ptr); @@ -221,7 +221,7 @@ void EnableBothScriptContexts() ScriptContext2_Enable(); } -void ScriptContext2_RunNewScript(u8 *ptr) +void ScriptContext2_RunNewScript(const u8 *ptr) { InitScriptContext(&sScriptContext2, &gScriptCmdTable, &gScriptCmdTableEnd); SetupBytecodeScript(&sScriptContext2, ptr); -- cgit v1.2.3 From c8bcd2e54f62756c47dfb13268613dfd4d1ec67f Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 10 Jul 2017 15:34:42 -0500 Subject: decompile sub_80A6D98 - sub_80A79B4 --- src/item_menu.c | 746 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 735 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 5c859e684..79a836d63 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -10,10 +10,12 @@ #include "items.h" #include "item_menu.h" #include "item_use.h" +#include "link.h" #include "mail_data.h" #include "main.h" #include "map_name_popup.h" #include "menu.h" +#include "menu_cursor.h" #include "menu_helpers.h" #include "money.h" #include "palette.h" @@ -42,12 +44,47 @@ struct UnknownStruct1 u8 unk3; }; -extern u8 gUnknown_02038540[]; +struct UnknownStruct2 +{ + u8 unk0; + u8 unk1; + u8 unk2; +}; + +struct UnknownStruct3 +{ + u8 unk0; + u8 unk1; + u8 unk2; +}; + +struct UnknownStruct4 +{ + u8 unk0; + u8 unk1; + u16 unk2; + const u8 *unk4; + TaskFunc unk8; +}; + +struct UnknownStruct5 +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; +}; + +extern struct UnknownStruct2 gUnknown_0203853C; +extern struct UnknownStruct3 gUnknown_02038540; +extern struct UnknownStruct4 gUnknown_02038544; +extern struct UnknownStruct5 gUnknown_02038550; +extern u8 gUnknown_02038554; extern u8 gUnknown_02038558; extern s8 gUnknown_02038559; // selected pocket extern u8 gUnknown_0203855A; -extern u8 gUnknown_0203855B; -extern u8 gUnknown_0203855C; +extern s8 gUnknown_0203855B; +extern s8 gUnknown_0203855C; extern u8 gUnknown_02038560; extern u8 gUnknown_02038561; extern u8 gUnknown_02038562; @@ -59,7 +96,6 @@ extern u8 gUnknown_03000701; extern const u8 *gUnknown_03000704; extern struct UnknownStruct1 gUnknown_03005D10[]; extern struct ItemSlot *gUnknown_03005D24; // selected pocket item slots -extern bool8 gLinkOpen; extern const u8 Event_NoRegisteredItem[]; extern void gpu_pal_allocator_reset__manage_upper_four(void); @@ -78,6 +114,10 @@ extern void sub_808A3F8(u8); extern void sub_80B3050(void); extern void sub_80546B8(u8); extern void sub_804E990(u8); +extern void sub_802E424(u8); + +#define ewram1E000 ((struct ItemSlot *)(ewram + 0x1E000)) // saved items pocket (for Wally battle) +#define ewram1F000 ((struct ItemSlot *)(ewram + 0x1F000)) // saved Pokeballs pocket (for Wally battle) extern const struct CompressedSpriteSheet gUnknown_083C1CC8; extern const struct CompressedSpriteSheet gUnknown_083C1CD0; @@ -203,24 +243,39 @@ void BuyMenuDisplayMessage(u16, u16); void sub_80A683C(void); void sub_80A6870(u16, u8); void sub_80A699C(void); +void sub_80A7230(u8); void ItemListMenu_InitMenu(void); void sub_80A73C0(void); void sub_80A73F0(void); void sub_80A73FC(void); void sub_80A740C(void); +void sub_80A7420(void); void sub_80A751C(void); -void sub_80A7528(); +void sub_80A7528(u8); void sub_80A7590(void); +void sub_80A75E4(void); void sub_80A7630(void); void sub_80A763C(void); void sub_80A76A0(void); void sub_80A770C(void); -void DisplayCannotUseItemMessage(); +void DisplayCannotUseItemMessage(int, const u8 *, TaskFunc, int); +void sub_80A7768(void); void sub_80A7828(void); -void sub_80A7834(); -int sub_80A78A0(); +void sub_80A7834(int, int); +bool32 sub_80A78A0(void); void sub_80A78B8(void); +bool32 sub_80A78C4(void); +void sub_80A78E8(void); +int sub_80A78F4(void); +void sub_80A7918(void); +int sub_80A7924(void); +int sub_80A7958(void); +void sub_80A7970(void); void sub_80A797C(void); +int sub_80A7988(void); +void sub_80A79B4(struct Sprite *); +void sub_80A79EC(struct Sprite *); +void sub_80A7A94(struct Sprite *); void CreateBagSprite(void); void CreateBagPokeballSprite(); void sub_80A7C64(void); @@ -968,7 +1023,7 @@ bool8 sub_80A42B0(u8 a, int b) { u8 r5; u16 *ptr; - u8 *r8 = gUnknown_02038540; + struct UnknownStruct3 *r8 = &gUnknown_02038540; if (gUnknown_03005D10[gUnknown_02038559].unk1 + a > gUnknown_03005D10[gUnknown_02038559].unk2) return TRUE; @@ -986,7 +1041,7 @@ bool8 sub_80A42B0(u8 a, int b) ptr[33] = 0x4F; if (a == 7) return TRUE; - if ((b == 1 && r8[2] != 0) || b == 2) + if ((b == 1 && r8->unk2 != 0) || b == 2) MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 13); else MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 17); @@ -1461,7 +1516,7 @@ bool32 sub_80A4A54(u8 *a, const u8 *b, u32 c) } } -void sub_80A4A98(u8 *a, u32 b) +void sub_80A4A98(const u8 *a, u32 b) { u8 text[100]; @@ -3194,3 +3249,672 @@ bool32 sub_80A6D1C(void) ScriptContext1_SetupScript(Event_NoRegisteredItem); return TRUE; } + +void sub_80A6D98(void) +{ + while (1) + { + if (sub_80A317C() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A50C8, 0); + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void sub_80A6DCC(void) +{ + gUnknown_03000700 = 0; + gUnknown_03000701 = 1; + SetMainCallback2(sub_80A6D98); +} + +void sub_80A6DF0(u16 *a) +{ + u8 r6 = (gUnknown_02038564 - 1) * 2; + + MenuDrawTextWindow(7, 9 - r6, 13, 12); + sub_80A4008(a, 8, 10 - r6, 5, r6 + 2); + if (gUnknown_02038564 == 1) + { + MenuPrint(gUnknown_083C1640[gUnknown_03000704[0]].text, 8, 10); + } + else + { + MenuPrint(gUnknown_083C1640[gUnknown_03000704[0]].text, 8, 8); + MenuPrint(gUnknown_083C1640[gUnknown_03000704[1]].text, 8, 10); + } + InitMenu(0, 8, 10 - r6, gUnknown_02038564, 0, 5); + sub_80A7528(2); +} + +void sub_80A6EB8(u8 taskId) +{ + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) + { + if (gUnknown_03000700 == 1) + { + PlaySE(SE_SELECT); + gUnknown_03000700 = MoveMenuCursor(-1); + } + } + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) + { + if (gUnknown_03000700 + 1 < gUnknown_02038564) + { + PlaySE(SE_SELECT); + gUnknown_03000700 = MoveMenuCursor(1); + } + } + else if (gMain.newKeys & A_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A4DA4(gBGTilemapBuffers[1]); + gUnknown_083C1640[gUnknown_03000704[gUnknown_03000700]].func(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + gTasks[taskId].data[10] = 0; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A4DA4(gBGTilemapBuffers[1]); + gUnknown_083C1640[5].func(taskId); + } +} + +const u8 gUnknown_083C1708[] = {4, 5}; +const u8 gUnknown_083C170A[] = {5, 0}; + +void sub_80A6FDC(void) +{ + if (ItemId_GetBattleUsage(gScriptItemId) != 0) + { + gUnknown_03000704 = gUnknown_083C1708; + gUnknown_02038564 = 2; + } + else + { + gUnknown_03000704 = gUnknown_083C170A; + gUnknown_02038564 = 1; + } +} + +void sub_80A7024(u8 taskId) +{ + gUnknown_03000700 = 0; + sub_80A6FDC(); + gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A73FC(); + sub_80A6DF0(gBGTilemapBuffers[1]); + gTasks[taskId].func = sub_80A6EB8; +} + +void sub_80A7094(u8 taskId) +{ + gTasks[taskId].data[8] = (u32)sub_802E424 >> 16; + gTasks[taskId].data[9] = (u32)sub_802E424; + gTasks[taskId].func = HandleItemMenuPaletteFade; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void sub_80A70D8(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A7094(taskId); +} + +void ItemMenu_UseInBattle(u8 taskId) +{ + if (ItemId_GetBattleFunc(gScriptItemId) != NULL) + { + PlaySE(SE_SELECT); + ItemId_GetBattleFunc(gScriptItemId)(taskId); + } +} + +void sub_80A7124(u8 taskId) +{ + PlaySE(SE_SELECT); + sub_80A7528(0); + sub_80A41D4(taskId); + ItemListMenu_InitMenu(); + sub_80A37C0(taskId); +} + +void sub_80A7150(void) +{ + while (1) + { + if (sub_80A317C() == TRUE) + { + gUnknown_02038563 = CreateTask(sub_80A7230, 0); + gTasks[gUnknown_02038563].data[15] = 0; + break; + } + if (sub_80F9344() == TRUE) + break; + } +} + +void PrepareBagForWallyTutorial(void) +{ + u8 i; + + gUnknown_03000700 = 0; + gUnknown_02038559 = 0; + for (i = 0; i < 5; i++) + { + gUnknown_03005D10[i].unk0 = 0; + gUnknown_03005D10[i].unk1 = 0; + } + + // Save player's items + memcpy(ewram1E000, gSaveBlock1.bagPocket_Items, sizeof(gSaveBlock1.bagPocket_Items)); + memcpy(ewram1F000, gSaveBlock1.bagPocket_PokeBalls, sizeof(gSaveBlock1.bagPocket_PokeBalls)); + + // Add Wally's items to the bag + ClearItemSlots(gSaveBlock1.bagPocket_Items, ARRAY_COUNT(gSaveBlock1.bagPocket_Items)); + ClearItemSlots(gSaveBlock1.bagPocket_PokeBalls, ARRAY_COUNT(gSaveBlock1.bagPocket_PokeBalls)); + AddBagItem(ITEM_POTION, 1); + AddBagItem(ITEM_POKE_BALL, 1); + + gUnknown_03000701 = 7; + SetMainCallback2(sub_80A7150); +} + +void sub_80A7230(u8 taskId) +{ + s16 *taskData = gTasks[taskId].data; + + switch (taskData[15]) + { + case 102: + PlaySE(SE_SELECT); + sub_80A4E8C(1, 2); + break; + case 204: + PlaySE(SE_SELECT); + sub_80F98A4(2); + sub_80F98A4(3); + gScriptItemId = ITEM_POKE_BALL; + gUnknown_03000704 = gUnknown_083C1708; + gUnknown_02038564 = 2; + gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; + sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A73FC(); + sub_80A6DF0(gBGTilemapBuffers[1]); + break; + case 306: + PlaySE(SE_SELECT); + sub_80A4DA4(gBGTilemapBuffers[1]); + + // Restore player's items + memcpy(gSaveBlock1.bagPocket_Items, ewram1E000, sizeof(gSaveBlock1.bagPocket_Items)); + memcpy(gSaveBlock1.bagPocket_PokeBalls, ewram1F000, sizeof(gSaveBlock1.bagPocket_PokeBalls)); + + taskData[8] = (u32)sub_802E424 >> 16; + taskData[9] = (u32)sub_802E424; + gTasks[taskId].func = HandleItemMenuPaletteFade; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + return; + } + taskData[15]++; +} + +void ItemListMenu_InitMenu(void) +{ + InitMenu(0, 14, 2, gUnknown_03005D10[gUnknown_02038559].unk3 + 1, gUnknown_03005D10[gUnknown_02038559].unk0, 0); + CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 15); + sub_80A73C0(); +} + +void sub_80A73C0(void) +{ + sub_814AD7C(0x70, gUnknown_03005D10[gUnknown_02038559].unk0 * 16 + 16); +} + +void sub_80A73F0(void) +{ + sub_814ADC8(); +} + +void sub_80A73FC(void) +{ + HandleDestroyMenuCursors(); + sub_814AD44(); +} + +void sub_80A740C(void) +{ + sub_80A75E4(); + sub_80A7768(); + sub_80A7420(); +} + +void sub_80A7420(void) +{ + struct UnknownStruct2 *unkStruct = &gUnknown_0203853C; + int var; + + switch (unkStruct->unk0) + { + case 3: + unkStruct->unk0 = 2; + break; + case 2: + switch (unkStruct->unk2) + { + case 0: + var = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + ItemListMenu_ChangeDescription(gUnknown_03005D24[var].itemId, unkStruct->unk1); + break; + case 1: + sub_80A4A98(gOtherText_SwitchWhichItem, unkStruct->unk1); + break; + case 2: + sub_80A4A98(gOtherText_WhatWillYouDo2, unkStruct->unk1); + break; + case 3: + sub_80A4A98(gOtherText_HowManyToToss, unkStruct->unk1); + break; + case 4: + sub_80A4A98(gOtherText_ThrewAwayItem, unkStruct->unk1); + break; + case 5: + sub_80A4A98(gOtherText_OkayToThrowAwayPrompt, unkStruct->unk1); + break; + case 6: + sub_80A4A98(gOtherText_HowManyToDeposit, unkStruct->unk1); + break; + case 7: + sub_80A4A98(gOtherText_DepositedItems, unkStruct->unk1); + break; + case 8: + sub_80A4A98(gOtherText_NoRoomForItems, unkStruct->unk1); + break; + case 9: + sub_80A4A98(gOtherText_CantStoreSomeoneItem, unkStruct->unk1); + break; + } + unkStruct->unk1++; + if (unkStruct->unk1 == 3) + { + unkStruct->unk0 = 0; + sub_80A7918(); + } + break; + } +} + +void sub_80A751C(void) +{ + gUnknown_0203853C.unk0 = 0; +} + +void sub_80A7528(u8 a) +{ + gUnknown_0203853C.unk1 = 0; + gUnknown_0203853C.unk2 = a; + switch (sub_80A78F4()) + { + case 0: + gUnknown_0203853C.unk0 = 2; + while (gUnknown_0203853C.unk0 != 0) + sub_80A7420(); + break; + case 1: + gUnknown_0203853C.unk0 = 3; + break; + case 2: + gUnknown_0203853C.unk0 = 1; + break; + } +} + +void sub_80A756C(void) +{ + if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) + sub_80A7918(); + gUnknown_0203853C.unk0 = 0; +} + +void sub_80A7590(void) +{ + MenuZeroFillWindowRect(0, 13, 13, 20); + sub_80A756C(); +} + +void sub_80A75A8(void) +{ + if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) + gUnknown_0203853C.unk0 = 1; +} + +void sub_80A75C4(void) +{ + switch (gUnknown_0203853C.unk0) + { + case 1: + gUnknown_0203853C.unk0 = 3; + break; + case 0: + sub_80A7918(); + break; + } +} + +void sub_80A75E4(void) +{ + if (gUnknown_02038540.unk0 == 1 && sub_80A7988() == 0) + { + int r1; + + sub_80A47E8(gUnknown_02038563, gUnknown_02038540.unk1, gUnknown_02038540.unk1, 1); + gUnknown_02038540.unk1++; + if (gUnknown_02038540.unk2 != 0) + r1 = 5; + else + r1 = 7; + if (r1 < gUnknown_02038540.unk1) + { + gUnknown_02038540.unk0 = 0; + sub_80A78E8(); + } + } +} + +void sub_80A7630(void) +{ + gUnknown_02038540.unk0 = 0; +} + +void sub_80A763C(void) +{ + struct UnknownStruct3 *r4 = &gUnknown_02038540; + + switch (sub_80A78C4()) + { + case FALSE: + sub_80A48E8(gUnknown_02038563, 0, 7); + break; + case TRUE: + r4->unk0 = 1; + r4->unk1 = 0; + r4->unk2 = 0; + break; + } +} + +void sub_80A7678(void) +{ + if (gUnknown_02038540.unk0 == 1) + sub_80A78E8(); + gUnknown_02038540.unk0 = 0; +} + +void sub_80A7694(void) +{ + gUnknown_02038540.unk2 = 1; +} + +void sub_80A76A0(void) +{ + MenuZeroFillWindowRect(14, 2, 29, 18); + sub_80A7678(); +} + +bool32 sub_80A76B8(void) +{ + struct UnknownStruct3 *s = &gUnknown_02038540; + + return (s->unk0 == 0); +} + +bool32 sub_80A76D0(void) +{ + struct UnknownStruct3 *s = &gUnknown_02038540; + + return (s->unk1 > 5); +} + +void sub_80A76E8(void) +{ + if (gUnknown_02038544.unk0 == 1) + { + DisplayItemMessageOnField( + gUnknown_02038544.unk1, + gUnknown_02038544.unk4, + gUnknown_02038544.unk8, + gUnknown_02038544.unk2); + gUnknown_02038544.unk0 = 0; + } +} + +void sub_80A770C(void) +{ + gUnknown_02038544.unk0 = 0; +} + +void DisplayCannotUseItemMessage(int a, const u8 *b, TaskFunc func, int d) +{ + struct UnknownStruct4 *r4 = &gUnknown_02038544; + + switch (sub_80A7924()) + { + case 0: + DisplayItemMessageOnField(a, b, func, d); + break; + case 2: + r4->unk0 = 1; + r4->unk1 = a; + r4->unk4 = b; + r4->unk8 = func; + r4->unk2 = d; + break; + } +} + +void sub_80A7768(void) +{ + struct UnknownStruct5 *r4 = &gUnknown_02038550; + + if (r4->unk0 == 2) + { + if (r4->unk1 != 0) + { + if (r4->unk2 != 1) + { + const u8 *text = gUnknown_083C1640[gUnknown_03000704[r4->unk1 - 1]].text; + int var = r4->unk1 - 1; + + MenuPrint(text, 7, var * 2 + 1 + r4->unk3); + } + else + { + const u8 *text; + int var; + + if (r4->unk1 == 1) + text = sub_80A4B90(gScriptItemId); + else + text = gUnknown_083C1640[gUnknown_03000704[r4->unk1 - 1]].text; + var = r4->unk1 - 1; + MenuPrint(text, (var >> 1) * 6 + 1, (var & 1) * 2 + 8); + } + if (r4->unk1 == gUnknown_02038564) + { + r4->unk0 = 0; + sub_80A7970(); + } + } + r4->unk1++; + } +} + +void sub_80A7828(void) +{ + gUnknown_02038550.unk0 = 0; +} + +void sub_80A7834(int a, int b) +{ + struct UnknownStruct5 *r4 = &gUnknown_02038550; + + switch (sub_80A7958()) + { + case 1: + r4->unk0 = 2; + r4->unk1 = 0; + r4->unk2 = a; + r4->unk3 = b; + break; + case 2: + r4->unk0 = 1; + r4->unk1 = 0; + r4->unk2 = a; + r4->unk3 = b; + break; + } +} + +void sub_80A7868(void) +{ + if (gUnknown_02038550.unk0 == 2) + gUnknown_02038550.unk0 = 1; +} + +void sub_80A7880(void) +{ + switch (gUnknown_02038550.unk0) + { + case 1: + gUnknown_02038550.unk0 = 2; + break; + case 0: + sub_80A7970(); + break; + } +} + +bool32 sub_80A78A0(void) +{ + struct UnknownStruct5 *r0 = &gUnknown_02038550; + + return (r0->unk0 == 0); +} + +void sub_80A78B8(void) +{ + gUnknown_02038554 = 0; +} + +bool32 sub_80A78C4(void) +{ + bool32 retVal; + + if (gLinkOpen == TRUE) + { + sub_80A7868(); + sub_80A75A8(); + retVal = TRUE; + } + else + { + retVal = FALSE; + } + return retVal; +} + +void sub_80A78E8(void) +{ + sub_80A7880(); +} + +int sub_80A78F4(void) +{ + int retVal; + + if (gLinkOpen == TRUE) + { + if (sub_80A76B8() != 0) + retVal = 1; + else + retVal = 2; + } + else + { + retVal = 0; + } + return retVal; +} + +void sub_80A7918(void) +{ + sub_80A76E8(); +} + +int sub_80A7924(void) +{ + if (gLinkOpen == TRUE && sub_80A76B8() == 0) + { + if (sub_80A76D0() != 0) + { + sub_80A7678(); + return 0; + } + } + else + { + return 0; + } + sub_80A7694(); + return 2; +} + +int sub_80A7958(void) +{ + if (sub_80A76B8() == 0) + return 2; + sub_80A75A8(); + return 1; +} + +void sub_80A7970(void) +{ + sub_80A75C4(); +} + +void sub_80A797C(void) +{ + gUnknown_02038554 = 1; +} + +int sub_80A7988(void) +{ + int val = gUnknown_02038554; + + gUnknown_02038554 = 0; + return val; +} + +void sub_80A7998(struct Sprite *sprite) +{ + sprite->animNum = 0; + sprite->data0 = 0; + sprite->data1 = 0; + sprite->data2 = 0; + sprite->data3 = 0; + sprite->data4 = 0; + sprite->callback = sub_80A79B4; +} + +void sub_80A79B4(struct Sprite *sprite) +{ + if (gUnknown_0203855B != -1) + sub_80A79EC(sprite); + if (gUnknown_0203855C != 0) + sub_80A7A94(sprite); +} -- cgit v1.2.3 From 24ac9f1767a988278712911d24b5cd7bad7e45ae Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 10 Jul 2017 18:14:18 -0500 Subject: finish decompiling item_menu --- src/berry_tag_screen.c | 4 +- src/item_menu.c | 574 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 574 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 0e81e4fec..97f57b060 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -131,7 +131,7 @@ static bool8 sub_8146058(void) break; case 8: berry = gScriptItemId + OFFSET_7B; - gUnknown_0203932C = sub_80A7D8C(berry, 56, 64); + gUnknown_0203932C = CreateBerrySprite(berry, 56, 64); gMain.state += 1; break; case 9: @@ -571,7 +571,7 @@ static void sub_81468BC(void) sub_81464E4(); // center of berry sprite - gUnknown_0203932C = sub_80A7D8C(gScriptItemId + OFFSET_7B, 56, 64); + gUnknown_0203932C = CreateBerrySprite(gScriptItemId + OFFSET_7B, 56, 64); sub_8146600(gScriptItemId + OFFSET_7B); } diff --git a/src/item_menu.c b/src/item_menu.c index 79a836d63..a5cbcc7df 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "berry.h" #include "berry_tag_screen.h" #include "data2.h" #include "decompress.h" @@ -90,10 +91,12 @@ extern u8 gUnknown_02038561; extern u8 gUnknown_02038562; extern u8 gUnknown_02038563; extern u8 gUnknown_02038564; +extern u8 gUnknown_02038568; extern void (*gUnknown_03005D00)(u8); extern u8 gUnknown_03000700; extern u8 gUnknown_03000701; extern const u8 *gUnknown_03000704; +extern u16 gUnknown_030041B4; extern struct UnknownStruct1 gUnknown_03005D10[]; extern struct ItemSlot *gUnknown_03005D24; // selected pocket item slots extern const u8 Event_NoRegisteredItem[]; @@ -125,7 +128,6 @@ extern const struct CompressedSpritePalette gUnknown_083C1CD8; const struct BagPocket gBagPockets[NUM_BAG_POCKETS] = { - // pointer to items, capacity {gSaveBlock1.bagPocket_Items, 20}, {gSaveBlock1.bagPocket_PokeBalls, 16}, {gSaveBlock1.bagPocket_TMHM, 64}, @@ -276,8 +278,10 @@ int sub_80A7988(void); void sub_80A79B4(struct Sprite *); void sub_80A79EC(struct Sprite *); void sub_80A7A94(struct Sprite *); +void sub_80A7AE4(struct Sprite *); void CreateBagSprite(void); -void CreateBagPokeballSprite(); +void sub_80A7B6C(struct Sprite *); +void CreateBagPokeballSprite(u8); void sub_80A7C64(void); void sub_80A3118(void) @@ -3900,6 +3904,97 @@ int sub_80A7988(void) return val; } +const u16 gPalette_83C170C[] = INCBIN_U16("graphics/unknown/83C170C.gbapal"); +const u8 gSpriteImage_83C172C[] = INCBIN_U8("graphics/unknown_sprites/83C172C.4bpp"); + +const u8 gSpriteImage_UnusedCherry[] = INCBIN_U8("graphics/unused/cherry.4bpp"); +const u16 gSpritePalette_UnusedCherry[] = INCBIN_U16("graphics/unused/cherry.gbapal"); + +//------------------------------------------------------------------------------ +// Bag Sprite +//------------------------------------------------------------------------------ + +const struct OamData gOamData_83C1C4C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 7, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83C1C54[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83C1C5C[] = +{ + ANIMCMD_FRAME(64, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83C1C64[] = +{ + ANIMCMD_FRAME(128, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83C1C6C[] = +{ + ANIMCMD_FRAME(192, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83C1C74[] = +{ + ANIMCMD_FRAME(256, 4), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_83C1C7C[] = +{ + ANIMCMD_FRAME(320, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83C1C84[] = +{ + gSpriteAnim_83C1C54, + gSpriteAnim_83C1C5C, + gSpriteAnim_83C1C6C, + gSpriteAnim_83C1C74, + gSpriteAnim_83C1C7C, + gSpriteAnim_83C1C64, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83C1C9C[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -2, 2), + AFFINEANIMCMD_FRAME(0, 0, 2, 4), + AFFINEANIMCMD_FRAME(0, 0, -2, 4), + AFFINEANIMCMD_FRAME(0, 0, 2, 2), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1CC4[] = +{ + gSpriteAffineAnim_83C1C9C, +}; + +const struct CompressedSpriteSheet gUnknown_083C1CC8 = {gBagMaleTiles, 0x3000, 30000}; +const struct CompressedSpriteSheet gUnknown_083C1CD0 = {gBagFemaleTiles, 0x3000, 30000}; +const struct CompressedSpritePalette gUnknown_083C1CD8 = {gBagPalette, 30000}; + void sub_80A7998(struct Sprite *sprite) { sprite->animNum = 0; @@ -3918,3 +4013,478 @@ void sub_80A79B4(struct Sprite *sprite) if (gUnknown_0203855C != 0) sub_80A7A94(sprite); } + +void sub_80A79EC(struct Sprite *sprite) +{ + switch (sprite->data3) + { + case 0: + if (gUnknown_0203855B != 6) + { + sprite->animBeginning = TRUE; + sprite->animNum = gUnknown_0203855B; + gUnknown_0203855B = -1; + } + else + { + sprite->animBeginning = TRUE; + sprite->animNum = 0; + sprite->pos1.y -= 4; + sprite->data0 = 4; + sprite->data3 = 1; + sub_80A7AE4(sprite); + } + break; + case 1: + if (sprite->data0 != 0) + { + if (sprite->data1 != 0) + { + sprite->pos1.y++; + sprite->data0--; + } + sprite->data1 = (sprite->data1 + 1) & 1; + } + else + { + gUnknown_0203855B = -1; + sprite->data1 = 0; + sprite->data3 = 0; + } + break; + } +} + +void sub_80A7A94(struct Sprite *sprite) +{ + switch (sprite->data4) + { + case 0: + sprite->oam.affineMode = 1; + sprite->affineAnims = gSpriteAffineAnimTable_83C1CC4; + InitSpriteAffineAnim(sprite); + sprite->data4 = 1; + break; + case 1: + sprite->data2++; + if (sprite->data2 == 12) + sub_80A7AE4(sprite); + break; + } +} + +void sub_80A7AE4(struct Sprite *sprite) +{ + gUnknown_0203855C = 0; + sprite->oam.affineMode = 0; + sprite->data2 = 0; + sprite->data4 = 0; + FreeOamMatrix(sprite->oam.matrixNum); +} + +static const struct SpriteTemplate sBagSpriteTemplate = +{ + .tileTag = 30000, + .paletteTag = 30000, + .oam = &gOamData_83C1C4C, + .anims = gSpriteAnimTable_83C1C84, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_83C1CC4, + .callback = sub_80A7998, +}; + +void CreateBagSprite(void) +{ + CreateSprite(&sBagSpriteTemplate, 58, 40, 0); +} + +//------------------------------------------------------------------------------ +// Pokeball Sprite +//------------------------------------------------------------------------------ + +const struct OamData gOamData_83C1CF8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 4, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 8, + .affineParam = 0, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83C1D00[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 8, 32), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83C1D10[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -8, 32), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1D20[] = +{ + gSpriteAffineAnim_83C1D00, + gSpriteAffineAnim_83C1D10, +}; + +const struct SpriteFrameImage gSpriteImageTable_83C1D28[] = +{ + {gSpriteImage_83C172C, sizeof(gSpriteImage_83C172C)}, +}; + +const struct SpritePalette gUnknown_083C1D30 = {gPalette_83C170C, 8}; + +void sub_80A7B28(struct Sprite *sprite) +{ + sprite->data3 = 0; + sprite->data0 = 0; + sub_80A7B6C(sprite); + sprite->callback = sub_80A7B6C; +} + +void sub_80A7B48(struct Sprite *sprite) +{ + sprite->centerToCornerVecX = sprite->data5 - ((sprite->data0 + 1) & 1); + sprite->centerToCornerVecY = sprite->data6 - ((sprite->data0 + 1) & 1); +} + +void sub_80A7B6C(struct Sprite *sprite) +{ + if (sprite->data7 != 0) + { + switch (sprite->data3) + { + case 0: + sprite->oam.affineMode = 1; + if (sprite->data7 == 1) + sprite->affineAnims = gSpriteAffineAnimTable_83C1D20; + else + sprite->affineAnims = gSpriteAffineAnimTable_83C1D20 + 1; + InitSpriteAffineAnim(sprite); + sprite->data3 = 1; + sprite->data5 = sprite->centerToCornerVecX; + sprite->data6 = sprite->centerToCornerVecY; + sub_80A7B48(sprite); + break; + case 1: + sprite->data0++; + sub_80A7B48(sprite); + if (sprite->data0 == 32) + { + sprite->data0 = 0; + sprite->data3 = 0; + sprite->centerToCornerVecX = sprite->data5; + sprite->centerToCornerVecY = sprite->data6; + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + sprite->callback = SpriteCallbackDummy; + } + break; + } + } +} + +static const struct SpriteTemplate sPokeballSpriteTemplate = +{ + .tileTag = 0xFFFF, + .paletteTag = 8, + .oam = &gOamData_83C1CF8, + .anims = gSpriteAnimTable_83C1C84, + .images = gSpriteImageTable_83C1D28, + .affineAnims = gSpriteAffineAnimTable_83C1D20, + .callback = sub_80A7B28, +}; + +void CreateBagPokeballSprite(u8 a) +{ + LoadSpritePalette(&gUnknown_083C1D30); + gUnknown_02038568 = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0); + gSprites[gUnknown_02038568].data7 = a; +} + +void sub_80A7C64(void) +{ + FreeSpritePaletteByTag(8); + FreeOamMatrix(gSprites[gUnknown_02038568].oam.matrixNum); + DestroySprite(&gSprites[gUnknown_02038568]); +} + +#define ewramBerryPic ewram +#define ewramBerryPicTemp (ewram + 0x1000) + +const struct OamData gOamData_83C1D50 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 7, + .affineParam = 0, +}; + +const struct OamData gOamData_83C1D58 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 7, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83C1D60[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83C1D68[] = +{ + gSpriteAnim_83C1D60, +}; + +const struct SpriteFrameImage gSpriteImageTable_83C1D6C[] = +{ + {ewramBerryPic, 0x800}, +}; + +void sub_80A7DC4(struct Sprite *); +const struct SpriteTemplate sBerrySpriteTemplate = +{ + .tileTag = 0xFFFF, + .paletteTag = 30020, + .oam = &gOamData_83C1D50, + .anims = gSpriteAnimTable_83C1D68, + .images = gSpriteImageTable_83C1D6C, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A7DC4, +}; + +const union AffineAnimCmd gSpriteAffineAnim_83C1D8C[] = +{ + AFFINEANIMCMD_FRAME(-1, -1, -3, 96), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(-2, -2, -1, 64), + AFFINEANIMCMD_FRAME(-8, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -8, 0, 16), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd gSpriteAffineAnim_83C1DC4[] = +{ + AFFINEANIMCMD_FRAME(-1, -1, 3, 96), + AFFINEANIMCMD_FRAME(0, 0, 0, 16), + AFFINEANIMCMD_FRAME(-2, -2, 1, 64), + AFFINEANIMCMD_FRAME(-8, 0, 0, 16), + AFFINEANIMCMD_FRAME(0, -8, 0, 16), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_JUMP(0), +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1DFC[] = +{ + gSpriteAffineAnim_83C1D8C, + gSpriteAffineAnim_83C1DC4, +}; + +const struct SpriteTemplate gSpriteTemplate_83C1E04 = +{ + .tileTag = 0xFFFF, + .paletteTag = 30020, + .oam = &gOamData_83C1D58, + .anims = gSpriteAnimTable_83C1D68, + .images = gSpriteImageTable_83C1D6C, + .affineAnims = gSpriteAffineAnimTable_83C1DFC, + .callback = SpriteCallbackDummy, +}; + +static const struct {const u8 *lzPic; const u8 *lzPalette;} sBerryGraphicsTable[] = +{ + {gBerryPic_Cheri, gBerryPalette_Cheri}, + {gBerryPic_Chesto, gBerryPalette_Chesto}, + {gBerryPic_Pecha, gBerryPalette_Pecha}, + {gBerryPic_Rawst, gBerryPalette_Rawst}, + {gBerryPic_Aspear, gBerryPalette_Aspear}, + {gBerryPic_Leppa, gBerryPalette_Leppa}, + {gBerryPic_Oran, gBerryPalette_Oran}, + {gBerryPic_Persim, gBerryPalette_Persim}, + {gBerryPic_Lum, gBerryPalette_Lum}, + {gBerryPic_Sitrus, gBerryPalette_Sitrus}, + {gBerryPic_Figy, gBerryPalette_Figy}, + {gBerryPic_Wiki, gBerryPalette_Wiki}, + {gBerryPic_Mago, gBerryPalette_Mago}, + {gBerryPic_Aguav, gBerryPalette_Aguav}, + {gBerryPic_Iapapa, gBerryPalette_Iapapa}, + {gBerryPic_Razz, gBerryPalette_Razz}, + {gBerryPic_Bluk, gBerryPalette_Bluk}, + {gBerryPic_Nanab, gBerryPalette_Nanab}, + {gBerryPic_Wepear, gBerryPalette_Wepear}, + {gBerryPic_Pinap, gBerryPalette_Pinap}, + {gBerryPic_Pomeg, gBerryPalette_Pomeg}, + {gBerryPic_Kelpsy, gBerryPalette_Kelpsy}, + {gBerryPic_Qualot, gBerryPalette_Qualot}, + {gBerryPic_Hondew, gBerryPalette_Hondew}, + {gBerryPic_Grepa, gBerryPalette_Grepa}, + {gBerryPic_Tamato, gBerryPalette_Tamato}, + {gBerryPic_Cornn, gBerryPalette_Cornn}, + {gBerryPic_Magost, gBerryPalette_Magost}, + {gBerryPic_Rabuta, gBerryPalette_Rabuta}, + {gBerryPic_Nomel, gBerryPalette_Nomel}, + {gBerryPic_Spelon, gBerryPalette_Spelon}, + {gBerryPic_Pamtre, gBerryPalette_Pamtre}, + {gBerryPic_Watmel, gBerryPalette_Watmel}, + {gBerryPic_Durin, gBerryPalette_Durin}, + {gBerryPic_Belue, gBerryPalette_Belue}, + {gBerryPic_Liechi, gBerryPalette_Liechi}, + {gBerryPic_Ganlon, gBerryPalette_Ganlon}, + {gBerryPic_Salac, gBerryPalette_Salac}, + {gBerryPic_Petaya, gBerryPalette_Petaya}, + {gBerryPic_Apicot, gBerryPalette_Apicot}, + {gBerryPic_Lansat, gBerryPalette_Lansat}, + {gBerryPic_Starf, gBerryPalette_Starf}, + {gBerryPic_Enigma, gBerryPalette_Enigma}, +}; + +static void DrawBerryPic(const u8 *src, u8 *dst) +{ + u8 i; + u8 j; + + memset(dst, 0, 0x800); + dst += 0x100; + for (i = 0; i < 6; i++) + { + dst += 32; + for (j = 0; j < 6; j++) + { + memcpy(dst, src, 32); + dst += 32; + src += 32; + } + if (i != 5) + dst += 32; + } +} + +void LoadBerryPic(u8 berryId) +{ + struct SpritePalette spritePal; + + if (berryId == 0x2A && IsEnigmaBerryValid() == TRUE) + { + DrawBerryPic(gSaveBlock1.enigmaBerry.pic, ewramBerryPic); + spritePal.data = gSaveBlock1.enigmaBerry.palette; + spritePal.tag = 0x7544; + LoadSpritePalette(&spritePal); + } + else + { + spritePal.data = (u16 *)sBerryGraphicsTable[berryId].lzPalette; + spritePal.tag = 0x7544; + LoadCompressedObjectPalette((struct CompressedSpritePalette *)&spritePal); + sub_800D238(sBerryGraphicsTable[berryId].lzPic, ewramBerryPicTemp); + DrawBerryPic(ewramBerryPicTemp, ewramBerryPic); + } +} + +u8 CreateBerrySprite(u8 berryId, s16 x, s16 y) +{ + LoadBerryPic(berryId); + return CreateSprite(&sBerrySpriteTemplate, x, y, 0); +} + +void sub_80A7DC4(struct Sprite *sprite) +{ + sprite->pos2.y = -gUnknown_030041B4; +} + +void sub_80A7DD4(void) +{ + FreeSpritePaletteByTag(0x7544); + FreeSpritePaletteByTag(8); +} + +u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate) +{ + u8 spriteId; + + FreeSpritePaletteByTag(0x7544); + LoadBerryPic(berryId); + spriteId = CreateSprite(&gSpriteTemplate_83C1E04, x, y, 0); + if (animate == TRUE) + StartSpriteAffineAnim(&gSprites[spriteId], 1); + return spriteId; +} + +const struct CompressedSpriteSheet gUnknown_083C1F74 = {gBerryCheckCircle_Gfx, 2048, 0x2710}; + +const struct CompressedSpritePalette gUnknown_083C1F7C = {gBerryCheck_Pal, 0x2710}; + +const struct OamData gOamData_83C1F84 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +const union AnimCmd gSpriteAnim_83C1F8C[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_83C1F94[] = +{ + gSpriteAnim_83C1F8C, +}; + +const struct SpriteTemplate gSpriteTemplate_83C1F98 = +{ + .tileTag = 10000, + .paletteTag = 10000, + .oam = &gOamData_83C1F84, + .anims = gSpriteAnimTable_83C1F94, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A7DC4, +}; + +u8 sub_80A7E5C(s16 x) +{ + return CreateSprite(&gSpriteTemplate_83C1F98, x, 99, 0); +} -- cgit v1.2.3 From cb6e1059e6267ede9bbe957cbcc55eefe6bd0085 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 10 Jul 2017 23:33:46 -0500 Subject: do some labeling --- src/berry_tag_screen.c | 16 +- src/item_menu.c | 1700 +++++++++++++++++++++++++----------------------- src/new_game.c | 2 +- 3 files changed, 904 insertions(+), 814 deletions(-) (limited to 'src') diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 97f57b060..2d8ff2236 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -374,7 +374,7 @@ static void sub_81466E8(u8 taskId, s8 direction) lsls r0, 3\n\ ldr r1, _08146748 @ =gTasks + 0x8\n\ adds r6, r0, r1\n\ - ldr r4, _0814674C @ =gUnknown_03005D10\n\ + ldr r4, _0814674C @ =gBagPocketScrollStates\n\ movs r0, 0xC\n\ adds r0, r4\n\ mov r8, r0\n\ @@ -412,7 +412,7 @@ _08146728:\n\ b _08146766\n\ .align 2, 0\n\ _08146748: .4byte gTasks + 0x8\n\ -_0814674C: .4byte gUnknown_03005D10\n\ +_0814674C: .4byte gBagPocketScrollStates\n\ _08146750:\n\ mov r4, r8\n\ ldrb r0, [r4, 0x2]\n\ @@ -487,7 +487,7 @@ static void sub_8146810(s8 berry) asrs r1, r0, 24\n\ cmp r1, 0\n\ ble _08146848\n\ - ldr r0, _08146840 @ =gUnknown_03005D10\n\ + ldr r0, _08146840 @ =gBagPocketScrollStates\n\ adds r4, r0, 0\n\ adds r4, 0xC\n\ ldrb r2, [r0, 0xC]\n\ @@ -504,12 +504,12 @@ static void sub_8146810(s8 berry) movs r0, 0x7\n\ b _0814686E\n\ .align 2, 0\n\ -_08146840: .4byte gUnknown_03005D10\n\ +_08146840: .4byte gBagPocketScrollStates\n\ _08146844:\n\ adds r0, r2, r3\n\ b _0814686E\n\ _08146848:\n\ - ldr r0, _08146868 @ =gUnknown_03005D10\n\ + ldr r0, _08146868 @ =gBagPocketScrollStates\n\ adds r5, r0, 0\n\ adds r5, 0xC\n\ ldrb r2, [r0, 0xC]\n\ @@ -525,7 +525,7 @@ _08146848:\n\ strb r1, [r6, 0xC]\n\ b _08146870\n\ .align 2, 0\n\ -_08146868: .4byte gUnknown_03005D10\n\ +_08146868: .4byte gBagPocketScrollStates\n\ _0814686C:\n\ adds r0, r2, r4\n\ _0814686E:\n\ @@ -538,7 +538,7 @@ _08146870:\n\ ldrb r1, [r0, 0x1]\n\ ldrb r0, [r0]\n\ adds r1, r0\n\ - ldr r0, _081468B0 @ =gUnknown_03005D24\n\ + ldr r0, _081468B0 @ =gCurrentBagPocketItemSlots\n\ ldr r0, [r0]\n\ lsls r1, 2\n\ adds r1, r0\n\ @@ -559,7 +559,7 @@ _08146870:\n\ bx r0\n\ .align 2, 0\n\ _081468AC: .4byte gScriptItemId\n\ -_081468B0: .4byte gUnknown_03005D24\n\ +_081468B0: .4byte gCurrentBagPocketItemSlots\n\ _081468B4: .4byte gUnknown_0203932C\n\ _081468B8: .4byte gSprites\n\ .syntax divided\n"); diff --git a/src/item_menu.c b/src/item_menu.c index a5cbcc7df..8fd699778 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -37,18 +37,18 @@ extern u8 ewram[]; -struct UnknownStruct1 +struct PocketScrollState { - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; + u8 cursorPos; + u8 scrollTop; + u8 numSlots; + u8 cursorMax; }; struct UnknownStruct2 { u8 unk0; - u8 unk1; + u8 textLine; u8 unk2; }; @@ -76,29 +76,58 @@ struct UnknownStruct5 u8 unk3; }; -extern struct UnknownStruct2 gUnknown_0203853C; -extern struct UnknownStruct3 gUnknown_02038540; -extern struct UnknownStruct4 gUnknown_02038544; -extern struct UnknownStruct5 gUnknown_02038550; -extern u8 gUnknown_02038554; -extern u8 gUnknown_02038558; -extern s8 gUnknown_02038559; // selected pocket -extern u8 gUnknown_0203855A; -extern s8 gUnknown_0203855B; -extern s8 gUnknown_0203855C; +struct UnknownStruct6 +{ + u8 unk0; +}; + +enum +{ + BAG_POCKET_ITEMS, // 0 + BAG_POCKET_POKE_BALLS, // 1 + BAG_POCKET_TMs_HMs, // 2 + BAG_POCKET_BERRIES, // 3 + BAG_POCKET_KEY_ITEMS, // 4 +}; + +EWRAM_DATA static struct UnknownStruct2 gUnknown_0203853C = {0}; +EWRAM_DATA static struct UnknownStruct3 gUnknown_02038540 = {0}; +EWRAM_DATA static struct UnknownStruct4 gUnknown_02038544 = {0}; +EWRAM_DATA static struct UnknownStruct5 gUnknown_02038550 = {0}; +EWRAM_DATA static struct UnknownStruct6 gUnknown_02038554 = {0}; // There are 3 bytes of padding after this, so I assume it's a struct +EWRAM_DATA static u8 gUnknown_02038558 = 0; +EWRAM_DATA static s8 sCurrentBagPocket = 0; +EWRAM_DATA static u8 gUnknown_0203855A = 0; +EWRAM_DATA static s8 gUnknown_0203855B = 0; +EWRAM_DATA static s8 gUnknown_0203855C = 0; +EWRAM_DATA u16 gScriptItemId = 0; extern u8 gUnknown_02038560; extern u8 gUnknown_02038561; extern u8 gUnknown_02038562; extern u8 gUnknown_02038563; extern u8 gUnknown_02038564; -extern u8 gUnknown_02038568; +extern u8 sPokeballSpriteId; extern void (*gUnknown_03005D00)(u8); -extern u8 gUnknown_03000700; -extern u8 gUnknown_03000701; -extern const u8 *gUnknown_03000704; +extern u8 sPopupMenuSelection; + +enum +{ + RETURN_TO_FIELD_0, + RETURN_TO_BATTLE, + RETURN_TO_PKMN_LIST, + RETURN_TO_SHOP, + RETURN_TO_FIELD_4, + RETURN_TO_FIELD_5, + RETURN_TO_PC, + RETURN_TO_WALLY_BATTLE, +}; + +extern u8 sReturnLocation; + +extern const u8 *sPopupMenuActionList; extern u16 gUnknown_030041B4; -extern struct UnknownStruct1 gUnknown_03005D10[]; -extern struct ItemSlot *gUnknown_03005D24; // selected pocket item slots +extern struct PocketScrollState gBagPocketScrollStates[]; +extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots extern const u8 Event_NoRegisteredItem[]; extern void gpu_pal_allocator_reset__manage_upper_four(void); @@ -118,13 +147,17 @@ extern void sub_80B3050(void); extern void sub_80546B8(u8); extern void sub_804E990(u8); extern void sub_802E424(u8); +extern void sub_8064E2C(void); -#define ewram1E000 ((struct ItemSlot *)(ewram + 0x1E000)) // saved items pocket (for Wally battle) -#define ewram1F000 ((struct ItemSlot *)(ewram + 0x1F000)) // saved Pokeballs pocket (for Wally battle) +#define ewramBerryPic (ewram + 0) +#define ewramBerryPicTemp (ewram + 0x1000) +#define ewramSavedItemsPocket ((struct ItemSlot *)(ewram + 0x1E000)) // saved items pocket (for Wally battle) +#define ewramSavedPokeballsPocket ((struct ItemSlot *)(ewram + 0x1F000)) // saved Pokeballs pocket (for Wally battle) +#define ewramBagSetupStep (ewram[0x1FFFF]) -extern const struct CompressedSpriteSheet gUnknown_083C1CC8; -extern const struct CompressedSpriteSheet gUnknown_083C1CD0; -extern const struct CompressedSpritePalette gUnknown_083C1CD8; +extern const struct CompressedSpriteSheet sMaleBagSpriteSheet; +extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet; +extern const struct CompressedSpritePalette sBagSpritePalette; const struct BagPocket gBagPockets[NUM_BAG_POCKETS] = { @@ -135,37 +168,87 @@ const struct BagPocket gBagPockets[NUM_BAG_POCKETS] = {gSaveBlock1.bagPocket_KeyItems, 20}, }; -void sub_80A5B78(u8); -void sub_80A5F14(u8); -void sub_80A5F80(u8); -void sub_80A5FAC(u8); -void ItemMenu_UseInBattle(u8); -void sub_80A7124(u8); -void ItemMenu_Give(u8); -void sub_80A6178(u8); -void sub_80A69E0(u8); - -const struct MenuAction2 gUnknown_083C1640[] = -{ - {OtherText_Use, sub_80A5B78}, - {OtherText_Toss, sub_80A5F14}, - {gOtherText_CancelNoTerminator, sub_80A5F80}, - {OtherText_Register, sub_80A5FAC}, - {OtherText_Use, ItemMenu_UseInBattle}, - {gOtherText_CancelNoTerminator, sub_80A7124}, - {OtherText_Give2, ItemMenu_Give}, - {OtherText_CheckTag, sub_80A6178}, +static void HandlePopupMenuAction_UseOnField(u8); +static void HandlePopupMenuAction_Toss(u8); +static void sub_80A5F80(u8); +static void HandlePopupMenuAction_Register(u8); +static void HandlePopupMenuAction_UseInBattle(u8); +static void sub_80A7124(u8); +static void HandlePopupMenuAction_Give(u8); +static void HandlePopupMenuAction_CheckTag(u8); +static void HandlePopupMenuAction_Confirm(u8); + +enum +{ + ITEM_ACTION_USE_0, // 0 + ITEM_ACTION_TOSS, // 1 + ITEM_ACTION_CANCEL_2, // 2 + ITEM_ACTION_REGISTER, // 3 + ITEM_ACTION_USE_4, // 4 + ITEM_ACTION_CANCEL_5, // 5 + ITEM_ACTION_GIVE, // 6 + ITEM_ACTION_CHECK_TAG, // 7 + ITEM_ACTION_NONE, // 8 + ITEM_ACTION_CONFIRM, // 9 +}; + +static const struct MenuAction2 sItemPopupMenuActions[] = +{ + {OtherText_Use, HandlePopupMenuAction_UseOnField}, + {OtherText_Toss, HandlePopupMenuAction_Toss}, + {gOtherText_CancelNoTerminator, sub_80A5F80}, + {OtherText_Register, HandlePopupMenuAction_Register}, + {OtherText_Use, HandlePopupMenuAction_UseInBattle}, + {gOtherText_CancelNoTerminator, sub_80A7124}, + {OtherText_Give2, HandlePopupMenuAction_Give}, + {OtherText_CheckTag, HandlePopupMenuAction_CheckTag}, {gOtherText_CancelWithTerminator, NULL}, - {OtherText_Confirm, sub_80A69E0}, + {OtherText_Confirm, HandlePopupMenuAction_Confirm}, }; -const u8 gUnknown_083C1690[][6] = +static const u8 sItemPopupMenuChoicesTable[][6] = { - {0, 1, 6, 2, 0, 0}, - {6, 1, 8, 2, 0, 0}, - {0, 8, 6, 2, 0, 0}, - {7, 0, 1, 8, 6, 2}, - {0, 8, 3, 2, 0, 0}, + [BAG_POCKET_ITEMS] = + { + ITEM_ACTION_USE_0, + ITEM_ACTION_TOSS, + ITEM_ACTION_GIVE, + ITEM_ACTION_CANCEL_2, + }, + + [BAG_POCKET_POKE_BALLS] = + { + ITEM_ACTION_GIVE, + ITEM_ACTION_TOSS, + ITEM_ACTION_NONE, + ITEM_ACTION_CANCEL_2, + }, + + [BAG_POCKET_TMs_HMs] = + { + ITEM_ACTION_USE_0, + ITEM_ACTION_NONE, + ITEM_ACTION_GIVE, + ITEM_ACTION_CANCEL_2, + }, + + [BAG_POCKET_BERRIES] = + { + ITEM_ACTION_CHECK_TAG, + ITEM_ACTION_USE_0, + ITEM_ACTION_TOSS, + ITEM_ACTION_NONE, + ITEM_ACTION_GIVE, + ITEM_ACTION_CANCEL_2 + }, + + [BAG_POCKET_KEY_ITEMS] = + { + ITEM_ACTION_USE_0, + ITEM_ACTION_NONE, + ITEM_ACTION_REGISTER, + ITEM_ACTION_CANCEL_2, + }, }; const u8 gUnknown_083C16AE[][2] = @@ -179,112 +262,110 @@ const u8 gUnknown_083C16AE[][2] = const u8 gUnknown_083C16B8[] = {7, 9, 8, 2}; -void sub_80A59D0(u8); -void sub_80A599C(u8); -void sub_80A61EC(u8); -void sub_80A6214(u8); -void sub_80A631C(u8); -void sub_80A6354(u8); -void sub_80A68F0(u8); -void sub_80A6918(u8); -void sub_80A69B8(u8); -void sub_80A6A4C(u8); -void sub_80A6C6C(u8); -void sub_80A7024(u8); -void sub_80A70D8(u8); - -const TaskFunc gUnknown_083C16BC[][2] = -{ - {sub_80A59D0, sub_80A599C}, - {sub_80A7024, sub_80A70D8}, - {sub_80A6214, sub_80A61EC}, - {sub_80A6354, sub_80A631C}, - {sub_80A6918, sub_80A68F0}, - {sub_80A59D0, sub_80A69B8}, - {sub_80A6C6C, sub_80A6A4C}, +static void OnItemSelect_Field05(u8); +static void OnBagClose_Field0(u8); +static void OnBagClose_PkmnList(u8); +static void OnItemSelect_PkmnList(u8); +static void OnBagClose_Shop(u8); +static void OnItemSelect_Shop(u8); +static void OnBagClose_Field4(u8); +static void OnItemSelect_Field4(u8); +static void OnBagClose_Field5(u8); +static void OnBagClose_PC(u8); +static void OnItemSelect_PC(u8); +static void OnItemSelect_Battle(u8); +static void OnBagClose_Battle(u8); + +static const struct {TaskFunc onItemSelect; TaskFunc onBagClose;} gUnknown_083C16BC[] = +{ + [RETURN_TO_FIELD_0] = {OnItemSelect_Field05, OnBagClose_Field0}, + [RETURN_TO_BATTLE] = {OnItemSelect_Battle, OnBagClose_Battle}, + [RETURN_TO_PKMN_LIST] = {OnItemSelect_PkmnList, OnBagClose_PkmnList}, + [RETURN_TO_SHOP] = {OnItemSelect_Shop, OnBagClose_Shop}, + [RETURN_TO_FIELD_4] = {OnItemSelect_Field4, OnBagClose_Field4}, + [RETURN_TO_FIELD_5] = {OnItemSelect_Field05, OnBagClose_Field5}, + [RETURN_TO_PC] = {OnItemSelect_PC, OnBagClose_PC}, }; -void sub_80A5E60(u8); -void sub_80A5E90(u8); +static void sub_80A5E60(u8); +static void sub_80A5E90(u8); -const struct YesNoFuncTable gUnknown_083C16F4 = {sub_80A5E60, sub_80A5E90}; +static const struct YesNoFuncTable gUnknown_083C16F4 = {sub_80A5E60, sub_80A5E90}; -void sub_80A65AC(u8); -void sub_80A6618(u8); +static void sub_80A65AC(u8); +static void sub_80A6618(u8); const struct YesNoFuncTable gUnknown_083C16FC = {sub_80A65AC, sub_80A6618}; void sub_80A34E8(void); -bool8 sub_80A3520(void); -void sub_80A362C(void); -void sub_80A3740(void); -void sub_80A396C(u16 *, u8, u8, u8); -void sub_80A39B8(u16 *, u8); -void sub_80A39E4(u16 *, u8, u8, s8); -void sub_80A3AC0(u16 *, u8); -void SortItemSlots(struct BagPocket); -void sub_80A3D08(void); -void sub_80A3D24(u8); -void sub_80A3D40(void); -void sub_80A40D0(void); -void sub_80A48E8(u16, int, int); -void ItemListMenu_InitDescription(s16); -void ItemListMenu_ChangeDescription(s16, int); -void sub_80A4F68(u8); -void sub_80A50C8(u8); -void sub_80A5AE4(u8); -void sub_80A5BF8(u8); -void Task_CallItemUseOnFieldCallback(u8); -void HandleItemMenuPaletteFade(u8); -void sub_80A6444(u8); -void sub_80A648C(u8); -void Task_BuyHowManyDialogueHandleInput(u8); -void sub_8064E2C(void); -void BuyMenuPrintItemQuantityAndPrice(u8); -void BuyMenuDisplayMessage(u16, u16); -void sub_80A683C(void); -void sub_80A6870(u16, u8); -void sub_80A699C(void); -void sub_80A7230(u8); -void ItemListMenu_InitMenu(void); -void sub_80A73C0(void); -void sub_80A73F0(void); -void sub_80A73FC(void); -void sub_80A740C(void); -void sub_80A7420(void); -void sub_80A751C(void); -void sub_80A7528(u8); -void sub_80A7590(void); -void sub_80A75E4(void); -void sub_80A7630(void); -void sub_80A763C(void); -void sub_80A76A0(void); -void sub_80A770C(void); -void DisplayCannotUseItemMessage(int, const u8 *, TaskFunc, int); -void sub_80A7768(void); -void sub_80A7828(void); -void sub_80A7834(int, int); -bool32 sub_80A78A0(void); -void sub_80A78B8(void); -bool32 sub_80A78C4(void); -void sub_80A78E8(void); -int sub_80A78F4(void); -void sub_80A7918(void); -int sub_80A7924(void); -int sub_80A7958(void); -void sub_80A7970(void); -void sub_80A797C(void); -int sub_80A7988(void); -void sub_80A79B4(struct Sprite *); -void sub_80A79EC(struct Sprite *); -void sub_80A7A94(struct Sprite *); -void sub_80A7AE4(struct Sprite *); -void CreateBagSprite(void); -void sub_80A7B6C(struct Sprite *); -void CreateBagPokeballSprite(u8); -void sub_80A7C64(void); - -void sub_80A3118(void) +static bool8 LoadBagGraphicsMultistep(void); +static void sub_80A362C(void); +static void sub_80A3740(void); +static void sub_80A396C(u16 *, u8, u8, u8); +static void sub_80A39B8(u16 *, u8); +static void sub_80A39E4(u16 *, u8, u8, s8); +static void DrawPocketIndicatorDots(u16 *, u8); +static void SortItemSlots(struct BagPocket); +static void UpdateAllBagPockets(void); +static void sub_80A3D24(u8); +static void sub_80A3D40(void); +static void RemoveSelectIconFromRegisteredItem(void); +static void sub_80A48E8(u16, int, int); +static void ItemListMenu_InitDescription(s16); +static void ItemListMenu_ChangeDescription(s16, int); +static void sub_80A4F68(u8); +static void sub_80A50C8(u8); +static void sub_80A5AE4(u8); +static void sub_80A5BF8(u8); +static void Task_CallItemUseOnFieldCallback(u8); +static void sub_80A6444(u8); +static void sub_80A648C(u8); +static void Task_BuyHowManyDialogueHandleInput(u8); +static void BuyMenuPrintItemQuantityAndPrice(u8); +static void BuyMenuDisplayMessage(u16, u16); +static void sub_80A683C(void); +static void sub_80A6870(u16, u8); +static void sub_80A699C(void); +static void sub_80A7230(u8); +static void ItemListMenu_InitMenu(void); +static void sub_80A73C0(void); +static void sub_80A73F0(void); +static void sub_80A73FC(void); +static void sub_80A740C(void); +static void sub_80A7420(void); +static void sub_80A751C(void); +static void sub_80A7528(u8); +static void sub_80A7590(void); +static void sub_80A75E4(void); +static void sub_80A7630(void); +static void sub_80A763C(void); +static void sub_80A76A0(void); +static void sub_80A770C(void); +static void DisplayCannotUseItemMessage(int, const u8 *, TaskFunc, int); +static void sub_80A7768(void); +static void sub_80A7828(void); +static void sub_80A7834(int, int); +static bool32 sub_80A78A0(void); +static void sub_80A78B8(void); +static bool32 sub_80A78C4(void); +static void sub_80A78E8(void); +static int sub_80A78F4(void); +static void sub_80A7918(void); +static int sub_80A7924(void); +static int sub_80A7958(void); +static void sub_80A7970(void); +static void sub_80A797C(void); +static int sub_80A7988(void); +static void sub_80A79B4(struct Sprite *); +static void sub_80A79EC(struct Sprite *); +static void sub_80A7A94(struct Sprite *); +static void sub_80A7AE4(struct Sprite *); +static void CreateBagSprite(void); +static void sub_80A7B6C(struct Sprite *); +static void CreateBagPokeballSprite(u8); +static void sub_80A7C64(void); + +static void sub_80A3118(void) { AnimateSprites(); BuildOamBuffer(); @@ -293,7 +374,7 @@ void sub_80A3118(void) UpdatePaletteFade(); } -void sub_80A3134(void) +static void sub_80A3134(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -314,9 +395,9 @@ void sub_80A3134(void) } } -bool8 sub_80A317C(void) +static bool8 SetupBagMultistep(void) { - u32 val; + u32 index; u16 savedIme; switch (gMain.state) @@ -336,7 +417,7 @@ bool8 sub_80A317C(void) break; case 3: sub_80F9020(); - ewram[0x1FFFF] = 0; + ewramBagSetupStep = 0; gMain.state++; break; case 4: @@ -349,7 +430,7 @@ bool8 sub_80A317C(void) gMain.state++; break; case 6: - if (sub_80A3520() == FALSE) + if (LoadBagGraphicsMultistep() == FALSE) break; gMain.state++; break; @@ -377,7 +458,7 @@ bool8 sub_80A317C(void) sub_80F9988(1, 2); sub_80F9988(2, 2); sub_80F9988(3, 2); - if (gUnknown_03000701 == 4 || gUnknown_03000701 == 5) + if (sReturnLocation == RETURN_TO_FIELD_4 || sReturnLocation == RETURN_TO_FIELD_5) { sub_80F979C(2, 1); sub_80F979C(3, 1); @@ -386,22 +467,22 @@ bool8 sub_80A317C(void) break; case 11: gUnknown_0203855A = 16; - sub_80A39B8(gBGTilemapBuffers[2], gUnknown_02038559 + 1); - sub_80A3AC0(gBGTilemapBuffers[2], gUnknown_02038559); - sub_80A3D08(); + sub_80A39B8(gBGTilemapBuffers[2], sCurrentBagPocket + 1); + DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket); + UpdateAllBagPockets(); SortItemSlots(gBagPockets[2]); SortItemSlots(gBagPockets[3]); sub_80A3D40(); - gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots; + gCurrentBagPocketItemSlots = gBagPockets[sCurrentBagPocket].itemSlots; sub_80A362C(); gMain.state++; break; case 12: sub_80A48E8(0xFFFF, 0, 7); - val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; - ItemListMenu_InitDescription(gUnknown_03005D24[val].itemId); + index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + ItemListMenu_InitDescription(gCurrentBagPocketItemSlots[index].itemId); ItemListMenu_InitMenu(); - gUnknown_0203855B = gUnknown_02038559 + 1; + gUnknown_0203855B = sCurrentBagPocket + 1; gUnknown_0203855C = 0; gMain.state++; break; @@ -416,7 +497,7 @@ bool8 sub_80A317C(void) REG_IME = 0; REG_IE |= INTR_FLAG_VBLANK; REG_IME = savedIme; - REG_DISPSTAT |= 8; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); gPaletteFade.bufferTransferDisabled = FALSE; gMain.state++; @@ -439,13 +520,13 @@ bool8 sub_80A317C(void) return FALSE; } -bool8 sub_80A34B4(void) +static bool8 sub_80A34B4(void) { while (1) { - if (sub_80A317C() == TRUE) + if (SetupBagMultistep() == TRUE) { - gUnknown_03000700 = 0; + sPopupMenuSelection = 0; ResetTasks(); return TRUE; } @@ -459,47 +540,47 @@ bool8 sub_80A34B4(void) void sub_80A34E8(void) { sub_80F9368(); - REG_BG2CNT = 0x0C06; - REG_BG1CNT = 0x0405; - REG_DISPCNT = 0x1740; + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(12) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(4) | BGCNT_16COLOR | BGCNT_TXT256x256; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; REG_BLDCNT = 0; } -bool8 sub_80A3520(void) +static bool8 LoadBagGraphicsMultistep(void) { - switch (ewram[0x1FFFF]) + switch (ewramBagSetupStep) { case 0: LZDecompressVram(gBagScreen_Gfx, (void *)(VRAM + 0x4000)); - ewram[0x1FFFF]++; + ewramBagSetupStep++; break; case 1: CpuCopy16(gUnknown_08E77004, gBGTilemapBuffers[2], 0x800); - ewram[0x1FFFF]++; + ewramBagSetupStep++; break; case 2: - if (gSaveBlock2.playerGender == MALE || gUnknown_03000701 == 7) + if (gSaveBlock2.playerGender == MALE || sReturnLocation == RETURN_TO_WALLY_BATTLE) LoadCompressedPalette(gBagScreenMale_Pal, 0, 64); else LoadCompressedPalette(gBagScreenFemale_Pal, 0, 64); - ewram[0x1FFFF]++; + ewramBagSetupStep++; break; case 3: - if (gSaveBlock2.playerGender == MALE || gUnknown_03000701 == 7) - LoadCompressedObjectPic(&gUnknown_083C1CC8); + if (gSaveBlock2.playerGender == MALE || sReturnLocation == RETURN_TO_WALLY_BATTLE) + LoadCompressedObjectPic(&sMaleBagSpriteSheet); else - LoadCompressedObjectPic(&gUnknown_083C1CD0); - ewram[0x1FFFF]++; + LoadCompressedObjectPic(&sFemaleBagSpriteSheet); + ewramBagSetupStep++; break; case 4: - LoadCompressedObjectPalette(&gUnknown_083C1CD8); - ewram[0x1FFFF] = 0; + LoadCompressedObjectPalette(&sBagSpritePalette); + ewramBagSetupStep = 0; return TRUE; } return FALSE; } -void sub_80A362C(void) +static void sub_80A362C(void) { u8 i; @@ -507,39 +588,39 @@ void sub_80A362C(void) { u8 r3; - if (gUnknown_03000701 == 5) - r3 = gUnknown_03005D10[i].unk2 - 1; + if (sReturnLocation == RETURN_TO_FIELD_5) + r3 = gBagPocketScrollStates[i].numSlots - 1; else - r3 = gUnknown_03005D10[i].unk2; + r3 = gBagPocketScrollStates[i].numSlots; - if (gUnknown_03005D10[i].unk1 != 0) + if (gBagPocketScrollStates[i].scrollTop != 0) { - if (gUnknown_03005D10[i].unk1 + gUnknown_03005D10[i].unk3 > r3) - gUnknown_03005D10[i].unk1 = r3 - gUnknown_03005D10[i].unk3; + if (gBagPocketScrollStates[i].scrollTop + gBagPocketScrollStates[i].cursorMax > r3) + gBagPocketScrollStates[i].scrollTop = r3 - gBagPocketScrollStates[i].cursorMax; } else { - if (gUnknown_03005D10[i].unk0 > r3) - gUnknown_03005D10[i].unk0 = r3; + if (gBagPocketScrollStates[i].cursorPos > r3) + gBagPocketScrollStates[i].cursorPos = r3; } } } -void sub_80A3684(void) +void ResetBagScrollPositions(void) { u16 i; - for (i = 0; i < 5; i++) + for (i = 0; i < NUM_BAG_POCKETS; i++) { - gUnknown_03005D10[i].unk0 = 0; - gUnknown_03005D10[i].unk1 = 0; - gUnknown_03005D10[i].unk2 = 0; - gUnknown_03005D10[i].unk3 = 0; + gBagPocketScrollStates[i].cursorPos = 0; + gBagPocketScrollStates[i].scrollTop = 0; + gBagPocketScrollStates[i].numSlots = 0; + gBagPocketScrollStates[i].cursorMax = 0; } - gUnknown_02038559 = 0; + sCurrentBagPocket = 0; } -void sub_80A36B8(u16 *a, u8 b, u8 c, u8 d, u8 e) +static void sub_80A36B8(u16 *a, u8 b, u8 c, u8 d, u8 e) { u16 i; u16 j; @@ -559,12 +640,12 @@ void ClearBag(void) { u16 i; - for (i = 0; i < 5; i++) + for (i = 0; i < NUM_BAG_POCKETS; i++) ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity); - sub_80A3684(); + ResetBagScrollPositions(); } -void sub_80A3740(void) +static void sub_80A3740(void) { const u16 colors[2] = {RGB(14, 15, 16), RGB_WHITE}; @@ -572,19 +653,19 @@ void sub_80A3740(void) LoadPalette(&colors[0], 0xD8, sizeof(colors[0])); } -void sub_80A3770(void) +static void sub_80A3770(void) { - if (gUnknown_03000701 == 0) + if (sReturnLocation == RETURN_TO_FIELD_0) { - gUnknown_03000704 = gUnknown_083C1690[gUnknown_02038559]; - if (gUnknown_02038559 != 3) + sPopupMenuActionList = sItemPopupMenuChoicesTable[sCurrentBagPocket]; + if (sCurrentBagPocket != BAG_POCKET_BERRIES) gUnknown_02038564 = 4; else gUnknown_02038564 = 6; } } -void sub_80A37C0(u8 taskId) +static void sub_80A37C0(u8 taskId) { gTasks[taskId].func = sub_80A50C8; StartVerticalScrollIndicators(0); @@ -593,7 +674,7 @@ void sub_80A37C0(u8 taskId) StartVerticalScrollIndicators(3); } -void sub_80A37F8(u8 taskId) +static void sub_80A37F8(u8 taskId) { u8 r5 = gUnknown_0203855A; @@ -601,7 +682,7 @@ void sub_80A37F8(u8 taskId) { gUnknown_0203855A++; sub_80A396C(gBGTilemapBuffers[2], r5, gUnknown_0203855A, 0x4F); - sub_80A39E4(gBGTilemapBuffers[2], gUnknown_02038559 + 1, gUnknown_0203855A / 2, gTasks[taskId].data[5]); + sub_80A39E4(gBGTilemapBuffers[2], sCurrentBagPocket + 1, gUnknown_0203855A / 2, gTasks[taskId].data[5]); gUnknown_02038558 = 1; sub_80A48E8(taskId, r5 / 2, gUnknown_0203855A / 2 - 1); gUnknown_02038558 = 0; @@ -610,25 +691,25 @@ void sub_80A37F8(u8 taskId) if (gLinkOpen == TRUE) { - u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - ItemListMenu_ChangeDescription(gUnknown_03005D24[val].itemId, gUnknown_02038562); + ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, gUnknown_02038562); gUnknown_02038562++; } else { while (gUnknown_02038562 < 3) { - u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - ItemListMenu_ChangeDescription(gUnknown_03005D24[val].itemId, gUnknown_02038562); + ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, gUnknown_02038562); gUnknown_02038562++; } } if (gUnknown_02038562 == 3) { gUnknown_0203855A = 16; - gUnknown_0203855B = gUnknown_02038559 + 1; + gUnknown_0203855B = sCurrentBagPocket + 1; sub_80A37C0(FindTaskIdByFunc(sub_80A4F68)); DestroyTask(taskId); ItemListMenu_InitMenu(); @@ -637,12 +718,12 @@ void sub_80A37F8(u8 taskId) } } -void sub_80A3954(u16 *a) +static void sub_80A3954(u16 *a) { CpuCopy16(gUnknown_08E77004, a, 0x800); } -void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) +static void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) { u16 *dst = a + 14 + (b + 2) * 32; u16 i; @@ -655,14 +736,14 @@ void sub_80A396C(u16 *a, u8 b, u8 c, u8 d) } } -void sub_80A39B8(u16 *a, u8 b) +static void sub_80A39B8(u16 *a, u8 b) { u8 var = b * 2; sub_809D104(a, 4, 10, gUnknown_08E96EC8, 0, var, 8, 2); } -void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) +static void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) { u16 r2 = b * 2; u16 r7; @@ -687,42 +768,45 @@ void sub_80A39E4(u16 *a, u8 b, u8 c, s8 d) } } -void sub_80A3AC0(u16 *a, u8 b) +// Draws dots under the bag sprite, showing which pocket is selected +static void DrawPocketIndicatorDots(u16 *tileMapBuffer, u8 selectedPocket) { u8 i; - for (i = 0; i < 5; i++) + for (i = 0; i < NUM_BAG_POCKETS; i++) { - if (i == b) - a[0x125 + i] = 0x107D; + if (i == selectedPocket) + tileMapBuffer[0x125 + i] = 0x107D; else - a[0x125 + i] = 0x107C; + tileMapBuffer[0x125 + i] = 0x107C; } } -void sub_80A3B04(u16 *a, s8 b) +static void ChangePocket(u16 *tileMapBuffer, s8 delta) { u8 taskId; - gUnknown_02038559 += b; - if (gUnknown_02038559 >= NUM_BAG_POCKETS) - gUnknown_02038559 = 0; - if (gUnknown_02038559 < 0) - gUnknown_02038559 = NUM_BAG_POCKETS - 1; + sCurrentBagPocket += delta; + // Wrap around + if (sCurrentBagPocket >= NUM_BAG_POCKETS) + sCurrentBagPocket = 0; + if (sCurrentBagPocket < 0) + sCurrentBagPocket = NUM_BAG_POCKETS - 1; + sub_80A76A0(); sub_80A7590(); - gUnknown_03005D24 = gBagPockets[gUnknown_02038559].itemSlots; - sub_80A3D24(gUnknown_02038559); + gCurrentBagPocketItemSlots = gBagPockets[sCurrentBagPocket].itemSlots; + sub_80A3D24(sCurrentBagPocket); gUnknown_0203855A = 0; - sub_80A3954(a); - sub_80A396C(a, 0, 16, 3); - sub_80A39B8(a, 0); + sub_80A3954(tileMapBuffer); + sub_80A396C(tileMapBuffer, 0, 16, 3); + sub_80A39B8(tileMapBuffer, 0); gUnknown_0203855B = 6; gUnknown_02038562 = 0; taskId = FindTaskIdByFunc(sub_80A37F8); if (taskId == 0xFF) taskId = CreateTask(sub_80A37F8, 8); - gTasks[taskId].data[5] = b; + gTasks[taskId].data[5] = delta; } static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b) @@ -733,7 +817,7 @@ static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b) *b = temp; } -void RemoveEmptyItemSlots(struct BagPocket pocket) +static void RemoveEmptyItemSlots(struct BagPocket pocket) { u16 i; u16 j; @@ -748,7 +832,7 @@ void RemoveEmptyItemSlots(struct BagPocket pocket) } } -void SortItemSlots(struct BagPocket pocket) +static void SortItemSlots(struct BagPocket pocket) { u16 i; u16 j; @@ -764,36 +848,36 @@ void SortItemSlots(struct BagPocket pocket) } } -void sub_80A3CA8(u8 pocketNum) +static void UpdateBagPocket(u8 pocketNum) { u16 i; - gUnknown_03005D10[pocketNum].unk2 = 0; + gBagPocketScrollStates[pocketNum].numSlots = 0; for (i = 0; i < gBagPockets[pocketNum].capacity; i++) { if (gBagPockets[pocketNum].itemSlots[i].quantity != 0) - gUnknown_03005D10[pocketNum].unk2++; + gBagPocketScrollStates[pocketNum].numSlots++; } RemoveEmptyItemSlots(gBagPockets[pocketNum]); } -void sub_80A3D08(void) +static void UpdateAllBagPockets(void) { u8 i; for (i = 0; i < NUM_BAG_POCKETS; i++) - sub_80A3CA8(i); + UpdateBagPocket(i); } -void sub_80A3D24(u8 pocketNum) +static void sub_80A3D24(u8 pocketNum) { - if (gUnknown_03005D10[pocketNum].unk2 >= 7) - gUnknown_03005D10[pocketNum].unk3 = 7; + if (gBagPocketScrollStates[pocketNum].numSlots >= 7) + gBagPocketScrollStates[pocketNum].cursorMax = 7; else - gUnknown_03005D10[pocketNum].unk3 = gUnknown_03005D10[pocketNum].unk2; + gBagPocketScrollStates[pocketNum].cursorMax = gBagPocketScrollStates[pocketNum].numSlots; } -void sub_80A3D40(void) +static void sub_80A3D40(void) { u8 i; @@ -801,84 +885,86 @@ void sub_80A3D40(void) sub_80A3D24(i); } -void sub_80A3D5C(u8 taskId) +static void sub_80A3D5C(u8 taskId) { - u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - gUnknown_03005D24[val].quantity -= gTasks[taskId].data[1]; - if (gUnknown_03005D24[val].quantity == 0) + gCurrentBagPocketItemSlots[index].quantity -= gTasks[taskId].data[1]; + if (gCurrentBagPocketItemSlots[index].quantity == 0) // item slot will be removed if the quantity is zero { - if (gSaveBlock1.registeredItem == gUnknown_03005D24[val].itemId) + // Un-register the item if registered + if (gSaveBlock1.registeredItem == gCurrentBagPocketItemSlots[index].itemId) { - sub_80A40D0(); - gSaveBlock1.registeredItem = 0; + RemoveSelectIconFromRegisteredItem(); + gSaveBlock1.registeredItem = ITEM_NONE; } - gUnknown_03005D24[val].itemId = 0; - if (gUnknown_03005D10[gUnknown_02038559].unk1 + 7 == gUnknown_03005D10[gUnknown_02038559].unk2 - && gUnknown_03005D10[gUnknown_02038559].unk1 != 0) - gUnknown_03005D10[gUnknown_02038559].unk1--; - sub_80A3CA8(gUnknown_02038559); + + gCurrentBagPocketItemSlots[index].itemId = ITEM_NONE; + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 7 == gBagPocketScrollStates[sCurrentBagPocket].numSlots + && gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) + gBagPocketScrollStates[sCurrentBagPocket].scrollTop--; + UpdateBagPocket(sCurrentBagPocket); } - sub_80A3D24(gUnknown_02038559); + sub_80A3D24(sCurrentBagPocket); } void sub_80A3E0C(void) { - u32 val = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; + u32 index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; - if (gUnknown_03005D24[val].quantity == 0) + if (gCurrentBagPocketItemSlots[index].quantity == 0) { - gUnknown_03005D24[val].itemId = 0; - if (gUnknown_03005D10[gUnknown_02038559].unk1 + 7 == gUnknown_03005D10[gUnknown_02038559].unk2 - && gUnknown_03005D10[gUnknown_02038559].unk1 != 0) - gUnknown_03005D10[gUnknown_02038559].unk1--; - sub_80A3CA8(gUnknown_02038559); + gCurrentBagPocketItemSlots[index].itemId = 0; + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 7 == gBagPocketScrollStates[sCurrentBagPocket].numSlots + && gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) + gBagPocketScrollStates[sCurrentBagPocket].scrollTop--; + UpdateBagPocket(sCurrentBagPocket); } - sub_80A3D24(gUnknown_02038559); + sub_80A3D24(sCurrentBagPocket); } -void nullsub_16(void) +static void nullsub_16(void) { } -void sub_80A3E70(u8 a, u8 b) +static void sub_80A3E70(u8 a, u8 b) { - struct ItemSlot temp = gUnknown_03005D24[a]; + struct ItemSlot temp = gCurrentBagPocketItemSlots[a]; - gUnknown_03005D24[a] = gUnknown_03005D24[b]; - gUnknown_03005D24[b] = temp; + gCurrentBagPocketItemSlots[a] = gCurrentBagPocketItemSlots[b]; + gCurrentBagPocketItemSlots[b] = temp; } -void sub_80A3E90(u8 taskId) +static void sub_80A3E90(u8 taskId) { PlaySE(SE_SELECT); nullsub_16(); sub_80A3E70( gTasks[taskId].data[10] - 1, - gUnknown_03005D10[gUnknown_02038559].unk0 + gUnknown_03005D10[gUnknown_02038559].unk1); + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + gBagPocketScrollStates[sCurrentBagPocket].scrollTop); gTasks[taskId].data[10] = 0; sub_80A763C(); sub_80A7528(0); ItemListMenu_InitMenu(); } -void sub_80A3EF4(u8 taskId) +static void sub_80A3EF4(u8 taskId) { u8 r2; PlaySE(SE_SELECT); nullsub_16(); - r2 = gTasks[taskId].data[10] - gUnknown_03005D10[gUnknown_02038559].unk1 - 1; + r2 = gTasks[taskId].data[10] - gBagPocketScrollStates[sCurrentBagPocket].scrollTop - 1; gTasks[taskId].data[10] = 0; if (r2 < 8) sub_80A48E8(taskId, r2, r2); sub_80A7528(0); } -void sub_80A3F50(u8 taskId) +static void sub_80A3F50(u8 taskId) { - gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A7528(1); } @@ -898,16 +984,16 @@ void sub_80A3FA0(u16 *a, u8 b, u8 c, u8 d, u8 e, u16 f) } } -void sub_80A4008(u16 *a, u8 b, u8 c, u8 d, u8 e) +static void sub_80A4008(u16 *a, u8 b, u8 c, u8 d, u8 e) { sub_80A3FA0(a, b, c, d, e, 1); } -void sub_80A4030(u32 a) +static void DrawSelectIcon(u32 itemPos) { u16 *ptr1 = gBGTilemapBuffers[2] + 0x5A; - ptr1 += a * 64; + ptr1 += itemPos * 64; ptr1[0] = 0x5A; ptr1[1] = 0x5B; ptr1[2] = 0x5C; @@ -916,7 +1002,7 @@ void sub_80A4030(u32 a) ptr1[34] = 0x6C; } -void sub_80A405C(u8 a) +static void MoveSelectIcon(u8 itemPos) { u16 i; u16 *ptr; @@ -930,7 +1016,7 @@ void sub_80A405C(u8 a) ptr += 32; } - ptr = gBGTilemapBuffers[2] + 0x5A + a * 64; + ptr = gBGTilemapBuffers[2] + 0x5A + itemPos * 64; ptr[0] = 0x5A; ptr[1] = 0x5B; ptr[2] = 0x5C; @@ -939,11 +1025,11 @@ void sub_80A405C(u8 a) ptr[34] = 0x6C; } -void sub_80A40AC(u8 a) +static void EraseSelectIcon(u8 itemPos) { u16 *ptr = gBGTilemapBuffers[2] + 0x5A; - ptr += a * 64; + ptr += itemPos * 64; ptr[0] = 0x4F; ptr[1] = 0x4F; ptr[2] = 0x4F; @@ -952,50 +1038,50 @@ void sub_80A40AC(u8 a) ptr[34] = 0x4F; } -void sub_80A40D0(void) +static void RemoveSelectIconFromRegisteredItem(void) { u8 i; for (i = 0; i < 8; i++) { - if (gUnknown_03005D10[gUnknown_02038559].unk1 + i == gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i == gBagPocketScrollStates[sCurrentBagPocket].numSlots) break; - if (gUnknown_03005D24[gUnknown_03005D10[gUnknown_02038559].unk1 + i].itemId == gSaveBlock1.registeredItem) + if (gCurrentBagPocketItemSlots[gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i].itemId == gSaveBlock1.registeredItem) { - sub_80A40AC(i); + EraseSelectIcon(i); break; } } } -void sub_80A413C(void) +static void AddSelectIconToRegisteredItem(void) { - sub_80A40D0(); - sub_80A405C(gUnknown_03005D10[gUnknown_02038559].unk0); + RemoveSelectIconFromRegisteredItem(); + MoveSelectIcon(gBagPocketScrollStates[sCurrentBagPocket].cursorPos); } -void sub_80A4164(u8 *a, u16 b, enum StringConvertMode c, u8 d) +void sub_80A4164(u8 *dest, u16 value, enum StringConvertMode mode, u8 digits) { - *a++ = CHAR_MULT_SIGN; - a[0] = EXT_CTRL_CODE_BEGIN; - a[1] = 0x14; - a[2] = 6; - a += 3; - ConvertIntToDecimalStringN(a, b, c, d); + *dest++ = CHAR_MULT_SIGN; + dest[0] = EXT_CTRL_CODE_BEGIN; + dest[1] = 0x14; + dest[2] = 6; + dest += 3; + ConvertIntToDecimalStringN(dest, value, mode, digits); } -void sub_80A418C(u16 a, enum StringConvertMode b, u8 c, u8 d, u8 e) +void sub_80A418C(u16 value, enum StringConvertMode mode, u8 c, u8 d, u8 digits) { - sub_80A4164(gStringVar1, a, b, e); + sub_80A4164(gStringVar1, value, mode, digits); MenuPrint(gStringVar1, c, d); } -void sub_80A41D4(u8 taskId) +static void sub_80A41D4(u8 taskId) { sub_80A763C(); } -void sub_80A41E0(u8 *a, u16 b, const u8 *c, u16 d, u8 e) +static void sub_80A41E0(u8 *a, u16 b, const u8 *c, u16 d, u8 e) { a[0] = EXT_CTRL_CODE_BEGIN; a[1] = 0x13; @@ -1011,9 +1097,9 @@ void sub_80A41E0(u8 *a, u16 b, const u8 *c, u16 d, u8 e) sub_8072C14(a, d, 0x78, 1); } -u8 *sub_80A425C(u8 taskId, u8 *text, u8 c) +static u8 *sub_80A425C(u8 taskId, u8 *text, u8 c) { - if (gTasks[taskId].data[10] - gUnknown_03005D10[gUnknown_02038559].unk1 - 1 == c) + if (gTasks[taskId].data[10] - gBagPocketScrollStates[sCurrentBagPocket].scrollTop - 1 == c) { text[0] = EXT_CTRL_CODE_BEGIN; text[1] = 1; @@ -1023,19 +1109,19 @@ u8 *sub_80A425C(u8 taskId, u8 *text, u8 c) return text; } -bool8 sub_80A42B0(u8 a, int b) +static bool8 sub_80A42B0(u8 itemPos, int b) { u8 r5; u16 *ptr; struct UnknownStruct3 *r8 = &gUnknown_02038540; - if (gUnknown_03005D10[gUnknown_02038559].unk1 + a > gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + itemPos > gBagPocketScrollStates[sCurrentBagPocket].numSlots) return TRUE; - if (gUnknown_03005D10[gUnknown_02038559].unk1 + a == gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + itemPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) { - if (gUnknown_03000701 == 5) + if (sReturnLocation == RETURN_TO_FIELD_5) return TRUE; - r5 = a * 2 + 2; + r5 = itemPos * 2 + 2; sub_8072C74(gStringVar1, gOtherText_CloseBag, 0x78, 0); MenuPrint(gStringVar1, 14, r5); ptr = gBGTilemapBuffers[2] + 14 + r5 * 32; @@ -1043,7 +1129,7 @@ bool8 sub_80A42B0(u8 a, int b) ptr[1] = 0x4F; ptr[32] = 0x4F; ptr[33] = 0x4F; - if (a == 7) + if (itemPos == 7) return TRUE; if ((b == 1 && r8->unk2 != 0) || b == 2) MenuFillWindowRectWithBlankTile(14, r5 + 2, 29, 13); @@ -1054,7 +1140,7 @@ bool8 sub_80A42B0(u8 a, int b) return FALSE; } -void sub_80A4380(u16 a, int b, int c, int d) +static void sub_80A4380(u16 a, int b, int c, int d) { u8 i; @@ -1066,18 +1152,18 @@ void sub_80A4380(u16 a, int b, int c, int d) if (sub_80A42B0(i, d) == TRUE) break; - r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i; + r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; r5 = i * 2 + 2; text = gStringVar1; text = sub_80A425C(a, text, i); - text = sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x66, 0); + text = sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x66, 0); *text++ = CHAR_MULT_SIGN; - sub_8072C14(text, gUnknown_03005D24[r4].quantity, 0x78, 1); + sub_8072C14(text, gCurrentBagPocketItemSlots[r4].quantity, 0x78, 1); MenuPrint(gStringVar1, 14, r5); } } -void sub_80A444C(u16 a, int b, int c, int d) +static void sub_80A444C(u16 a, int b, int c, int d) { u8 i; @@ -1089,34 +1175,34 @@ void sub_80A444C(u16 a, int b, int c, int d) if (sub_80A42B0(i, d) == TRUE) break; - r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i; + r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; r5 = i * 2 + 2; text = gStringVar1; text = sub_80A425C(a, text, i); #if ENGLISH - sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x60, 0); + sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x60, 0); #else - sub_8072C74(text, ItemId_GetItem(gUnknown_03005D24[r4].itemId)->name, 0x63, 0); + sub_8072C74(text, ItemId_GetItem(gCurrentBagPocketItemSlots[r4].itemId)->name, 0x63, 0); #endif MenuPrint(gStringVar1, 14, r5); if (gUnknown_02038558 != 0) { - if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem) - sub_80A4030(i); + if (gCurrentBagPocketItemSlots[r4].itemId == gSaveBlock1.registeredItem) + DrawSelectIcon(i); } else { - if (gUnknown_03005D24[r4].itemId == gSaveBlock1.registeredItem) - sub_80A405C(i); + if (gCurrentBagPocketItemSlots[r4].itemId == gSaveBlock1.registeredItem) + MoveSelectIcon(i); else - sub_80A40AC(i); + EraseSelectIcon(i); } } } // more gBGTilemapBuffers shenanigans #ifdef NONMATCHING -void sub_80A4548(u16 a, int b, int c, int d) +static void sub_80A4548(u16 a, int b, int c, int d) { u8 i; @@ -1129,12 +1215,12 @@ void sub_80A4548(u16 a, int b, int c, int d) if (sub_80A42B0(i, d) == TRUE) break; - r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i; + r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; sp10 = i * 2 + 2; r5 = sp10 * 32 + 14; text = gStringVar1; text = sub_80A425C(a, text, i); - if (gUnknown_03005D24[r4].itemId < 0x153) + if (gCurrentBagPocketItemSlots[r4].itemId < 0x153) { const u8 *r2; @@ -1142,8 +1228,8 @@ void sub_80A4548(u16 a, int b, int c, int d) gBGTilemapBuffers[2][r5 + 1] = 0x4F; gBGTilemapBuffers[2][r5 + 32] = 0x69; gBGTilemapBuffers[2][r5 + 33] = 0x4F; - r2 = gMoveNames[ItemIdToBattleMoveId(gUnknown_03005D24[r4].itemId)]; - sub_80A41E0(text, gUnknown_03005D24[r4].itemId - 288, r2, gUnknown_03005D24[r4].quantity, 2); + r2 = gMoveNames[ItemIdToBattleMoveId(gCurrentBagPocketItemSlots[r4].itemId)]; + sub_80A41E0(text, gCurrentBagPocketItemSlots[r4].itemId - 288, r2, gCurrentBagPocketItemSlots[r4].quantity, 2); } else { @@ -1157,12 +1243,12 @@ void sub_80A4548(u16 a, int b, int c, int d) text[1] = 0x13; text[2] = 0x11; text += 3; - text = ConvertIntToDecimalString(text, gUnknown_03005D24[r4].itemId); + text = ConvertIntToDecimalString(text, gCurrentBagPocketItemSlots[r4].itemId); text[0] = EXT_CTRL_CODE_BEGIN; text[1] = 0x13; text[2] = 0x18; text += 3; - moveName = gMoveNames[ItemIdToBattleMoveId(gUnknown_03005D24[r4].itemId)]; + moveName = gMoveNames[ItemIdToBattleMoveId(gCurrentBagPocketItemSlots[r4].itemId)]; sub_8072C74(text, moveName, 0x78, 0); } MenuPrint(gStringVar1, 14, sp10); @@ -1170,7 +1256,7 @@ void sub_80A4548(u16 a, int b, int c, int d) } #else __attribute__((naked)) -void sub_80A4548(u16 a, int b, int c, int d) +static void sub_80A4548(u16 a, int b, int c, int d) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1193,8 +1279,8 @@ void sub_80A4548(u16 a, int b, int c, int d) .align 2, 0\n\ _080A456C: .4byte gBGTilemapBuffers + 0x1000\n\ _080A4570:\n\ - ldr r1, _080A461C @ =gUnknown_03005D10\n\ - ldr r0, _080A4620 @ =gUnknown_02038559\n\ + ldr r1, _080A461C @ =gBagPocketScrollStates\n\ + ldr r0, _080A4620 @ =sCurrentBagPocket\n\ ldrb r0, [r0]\n\ lsls r0, 24\n\ asrs r0, 24\n\ @@ -1222,7 +1308,7 @@ _080A4570:\n\ mov r2, r8\n\ bl sub_80A425C\n\ adds r6, r0, 0\n\ - ldr r3, _080A4628 @ =gUnknown_03005D24\n\ + ldr r3, _080A4628 @ =gCurrentBagPocketItemSlots\n\ mov r10, r3\n\ ldr r0, [r3]\n\ lsls r7, r4, 2\n\ @@ -1277,10 +1363,10 @@ _080A4570:\n\ bl sub_80A41E0\n\ b _080A46AE\n\ .align 2, 0\n\ -_080A461C: .4byte gUnknown_03005D10\n\ -_080A4620: .4byte gUnknown_02038559\n\ +_080A461C: .4byte gBagPocketScrollStates\n\ +_080A4620: .4byte sCurrentBagPocket\n\ _080A4624: .4byte gStringVar1\n\ -_080A4628: .4byte gUnknown_03005D24\n\ +_080A4628: .4byte gCurrentBagPocketItemSlots\n\ _080A462C: .4byte gMoveNames\n\ _080A4630: .4byte 0xfffffee0\n\ _080A4634:\n\ @@ -1382,7 +1468,7 @@ _080A46F8: .4byte gStringVar1\n\ } #endif -void sub_80A46FC(u16 a, int b, int c, int d) +static void sub_80A46FC(u16 a, int b, int c, int d) { u8 i; @@ -1395,7 +1481,7 @@ void sub_80A46FC(u16 a, int b, int c, int d) if (sub_80A42B0(i, d) == TRUE) break; - r4 = gUnknown_03005D10[gUnknown_02038559].unk1 + i; + r4 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + i; r5 = i * 2 + 2; var = 14 + r5 * 32; @@ -1405,59 +1491,59 @@ void sub_80A46FC(u16 a, int b, int c, int d) text = gStringVar1; text = sub_80A425C(a, text, i); - CopyItemName(gUnknown_03005D24[r4].itemId, gStringVar2); - sub_80A41E0(text, gUnknown_03005D24[r4].itemId - 0x84, gStringVar2, gUnknown_03005D24[r4].quantity, 3); + CopyItemName(gCurrentBagPocketItemSlots[r4].itemId, gStringVar2); + sub_80A41E0(text, gCurrentBagPocketItemSlots[r4].itemId - 0x84, gStringVar2, gCurrentBagPocketItemSlots[r4].quantity, 3); MenuPrint(gStringVar1, 14, r5); } } -void sub_80A47E8(u16 a, int b, int c, int d) +static void sub_80A47E8(u16 a, int b, int c, int d) { - switch (gUnknown_02038559) + switch (sCurrentBagPocket) { - case 0: - case 1: + case BAG_POCKET_ITEMS: + case BAG_POCKET_POKE_BALLS: sub_80A4380(a, b, c, d); break; - case 4: + case BAG_POCKET_KEY_ITEMS: sub_80A444C(a, b, c, d); break; - case 2: + case BAG_POCKET_TMs_HMs: sub_80A4548(a, b, c, d); break; - case 3: + case BAG_POCKET_BERRIES: sub_80A46FC(a, b, c, d); break; } - if (gUnknown_03005D10[gUnknown_02038559].unk1 != 0) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) sub_80F979C(0, 0); else sub_80F979C(0, 1); - if ((gUnknown_03000701 != 5 && gUnknown_03005D10[gUnknown_02038559].unk1 + 8 < gUnknown_03005D10[gUnknown_02038559].unk2 + 1) - || (gUnknown_03000701 == 5 && gUnknown_03005D10[gUnknown_02038559].unk1 + 8 < gUnknown_03005D10[gUnknown_02038559].unk2)) + if ((sReturnLocation != RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots + 1) + || (sReturnLocation == RETURN_TO_FIELD_5 && gBagPocketScrollStates[sCurrentBagPocket].scrollTop + 8 < gBagPocketScrollStates[sCurrentBagPocket].numSlots)) sub_80F979C(1, 0); else sub_80F979C(1, 1); } -void sub_80A48E8(u16 a, int b, int c) +static void sub_80A48E8(u16 taskId, int b, int c) { - sub_80A47E8(a, b, c, 0); + sub_80A47E8(taskId, b, c, 0); } -void sub_80A48F8(u16 a) +static void sub_80A48F8(u16 taskId) { - sub_80A47E8(a, 0, 5, 2); + sub_80A47E8(taskId, 0, 5, 2); } -void ItemListMenu_InitDescription(s16 itemId) +static void ItemListMenu_InitDescription(s16 itemId) { u8 r5; - if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) { r5 = sub_8072A18(gOtherText_ReturnTo, 4, 0x68, 0x68, 1); - r5 += sub_8072A18(gUnknown_0840E740[gUnknown_03000701], 4, 0x78, 0x68, 1); + r5 += sub_8072A18(gUnknown_0840E740[sReturnLocation], 4, 0x78, 0x68, 1); } else { @@ -1468,11 +1554,11 @@ void ItemListMenu_InitDescription(s16 itemId) MenuZeroFillWindowRect(0, 13 + r5 * 2, 13, 20); } -void ItemListMenu_ChangeDescription(s16 itemId, int b) +static void ItemListMenu_ChangeDescription(s16 itemId, int b) { u8 description[100]; - if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) { if (b == 0) { @@ -1481,7 +1567,7 @@ void ItemListMenu_ChangeDescription(s16 itemId, int b) } else if (b == 1) { - MenuPrint_PixelCoords(gUnknown_0840E740[gUnknown_03000701], 4, 0x78, 0); + MenuPrint_PixelCoords(gUnknown_0840E740[sReturnLocation], 4, 0x78, 0); } } else @@ -1493,24 +1579,26 @@ void ItemListMenu_ChangeDescription(s16 itemId, int b) } } -bool32 sub_80A4A54(u8 *a, const u8 *b, u32 c) +static bool32 CopyTextLine(u8 *destination, const u8 *source, u32 c) { u32 r4 = c + 1; - const u8 *src = b; - u8 *dst = a; + const u8 *src = source; + u8 *dst = destination; while (1) { if (*src == CHAR_NEWLINE || *src == EOS) { - if (--r4 == 0) + r4--; + if (r4 == 0) { *dst = EOS; return TRUE; } if (*src == EOS) return FALSE; - dst = a; + // got a new line - reset dst pointer + dst = destination; src++; } else @@ -1520,17 +1608,17 @@ bool32 sub_80A4A54(u8 *a, const u8 *b, u32 c) } } -void sub_80A4A98(const u8 *a, u32 b) +static void sub_80A4A98(const u8 *text, u32 line) { - u8 text[100]; + u8 buffer[100]; - if (b == 0) + if (line == 0) MenuZeroFillWindowRect(0, 13, 13, 20); - if (sub_80A4A54(text, a, b)) - MenuPrint_PixelCoords(text, 4, 104 + b * 16, 0); + if (CopyTextLine(buffer, text, line)) + MenuPrint_PixelCoords(buffer, 4, 104 + line * 16, 0); } -void sub_80A4ADC(u8 taskId) +static void sub_80A4ADC(u8 taskId) { if (gTasks[taskId].data[10] == 0) sub_80A7528(0); @@ -1538,23 +1626,23 @@ void sub_80A4ADC(u8 taskId) gUnknown_0203855C = 1; } -void sub_80A4B14(s8 a, u8 b) +static void sub_80A4B14(s8 a, u8 b) { - gUnknown_03005D10[gUnknown_02038559].unk1 += a; + gBagPocketScrollStates[sCurrentBagPocket].scrollTop += a; MoveMenuCursor(0); sub_80A73C0(); sub_80A763C(); sub_80A4ADC(b); } -void sub_80A4B58(s8 a, u8 b) +static void sub_80A4B58(s8 delta, u8 b) { - gUnknown_03005D10[gUnknown_02038559].unk0 = MoveMenuCursor(a); + gBagPocketScrollStates[sCurrentBagPocket].cursorPos = MoveMenuCursor(delta); sub_80A73C0(); sub_80A4ADC(b); } -const u8 *sub_80A4B90(u16 itemId) +static const u8 *sub_80A4B90(u16 itemId) { if (TestPlayerAvatarFlags(6)) { @@ -1563,10 +1651,10 @@ const u8 *sub_80A4B90(u16 itemId) } if (ItemIsMail(itemId) == TRUE) return gOtherText_Check; - return gUnknown_083C1640[gUnknown_03000704[0]].text; + return sItemPopupMenuActions[sPopupMenuActionList[0]].text; } -void sub_80A4BF0(u16 *a) +static void sub_80A4BF0(u16 *a) { u8 i; @@ -1574,7 +1662,7 @@ void sub_80A4BF0(u16 *a) { MenuDrawTextWindow(0, 7, 13, 12); sub_80A4008(a, 1, 8, 12, 4); - if (sub_80F9344() == TRUE && gUnknown_03000701 == 5) + if (sub_80F9344() == TRUE && sReturnLocation == RETURN_TO_FIELD_5) { sub_80A7834(1, 0); } @@ -1587,12 +1675,12 @@ void sub_80A4BF0(u16 *a) if (i == 0) text = sub_80A4B90(gScriptItemId); else - text = gUnknown_083C1640[gUnknown_03000704[i]].text; + text = sItemPopupMenuActions[sPopupMenuActionList[i]].text; MenuPrint(text, 1 + (i / 2) * 6, 8 + (i % 2) * 2); } } - if (gUnknown_03000701 == 5) - InitMenu(0, 1, 8, gUnknown_02038564, gUnknown_03000700, 1); + if (sReturnLocation == RETURN_TO_FIELD_5) + InitMenu(0, 1, 8, gUnknown_02038564, sPopupMenuSelection, 1); else InitMenu(0, 1, 8, gUnknown_02038564, 0, 1); sub_8072DCC(0x2F); @@ -1602,14 +1690,14 @@ void sub_80A4BF0(u16 *a) MenuDrawTextWindow(0, 5, 13, 12); sub_80A4008(a, 1, 6, 12, 6); for (i = 0; i < gUnknown_02038564; i++) - MenuPrint(gUnknown_083C1640[gUnknown_03000704[i]].text, 1 + (i / 3) * 6, 6 + (i % 3) * 2); + MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[i]].text, 1 + (i / 3) * 6, 6 + (i % 3) * 2); InitMenu(0, 1, 6, gUnknown_02038564, 0, 1); sub_8072DCC(0x2F); } sub_80A7528(2); } -void sub_80A4DA4(u16 *a) +static void sub_80A4DA4(u16 *a) { sub_80A73FC(); sub_80A36B8(a, 0, 6, 13, 6); @@ -1617,17 +1705,17 @@ void sub_80A4DA4(u16 *a) sub_80A7590(); } -void sub_80A4DD8(u8 taskId, u8 b, u8 c, u8 d, u8 e, u8 f) +static void sub_80A4DD8(u8 taskId, u8 b, u8 c, u8 d, u8 e, u8 digits) { gTasks[taskId].data[1] = 1; gTasks[taskId].data[2] = b + 2; gTasks[taskId].data[3] = c + 1; MenuDrawTextWindow(b, c, b + d, c + e); sub_80A4008(gBGTilemapBuffers[1], b + 1, c + 1, d - 1, e - 1); - sub_80A418C(1, 1, b + 2, c + 1, f); + sub_80A418C(1, 1, b + 2, c + 1, digits); } -void sub_80A4E8C(s8 a, u8 b) +static void sub_80A4E8C(s8 delta, u8 b) { PlaySE(SE_SELECT); sub_80F979C(0, 1); @@ -1638,8 +1726,8 @@ void sub_80A4E8C(s8 a, u8 b) PauseVerticalScrollIndicator(1); PauseVerticalScrollIndicator(2); PauseVerticalScrollIndicator(3); - sub_80A3B04(gBGTilemapBuffers[2], a); - sub_80A3AC0(gBGTilemapBuffers[2], gUnknown_02038559); + ChangePocket(gBGTilemapBuffers[2], delta); + DrawPocketIndicatorDots(gBGTilemapBuffers[2], sCurrentBagPocket); sub_80A3770(); sub_80A7C64(); CreateBagPokeballSprite(b); @@ -1647,7 +1735,7 @@ void sub_80A4E8C(s8 a, u8 b) static bool8 sub_80A4F0C(void) { - if (gUnknown_03000701 == 5 || gUnknown_03000701 == 4) + if (sReturnLocation == RETURN_TO_FIELD_5 || sReturnLocation == RETURN_TO_FIELD_4) return FALSE; if (gMain.newKeys == DPAD_RIGHT || sub_80F9284() == 2) { @@ -1662,20 +1750,20 @@ static bool8 sub_80A4F0C(void) return FALSE; } -void sub_80A4F68(u8 taskId) +static void sub_80A4F68(u8 taskId) { sub_80A4F0C(); } -bool8 sub_80A4F74(u8 a) +static bool8 sub_80A4F74(u8 a) { bool8 retVal = FALSE; if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { - if (gUnknown_03005D10[gUnknown_02038559].unk0 != 0) + if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos != 0) sub_80A4B58(-1, a); - else if (gUnknown_03005D10[gUnknown_02038559].unk1 != 0) + else if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop != 0) sub_80A4B14(-1, a); if (gLinkOpen == TRUE && gMain.keyRepeatCounter == 5) gMain.keyRepeatCounter = 11; @@ -1683,11 +1771,11 @@ bool8 sub_80A4F74(u8 a) } else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) { - if (gUnknown_03000701 != 5) + if (sReturnLocation != RETURN_TO_FIELD_5) { - if (gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk3) + if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].cursorMax) { - if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) sub_80A4B14(1, a); } else @@ -1697,9 +1785,9 @@ bool8 sub_80A4F74(u8 a) } else { - if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk2 - 1) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots - 1) { - if (gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk3) + if (gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].cursorMax) sub_80A4B58(1, a); else sub_80A4B14(1, a); @@ -1725,7 +1813,7 @@ bool8 sub_80A4F74(u8 a) return retVal; } -void sub_80A50C8(u8 taskId) +static void sub_80A50C8(u8 taskId) { s16 *r5 = gTasks[taskId].data; @@ -1738,12 +1826,12 @@ void sub_80A50C8(u8 taskId) } if ((gMain.newKeys & SELECT_BUTTON) - && !(gUnknown_02038559 == 3 || gUnknown_02038559 == 2) - && gUnknown_03000701 < 2) + && !(sCurrentBagPocket == BAG_POCKET_BERRIES || sCurrentBagPocket == BAG_POCKET_TMs_HMs) + && (sReturnLocation == RETURN_TO_FIELD_0 || sReturnLocation == RETURN_TO_BATTLE)) { if (r5[10] == 0) { - if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) { PlaySE(SE_SELECT); sub_80A3F50(taskId); @@ -1752,7 +1840,7 @@ void sub_80A50C8(u8 taskId) } else { - if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 != gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos != gBagPocketScrollStates[sCurrentBagPocket].numSlots) { PlaySE(SE_SELECT); sub_80A3E90(taskId); @@ -1768,12 +1856,12 @@ void sub_80A50C8(u8 taskId) if (gMain.newKeys & A_BUTTON) { - if (gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 == gUnknown_03005D10[gUnknown_02038559].unk2) + if (gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos == gBagPocketScrollStates[sCurrentBagPocket].numSlots) { if (r5[10] == 0) { gScriptItemId = 0; - gUnknown_083C16BC[gUnknown_03000701][1](taskId); + gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); } else { @@ -1786,9 +1874,9 @@ void sub_80A50C8(u8 taskId) if (r5[10] == 0) { PlaySE(SE_SELECT); - gUnknown_02038560 = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; - gScriptItemId = gUnknown_03005D24[gUnknown_02038560].itemId; - gUnknown_083C16BC[gUnknown_03000701][0](taskId); + gUnknown_02038560 = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + gScriptItemId = gCurrentBagPocketItemSlots[gUnknown_02038560].itemId; + gUnknown_083C16BC[sReturnLocation].onItemSelect(taskId); sub_80F98A4(0); sub_80F98A4(1); sub_80F98A4(2); @@ -1808,10 +1896,10 @@ void sub_80A50C8(u8 taskId) { if (r5[10] == 0) { - if (gUnknown_03000701 != 5) + if (sReturnLocation != RETURN_TO_FIELD_5) { gScriptItemId = 0; - gUnknown_083C16BC[gUnknown_03000701][1](taskId); + gUnknown_083C16BC[sReturnLocation].onBagClose(taskId); } } else @@ -1828,7 +1916,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) { s16 *taskData = gTasks[taskId].data; - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { if (taskData[1] != b) taskData[1]++; @@ -1837,7 +1925,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) return TRUE; } - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) { if (taskData[1] != 1) taskData[1]--; @@ -1846,7 +1934,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) return TRUE; } - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT) { if (taskData[1] + 10 < b) taskData[1] += 10; @@ -1855,7 +1943,7 @@ bool8 sub_80A52C4(u8 taskId, u16 b) return TRUE; } - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT) { if (taskData[1] > 10) taskData[1] -= 10; @@ -1867,13 +1955,14 @@ bool8 sub_80A52C4(u8 taskId, u16 b) return FALSE; } -bool8 sub_80A5350(u8 taskId) +static bool8 sub_80A5350(u8 taskId) { s16 *taskData = gTasks[taskId].data; - if (sub_80A52C4(taskId, gUnknown_03005D24[gUnknown_02038560].quantity) == TRUE) + if (sub_80A52C4(taskId, gCurrentBagPocketItemSlots[gUnknown_02038560].quantity) == TRUE) { - if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way + if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 3); else sub_80A418C(taskData[1], 1, taskData[2], taskData[3], 2); @@ -1882,7 +1971,7 @@ bool8 sub_80A5350(u8 taskId) return FALSE; } -void sub_80A53CC(void) +static void sub_80A53CC(void) { if (sub_80A34B4() == TRUE) { @@ -1893,12 +1982,12 @@ void sub_80A53CC(void) void sub_80A53F8(void) { - gUnknown_03000701 = 0; + sReturnLocation = RETURN_TO_FIELD_0; SetMainCallback2(sub_80A53CC); } #ifdef NONMATCHING -void sub_80A5414(u8 taskId) +static void sub_80A5414(u8 taskId) { TaskFunc r5 = NULL; @@ -1906,37 +1995,37 @@ void sub_80A5414(u8 taskId) { if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) { - if ((gUnknown_03000700 & 1) && gUnknown_03000704[gUnknown_03000700 - 1] == 8) + if ((sPopupMenuSelection & 1) && sPopupMenuActionList[sPopupMenuSelection - 1] == 8) { PlaySE(SE_SELECT); - gUnknown_03000700 = MoveMenuCursor3(-1); + sPopupMenuSelection = MoveMenuCursor3(-1); } } //_080A546C else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) { - if (!(gUnknown_03000700 & 1) && gUnknown_03000704[gUnknown_03000700 + 1] != 8) + if (!(sPopupMenuSelection & 1) && sPopupMenuActionList[sPopupMenuSelection + 1] != 8) { PlaySE(SE_SELECT); - gUnknown_03000700 = MoveMenuCursor3(1); + sPopupMenuSelection = MoveMenuCursor3(1); } } //_080A549C else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x20) { - if (gUnknown_03000700 > 1 && gUnknown_03000704[gUnknown_03000700 - 2] != 8) + if (sPopupMenuSelection > 1 && sPopupMenuActionList[sPopupMenuSelection - 2] != 8) { PlaySE(SE_SELECT); - gUnknown_03000700 = MoveMenuCursor3(-2); + sPopupMenuSelection = MoveMenuCursor3(-2); } } //_080A54CC else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x10) { - if (gUnknown_03000700 <= 1 && gUnknown_03000704[gUnknown_03000700 + 2] != 8) + if (sPopupMenuSelection <= 1 && sPopupMenuActionList[sPopupMenuSelection + 2] != 8) { PlaySE(SE_SELECT); - gUnknown_03000700 = MoveMenuCursor3(2); + sPopupMenuSelection = MoveMenuCursor3(2); } } //_080A5500 @@ -1945,9 +2034,9 @@ void sub_80A5414(u8 taskId) if (gMain.newKeys & B_BUTTON) { gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A4DA4(gBGTilemapBuffers[1]); - r5 = gUnknown_083C1640[gUnknown_03000704[3]].func; + r5 = sItemPopupMenuActions[sPopupMenuActionList[3]].func; r5(taskId); } } @@ -1956,16 +2045,16 @@ void sub_80A5414(u8 taskId) //_080A5590 gTasks[taskId].data[10] = 0; sub_80A4DA4(gBGTilemapBuffers[1]); - r5 = gUnknown_083C1640[gUnknown_03000704[gUnknown_03000700]].func; + r5 = sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func; r5(taskId); } } //_080A5552 if (r5 == NULL) { - if (gUnknown_03000701 == 5) + if (sReturnLocation == RETURN_TO_FIELD_5) { - if (gUnknown_03000700 == 0) + if (sPopupMenuSelection == 0) { sub_8072DDC(12); return; @@ -1973,7 +2062,7 @@ void sub_80A5414(u8 taskId) //_080A55D4 //else //{ - if (gUnknown_03000700 == 0 || gUnknown_03000700 == 1) + if (sPopupMenuSelection == 0 || sPopupMenuSelection == 1) sub_8072DCC(0x2F); else sub_8072DCC(0x30); @@ -1982,7 +2071,7 @@ void sub_80A5414(u8 taskId) //_080A55E0 else { - if (gUnknown_03000700 == 0 || gUnknown_03000700 == 1) + if (sPopupMenuSelection == 0 || sPopupMenuSelection == 1) sub_8072DCC(0x2F); else sub_8072DCC(0x30); @@ -1991,7 +2080,7 @@ void sub_80A5414(u8 taskId) } #else __attribute__((naked)) -void sub_80A5414(u8 taskId) +static void sub_80A5414(u8 taskId) { asm(".syntax unified\n\ push {r4,r5,lr}\n\ @@ -2009,7 +2098,7 @@ _080A5426:\n\ ands r1, r0\n\ cmp r1, 0x40\n\ bne _080A546C\n\ - ldr r4, _080A5464 @ =gUnknown_03000700\n\ + ldr r4, _080A5464 @ =sPopupMenuSelection\n\ ldrb r1, [r4]\n\ movs r0, 0x1\n\ ands r0, r1\n\ @@ -2018,7 +2107,7 @@ _080A5426:\n\ b _080A5552\n\ _080A5440:\n\ ldrb r1, [r4]\n\ - ldr r0, _080A5468 @ =gUnknown_03000704\n\ + ldr r0, _080A5468 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r1, r0\n\ subs r1, 0x1\n\ @@ -2034,19 +2123,19 @@ _080A5452:\n\ b _080A54EE\n\ .align 2, 0\n\ _080A5460: .4byte gMain\n\ -_080A5464: .4byte gUnknown_03000700\n\ -_080A5468: .4byte gUnknown_03000704\n\ +_080A5464: .4byte sPopupMenuSelection\n\ +_080A5468: .4byte sPopupMenuActionList\n\ _080A546C:\n\ cmp r1, 0x80\n\ bne _080A549C\n\ - ldr r4, _080A5494 @ =gUnknown_03000700\n\ + ldr r4, _080A5494 @ =sPopupMenuSelection\n\ ldrb r1, [r4]\n\ movs r0, 0x1\n\ ands r0, r1\n\ cmp r0, 0\n\ bne _080A5552\n\ ldrb r1, [r4]\n\ - ldr r0, _080A5498 @ =gUnknown_03000704\n\ + ldr r0, _080A5498 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r1, r0\n\ ldrb r0, [r1, 0x1]\n\ @@ -2057,17 +2146,17 @@ _080A546C:\n\ movs r0, 0x1\n\ b _080A54EE\n\ .align 2, 0\n\ -_080A5494: .4byte gUnknown_03000700\n\ -_080A5498: .4byte gUnknown_03000704\n\ +_080A5494: .4byte sPopupMenuSelection\n\ +_080A5498: .4byte sPopupMenuActionList\n\ _080A549C:\n\ cmp r1, 0x20\n\ bne _080A54CC\n\ - ldr r4, _080A54C4 @ =gUnknown_03000700\n\ + ldr r4, _080A54C4 @ =sPopupMenuSelection\n\ ldrb r0, [r4]\n\ cmp r0, 0x1\n\ bls _080A5552\n\ adds r1, r0, 0\n\ - ldr r0, _080A54C8 @ =gUnknown_03000704\n\ + ldr r0, _080A54C8 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r1, r0\n\ subs r1, 0x2\n\ @@ -2080,17 +2169,17 @@ _080A549C:\n\ negs r0, r0\n\ b _080A54EE\n\ .align 2, 0\n\ -_080A54C4: .4byte gUnknown_03000700\n\ -_080A54C8: .4byte gUnknown_03000704\n\ +_080A54C4: .4byte sPopupMenuSelection\n\ +_080A54C8: .4byte sPopupMenuActionList\n\ _080A54CC:\n\ cmp r1, 0x10\n\ bne _080A5500\n\ - ldr r4, _080A54F8 @ =gUnknown_03000700\n\ + ldr r4, _080A54F8 @ =sPopupMenuSelection\n\ ldrb r0, [r4]\n\ cmp r0, 0x1\n\ bhi _080A5552\n\ adds r1, r0, 0\n\ - ldr r0, _080A54FC @ =gUnknown_03000704\n\ + ldr r0, _080A54FC @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r1, r0\n\ ldrb r0, [r1, 0x2]\n\ @@ -2104,8 +2193,8 @@ _080A54EE:\n\ strb r0, [r4]\n\ b _080A5552\n\ .align 2, 0\n\ -_080A54F8: .4byte gUnknown_03000700\n\ -_080A54FC: .4byte gUnknown_03000704\n\ +_080A54F8: .4byte sPopupMenuSelection\n\ +_080A54FC: .4byte sPopupMenuActionList\n\ _080A5500:\n\ ldrh r1, [r2, 0x2E]\n\ movs r0, 0x1\n\ @@ -2122,8 +2211,8 @@ _080A5500:\n\ lsls r0, 3\n\ adds r0, r1\n\ strh r5, [r0, 0x1C]\n\ - ldr r1, _080A5574 @ =gUnknown_03005D10\n\ - ldr r0, _080A5578 @ =gUnknown_02038559\n\ + ldr r1, _080A5574 @ =gBagPocketScrollStates\n\ + ldr r0, _080A5578 @ =sCurrentBagPocket\n\ ldrb r0, [r0]\n\ lsls r0, 24\n\ asrs r0, 24\n\ @@ -2135,8 +2224,8 @@ _080A5500:\n\ bl sub_80A48E8\n\ ldr r0, _080A557C @ =gBGTilemapBuffers + 0x800\n\ bl sub_80A4DA4\n\ - ldr r1, _080A5580 @ =gUnknown_083C1640\n\ - ldr r0, _080A5584 @ =gUnknown_03000704\n\ + ldr r1, _080A5580 @ =sItemPopupMenuActions\n\ + ldr r0, _080A5584 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ ldrb r0, [r0, 0x3]\n\ lsls r0, 3\n\ @@ -2148,11 +2237,11 @@ _080A5500:\n\ _080A5552:\n\ cmp r5, 0\n\ bne _080A55FA\n\ - ldr r0, _080A5588 @ =gUnknown_03000701\n\ + ldr r0, _080A5588 @ =sReturnLocation\n\ ldrb r0, [r0]\n\ cmp r0, 0x5\n\ bne _080A55E0\n\ - ldr r0, _080A558C @ =gUnknown_03000700\n\ + ldr r0, _080A558C @ =sPopupMenuSelection\n\ ldrb r0, [r0]\n\ cmp r0, 0\n\ bne _080A55D4\n\ @@ -2161,13 +2250,13 @@ _080A5552:\n\ b _080A55FA\n\ .align 2, 0\n\ _080A5570: .4byte gTasks\n\ -_080A5574: .4byte gUnknown_03005D10\n\ -_080A5578: .4byte gUnknown_02038559\n\ +_080A5574: .4byte gBagPocketScrollStates\n\ +_080A5578: .4byte sCurrentBagPocket\n\ _080A557C: .4byte gBGTilemapBuffers + 0x800\n\ -_080A5580: .4byte gUnknown_083C1640\n\ -_080A5584: .4byte gUnknown_03000704\n\ -_080A5588: .4byte gUnknown_03000701\n\ -_080A558C: .4byte gUnknown_03000700\n\ +_080A5580: .4byte sItemPopupMenuActions\n\ +_080A5584: .4byte sPopupMenuActionList\n\ +_080A5588: .4byte sReturnLocation\n\ +_080A558C: .4byte sPopupMenuSelection\n\ _080A5590:\n\ ldr r1, _080A55C0 @ =gTasks\n\ lsls r0, r4, 2\n\ @@ -2177,10 +2266,10 @@ _080A5590:\n\ strh r5, [r0, 0x1C]\n\ ldr r0, _080A55C4 @ =gBGTilemapBuffers + 0x800\n\ bl sub_80A4DA4\n\ - ldr r1, _080A55C8 @ =gUnknown_083C1640\n\ - ldr r0, _080A55CC @ =gUnknown_03000700\n\ + ldr r1, _080A55C8 @ =sItemPopupMenuActions\n\ + ldr r0, _080A55CC @ =sPopupMenuSelection\n\ ldrb r2, [r0]\n\ - ldr r0, _080A55D0 @ =gUnknown_03000704\n\ + ldr r0, _080A55D0 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r0, r2\n\ ldrb r0, [r0]\n\ @@ -2194,9 +2283,9 @@ _080A5590:\n\ .align 2, 0\n\ _080A55C0: .4byte gTasks\n\ _080A55C4: .4byte gBGTilemapBuffers + 0x800\n\ -_080A55C8: .4byte gUnknown_083C1640\n\ -_080A55CC: .4byte gUnknown_03000700\n\ -_080A55D0: .4byte gUnknown_03000704\n\ +_080A55C8: .4byte sItemPopupMenuActions\n\ +_080A55CC: .4byte sPopupMenuSelection\n\ +_080A55D0: .4byte sPopupMenuActionList\n\ _080A55D4:\n\ cmp r0, 0x1\n\ bls _080A55E8\n\ @@ -2204,7 +2293,7 @@ _080A55D4:\n\ bl sub_8072DCC\n\ b _080A55FA\n\ _080A55E0:\n\ - ldr r0, _080A55F0 @ =gUnknown_03000700\n\ + ldr r0, _080A55F0 @ =sPopupMenuSelection\n\ ldrb r0, [r0]\n\ cmp r0, 0x1\n\ bhi _080A55F4\n\ @@ -2213,7 +2302,7 @@ _080A55E8:\n\ bl sub_8072DCC\n\ b _080A55FA\n\ .align 2, 0\n\ -_080A55F0: .4byte gUnknown_03000700\n\ +_080A55F0: .4byte sPopupMenuSelection\n\ _080A55F4:\n\ movs r0, 0x30\n\ bl sub_8072DCC\n\ @@ -2226,7 +2315,7 @@ _080A55FA:\n\ #endif __attribute__((naked)) -void sub_80A5600(u8 taskId) +static void sub_80A5600(u8 taskId) { asm(".syntax unified\n\ push {r4,r5,lr}\n\ @@ -2239,14 +2328,14 @@ void sub_80A5600(u8 taskId) ands r1, r0\n\ cmp r1, 0x40\n\ bne _080A5648\n\ - ldr r4, _080A5640 @ =gUnknown_03000700\n\ + ldr r4, _080A5640 @ =sPopupMenuSelection\n\ ldrb r0, [r4]\n\ cmp r0, 0\n\ bne _080A561E\n\ b _080A5736\n\ _080A561E:\n\ adds r1, r0, 0\n\ - ldr r0, _080A5644 @ =gUnknown_03000704\n\ + ldr r0, _080A5644 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r1, r0\n\ subs r1, 0x1\n\ @@ -2262,12 +2351,12 @@ _080A5630:\n\ b _080A56D2\n\ .align 2, 0\n\ _080A563C: .4byte gMain\n\ -_080A5640: .4byte gUnknown_03000700\n\ -_080A5644: .4byte gUnknown_03000704\n\ +_080A5640: .4byte sPopupMenuSelection\n\ +_080A5644: .4byte sPopupMenuActionList\n\ _080A5648:\n\ cmp r1, 0x80\n\ bne _080A5680\n\ - ldr r4, _080A5674 @ =gUnknown_03000700\n\ + ldr r4, _080A5674 @ =sPopupMenuSelection\n\ ldrb r1, [r4]\n\ ldr r0, _080A5678 @ =gUnknown_02038564\n\ ldrb r0, [r0]\n\ @@ -2276,7 +2365,7 @@ _080A5648:\n\ beq _080A5736\n\ cmp r1, 0x2\n\ beq _080A5736\n\ - ldr r0, _080A567C @ =gUnknown_03000704\n\ + ldr r0, _080A567C @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r0, r1, r0\n\ ldrb r0, [r0, 0x1]\n\ @@ -2287,18 +2376,18 @@ _080A5648:\n\ movs r0, 0x1\n\ b _080A56D2\n\ .align 2, 0\n\ -_080A5674: .4byte gUnknown_03000700\n\ +_080A5674: .4byte sPopupMenuSelection\n\ _080A5678: .4byte gUnknown_02038564\n\ -_080A567C: .4byte gUnknown_03000704\n\ +_080A567C: .4byte sPopupMenuActionList\n\ _080A5680:\n\ cmp r1, 0x20\n\ bne _080A56B0\n\ - ldr r4, _080A56A8 @ =gUnknown_03000700\n\ + ldr r4, _080A56A8 @ =sPopupMenuSelection\n\ ldrb r0, [r4]\n\ cmp r0, 0x2\n\ bls _080A5736\n\ adds r1, r0, 0\n\ - ldr r0, _080A56AC @ =gUnknown_03000704\n\ + ldr r0, _080A56AC @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r1, r0\n\ subs r1, 0x3\n\ @@ -2311,17 +2400,17 @@ _080A5680:\n\ negs r0, r0\n\ b _080A56D2\n\ .align 2, 0\n\ -_080A56A8: .4byte gUnknown_03000700\n\ -_080A56AC: .4byte gUnknown_03000704\n\ +_080A56A8: .4byte sPopupMenuSelection\n\ +_080A56AC: .4byte sPopupMenuActionList\n\ _080A56B0:\n\ cmp r1, 0x10\n\ bne _080A56E4\n\ - ldr r4, _080A56DC @ =gUnknown_03000700\n\ + ldr r4, _080A56DC @ =sPopupMenuSelection\n\ ldrb r0, [r4]\n\ cmp r0, 0x2\n\ bhi _080A5736\n\ adds r1, r0, 0\n\ - ldr r0, _080A56E0 @ =gUnknown_03000704\n\ + ldr r0, _080A56E0 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r1, r0\n\ ldrb r0, [r1, 0x3]\n\ @@ -2335,8 +2424,8 @@ _080A56D2:\n\ strb r0, [r4]\n\ b _080A5736\n\ .align 2, 0\n\ -_080A56DC: .4byte gUnknown_03000700\n\ -_080A56E0: .4byte gUnknown_03000704\n\ +_080A56DC: .4byte sPopupMenuSelection\n\ +_080A56E0: .4byte sPopupMenuActionList\n\ _080A56E4:\n\ ldrh r1, [r2, 0x2E]\n\ movs r0, 0x1\n\ @@ -2353,8 +2442,8 @@ _080A56E4:\n\ lsls r0, 3\n\ adds r0, r1\n\ strh r5, [r0, 0x1C]\n\ - ldr r1, _080A5750 @ =gUnknown_03005D10\n\ - ldr r0, _080A5754 @ =gUnknown_02038559\n\ + ldr r1, _080A5750 @ =gBagPocketScrollStates\n\ + ldr r0, _080A5754 @ =sCurrentBagPocket\n\ ldrb r0, [r0]\n\ lsls r0, 24\n\ asrs r0, 24\n\ @@ -2366,8 +2455,8 @@ _080A56E4:\n\ bl sub_80A48E8\n\ ldr r0, _080A5758 @ =gBGTilemapBuffers + 0x800\n\ bl sub_80A4DA4\n\ - ldr r1, _080A575C @ =gUnknown_083C1640\n\ - ldr r0, _080A5760 @ =gUnknown_03000704\n\ + ldr r1, _080A575C @ =sItemPopupMenuActions\n\ + ldr r0, _080A5760 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ ldrb r0, [r0, 0x5]\n\ lsls r0, 3\n\ @@ -2379,7 +2468,7 @@ _080A56E4:\n\ _080A5736:\n\ cmp r5, 0\n\ bne _080A57BE\n\ - ldr r0, _080A5764 @ =gUnknown_03000700\n\ + ldr r0, _080A5764 @ =sPopupMenuSelection\n\ ldrb r0, [r0]\n\ cmp r0, 0\n\ bne _080A57AC\n\ @@ -2388,12 +2477,12 @@ _080A5736:\n\ b _080A57BE\n\ .align 2, 0\n\ _080A574C: .4byte gTasks\n\ -_080A5750: .4byte gUnknown_03005D10\n\ -_080A5754: .4byte gUnknown_02038559\n\ +_080A5750: .4byte gBagPocketScrollStates\n\ +_080A5754: .4byte sCurrentBagPocket\n\ _080A5758: .4byte gBGTilemapBuffers + 0x800\n\ -_080A575C: .4byte gUnknown_083C1640\n\ -_080A5760: .4byte gUnknown_03000704\n\ -_080A5764: .4byte gUnknown_03000700\n\ +_080A575C: .4byte sItemPopupMenuActions\n\ +_080A5760: .4byte sPopupMenuActionList\n\ +_080A5764: .4byte sPopupMenuSelection\n\ _080A5768:\n\ ldr r1, _080A5798 @ =gTasks\n\ lsls r0, r4, 2\n\ @@ -2403,10 +2492,10 @@ _080A5768:\n\ strh r5, [r0, 0x1C]\n\ ldr r0, _080A579C @ =gBGTilemapBuffers + 0x800\n\ bl sub_80A4DA4\n\ - ldr r1, _080A57A0 @ =gUnknown_083C1640\n\ - ldr r0, _080A57A4 @ =gUnknown_03000700\n\ + ldr r1, _080A57A0 @ =sItemPopupMenuActions\n\ + ldr r0, _080A57A4 @ =sPopupMenuSelection\n\ ldrb r2, [r0]\n\ - ldr r0, _080A57A8 @ =gUnknown_03000704\n\ + ldr r0, _080A57A8 @ =sPopupMenuActionList\n\ ldr r0, [r0]\n\ adds r0, r2\n\ ldrb r0, [r0]\n\ @@ -2420,9 +2509,9 @@ _080A5768:\n\ .align 2, 0\n\ _080A5798: .4byte gTasks\n\ _080A579C: .4byte gBGTilemapBuffers + 0x800\n\ -_080A57A0: .4byte gUnknown_083C1640\n\ -_080A57A4: .4byte gUnknown_03000700\n\ -_080A57A8: .4byte gUnknown_03000704\n\ +_080A57A0: .4byte sItemPopupMenuActions\n\ +_080A57A4: .4byte sPopupMenuSelection\n\ +_080A57A8: .4byte sPopupMenuActionList\n\ _080A57AC:\n\ cmp r0, 0x2\n\ bhi _080A57B8\n\ @@ -2439,19 +2528,19 @@ _080A57BE:\n\ .syntax divided\n"); } -void sub_80A57C4(void) +static void sub_80A57C4(void) { u8 r5; - gUnknown_03000704 = gUnknown_083C16AE[gUnknown_02038559]; - if (gUnknown_02038559 == 4) + sPopupMenuActionList = gUnknown_083C16AE[sCurrentBagPocket]; + if (sCurrentBagPocket == BAG_POCKET_KEY_ITEMS) { gUnknown_02038564 = 1; r5 = 9; } else if (sub_80F92F4(gScriptItemId) == 0) { - gUnknown_03000704 = gUnknown_083C16AE[4]; + sPopupMenuActionList = gUnknown_083C16AE[4]; gUnknown_02038564 = 1; r5 = 9; } @@ -2466,43 +2555,43 @@ void sub_80A57C4(void) InitMenu(0, 7, r5 + 1, gUnknown_02038564, 0, 6); } -void sub_80A5888(u8 taskId) +static void sub_80A5888(u8 taskId) { if (sub_80A78A0() != 0) { if (gMain.newAndRepeatedKeys & DPAD_UP) { - if (gUnknown_03000700 != 0) + if (sPopupMenuSelection != 0) { PlaySE(SE_SELECT); - gUnknown_03000700 = MoveMenuCursor(-1); + sPopupMenuSelection = MoveMenuCursor(-1); } } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if (gUnknown_03000700 != gUnknown_02038564 - 1) + if (sPopupMenuSelection != gUnknown_02038564 - 1) { PlaySE(SE_SELECT); - gUnknown_03000700 = MoveMenuCursor(1); + sPopupMenuSelection = MoveMenuCursor(1); } } else if (gMain.newKeys & A_BUTTON) { gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A4DA4(gBGTilemapBuffers[1]); - gUnknown_083C1640[gUnknown_03000704[gUnknown_03000700]].func(taskId); + sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func(taskId); } else if (gMain.newKeys & B_BUTTON) { gTasks[taskId].data[10] = 0; sub_80A4DA4(gBGTilemapBuffers[1]); - gUnknown_083C1640[2].func(taskId); + sItemPopupMenuActions[2].func(taskId); } } } -void sub_80A599C(u8 taskId) +static void OnBagClose_Field0(u8 taskId) { gTasks[taskId].data[8] = (u32)sub_805469C >> 16; gTasks[taskId].data[9] = (u32)sub_805469C; @@ -2510,15 +2599,15 @@ void sub_80A599C(u8 taskId) sub_80A5AE4(taskId); } -void sub_80A59D0(u8 taskId) +static void OnItemSelect_Field05(u8 taskId) { - gUnknown_03000700 = 0; - if (gUnknown_03000701 == 5) - gUnknown_03000700 = 1; - gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sPopupMenuSelection = 0; + if (sReturnLocation == RETURN_TO_FIELD_5) + sPopupMenuSelection = 1; + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A73FC(); - if (sub_80F9344() == TRUE && gUnknown_03000701 != 5) + if (sub_80F9344() == TRUE && sReturnLocation != RETURN_TO_FIELD_5) { sub_80A57C4(); gTasks[taskId].func = sub_80A5888; @@ -2526,20 +2615,20 @@ void sub_80A59D0(u8 taskId) else { sub_80A4BF0(gBGTilemapBuffers[1]); - if (gUnknown_02038559 != 3 || gUnknown_03000701 == 5) + if (sCurrentBagPocket != BAG_POCKET_BERRIES || sReturnLocation == RETURN_TO_FIELD_5) gTasks[taskId].func = sub_80A5414; else gTasks[taskId].func = sub_80A5600; } } -void sub_80A5AAC(u8 taskId) +static void sub_80A5AAC(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); gTasks[taskId].func = HandleItemMenuPaletteFade; } -void sub_80A5AE4(u8 taskId) +static void sub_80A5AE4(u8 taskId) { PlaySE(SE_SELECT); sub_80A5AAC(taskId); @@ -2563,7 +2652,7 @@ void sub_80A5B40(void) { while (1) { - if (sub_80A317C() == TRUE) + if (SetupBagMultistep() == TRUE) { ResetTasks(); gUnknown_02038563 = CreateTask(sub_80A50C8, 0); @@ -2574,7 +2663,7 @@ void sub_80A5B40(void) } } -void sub_80A5B78(u8 taskId) +static void HandlePopupMenuAction_UseOnField(u8 taskId) { if (ItemId_GetFieldFunc(gScriptItemId) != NULL) { @@ -2586,7 +2675,7 @@ void sub_80A5B78(u8 taskId) else { gTasks[taskId].data[2] = 0; - if (gUnknown_02038559 != 3) + if (sCurrentBagPocket != BAG_POCKET_BERRIES) ItemId_GetFieldFunc(gScriptItemId)(taskId); else sub_80C9C7C(taskId); @@ -2594,14 +2683,14 @@ void sub_80A5B78(u8 taskId) } } -void sub_80A5BF8(u8 taskId) +static void sub_80A5BF8(u8 taskId) { sub_80A73FC(); sub_80A7590(); DisplayCannotUseItemMessage(taskId, gOtherText_NoPokemon, CleanUpItemMenuMessage, 1); } -void sub_80A5C24(u8 taskId) +static void sub_80A5C24(u8 taskId) { sub_80A7528(0); sub_80A41D4(taskId); @@ -2631,7 +2720,7 @@ void ExecuteItemUseFromBlackPalette(void) CreateTask(Task_CallItemUseOnFieldCallback, 8); } -void Task_CallItemUseOnFieldCallback(u8 taskId) +static void Task_CallItemUseOnFieldCallback(u8 taskId) { if (sub_807D770() == TRUE) gUnknown_03005D00(taskId); @@ -2641,7 +2730,7 @@ void sub_80A5D04(void) { while (1) { - if (sub_80A317C() == TRUE) + if (SetupBagMultistep() == TRUE) { gUnknown_02038563 = CreateTask(sub_80A50C8, 0); break; @@ -2651,7 +2740,7 @@ void sub_80A5D04(void) } } -void sub_80A5D38(u8 taskId) +static void sub_80A5D38(u8 taskId) { gTasks[taskId].data[1] = 0; sub_80A4DA4(gBGTilemapBuffers[1]); @@ -2661,32 +2750,32 @@ void sub_80A5D38(u8 taskId) sub_80A37C0(taskId); } -void sub_80A5D78(void) +static void sub_80A5D78(void) { sub_80A4008(gBGTilemapBuffers[1], 8, 8, 5, 4); DisplayYesNoMenu(7, 7, 1); } -void sub_80A5DA0(u16 itemId, u16 quantity) +static void sub_80A5DA0(u16 itemId, u16 quantity) { CopyItemName(itemId, gStringVar1); if (quantity >= 100) - ConvertIntToDecimalStringN(gStringVar2, quantity, 0, 3); + ConvertIntToDecimalStringN(gStringVar2, quantity, STR_CONV_MODE_LEFT_ALIGN, 3); else - ConvertIntToDecimalStringN(gStringVar2, quantity, 0, 2); + ConvertIntToDecimalStringN(gStringVar2, quantity, STR_CONV_MODE_LEFT_ALIGN, 2); sub_80A4DA4(gBGTilemapBuffers[1]); sub_80A7528(5); sub_80A5D78(); } -void sub_80A5DF8(void) +static void sub_80A5DF8(void) { sub_80A4DA4(gBGTilemapBuffers[1]); MenuZeroFillWindowRect(7, 6, 11, 13); sub_80A7528(4); } -void sub_80A5E1C(u8 taskId) +static void sub_80A5E1C(u8 taskId) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { @@ -2696,19 +2785,19 @@ void sub_80A5E1C(u8 taskId) } } -void sub_80A5E60(u8 taskId) +static void sub_80A5E60(u8 taskId) { sub_80A5DF8(); sub_80A3D5C(taskId); gTasks[taskId].func = sub_80A5E1C; } -void sub_80A5E90(u8 taskId) +static void sub_80A5E90(u8 taskId) { sub_80A5D38(taskId); } -void sub_80A5EA0(u8 taskId) +static void sub_80A5EA0(u8 taskId) { if (sub_80A5350(taskId) == TRUE) return; @@ -2725,18 +2814,19 @@ void sub_80A5EA0(u8 taskId) } } -void sub_80A5F14(u8 taskId) +static void HandlePopupMenuAction_Toss(u8 taskId) { PlaySE(SE_SELECT); gTasks[taskId].func = sub_80A5EA0; sub_80A7528(3); - if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way + if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) sub_80A4DD8(taskId, 6, 9, 7, 3, 3); else sub_80A4DD8(taskId, 7, 9, 6, 3, 2); } -void sub_80A5F80(u8 taskId) +static void sub_80A5F80(u8 taskId) { PlaySE(SE_SELECT); sub_80A7528(0); @@ -2745,17 +2835,18 @@ void sub_80A5F80(u8 taskId) sub_80A37C0(taskId); } -void sub_80A5FAC(u8 taskId) +static void HandlePopupMenuAction_Register(u8 taskId) { PlaySE(SE_SELECT); if (gSaveBlock1.registeredItem == gScriptItemId) { - sub_80A40D0(); + // Un-register the registered item + RemoveSelectIconFromRegisteredItem(); gSaveBlock1.registeredItem = 0; } else { - sub_80A413C(); + AddSelectIconToRegisteredItem(); gSaveBlock1.registeredItem = gScriptItemId; } sub_80A7528(0); @@ -2764,7 +2855,7 @@ void sub_80A5FAC(u8 taskId) sub_80A37C0(taskId); } -void sub_80A6000(u8 taskId) +static void sub_80A6000(u8 taskId) { sub_80A7528(0); sub_80A41D4(taskId); @@ -2772,7 +2863,7 @@ void sub_80A6000(u8 taskId) sub_80A37C0(taskId); } -void sub_80A6024(u8 taskId) +static void sub_80A6024(u8 taskId) { if (gMain.newKeys & A_BUTTON) { @@ -2782,7 +2873,7 @@ void sub_80A6024(u8 taskId) } } -void DisplayCannotBeHeldMessage(u8 taskId) +static void DisplayCannotBeHeldMessage(u8 taskId) { sub_80A73FC(); CopyItemName(gScriptItemId, gStringVar1); @@ -2791,7 +2882,7 @@ void DisplayCannotBeHeldMessage(u8 taskId) DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6024, 1); } -void ItemMenu_Give(u8 taskId) +static void HandlePopupMenuAction_Give(u8 taskId) { PlaySE(SE_SELECT); if (sub_80F931C(gScriptItemId) == 0) @@ -2821,14 +2912,14 @@ void ItemMenu_Give(u8 taskId) } } -void sub_80A6178(u8 taskId) +static void HandlePopupMenuAction_CheckTag(u8 taskId) { sub_80A5AE4(taskId); gTasks[taskId].data[8] = (u32)BerryTagScreen_814625C >> 16; gTasks[taskId].data[9] = (u32)BerryTagScreen_814625C; } -void sub_80A61A8(void) +static void sub_80A61A8(void) { if (sub_80A34B4() == TRUE) gUnknown_02038563 = CreateTask(sub_80A50C8, 0); @@ -2836,20 +2927,20 @@ void sub_80A61A8(void) void sub_80A61D0(void) { - gUnknown_03000701 = 2; + sReturnLocation = RETURN_TO_PKMN_LIST; SetMainCallback2(sub_80A61A8); } -void sub_80A61EC(u8 taskId) +static void OnBagClose_PkmnList(u8 taskId) { gTasks[taskId].data[8] = (u32)sub_808A3F8 >> 16; gTasks[taskId].data[9] = (u32)sub_808A3F8; sub_80A5AE4(taskId); } -void sub_80A6214(u8 taskId) +static void OnItemSelect_PkmnList(u8 taskId) { - u8 r6 = gUnknown_02038559 + 1; + u8 r6 = sCurrentBagPocket + 1; if (sub_80F931C(gScriptItemId) == 0) { @@ -2877,7 +2968,7 @@ void sub_80A6214(u8 taskId) } } -void sub_80A62D8(void) +static void sub_80A62D8(void) { if (sub_80A34B4() == TRUE) gUnknown_02038563 = CreateTask(sub_80A50C8, 0); @@ -2885,11 +2976,11 @@ void sub_80A62D8(void) void sub_80A6300(void) { - gUnknown_03000701 = 3; + sReturnLocation = RETURN_TO_SHOP; SetMainCallback2(sub_80A62D8); } -void sub_80A631C(u8 taskId) +static void OnBagClose_Shop(u8 taskId) { gFieldCallback = sub_80B3050; gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; @@ -2897,11 +2988,11 @@ void sub_80A631C(u8 taskId) sub_80A5AE4(taskId); } -void sub_80A6354(u8 taskId) +static void OnItemSelect_Shop(u8 taskId) { sub_80A7590(); - gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A73FC(); CopyItemName(gScriptItemId, gStringVar2); if (ItemId_GetPrice(gScriptItemId) == 0) @@ -2916,7 +3007,7 @@ void sub_80A6354(u8 taskId) } } -void sub_80A640C(u8 taskId) +static void sub_80A640C(u8 taskId) { gTasks[taskId].data[10] = 0; sub_80A7528(0); @@ -2925,14 +3016,14 @@ void sub_80A640C(u8 taskId) sub_80A37C0(taskId); } -void sub_80A6444(u8 taskId) +static void sub_80A6444(u8 taskId) { sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); MenuZeroFillWindowRect(0, 14, 29, 19); gTasks[taskId].func = sub_80A640C; } -void sub_80A648C(u8 taskId) +static void sub_80A648C(u8 taskId) { gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; sub_80A4008(gBGTilemapBuffers[1], 1, 11, 12, 2); @@ -2940,7 +3031,8 @@ void sub_80A648C(u8 taskId) gTasks[taskId].data[1] = 1; gTasks[taskId].data[2] = 1; gTasks[taskId].data[3] = 11; - if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way + if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) sub_80A418C(1, 1, 1, 11, 3); else sub_80A418C(1, 1, 1, 11, 2); @@ -2948,7 +3040,7 @@ void sub_80A648C(u8 taskId) sub_80A683C(); } -void sub_80A6520(u8 taskId) +static void sub_80A6520(u8 taskId) { if (gMain.newKeys & A_BUTTON) { @@ -2957,20 +3049,20 @@ void sub_80A6520(u8 taskId) } } -void sub_80A6548(u8 taskId) +static void sub_80A6548(u8 taskId) { sub_80A48F8(taskId); gTasks[taskId].func = sub_80A6520; } -void sub_80A6574(u8 taskId) +static void sub_80A6574(u8 taskId) { PlaySE(SE_REGI); sub_80A6870(gScriptItemId, gTasks[taskId].data[1]); gTasks[taskId].func = sub_80A6548; } -void sub_80A65AC(u8 taskId) +static void sub_80A65AC(u8 taskId) { MenuZeroFillWindowRect(7, 6, 13, 12); sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); @@ -2980,20 +3072,20 @@ void sub_80A65AC(u8 taskId) sub_80A3D5C(taskId); } -void sub_80A6618(u8 taskId) +static void sub_80A6618(u8 taskId) { MenuZeroFillWindowRect(7, 6, 13, 12); sub_80A36B8(gBGTilemapBuffers[1], 7, 6, 6, 6); BuyMenuPrintItemQuantityAndPrice(taskId); } -void sub_80A6650(u8 taskId) +static void sub_80A6650(u8 taskId) { sub_80A5D78(); DoYesNoFuncWithChoice(taskId, &gUnknown_083C16FC); } -void Task_BuyHowManyDialogueHandleInput(u8 taskId) +static void Task_BuyHowManyDialogueHandleInput(u8 taskId) { if (sub_80A5350(taskId) == TRUE) { @@ -3005,7 +3097,7 @@ void Task_BuyHowManyDialogueHandleInput(u8 taskId) PlaySE(SE_SELECT); MenuZeroFillWindowRect(0, 10, 13, 13); sub_80A36B8(gBGTilemapBuffers[1], 0, 10, 13, 3); - ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gScriptItemId) / 2 * gTasks[taskId].data[1], 0, 6); + ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(gScriptItemId) / 2 * gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gOtherText_CanPay); DisplayCannotUseItemMessage(taskId, gStringVar4, sub_80A6650, 1); } @@ -3016,7 +3108,7 @@ void Task_BuyHowManyDialogueHandleInput(u8 taskId) } } -void sub_80A6760(u8 taskId) +static void sub_80A6760(u8 taskId) { gTasks[taskId].data[10] = 0; sub_80A7528(0); @@ -3025,7 +3117,7 @@ void sub_80A6760(u8 taskId) sub_80A37C0(taskId); } -void BuyMenuPrintItemQuantityAndPrice(u8 taskId) +static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) { sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31); RemoveMoneyLabelObject(0, 0); @@ -3034,25 +3126,25 @@ void BuyMenuPrintItemQuantityAndPrice(u8 taskId) gTasks[taskId].func = sub_80A6760; } -void BuyMenuDisplayMessage(u16 itemId, u16 quantity) +static void BuyMenuDisplayMessage(u16 itemId, u16 quantity) { sub_80B7A94(ItemId_GetPrice(itemId) / 2 * quantity, 6, 6, 11); - ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(itemId) / 2 * quantity, 0, 6); + ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(itemId) / 2 * quantity, STR_CONV_MODE_LEFT_ALIGN, 6); } -void sub_80A683C(void) +static void sub_80A683C(void) { sub_80B7C14(gSaveBlock1.money, 0, 0); sub_80A4008(gBGTilemapBuffers[1], 1, 1, 12, 2); } -void sub_80A6870(u16 itemId, u8 quantity) +static void sub_80A6870(u16 itemId, u8 quantity) { sub_80B79B8(&gSaveBlock1.money, ItemId_GetPrice(itemId) / 2 * quantity); sub_80B7BEC(gSaveBlock1.money, 0, 0); } -void sub_80A68A4(void) +static void sub_80A68A4(void) { if (sub_80A34B4() == TRUE) gUnknown_02038563 = CreateTask(sub_80A50C8, 0); @@ -3060,30 +3152,30 @@ void sub_80A68A4(void) void sub_80A68CC(void) { - gUnknown_02038559 = 3; - gUnknown_03000701 = 4; + sCurrentBagPocket = BAG_POCKET_BERRIES; + sReturnLocation = RETURN_TO_FIELD_4; SetMainCallback2(sub_80A68A4); } -void sub_80A68F0(u8 taskId) +static void OnBagClose_Field4(u8 taskId) { gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; gTasks[taskId].data[9] = (u32)sub_80546B8; sub_80A5AE4(taskId); } -void sub_80A6918(u8 taskId) +static void OnItemSelect_Field4(u8 taskId) { gTasks[taskId].data[8] = (u32)sub_80546B8 >> 16; gTasks[taskId].data[9] = (u32)sub_80546B8; sub_80A5AAC(taskId); } -void sub_80A6940(void) +static void sub_80A6940(void) { while (1) { - if (sub_80A317C() == TRUE) + if (SetupBagMultistep() == TRUE) { gUnknown_02038563 = CreateTask(sub_80A50C8, 0); sub_80A699C(); @@ -3096,32 +3188,32 @@ void sub_80A6940(void) void sub_80A6978(void) { - gUnknown_02038559 = 3; - gUnknown_03000701 = 5; + sCurrentBagPocket = BAG_POCKET_BERRIES; + sReturnLocation = RETURN_TO_FIELD_5; SetMainCallback2(sub_80A6940); } -void sub_80A699C(void) +static void sub_80A699C(void) { - gUnknown_03000704 = gUnknown_083C16B8; + sPopupMenuActionList = gUnknown_083C16B8; gUnknown_02038564 = 4; } -void sub_80A69B8(u8 taskId) +static void OnBagClose_Field5(u8 taskId) { gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; gTasks[taskId].data[9] = (u32)sub_804E990; sub_80A5AE4(taskId); } -void sub_80A69E0(u8 taskId) +static void HandlePopupMenuAction_Confirm(u8 taskId) { gTasks[taskId].data[8] = (u32)sub_804E990 >> 16; gTasks[taskId].data[9] = (u32)sub_804E990; sub_80A5AAC(taskId); } -void sub_80A6A08(void) +static void sub_80A6A08(void) { if (sub_80A34B4() == TRUE) gUnknown_02038563 = CreateTask(sub_80A50C8, 0); @@ -3129,11 +3221,11 @@ void sub_80A6A08(void) void sub_80A6A30(void) { - gUnknown_03000701 = 6; + sReturnLocation = RETURN_TO_PC; SetMainCallback2(sub_80A6A08); } -void sub_80A6A4C(u8 taskId) +static void OnBagClose_PC(u8 taskId) { gFieldCallback = ItemStorage_ReturnToMenuAfterDeposit; gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; @@ -3141,31 +3233,31 @@ void sub_80A6A4C(u8 taskId) sub_80A5AE4(taskId); } -void sub_80A6A84(u8 taskId) +static void sub_80A6A84(u8 taskId) { s16 *taskData = gTasks[taskId].data; sub_80A4DA4(gBGTilemapBuffers[1]); CopyItemName(gScriptItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, taskData[1], 0, 3); + ConvertIntToDecimalStringN(gStringVar2, taskData[1], STR_CONV_MODE_LEFT_ALIGN, 3); MenuZeroFillWindowRect(7, 6, 11, 13); sub_80A7528(7); sub_80A3D5C(taskId); gTasks[taskId].func = sub_80A5E1C; } -void sub_80A6B00(u8 taskId) +static void sub_80A6B00(u8 taskId) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); PlaySE(SE_SELECT); sub_80A5D38(taskId); } } -void sub_80A6B64(u8 taskId) +static void sub_80A6B64(u8 taskId) { s16 *taskData = gTasks[taskId].data; @@ -3188,7 +3280,7 @@ void sub_80A6B64(u8 taskId) } } -void sub_80A6BE0(u8 taskId) +static void sub_80A6BE0(u8 taskId) { if (sub_80A5350(taskId) == TRUE) return; @@ -3201,24 +3293,25 @@ void sub_80A6BE0(u8 taskId) else if (gMain.newKeys & B_BUTTON) { gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); PlaySE(SE_SELECT); sub_80A5D38(taskId); } } -void sub_80A6C6C(u8 taskId) +static void OnItemSelect_PC(u8 taskId) { - gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A73FC(); PlaySE(SE_SELECT); sub_80A7590(); - if (gUnknown_02038559 != 4) + if (sCurrentBagPocket != BAG_POCKET_KEY_ITEMS) { gTasks[taskId].func = sub_80A6BE0; sub_80A7528(6); - if (gUnknown_02038559 + 1 == 4) // if (gUnknown_02038559 == 3) + // if (sCurrentBagPocket == BAG_POCKET_BERRIES) Can't get it to match this way + if (sCurrentBagPocket + 1 == BAG_POCKET_BERRIES + 1) sub_80A4DD8(taskId, 6, 9, 7, 3, 3); else sub_80A4DD8(taskId, 7, 9, 6, 3, 2); @@ -3254,11 +3347,11 @@ bool32 sub_80A6D1C(void) return TRUE; } -void sub_80A6D98(void) +static void sub_80A6D98(void) { while (1) { - if (sub_80A317C() == TRUE) + if (SetupBagMultistep() == TRUE) { gUnknown_02038563 = CreateTask(sub_80A50C8, 0); break; @@ -3270,12 +3363,12 @@ void sub_80A6D98(void) void sub_80A6DCC(void) { - gUnknown_03000700 = 0; - gUnknown_03000701 = 1; + sPopupMenuSelection = 0; + sReturnLocation = RETURN_TO_BATTLE; SetMainCallback2(sub_80A6D98); } -void sub_80A6DF0(u16 *a) +static void sub_80A6DF0(u16 *a) { u8 r6 = (gUnknown_02038564 - 1) * 2; @@ -3283,74 +3376,74 @@ void sub_80A6DF0(u16 *a) sub_80A4008(a, 8, 10 - r6, 5, r6 + 2); if (gUnknown_02038564 == 1) { - MenuPrint(gUnknown_083C1640[gUnknown_03000704[0]].text, 8, 10); + MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[0]].text, 8, 10); } else { - MenuPrint(gUnknown_083C1640[gUnknown_03000704[0]].text, 8, 8); - MenuPrint(gUnknown_083C1640[gUnknown_03000704[1]].text, 8, 10); + MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[0]].text, 8, 8); + MenuPrint(sItemPopupMenuActions[sPopupMenuActionList[1]].text, 8, 10); } InitMenu(0, 8, 10 - r6, gUnknown_02038564, 0, 5); sub_80A7528(2); } -void sub_80A6EB8(u8 taskId) +static void sub_80A6EB8(u8 taskId) { - if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x40) + if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) { - if (gUnknown_03000700 == 1) + if (sPopupMenuSelection == 1) { PlaySE(SE_SELECT); - gUnknown_03000700 = MoveMenuCursor(-1); + sPopupMenuSelection = MoveMenuCursor(-1); } } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == 0x80) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) { - if (gUnknown_03000700 + 1 < gUnknown_02038564) + if (sPopupMenuSelection + 1 < gUnknown_02038564) { PlaySE(SE_SELECT); - gUnknown_03000700 = MoveMenuCursor(1); + sPopupMenuSelection = MoveMenuCursor(1); } } else if (gMain.newKeys & A_BUTTON) { gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A4DA4(gBGTilemapBuffers[1]); - gUnknown_083C1640[gUnknown_03000704[gUnknown_03000700]].func(taskId); + sItemPopupMenuActions[sPopupMenuActionList[sPopupMenuSelection]].func(taskId); } else if (gMain.newKeys & B_BUTTON) { gTasks[taskId].data[10] = 0; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A4DA4(gBGTilemapBuffers[1]); - gUnknown_083C1640[5].func(taskId); + sItemPopupMenuActions[5].func(taskId); } } -const u8 gUnknown_083C1708[] = {4, 5}; -const u8 gUnknown_083C170A[] = {5, 0}; +static const u8 gUnknown_083C1708[] = {4, 5}; +static const u8 gUnknown_083C170A[] = {5, 0}; -void sub_80A6FDC(void) +static void sub_80A6FDC(void) { if (ItemId_GetBattleUsage(gScriptItemId) != 0) { - gUnknown_03000704 = gUnknown_083C1708; + sPopupMenuActionList = gUnknown_083C1708; gUnknown_02038564 = 2; } else { - gUnknown_03000704 = gUnknown_083C170A; + sPopupMenuActionList = gUnknown_083C170A; gUnknown_02038564 = 1; } } -void sub_80A7024(u8 taskId) +static void OnItemSelect_Battle(u8 taskId) { - gUnknown_03000700 = 0; + sPopupMenuSelection = 0; sub_80A6FDC(); - gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A73FC(); sub_80A6DF0(gBGTilemapBuffers[1]); gTasks[taskId].func = sub_80A6EB8; @@ -3364,13 +3457,13 @@ void sub_80A7094(u8 taskId) BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); } -void sub_80A70D8(u8 taskId) +static void OnBagClose_Battle(u8 taskId) { PlaySE(SE_SELECT); sub_80A7094(taskId); } -void ItemMenu_UseInBattle(u8 taskId) +static void HandlePopupMenuAction_UseInBattle(u8 taskId) { if (ItemId_GetBattleFunc(gScriptItemId) != NULL) { @@ -3379,7 +3472,7 @@ void ItemMenu_UseInBattle(u8 taskId) } } -void sub_80A7124(u8 taskId) +static void sub_80A7124(u8 taskId) { PlaySE(SE_SELECT); sub_80A7528(0); @@ -3388,11 +3481,11 @@ void sub_80A7124(u8 taskId) sub_80A37C0(taskId); } -void sub_80A7150(void) +static void sub_80A7150(void) { while (1) { - if (sub_80A317C() == TRUE) + if (SetupBagMultistep() == TRUE) { gUnknown_02038563 = CreateTask(sub_80A7230, 0); gTasks[gUnknown_02038563].data[15] = 0; @@ -3407,17 +3500,17 @@ void PrepareBagForWallyTutorial(void) { u8 i; - gUnknown_03000700 = 0; - gUnknown_02038559 = 0; + sPopupMenuSelection = 0; + sCurrentBagPocket = BAG_POCKET_ITEMS; for (i = 0; i < 5; i++) { - gUnknown_03005D10[i].unk0 = 0; - gUnknown_03005D10[i].unk1 = 0; + gBagPocketScrollStates[i].cursorPos = 0; + gBagPocketScrollStates[i].scrollTop = 0; } // Save player's items - memcpy(ewram1E000, gSaveBlock1.bagPocket_Items, sizeof(gSaveBlock1.bagPocket_Items)); - memcpy(ewram1F000, gSaveBlock1.bagPocket_PokeBalls, sizeof(gSaveBlock1.bagPocket_PokeBalls)); + memcpy(ewramSavedItemsPocket, gSaveBlock1.bagPocket_Items, sizeof(gSaveBlock1.bagPocket_Items)); + memcpy(ewramSavedPokeballsPocket, gSaveBlock1.bagPocket_PokeBalls, sizeof(gSaveBlock1.bagPocket_PokeBalls)); // Add Wally's items to the bag ClearItemSlots(gSaveBlock1.bagPocket_Items, ARRAY_COUNT(gSaveBlock1.bagPocket_Items)); @@ -3425,11 +3518,11 @@ void PrepareBagForWallyTutorial(void) AddBagItem(ITEM_POTION, 1); AddBagItem(ITEM_POKE_BALL, 1); - gUnknown_03000701 = 7; + sReturnLocation = RETURN_TO_WALLY_BATTLE; SetMainCallback2(sub_80A7150); } -void sub_80A7230(u8 taskId) +static void sub_80A7230(u8 taskId) { s16 *taskData = gTasks[taskId].data; @@ -3444,10 +3537,10 @@ void sub_80A7230(u8 taskId) sub_80F98A4(2); sub_80F98A4(3); gScriptItemId = ITEM_POKE_BALL; - gUnknown_03000704 = gUnknown_083C1708; + sPopupMenuActionList = gUnknown_083C1708; gUnknown_02038564 = 2; - gTasks[taskId].data[10] = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0 + 1; - sub_80A48E8(taskId, gUnknown_03005D10[gUnknown_02038559].unk0, gUnknown_03005D10[gUnknown_02038559].unk0); + gTasks[taskId].data[10] = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos + 1; + sub_80A48E8(taskId, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, gBagPocketScrollStates[sCurrentBagPocket].cursorPos); sub_80A73FC(); sub_80A6DF0(gBGTilemapBuffers[1]); break; @@ -3456,8 +3549,8 @@ void sub_80A7230(u8 taskId) sub_80A4DA4(gBGTilemapBuffers[1]); // Restore player's items - memcpy(gSaveBlock1.bagPocket_Items, ewram1E000, sizeof(gSaveBlock1.bagPocket_Items)); - memcpy(gSaveBlock1.bagPocket_PokeBalls, ewram1F000, sizeof(gSaveBlock1.bagPocket_PokeBalls)); + memcpy(gSaveBlock1.bagPocket_Items, ewramSavedItemsPocket, sizeof(gSaveBlock1.bagPocket_Items)); + memcpy(gSaveBlock1.bagPocket_PokeBalls, ewramSavedPokeballsPocket, sizeof(gSaveBlock1.bagPocket_PokeBalls)); taskData[8] = (u32)sub_802E424 >> 16; taskData[9] = (u32)sub_802E424; @@ -3468,40 +3561,40 @@ void sub_80A7230(u8 taskId) taskData[15]++; } -void ItemListMenu_InitMenu(void) +static void ItemListMenu_InitMenu(void) { - InitMenu(0, 14, 2, gUnknown_03005D10[gUnknown_02038559].unk3 + 1, gUnknown_03005D10[gUnknown_02038559].unk0, 0); + InitMenu(0, 14, 2, gBagPocketScrollStates[sCurrentBagPocket].cursorMax + 1, gBagPocketScrollStates[sCurrentBagPocket].cursorPos, 0); CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 15); sub_80A73C0(); } -void sub_80A73C0(void) +static void sub_80A73C0(void) { - sub_814AD7C(0x70, gUnknown_03005D10[gUnknown_02038559].unk0 * 16 + 16); + sub_814AD7C(0x70, gBagPocketScrollStates[sCurrentBagPocket].cursorPos * 16 + 16); } -void sub_80A73F0(void) +static void sub_80A73F0(void) { sub_814ADC8(); } -void sub_80A73FC(void) +static void sub_80A73FC(void) { HandleDestroyMenuCursors(); sub_814AD44(); } -void sub_80A740C(void) +static void sub_80A740C(void) { sub_80A75E4(); sub_80A7768(); sub_80A7420(); } -void sub_80A7420(void) +static void sub_80A7420(void) { struct UnknownStruct2 *unkStruct = &gUnknown_0203853C; - int var; + int index; switch (unkStruct->unk0) { @@ -3512,39 +3605,39 @@ void sub_80A7420(void) switch (unkStruct->unk2) { case 0: - var = gUnknown_03005D10[gUnknown_02038559].unk1 + gUnknown_03005D10[gUnknown_02038559].unk0; - ItemListMenu_ChangeDescription(gUnknown_03005D24[var].itemId, unkStruct->unk1); + index = gBagPocketScrollStates[sCurrentBagPocket].scrollTop + gBagPocketScrollStates[sCurrentBagPocket].cursorPos; + ItemListMenu_ChangeDescription(gCurrentBagPocketItemSlots[index].itemId, unkStruct->textLine); break; case 1: - sub_80A4A98(gOtherText_SwitchWhichItem, unkStruct->unk1); + sub_80A4A98(gOtherText_SwitchWhichItem, unkStruct->textLine); break; case 2: - sub_80A4A98(gOtherText_WhatWillYouDo2, unkStruct->unk1); + sub_80A4A98(gOtherText_WhatWillYouDo2, unkStruct->textLine); break; case 3: - sub_80A4A98(gOtherText_HowManyToToss, unkStruct->unk1); + sub_80A4A98(gOtherText_HowManyToToss, unkStruct->textLine); break; case 4: - sub_80A4A98(gOtherText_ThrewAwayItem, unkStruct->unk1); + sub_80A4A98(gOtherText_ThrewAwayItem, unkStruct->textLine); break; case 5: - sub_80A4A98(gOtherText_OkayToThrowAwayPrompt, unkStruct->unk1); + sub_80A4A98(gOtherText_OkayToThrowAwayPrompt, unkStruct->textLine); break; case 6: - sub_80A4A98(gOtherText_HowManyToDeposit, unkStruct->unk1); + sub_80A4A98(gOtherText_HowManyToDeposit, unkStruct->textLine); break; case 7: - sub_80A4A98(gOtherText_DepositedItems, unkStruct->unk1); + sub_80A4A98(gOtherText_DepositedItems, unkStruct->textLine); break; case 8: - sub_80A4A98(gOtherText_NoRoomForItems, unkStruct->unk1); + sub_80A4A98(gOtherText_NoRoomForItems, unkStruct->textLine); break; case 9: - sub_80A4A98(gOtherText_CantStoreSomeoneItem, unkStruct->unk1); + sub_80A4A98(gOtherText_CantStoreSomeoneItem, unkStruct->textLine); break; } - unkStruct->unk1++; - if (unkStruct->unk1 == 3) + unkStruct->textLine++; + if (unkStruct->textLine == 3) { unkStruct->unk0 = 0; sub_80A7918(); @@ -3553,14 +3646,14 @@ void sub_80A7420(void) } } -void sub_80A751C(void) +static void sub_80A751C(void) { gUnknown_0203853C.unk0 = 0; } -void sub_80A7528(u8 a) +static void sub_80A7528(u8 a) { - gUnknown_0203853C.unk1 = 0; + gUnknown_0203853C.textLine = 0; gUnknown_0203853C.unk2 = a; switch (sub_80A78F4()) { @@ -3578,26 +3671,26 @@ void sub_80A7528(u8 a) } } -void sub_80A756C(void) +static void sub_80A756C(void) { if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) sub_80A7918(); gUnknown_0203853C.unk0 = 0; } -void sub_80A7590(void) +static void sub_80A7590(void) { MenuZeroFillWindowRect(0, 13, 13, 20); sub_80A756C(); } -void sub_80A75A8(void) +static void sub_80A75A8(void) { if (gUnknown_0203853C.unk0 == 2 || gUnknown_0203853C.unk0 == 3) gUnknown_0203853C.unk0 = 1; } -void sub_80A75C4(void) +static void sub_80A75C4(void) { switch (gUnknown_0203853C.unk0) { @@ -3610,7 +3703,7 @@ void sub_80A75C4(void) } } -void sub_80A75E4(void) +static void sub_80A75E4(void) { if (gUnknown_02038540.unk0 == 1 && sub_80A7988() == 0) { @@ -3630,12 +3723,12 @@ void sub_80A75E4(void) } } -void sub_80A7630(void) +static void sub_80A7630(void) { gUnknown_02038540.unk0 = 0; } -void sub_80A763C(void) +static void sub_80A763C(void) { struct UnknownStruct3 *r4 = &gUnknown_02038540; @@ -3652,39 +3745,39 @@ void sub_80A763C(void) } } -void sub_80A7678(void) +static void sub_80A7678(void) { if (gUnknown_02038540.unk0 == 1) sub_80A78E8(); gUnknown_02038540.unk0 = 0; } -void sub_80A7694(void) +static void sub_80A7694(void) { gUnknown_02038540.unk2 = 1; } -void sub_80A76A0(void) +static void sub_80A76A0(void) { MenuZeroFillWindowRect(14, 2, 29, 18); sub_80A7678(); } -bool32 sub_80A76B8(void) +static bool32 sub_80A76B8(void) { struct UnknownStruct3 *s = &gUnknown_02038540; return (s->unk0 == 0); } -bool32 sub_80A76D0(void) +static bool32 sub_80A76D0(void) { struct UnknownStruct3 *s = &gUnknown_02038540; return (s->unk1 > 5); } -void sub_80A76E8(void) +static void sub_80A76E8(void) { if (gUnknown_02038544.unk0 == 1) { @@ -3697,12 +3790,12 @@ void sub_80A76E8(void) } } -void sub_80A770C(void) +static void sub_80A770C(void) { gUnknown_02038544.unk0 = 0; } -void DisplayCannotUseItemMessage(int a, const u8 *b, TaskFunc func, int d) +static void DisplayCannotUseItemMessage(int a, const u8 *b, TaskFunc func, int d) { struct UnknownStruct4 *r4 = &gUnknown_02038544; @@ -3721,7 +3814,7 @@ void DisplayCannotUseItemMessage(int a, const u8 *b, TaskFunc func, int d) } } -void sub_80A7768(void) +static void sub_80A7768(void) { struct UnknownStruct5 *r4 = &gUnknown_02038550; @@ -3731,7 +3824,7 @@ void sub_80A7768(void) { if (r4->unk2 != 1) { - const u8 *text = gUnknown_083C1640[gUnknown_03000704[r4->unk1 - 1]].text; + const u8 *text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; int var = r4->unk1 - 1; MenuPrint(text, 7, var * 2 + 1 + r4->unk3); @@ -3744,7 +3837,7 @@ void sub_80A7768(void) if (r4->unk1 == 1) text = sub_80A4B90(gScriptItemId); else - text = gUnknown_083C1640[gUnknown_03000704[r4->unk1 - 1]].text; + text = sItemPopupMenuActions[sPopupMenuActionList[r4->unk1 - 1]].text; var = r4->unk1 - 1; MenuPrint(text, (var >> 1) * 6 + 1, (var & 1) * 2 + 8); } @@ -3758,12 +3851,12 @@ void sub_80A7768(void) } } -void sub_80A7828(void) +static void sub_80A7828(void) { gUnknown_02038550.unk0 = 0; } -void sub_80A7834(int a, int b) +static void sub_80A7834(int a, int b) { struct UnknownStruct5 *r4 = &gUnknown_02038550; @@ -3784,13 +3877,13 @@ void sub_80A7834(int a, int b) } } -void sub_80A7868(void) +static void sub_80A7868(void) { if (gUnknown_02038550.unk0 == 2) gUnknown_02038550.unk0 = 1; } -void sub_80A7880(void) +static void sub_80A7880(void) { switch (gUnknown_02038550.unk0) { @@ -3803,19 +3896,19 @@ void sub_80A7880(void) } } -bool32 sub_80A78A0(void) +static bool32 sub_80A78A0(void) { struct UnknownStruct5 *r0 = &gUnknown_02038550; return (r0->unk0 == 0); } -void sub_80A78B8(void) +static void sub_80A78B8(void) { - gUnknown_02038554 = 0; + gUnknown_02038554.unk0 = 0; } -bool32 sub_80A78C4(void) +static bool32 sub_80A78C4(void) { bool32 retVal; @@ -3832,12 +3925,12 @@ bool32 sub_80A78C4(void) return retVal; } -void sub_80A78E8(void) +static void sub_80A78E8(void) { sub_80A7880(); } -int sub_80A78F4(void) +static int sub_80A78F4(void) { int retVal; @@ -3855,12 +3948,12 @@ int sub_80A78F4(void) return retVal; } -void sub_80A7918(void) +static void sub_80A7918(void) { sub_80A76E8(); } -int sub_80A7924(void) +static int sub_80A7924(void) { if (gLinkOpen == TRUE && sub_80A76B8() == 0) { @@ -3878,7 +3971,7 @@ int sub_80A7924(void) return 2; } -int sub_80A7958(void) +static int sub_80A7958(void) { if (sub_80A76B8() == 0) return 2; @@ -3886,26 +3979,26 @@ int sub_80A7958(void) return 1; } -void sub_80A7970(void) +static void sub_80A7970(void) { sub_80A75C4(); } -void sub_80A797C(void) +static void sub_80A797C(void) { - gUnknown_02038554 = 1; + gUnknown_02038554.unk0 = 1; } -int sub_80A7988(void) +static int sub_80A7988(void) { - int val = gUnknown_02038554; + int val = gUnknown_02038554.unk0; - gUnknown_02038554 = 0; + gUnknown_02038554.unk0 = 0; return val; } -const u16 gPalette_83C170C[] = INCBIN_U16("graphics/unknown/83C170C.gbapal"); -const u8 gSpriteImage_83C172C[] = INCBIN_U8("graphics/unknown_sprites/83C172C.4bpp"); +static const u16 gPalette_83C170C[] = INCBIN_U16("graphics/unknown/83C170C.gbapal"); +static const u8 gSpriteImage_83C172C[] = INCBIN_U8("graphics/unknown_sprites/83C172C.4bpp"); const u8 gSpriteImage_UnusedCherry[] = INCBIN_U8("graphics/unused/cherry.4bpp"); const u16 gSpritePalette_UnusedCherry[] = INCBIN_U16("graphics/unused/cherry.gbapal"); @@ -3914,7 +4007,7 @@ const u16 gSpritePalette_UnusedCherry[] = INCBIN_U16("graphics/unused/cherry.gba // Bag Sprite //------------------------------------------------------------------------------ -const struct OamData gOamData_83C1C4C = +static const struct OamData sBagSpriteOamData = { .y = 0, .affineMode = 0, @@ -3931,53 +4024,53 @@ const struct OamData gOamData_83C1C4C = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_83C1C54[] = +static const union AnimCmd sBagSpriteAnimSeq0[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83C1C5C[] = +static const union AnimCmd sBagSpriteAnimSeq1[] = { ANIMCMD_FRAME(64, 4), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83C1C64[] = +static const union AnimCmd sBagSpriteAnimSeq5[] = { ANIMCMD_FRAME(128, 4), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83C1C6C[] = +static const union AnimCmd sBagSpriteAnimSeq2[] = { ANIMCMD_FRAME(192, 4), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83C1C74[] = +static const union AnimCmd sBagSpriteAnimSeq3[] = { ANIMCMD_FRAME(256, 4), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_83C1C7C[] = +static const union AnimCmd sBagSpriteAnimSeq4[] = { ANIMCMD_FRAME(320, 4), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_83C1C84[] = +static const union AnimCmd *const sBagSpriteAnimTable[] = { - gSpriteAnim_83C1C54, - gSpriteAnim_83C1C5C, - gSpriteAnim_83C1C6C, - gSpriteAnim_83C1C74, - gSpriteAnim_83C1C7C, - gSpriteAnim_83C1C64, + sBagSpriteAnimSeq0, + sBagSpriteAnimSeq1, + sBagSpriteAnimSeq2, + sBagSpriteAnimSeq3, + sBagSpriteAnimSeq4, + sBagSpriteAnimSeq5, }; -const union AffineAnimCmd gSpriteAffineAnim_83C1C9C[] = +static const union AffineAnimCmd sBagSpriteAffineAnimSeq[] = { AFFINEANIMCMD_FRAME(0, 0, -2, 2), AFFINEANIMCMD_FRAME(0, 0, 2, 4), @@ -3986,16 +4079,16 @@ const union AffineAnimCmd gSpriteAffineAnim_83C1C9C[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1CC4[] = +static const union AffineAnimCmd *const sBagSpriteAffineAnimTable[] = { - gSpriteAffineAnim_83C1C9C, + sBagSpriteAffineAnimSeq, }; -const struct CompressedSpriteSheet gUnknown_083C1CC8 = {gBagMaleTiles, 0x3000, 30000}; -const struct CompressedSpriteSheet gUnknown_083C1CD0 = {gBagFemaleTiles, 0x3000, 30000}; -const struct CompressedSpritePalette gUnknown_083C1CD8 = {gBagPalette, 30000}; +static const struct CompressedSpriteSheet sMaleBagSpriteSheet = {gBagMaleTiles, 0x3000, 30000}; +static const struct CompressedSpriteSheet sFemaleBagSpriteSheet = {gBagFemaleTiles, 0x3000, 30000}; +static const struct CompressedSpritePalette sBagSpritePalette = {gBagPalette, 30000}; -void sub_80A7998(struct Sprite *sprite) +static void sub_80A7998(struct Sprite *sprite) { sprite->animNum = 0; sprite->data0 = 0; @@ -4006,7 +4099,7 @@ void sub_80A7998(struct Sprite *sprite) sprite->callback = sub_80A79B4; } -void sub_80A79B4(struct Sprite *sprite) +static void sub_80A79B4(struct Sprite *sprite) { if (gUnknown_0203855B != -1) sub_80A79EC(sprite); @@ -4014,7 +4107,7 @@ void sub_80A79B4(struct Sprite *sprite) sub_80A7A94(sprite); } -void sub_80A79EC(struct Sprite *sprite) +static void sub_80A79EC(struct Sprite *sprite) { switch (sprite->data3) { @@ -4055,13 +4148,13 @@ void sub_80A79EC(struct Sprite *sprite) } } -void sub_80A7A94(struct Sprite *sprite) +static void sub_80A7A94(struct Sprite *sprite) { switch (sprite->data4) { case 0: sprite->oam.affineMode = 1; - sprite->affineAnims = gSpriteAffineAnimTable_83C1CC4; + sprite->affineAnims = sBagSpriteAffineAnimTable; InitSpriteAffineAnim(sprite); sprite->data4 = 1; break; @@ -4073,7 +4166,7 @@ void sub_80A7A94(struct Sprite *sprite) } } -void sub_80A7AE4(struct Sprite *sprite) +static void sub_80A7AE4(struct Sprite *sprite) { gUnknown_0203855C = 0; sprite->oam.affineMode = 0; @@ -4086,14 +4179,14 @@ static const struct SpriteTemplate sBagSpriteTemplate = { .tileTag = 30000, .paletteTag = 30000, - .oam = &gOamData_83C1C4C, - .anims = gSpriteAnimTable_83C1C84, + .oam = &sBagSpriteOamData, + .anims = sBagSpriteAnimTable, .images = NULL, - .affineAnims = gSpriteAffineAnimTable_83C1CC4, + .affineAnims = sBagSpriteAffineAnimTable, .callback = sub_80A7998, }; -void CreateBagSprite(void) +static void CreateBagSprite(void) { CreateSprite(&sBagSpriteTemplate, 58, 40, 0); } @@ -4102,7 +4195,7 @@ void CreateBagSprite(void) // Pokeball Sprite //------------------------------------------------------------------------------ -const struct OamData gOamData_83C1CF8 = +static const struct OamData gOamData_83C1CF8 = { .y = 0, .affineMode = 0, @@ -4119,32 +4212,32 @@ const struct OamData gOamData_83C1CF8 = .affineParam = 0, }; -const union AffineAnimCmd gSpriteAffineAnim_83C1D00[] = +static const union AffineAnimCmd gSpriteAffineAnim_83C1D00[] = { AFFINEANIMCMD_FRAME(0, 0, 8, 32), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gSpriteAffineAnim_83C1D10[] = +static const union AffineAnimCmd gSpriteAffineAnim_83C1D10[] = { AFFINEANIMCMD_FRAME(0, 0, -8, 32), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1D20[] = +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1D20[] = { gSpriteAffineAnim_83C1D00, gSpriteAffineAnim_83C1D10, }; -const struct SpriteFrameImage gSpriteImageTable_83C1D28[] = +static const struct SpriteFrameImage gSpriteImageTable_83C1D28[] = { {gSpriteImage_83C172C, sizeof(gSpriteImage_83C172C)}, }; -const struct SpritePalette gUnknown_083C1D30 = {gPalette_83C170C, 8}; +static const struct SpritePalette sPokeballSpritePalette = {gPalette_83C170C, 8}; -void sub_80A7B28(struct Sprite *sprite) +static void sub_80A7B28(struct Sprite *sprite) { sprite->data3 = 0; sprite->data0 = 0; @@ -4152,13 +4245,13 @@ void sub_80A7B28(struct Sprite *sprite) sprite->callback = sub_80A7B6C; } -void sub_80A7B48(struct Sprite *sprite) +static void sub_80A7B48(struct Sprite *sprite) { sprite->centerToCornerVecX = sprite->data5 - ((sprite->data0 + 1) & 1); sprite->centerToCornerVecY = sprite->data6 - ((sprite->data0 + 1) & 1); } -void sub_80A7B6C(struct Sprite *sprite) +static void sub_80A7B6C(struct Sprite *sprite) { if (sprite->data7 != 0) { @@ -4199,30 +4292,27 @@ static const struct SpriteTemplate sPokeballSpriteTemplate = .tileTag = 0xFFFF, .paletteTag = 8, .oam = &gOamData_83C1CF8, - .anims = gSpriteAnimTable_83C1C84, + .anims = sBagSpriteAnimTable, .images = gSpriteImageTable_83C1D28, .affineAnims = gSpriteAffineAnimTable_83C1D20, .callback = sub_80A7B28, }; -void CreateBagPokeballSprite(u8 a) +static void CreateBagPokeballSprite(u8 a) { - LoadSpritePalette(&gUnknown_083C1D30); - gUnknown_02038568 = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0); - gSprites[gUnknown_02038568].data7 = a; + LoadSpritePalette(&sPokeballSpritePalette); + sPokeballSpriteId = CreateSprite(&sPokeballSpriteTemplate, 16, 88, 0); + gSprites[sPokeballSpriteId].data7 = a; } -void sub_80A7C64(void) +static void sub_80A7C64(void) { FreeSpritePaletteByTag(8); - FreeOamMatrix(gSprites[gUnknown_02038568].oam.matrixNum); - DestroySprite(&gSprites[gUnknown_02038568]); + FreeOamMatrix(gSprites[sPokeballSpriteId].oam.matrixNum); + DestroySprite(&gSprites[sPokeballSpriteId]); } -#define ewramBerryPic ewram -#define ewramBerryPicTemp (ewram + 0x1000) - -const struct OamData gOamData_83C1D50 = +static const struct OamData sBerrySpriteOamData = { .y = 0, .affineMode = 0, @@ -4239,7 +4329,7 @@ const struct OamData gOamData_83C1D50 = .affineParam = 0, }; -const struct OamData gOamData_83C1D58 = +static const struct OamData gOamData_83C1D58 = { .y = 0, .affineMode = 3, @@ -4256,35 +4346,35 @@ const struct OamData gOamData_83C1D58 = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_83C1D60[] = +static const union AnimCmd sBerrySpriteAnimSeq[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_83C1D68[] = +static const union AnimCmd *const sBerrySpriteAnimTable[] = { - gSpriteAnim_83C1D60, + sBerrySpriteAnimSeq, }; -const struct SpriteFrameImage gSpriteImageTable_83C1D6C[] = +static const struct SpriteFrameImage sBerrySpriteImageTable[] = { {ewramBerryPic, 0x800}, }; -void sub_80A7DC4(struct Sprite *); -const struct SpriteTemplate sBerrySpriteTemplate = +static void SpriteCB_BerrySprite(struct Sprite *); +static const struct SpriteTemplate sBerrySpriteTemplate = { .tileTag = 0xFFFF, .paletteTag = 30020, - .oam = &gOamData_83C1D50, - .anims = gSpriteAnimTable_83C1D68, - .images = gSpriteImageTable_83C1D6C, + .oam = &sBerrySpriteOamData, + .anims = sBerrySpriteAnimTable, + .images = sBerrySpriteImageTable, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A7DC4, + .callback = SpriteCB_BerrySprite, }; -const union AffineAnimCmd gSpriteAffineAnim_83C1D8C[] = +static const union AffineAnimCmd gSpriteAffineAnim_83C1D8C[] = { AFFINEANIMCMD_FRAME(-1, -1, -3, 96), AFFINEANIMCMD_FRAME(0, 0, 0, 16), @@ -4295,7 +4385,7 @@ const union AffineAnimCmd gSpriteAffineAnim_83C1D8C[] = AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd gSpriteAffineAnim_83C1DC4[] = +static const union AffineAnimCmd gSpriteAffineAnim_83C1DC4[] = { AFFINEANIMCMD_FRAME(-1, -1, 3, 96), AFFINEANIMCMD_FRAME(0, 0, 0, 16), @@ -4306,19 +4396,19 @@ const union AffineAnimCmd gSpriteAffineAnim_83C1DC4[] = AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1DFC[] = +static const union AffineAnimCmd *const gSpriteAffineAnimTable_83C1DFC[] = { gSpriteAffineAnim_83C1D8C, gSpriteAffineAnim_83C1DC4, }; -const struct SpriteTemplate gSpriteTemplate_83C1E04 = +static const struct SpriteTemplate gSpriteTemplate_83C1E04 = { .tileTag = 0xFFFF, .paletteTag = 30020, .oam = &gOamData_83C1D58, - .anims = gSpriteAnimTable_83C1D68, - .images = gSpriteImageTable_83C1D6C, + .anims = sBerrySpriteAnimTable, + .images = sBerrySpriteImageTable, .affineAnims = gSpriteAffineAnimTable_83C1DFC, .callback = SpriteCallbackDummy, }; @@ -4391,7 +4481,7 @@ static void DrawBerryPic(const u8 *src, u8 *dst) } } -void LoadBerryPic(u8 berryId) +static void LoadBerryPic(u8 berryId) { struct SpritePalette spritePal; @@ -4418,7 +4508,7 @@ u8 CreateBerrySprite(u8 berryId, s16 x, s16 y) return CreateSprite(&sBerrySpriteTemplate, x, y, 0); } -void sub_80A7DC4(struct Sprite *sprite) +static void SpriteCB_BerrySprite(struct Sprite *sprite) { sprite->pos2.y = -gUnknown_030041B4; } @@ -4445,7 +4535,7 @@ const struct CompressedSpriteSheet gUnknown_083C1F74 = {gBerryCheckCircle_Gfx, 2 const struct CompressedSpritePalette gUnknown_083C1F7C = {gBerryCheck_Pal, 0x2710}; -const struct OamData gOamData_83C1F84 = +static const struct OamData gOamData_83C1F84 = { .y = 0, .affineMode = 0, @@ -4462,18 +4552,18 @@ const struct OamData gOamData_83C1F84 = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_83C1F8C[] = +static const union AnimCmd gSpriteAnim_83C1F8C[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_83C1F94[] = +static const union AnimCmd *const gSpriteAnimTable_83C1F94[] = { gSpriteAnim_83C1F8C, }; -const struct SpriteTemplate gSpriteTemplate_83C1F98 = +static const struct SpriteTemplate gSpriteTemplate_83C1F98 = { .tileTag = 10000, .paletteTag = 10000, @@ -4481,7 +4571,7 @@ const struct SpriteTemplate gSpriteTemplate_83C1F98 = .anims = gSpriteAnimTable_83C1F94, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A7DC4, + .callback = SpriteCB_BerrySprite, }; u8 sub_80A7E5C(s16 x) diff --git a/src/new_game.c b/src/new_game.c index 33aacd10a..4b6ea1dd2 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -114,7 +114,7 @@ void sub_8052E4C(void) sub_808C0A0(); ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); - sub_80A3684(); + ResetBagScrollPositions(); } void NewGameInitData(void) -- cgit v1.2.3 From 078e07ce1096733e31b7bf823db325b0f3b02a05 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 11 Jul 2017 18:20:21 -0500 Subject: move RAM variables into item_menu.c --- src/item_menu.c | 113 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 58 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/item_menu.c b/src/item_menu.c index 8fd699778..350ba3db4 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -35,7 +35,26 @@ #include "text.h" #include "unknown_task.h" +// External stuff extern u8 ewram[]; +extern void gpu_pal_allocator_reset__manage_upper_four(void); +extern void sub_80F9020(void); +extern void sub_80F9988(); +extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); +extern void PauseVerticalScrollIndicator(); +extern u8 sub_80F9284(void); +extern void sub_808B5B4(); +extern u8 sub_80F92F4(); +extern void sub_80C9C7C(u8); +extern void pal_fill_black(void); +extern bool8 sub_807D770(void); +extern u8 sub_80F931C(); +extern void sub_808A3F8(u8); +extern void sub_80B3050(void); +extern void sub_80546B8(u8); +extern void sub_804E990(u8); +extern void sub_802E424(u8); +extern void sub_8064E2C(void); struct PocketScrollState { @@ -90,26 +109,6 @@ enum BAG_POCKET_KEY_ITEMS, // 4 }; -EWRAM_DATA static struct UnknownStruct2 gUnknown_0203853C = {0}; -EWRAM_DATA static struct UnknownStruct3 gUnknown_02038540 = {0}; -EWRAM_DATA static struct UnknownStruct4 gUnknown_02038544 = {0}; -EWRAM_DATA static struct UnknownStruct5 gUnknown_02038550 = {0}; -EWRAM_DATA static struct UnknownStruct6 gUnknown_02038554 = {0}; // There are 3 bytes of padding after this, so I assume it's a struct -EWRAM_DATA static u8 gUnknown_02038558 = 0; -EWRAM_DATA static s8 sCurrentBagPocket = 0; -EWRAM_DATA static u8 gUnknown_0203855A = 0; -EWRAM_DATA static s8 gUnknown_0203855B = 0; -EWRAM_DATA static s8 gUnknown_0203855C = 0; -EWRAM_DATA u16 gScriptItemId = 0; -extern u8 gUnknown_02038560; -extern u8 gUnknown_02038561; -extern u8 gUnknown_02038562; -extern u8 gUnknown_02038563; -extern u8 gUnknown_02038564; -extern u8 sPokeballSpriteId; -extern void (*gUnknown_03005D00)(u8); -extern u8 sPopupMenuSelection; - enum { RETURN_TO_FIELD_0, @@ -122,33 +121,51 @@ enum RETURN_TO_WALLY_BATTLE, }; -extern u8 sReturnLocation; +enum +{ + ITEM_ACTION_USE_0, // 0 + ITEM_ACTION_TOSS, // 1 + ITEM_ACTION_CANCEL_2, // 2 + ITEM_ACTION_REGISTER, // 3 + ITEM_ACTION_USE_4, // 4 + ITEM_ACTION_CANCEL_5, // 5 + ITEM_ACTION_GIVE, // 6 + ITEM_ACTION_CHECK_TAG, // 7 + ITEM_ACTION_NONE, // 8 + ITEM_ACTION_CONFIRM, // 9 +}; -extern const u8 *sPopupMenuActionList; +// ewram +EWRAM_DATA static struct UnknownStruct2 gUnknown_0203853C = {0}; +EWRAM_DATA static struct UnknownStruct3 gUnknown_02038540 = {0}; +EWRAM_DATA static struct UnknownStruct4 gUnknown_02038544 = {0}; +EWRAM_DATA static struct UnknownStruct5 gUnknown_02038550 = {0}; +EWRAM_DATA static struct UnknownStruct6 gUnknown_02038554 = {0}; // There are 3 bytes of padding after this, so I assume it's a struct +EWRAM_DATA static u8 gUnknown_02038558 = 0; +EWRAM_DATA static s8 sCurrentBagPocket = 0; +EWRAM_DATA static u8 gUnknown_0203855A = 0; +EWRAM_DATA static s8 gUnknown_0203855B = 0; +EWRAM_DATA static s8 gUnknown_0203855C = 0; +EWRAM_DATA u16 gScriptItemId = 0; +EWRAM_DATA u8 gUnknown_02038560 = 0; +EWRAM_DATA u8 gUnknown_02038561 = 0; +EWRAM_DATA static u8 gUnknown_02038562 = 0; +EWRAM_DATA static u8 gUnknown_02038563 = 0; +EWRAM_DATA static u8 gUnknown_02038564 = 0; +EWRAM_DATA static u8 sPokeballSpriteId ALIGNED(4) = 0; // HACK: why is there a space before this variable? + +// bss +static u8 sPopupMenuSelection; +static u8 sReturnLocation; +static const u8 *sPopupMenuActionList; + +// common +void (*gUnknown_03005D00)(u8) = NULL; extern u16 gUnknown_030041B4; extern struct PocketScrollState gBagPocketScrollStates[]; extern struct ItemSlot *gCurrentBagPocketItemSlots; // selected pocket item slots extern const u8 Event_NoRegisteredItem[]; -extern void gpu_pal_allocator_reset__manage_upper_four(void); -extern void sub_80F9020(void); -extern void sub_80F9988(); -extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); -extern void PauseVerticalScrollIndicator(); -extern u8 sub_80F9284(void); -extern void sub_808B5B4(); -extern u8 sub_80F92F4(); -extern void sub_80C9C7C(u8); -extern void pal_fill_black(void); -extern bool8 sub_807D770(void); -extern u8 sub_80F931C(); -extern void sub_808A3F8(u8); -extern void sub_80B3050(void); -extern void sub_80546B8(u8); -extern void sub_804E990(u8); -extern void sub_802E424(u8); -extern void sub_8064E2C(void); - #define ewramBerryPic (ewram + 0) #define ewramBerryPicTemp (ewram + 0x1000) #define ewramSavedItemsPocket ((struct ItemSlot *)(ewram + 0x1E000)) // saved items pocket (for Wally battle) @@ -178,20 +195,6 @@ static void HandlePopupMenuAction_Give(u8); static void HandlePopupMenuAction_CheckTag(u8); static void HandlePopupMenuAction_Confirm(u8); -enum -{ - ITEM_ACTION_USE_0, // 0 - ITEM_ACTION_TOSS, // 1 - ITEM_ACTION_CANCEL_2, // 2 - ITEM_ACTION_REGISTER, // 3 - ITEM_ACTION_USE_4, // 4 - ITEM_ACTION_CANCEL_5, // 5 - ITEM_ACTION_GIVE, // 6 - ITEM_ACTION_CHECK_TAG, // 7 - ITEM_ACTION_NONE, // 8 - ITEM_ACTION_CONFIRM, // 9 -}; - static const struct MenuAction2 sItemPopupMenuActions[] = { {OtherText_Use, HandlePopupMenuAction_UseOnField}, -- cgit v1.2.3