From db3d5c90433a94747c23e48cf85badfc5286b07f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 28 Sep 2019 12:33:01 -0400 Subject: [PATCH 01/13] Start berry_pouch decomp --- asm/berry_pouch.s | 378 ----------------------------------------- include/menu_helpers.h | 1 + ld_script.txt | 1 + src/berry_pouch.c | 233 +++++++++++++++++++++++++ 4 files changed, 235 insertions(+), 378 deletions(-) create mode 100644 src/berry_pouch.c diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index 60d6873e6..b050958a2 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -5,384 +5,6 @@ .text - thumb_func_start InitBerryPouch -InitBerryPouch: @ 813CD50 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 24 - lsrs r6, r2, 24 - ldr r7, _0813CD78 @ =gUnknown_203F36C - ldr r0, _0813CD7C @ =0x00000814 - bl Alloc - str r0, [r7] - cmp r0, 0 - bne _0813CD80 - adds r0, r4, 0 - bl SetMainCallback2 - b _0813CDE2 - .align 2, 0 -_0813CD78: .4byte gUnknown_203F36C -_0813CD7C: .4byte 0x00000814 -_0813CD80: - cmp r5, 0x6 - beq _0813CD88 - ldr r0, _0813CDEC @ =gUnknown_203F370 - strb r5, [r0, 0x4] -_0813CD88: - cmp r6, 0xFF - beq _0813CD90 - ldr r0, _0813CDEC @ =gUnknown_203F370 - strb r6, [r0, 0x5] -_0813CD90: - cmp r4, 0 - beq _0813CD98 - ldr r0, _0813CDEC @ =gUnknown_203F370 - str r4, [r0] -_0813CD98: - ldr r1, [r7] - movs r0, 0 - str r0, [r1] - strb r0, [r1, 0x9] - ldr r1, [r7] - movs r0, 0xFF - strb r0, [r1, 0x6] - movs r2, 0 - ldr r6, _0813CDF0 @ =gTextFlags - ldr r0, _0813CDF4 @ =gSpecialVar_ItemId - mov r12, r0 - ldr r1, _0813CDF8 @ =sub_813CE30 - mov r8, r1 - adds r5, r7, 0 - ldr r4, _0813CDFC @ =0x0000080c - movs r3, 0 -_0813CDB8: - ldr r0, [r5] - lsls r1, r2, 1 - adds r0, r4 - adds r0, r1 - strh r3, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x3 - bls _0813CDB8 - ldrb r0, [r6] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r6] - movs r0, 0 - mov r1, r12 - strh r0, [r1] - mov r0, r8 - bl SetMainCallback2 -_0813CDE2: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813CDEC: .4byte gUnknown_203F370 -_0813CDF0: .4byte gTextFlags -_0813CDF4: .4byte gSpecialVar_ItemId -_0813CDF8: .4byte sub_813CE30 -_0813CDFC: .4byte 0x0000080c - thumb_func_end InitBerryPouch - - thumb_func_start sub_813CE00 -sub_813CE00: @ 813CE00 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl DoScheduledBgTilemapCopiesToVram - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_813CE00 - - thumb_func_start sub_813CE1C -sub_813CE1C: @ 813CE1C - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_813CE1C - - thumb_func_start sub_813CE30 -sub_813CE30: @ 813CE30 - push {lr} -_0813CE32: - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0813CE56 - bl sub_813CE5C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0813CE56 - bl MenuHelpers_LinkSomething - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813CE32 -_0813CE56: - pop {r0} - bx r0 - thumb_func_end sub_813CE30 - - thumb_func_start sub_813CE5C -sub_813CE5C: @ 813CE5C - push {r4,lr} - sub sp, 0x4 - ldr r0, _0813CE7C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x12 - bls _0813CE70 - b _0813CFE8 -_0813CE70: - lsls r0, 2 - ldr r1, _0813CE80 @ =_0813CE84 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813CE7C: .4byte gMain -_0813CE80: .4byte _0813CE84 - .align 2, 0 -_0813CE84: - .4byte _0813CED0 - .4byte _0813CEDA - .4byte _0813CEE0 - .4byte _0813CEE6 - .4byte _0813CEEC - .4byte _0813CEF2 - .4byte _0813CEF8 - .4byte _0813CF08 - .4byte _0813CF24 - .4byte _0813CF30 - .4byte _0813CF36 - .4byte _0813CF44 - .4byte _0813CF56 - .4byte _0813CF5C - .4byte _0813CF62 - .4byte _0813CFA4 - .4byte _0813CFAA - .4byte _0813CFB0 - .4byte _0813CFBE -_0813CED0: - bl SetVBlankHBlankCallbacksToNull - bl ClearScheduledBgCopiesToVram - b _0813CFD2 -_0813CEDA: - bl ScanlineEffect_Stop - b _0813CFD2 -_0813CEE0: - bl FreeAllSpritePalettes - b _0813CFD2 -_0813CEE6: - bl ResetPaletteFade - b _0813CFD2 -_0813CEEC: - bl ResetSpriteData - b _0813CFD2 -_0813CEF2: - bl ResetItemMenuIconState - b _0813CFD2 -_0813CEF8: - bl MenuHelpers_LinkSomething - lsls r0, 24 - cmp r0, 0 - bne _0813CFD2 - bl ResetTasks - b _0813CFD2 -_0813CF08: - bl sub_813D07C - ldr r0, _0813CF1C @ =gUnknown_203F36C - ldr r0, [r0] - ldr r1, _0813CF20 @ =0x0000080c - adds r0, r1 - movs r1, 0 - strh r1, [r0] - b _0813CFD2 - .align 2, 0 -_0813CF1C: .4byte gUnknown_203F36C -_0813CF20: .4byte 0x0000080c -_0813CF24: - bl sub_813D0E4 - lsls r0, 24 - cmp r0, 0 - beq _0813D000 - b _0813CFD2 -_0813CF30: - bl sub_813E910 - b _0813CFD2 -_0813CF36: - bl sub_813D8AC - bl sub_813D6F4 - bl sub_813D754 - b _0813CFD2 -_0813CF44: - bl sub_813D1C0 - lsls r0, 24 - cmp r0, 0 - bne _0813CFD2 - bl sub_813D00C - movs r0, 0x1 - b _0813D002 -_0813CF56: - bl sub_813D204 - b _0813CFD2 -_0813CF5C: - bl sub_813D6A4 - b _0813CFD2 -_0813CF62: - ldr r0, _0813CF94 @ =sub_813DA68 - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813CF98 @ =gMultiuseListMenuTemplate - ldr r2, _0813CF9C @ =gUnknown_203F370 - ldrh r1, [r2, 0xA] - ldrh r2, [r2, 0x8] - bl ListMenuInit - ldr r2, _0813CFA0 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - movs r2, 0 - strh r0, [r1, 0x8] - strh r2, [r1, 0x18] - b _0813CFD2 - .align 2, 0 -_0813CF94: .4byte sub_813DA68 -_0813CF98: .4byte gMultiuseListMenuTemplate -_0813CF9C: .4byte gUnknown_203F370 -_0813CFA0: .4byte gTasks -_0813CFA4: - bl sub_813EC08 - b _0813CFD2 -_0813CFAA: - bl sub_813D5BC - b _0813CFD2 -_0813CFB0: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - b _0813CFD2 -_0813CFBE: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_0813CFD2: - ldr r1, _0813CFE4 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0813D000 - .align 2, 0 -_0813CFE4: .4byte gMain -_0813CFE8: - ldr r0, _0813CFF8 @ =sub_813CE1C - bl SetVBlankCallback - ldr r0, _0813CFFC @ =sub_813CE00 - bl SetMainCallback2 - movs r0, 0x1 - b _0813D002 - .align 2, 0 -_0813CFF8: .4byte sub_813CE1C -_0813CFFC: .4byte sub_813CE00 -_0813D000: - movs r0, 0 -_0813D002: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_813CE5C - - thumb_func_start sub_813D00C -sub_813D00C: @ 813D00C - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0813D03C @ =sub_813D048 - movs r1, 0 - bl CreateTask - ldr r0, _0813D040 @ =sub_813CE1C - bl SetVBlankCallback - ldr r0, _0813D044 @ =sub_813CE00 - bl SetMainCallback2 - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0813D03C: .4byte sub_813D048 -_0813D040: .4byte sub_813CE1C -_0813D044: .4byte sub_813CE00 - thumb_func_end sub_813D00C - - thumb_func_start sub_813D048 -sub_813D048: @ 813D048 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813D074 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0813D06C - ldr r0, _0813D078 @ =gUnknown_203F370 - ldr r0, [r0] - bl SetMainCallback2 - bl sub_813D7CC - adds r0, r4, 0 - bl DestroyTask -_0813D06C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D074: .4byte gPaletteFade -_0813D078: .4byte gUnknown_203F370 - thumb_func_end sub_813D048 - thumb_func_start sub_813D07C sub_813D07C: @ 813D07C push {r4,lr} diff --git a/include/menu_helpers.h b/include/menu_helpers.h index 7fe8c19b2..c18d4313e 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -3,6 +3,7 @@ #include "global.h" #include "task.h" +#include "window.h" struct YesNoFuncTable { diff --git a/ld_script.txt b/ld_script.txt index 131b6b4e9..979cb4463 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -251,6 +251,7 @@ SECTIONS { src/help_system.o(.text); asm/wild_pokemon_area.o(.text); src/dynamic_placeholder_text_util.o(.text); + src/berry_pouch.o(.text); asm/berry_pouch.o(.text); asm/itemfinder.o(.text); src/buy_menu_helpers.o(.text); diff --git a/src/berry_pouch.c b/src/berry_pouch.c new file mode 100644 index 000000000..c9894923c --- /dev/null +++ b/src/berry_pouch.c @@ -0,0 +1,233 @@ +#include "global.h" +#include "malloc.h" +#include "bg.h" +#include "palette.h" +#include "text.h" +#include "berry_pouch.h" +#include "item_menu.h" +#include "menu_helpers.h" +#include "new_menu_helpers.h" +#include "scanline_effect.h" +#include "item_menu_icons.h" +#include "list_menu.h" +#include "constants/items.h" + +struct BerryPouchStruct_203F36C +{ + u32 unk_000; + u8 filler_004[2]; + u8 unk_006; + u8 filler_007[2]; + u8 unk_009; + u8 filler_00a[2]; + u8 filler_00c[0x800]; + u16 unk_80C[4]; +}; + +struct BerryPouchStruct_203F370 +{ + void (*savedCallback)(void); + u8 unk_04; + u8 unk_05; + u8 filler_06[2]; + u16 unk_08; + u16 unk_0A; +}; + +EWRAM_DATA struct BerryPouchStruct_203F36C *gUnknown_203F36C = NULL; +EWRAM_DATA struct BerryPouchStruct_203F370 gUnknown_203F370 = {}; + +void sub_813CE30(void); +bool8 sub_813CE5C(void); +void sub_813D00C(void); +void sub_813D048(u8 taskId); +void sub_813D07C(void); +bool8 sub_813D0E4(void); +bool8 sub_813D1C0(void); +void sub_813D204(void); +void sub_813D5BC(void); +void sub_813D6A4(void); +void sub_813D6F4(void); +void sub_813D754(void); +void sub_813D7CC(void); +void sub_813D8AC(void); +void sub_813DA68(u8 taskId); +void sub_813E910(void); +void sub_813EC08(void); + +void InitBerryPouch(u8 a0, void (*savedCallback)(void), u8 a2) +{ + u8 i; + + gUnknown_203F36C = Alloc(sizeof(struct BerryPouchStruct_203F36C)); + if (gUnknown_203F36C == NULL) + { + SetMainCallback2(savedCallback); + } + else + { + if (a0 != 6) + gUnknown_203F370.unk_04 = a0; + if (a2 != 0xFF) + gUnknown_203F370.unk_05 = a2; + if (savedCallback != NULL) + gUnknown_203F370.savedCallback = savedCallback; + gUnknown_203F36C->unk_000 = 0; + gUnknown_203F36C->unk_009 = 0; + gUnknown_203F36C->unk_006 = 0xFF; + for (i = 0; i < 4; i++) + gUnknown_203F36C->unk_80C[i] = 0; + gTextFlags.autoScroll = FALSE; + gSpecialVar_ItemId = ITEM_NONE; + SetMainCallback2(sub_813CE30); + } +} + +void sub_813CE00(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + DoScheduledBgTilemapCopiesToVram(); + UpdatePaletteFade(); +} + +void sub_813CE1C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_813CE30(void) +{ + while (1) + { + if (sub_80BF72C() == TRUE) + break; + if (sub_813CE5C() == TRUE) + break; + if (MenuHelpers_LinkSomething() == TRUE) + break; + } +} + +bool8 sub_813CE5C(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + ClearScheduledBgCopiesToVram(); + gMain.state++; + break; + case 1: + ScanlineEffect_Stop(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + ResetPaletteFade(); + gMain.state++; + break; + case 4: + ResetSpriteData(); + gMain.state++; + break; + case 5: + ResetItemMenuIconState(); + gMain.state++; + break; + case 6: + if (!MenuHelpers_LinkSomething()) + ResetTasks(); + gMain.state++; + break; + case 7: + sub_813D07C(); + gUnknown_203F36C->unk_80C[0] = 0; + gMain.state++; + break; + case 8: + if (sub_813D0E4()) + gMain.state++; + break; + case 9: + sub_813E910(); + gMain.state++; + break; + case 10: + sub_813D8AC(); + sub_813D6F4(); + sub_813D754(); + gMain.state++; + break; + case 11: + if (!sub_813D1C0()) + { + sub_813D00C(); + return TRUE; + } + gMain.state++; + break; + case 12: + sub_813D204(); + gMain.state++; + break; + case 13: + sub_813D6A4(); + gMain.state++; + break; + case 14: + taskId = CreateTask(sub_813DA68, 0); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); + gTasks[taskId].data[8] = 0; + gMain.state++; + break; + case 15: + sub_813EC08(); + gMain.state++; + break; + case 16: + sub_813D5BC(); + gMain.state++; + break; + case 17: + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + gMain.state++; + break; + case 18: + BeginNormalPaletteFade(0xFFFFFFFF, -2, 16, 0, RGB_BLACK); + gMain.state++; + break; + default: + SetVBlankCallback(sub_813CE1C); + SetMainCallback2(sub_813CE00); + return TRUE; + } + + return FALSE; +} + +void sub_813D00C(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + CreateTask(sub_813D048, 0); + SetVBlankCallback(sub_813CE1C); + SetMainCallback2(sub_813CE00); +} + +void sub_813D048(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_203F370.savedCallback); + sub_813D7CC(); + DestroyTask(taskId); + } +} From b6c7c6523fedb21e5928fbaf8e01747f4283cfc1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 28 Sep 2019 16:11:41 -0400 Subject: [PATCH 02/13] berry_pouch through sub_813D0E4 --- asm/berry_pouch.s | 149 --------------------------- baserom.ips | Bin 2014788 -> 2012785 bytes data/berry_pouch.s | 9 +- data/graphics.s | 12 +-- graphics/berry_pouch/unk_8E8560C.png | Bin 0 -> 782 bytes graphics/berry_pouch/unk_8E859D0.png | Bin 0 -> 444 bytes graphics/berry_pouch/unk_8E85BA4.pal | 51 +++++++++ graphics/berry_pouch/unk_8E85BF4.pal | 19 ++++ graphics/berry_pouch/unk_8E85C44.bin | Bin 0 -> 2048 bytes include/graphics.h | 8 ++ ld_script.txt | 1 + src/berry_pouch.c | 88 +++++++++++++++- 12 files changed, 175 insertions(+), 162 deletions(-) create mode 100644 graphics/berry_pouch/unk_8E8560C.png create mode 100644 graphics/berry_pouch/unk_8E859D0.png create mode 100644 graphics/berry_pouch/unk_8E85BA4.pal create mode 100644 graphics/berry_pouch/unk_8E85BF4.pal create mode 100644 graphics/berry_pouch/unk_8E85C44.bin diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index b050958a2..985be2c93 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -5,155 +5,6 @@ .text - thumb_func_start sub_813D07C -sub_813D07C: @ 813D07C - push {r4,lr} - bl ResetAllBgsCoordinatesAndBgCntRegs - ldr r4, _0813D0DC @ =gUnknown_203F36C - ldr r0, [r4] - adds r0, 0xC - movs r2, 0x80 - lsls r2, 4 - movs r1, 0 - bl memset - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0813D0E0 @ =gUnknown_846434C - movs r0, 0 - movs r2, 0x3 - bl InitBgsFromTemplates - ldr r1, [r4] - adds r1, 0xC - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D0DC: .4byte gUnknown_203F36C -_0813D0E0: .4byte gUnknown_846434C - thumb_func_end sub_813D07C - - thumb_func_start sub_813D0E4 -sub_813D0E4: @ 813D0E4 - push {r4-r6,lr} - sub sp, 0x4 - ldr r5, _0813D104 @ =gUnknown_203F36C - ldr r0, [r5] - ldr r6, _0813D108 @ =0x0000080c - adds r0, r6 - movs r1, 0 - ldrsh r4, [r0, r1] - cmp r4, 0x1 - beq _0813D130 - cmp r4, 0x1 - bgt _0813D10C - cmp r4, 0 - beq _0813D116 - b _0813D190 - .align 2, 0 -_0813D104: .4byte gUnknown_203F36C -_0813D108: .4byte 0x0000080c -_0813D10C: - cmp r4, 0x2 - beq _0813D14C - cmp r4, 0x3 - beq _0813D178 - b _0813D190 -_0813D116: - bl ResetTempTileDataBuffers - ldr r1, _0813D12C @ =gUnknown_8E859D0 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - b _0813D17E - .align 2, 0 -_0813D12C: .4byte gUnknown_8E859D0 -_0813D130: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0813D1B4 - ldr r0, _0813D148 @ =gUnknown_8E85C44 - ldr r1, [r5] - adds r1, 0xC - bl LZDecompressWram - b _0813D17E - .align 2, 0 -_0813D148: .4byte gUnknown_8E85C44 -_0813D14C: - ldr r0, _0813D16C @ =gUnknown_8E85BA4 - movs r1, 0 - movs r2, 0x60 - bl LoadCompressedPalette - ldr r0, _0813D170 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - beq _0813D17E - ldr r0, _0813D174 @ =gUnknown_8E85BF4 - movs r1, 0 - movs r2, 0x20 - bl LoadCompressedPalette - b _0813D17E - .align 2, 0 -_0813D16C: .4byte gUnknown_8E85BA4 -_0813D170: .4byte gSaveBlock2Ptr -_0813D174: .4byte gUnknown_8E85BF4 -_0813D178: - ldr r0, _0813D18C @ =gUnknown_84644A8 - bl LoadCompressedSpriteSheet -_0813D17E: - ldr r1, [r5] - adds r1, r6 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _0813D1B4 - .align 2, 0 -_0813D18C: .4byte gUnknown_84644A8 -_0813D190: - ldr r0, _0813D1A8 @ =gUnknown_84644B0 - bl LoadCompressedSpritePalette - ldr r0, _0813D1AC @ =gUnknown_203F36C - ldr r0, [r0] - ldr r1, _0813D1B0 @ =0x0000080c - adds r0, r1 - movs r1, 0 - strh r1, [r0] - movs r0, 0x1 - b _0813D1B6 - .align 2, 0 -_0813D1A8: .4byte gUnknown_84644B0 -_0813D1AC: .4byte gUnknown_203F36C -_0813D1B0: .4byte 0x0000080c -_0813D1B4: - movs r0, 0 -_0813D1B6: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_813D0E4 - thumb_func_start sub_813D1C0 sub_813D1C0: @ 813D1C0 push {r4,lr} diff --git a/baserom.ips b/baserom.ips index 9a674ecd36145696268acd8c435fc215c68cff82..3de64bdf688e080da1e9428008b33f67c6d0da31 100644 GIT binary patch delta 130 zcmX@|r|RRIs)iQE7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~Eqp=inIjkjwkNLV3t(h* zbJ@Y{(|&LR9}x2cu>cSY0=rH0@)WE({t8KUzjrRyBD}X zfRWDA_84L18*kcRdj@q|Zwd*#HZ*J(%n>kwET|Av3LFBbph_@TP%W4zs1ei(>PCi! zU59r_8_Uas1O4Y``}I2}DJ>8drrw@8kasXSk?`(Zo=CvbMOd9I6FU-#D!5G2)GF7= z@(!~$<{_X}iikB*uqP7ro3Ej&elRpf>|uJXXx5aDJWtpJqp{nAB*k9dnW$IQgt}T~ z#H;#M28z6@snEUcYCd*Cu4GhAba$)R+uN(|O(xZ9HJMCJv5WQH-ADv_dm94Dx&n?Xb4{4}s2CeQVlO z+yGAoctjP>I|30N4|H(Wxh4+U#yd6E%sXL-sIJ3k?&v?+?EKqyGI;$c=+LvA#7|A} z$aSOtc6=&K4LEfJQj{c(TNNgW{aip9mawu^&&&e66?S+fSzJ>=p{pviMn?0z613pA zMm4pq5f_%;H;G$SJ3-lBB2QP)s&@K)DrqqNjLhU*bC5gY2i_GJql`oyFbZ%WU(oC* zSTq7>bP_ssyauY-<1!qpYvl#o@-bThwpe+}7^EaaDhrU6iOOgYQ8~(^1&ur0tAYwG zSl%$SCeFJ~fckts6+965hWmWqp2V?H&}@@yd>ock7ddw>n;ji(aqw(b2?gNd<79l4 zkB?@vF|wS0rZX3#!=#1to(Q9;W>ky2HITS-^`v%P#-!Hfp42oqEoj=Ltic94T`?nU z4i|9MF0;Av8Oyo+bVH2fF@fk4L6Hkbc@VH&Voub!nTO+}9?H}7_{E%7GHdHHNTsvv zMhnJ4^%V2vT6s2?<6fSFl(~}2DK~!%d$5>i5n?V_GRPgyWU?(04cQh=%dXS3Fh~6G zS}mAai%29B3?h?8BZh4G+`L-q#d{@zF7F)gEb)dl zomrU4XprcUr$4^bN8nxyi)MP7h!%1f-mgl#OY1xVON|`3?spjeB=CPLo- z1@!qOqn3@i$~XHwEOKGXD}A1E@d(eL+dlz4ah@{I^xYo9Je$79g8iZkO&Z&7l41|Z z@9U%Ho-tzX8>A*NOg%+qs>}ST#b(ctJ~Ze_?UJcHtIuOTH|!Z~4(%piwyx)y%oS;O zGI_ZbboarpVKra{HLWS@bo0>{eyv!6GL|@KF1y@1hArsMwI(m;5_ev5PkTU6&rzR1 zS&x`ulpWUxc39j_M=*&Iz1aQd=JqG??xs(hclUO!9(dj2Ub*4_EKCvi`r?xD*3gD~ zkKx#gWsM!g0G98%O73E70B2Xdv+qV-QD>r6WCBZ`P)H`p2HeWbx6x&#+o;}{6kOgdE ssmg=omWV|t!=XiNu|hl#vqv6$XQ2V_##x(eVKl)Z}EKoo^XFCaW71hx_QO1o)7z`Am^*?_GPq%!!g zHN=GiDP1Hl;KEHFz}uut;lfSQY2U!xrP)Scc_+;l>eJ=UNM6g5mXIz*4p_pRZ_Yg) zY0TJv{k06v8;5J1`13G)$Fpng@~|LlR{@$AMPT--5^&-ZQI0UelFC4{43ua58Mp{% za4>y`QVIx(Trj?GX&2a3h--_57bWni`52S7dT4o>{(stoY-!n z;9-*%3Bxj4sq6)=GX^mtz?-JBksfWx zfQW6Y%go(lfC&~H2vC4J6c30jh#*OF#2&Njd<7!Lzbe-1ONa4 M07*qoM6N<$f?dXI7ytkO literal 0 HcmV?d00001 diff --git a/graphics/berry_pouch/unk_8E859D0.png b/graphics/berry_pouch/unk_8E859D0.png new file mode 100644 index 0000000000000000000000000000000000000000..094b4ef3913dc17663f08eaae3e4f7b4256b97fc GIT binary patch literal 444 zcmV;t0YmB`2OB|>6D=@a-Bkh(^d@&Fx5*Q9F19I^OyP)6RVz5ncUe5XWBJM|wx z{`_%gz~H_pOA!YU!f7RO(U>&|r}ZF-#=IUSVrWnpduvpVo6iM6D`fyE1HF}jqcU(* zMnzEufHID|n7s7e-Qcs2$)Nu|P&L#_0n|$GG?w(*-o*$8$eU;I(sfTEB?Fn|{Sj-# zS)6l?zZ;V=&fXZ_yG4aSTBJw9lnkFjC1CiRSmQGGT%#D1F=;^M&c>j7DX&LdIjevy zRT-v6`sRK%!ZkxSO|Bu}x&f*T&^K!wtx+e%A)r+X1A0Mw47wD6_*ppjz~=&Ncx%fB zB*5F9Th0z28O##|y$O9UN z*M<#wgd@$eA^izNL)z712&lxs&cO^{MV$mR*b;|T`a8e?AmL(gq4fXQ!oavq|Bs4V mHhG`0Kv(DIM(t{pm+?0ggkxjsakw`w)FK|N91hxBn0kV)VI~A_~cL z{|QnI3MnN;U-tgQ`)9~8#C^9G*1B0GHm literal 0 HcmV?d00001 diff --git a/include/graphics.h b/include/graphics.h index d8858b36f..9d4bdf177 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -998,4 +998,12 @@ extern const u16 gCreditsAllRightsReservedGfxPal[]; extern const u8 gCreditsAllRightsReservedGfxTiles[]; extern const u8 gCreditsAllRightsReservedGfxMap[]; +// berry_pouch +extern const u8 gUnknown_8E8560C[]; +extern const u8 gUnknown_8E859D0[]; +extern const u8 gUnknown_8E85BA4[]; +extern const u8 gUnknown_8E85BF4[]; +extern const u8 gUnknown_8E85C1C[]; +extern const u8 gUnknown_8E85C44[]; + #endif //GUARD_GRAPHICS_H diff --git a/ld_script.txt b/ld_script.txt index 979cb4463..7e28cc850 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -467,6 +467,7 @@ SECTIONS { src/help_system.o(.rodata); data/wild_pokemon_area.o(.rodata); src/dynamic_placeholder_text_util.o(.rodata); + src/berry_pouch.o(.rodata); data/berry_pouch.o(.rodata); data/itemfinder.o(.rodata); src/buy_menu_helpers.o(.rodata); diff --git a/src/berry_pouch.c b/src/berry_pouch.c index c9894923c..fb69600fc 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -1,6 +1,8 @@ #include "global.h" #include "malloc.h" #include "bg.h" +#include "decompress.h" +#include "gpu_regs.h" #include "palette.h" #include "text.h" #include "berry_pouch.h" @@ -10,6 +12,7 @@ #include "scanline_effect.h" #include "item_menu_icons.h" #include "list_menu.h" +#include "graphics.h" #include "constants/items.h" struct BerryPouchStruct_203F36C @@ -20,8 +23,8 @@ struct BerryPouchStruct_203F36C u8 filler_007[2]; u8 unk_009; u8 filler_00a[2]; - u8 filler_00c[0x800]; - u16 unk_80C[4]; + u8 unk_00C[BG_SCREEN_SIZE]; + s16 unk_80C[4]; }; struct BerryPouchStruct_203F370 @@ -55,6 +58,37 @@ void sub_813DA68(u8 taskId); void sub_813E910(void); void sub_813EC08(void); +static const struct BgTemplate gUnknown_846434C[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + } +}; + +extern const struct CompressedSpriteSheet gUnknown_84644A8; +extern const struct CompressedSpritePalette gUnknown_84644B0; + void InitBerryPouch(u8 a0, void (*savedCallback)(void), u8 a2) { u8 i; @@ -231,3 +265,53 @@ void sub_813D048(u8 taskId) DestroyTask(taskId); } } + +void sub_813D07C(void) +{ + ResetAllBgsCoordinatesAndBgCntRegs(); + memset(gUnknown_203F36C->unk_00C, 0, BG_SCREEN_SIZE); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, gUnknown_846434C, NELEMS(gUnknown_846434C)); + SetBgTilemapBuffer(1, gUnknown_203F36C->unk_00C); + ScheduleBgCopyTilemapToVram(1); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + ShowBg(0); + ShowBg(1); + ShowBg(2); +} + +bool8 sub_813D0E4(void) +{ + switch (gUnknown_203F36C->unk_80C[0]) + { + case 0: + ResetTempTileDataBuffers(); + DecompressAndCopyTileDataToVram(1, gUnknown_8E859D0, 0, 0, 0); + gUnknown_203F36C->unk_80C[0]++; + break; + case 1: + if (FreeTempTileDataBuffersIfPossible() != TRUE) + { + LZDecompressWram(gUnknown_8E85C44, gUnknown_203F36C->unk_00C); + gUnknown_203F36C->unk_80C[0]++; + } + break; + case 2: + LoadCompressedPalette(gUnknown_8E85BA4, 0, 0x60); + if (gSaveBlock2Ptr->playerGender != MALE) + LoadCompressedPalette(gUnknown_8E85BF4, 0, 0x20); + gUnknown_203F36C->unk_80C[0]++; + break; + case 3: + LoadCompressedSpriteSheet(&gUnknown_84644A8); + gUnknown_203F36C->unk_80C[0]++; + break; + default: + LoadCompressedSpritePalette(&gUnknown_84644B0); + gUnknown_203F36C->unk_80C[0] = 0; + return TRUE; + } + + return FALSE; +} From 0993cb64f7c3a4ff8827da72acc76afccca682e6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 28 Sep 2019 20:27:41 -0400 Subject: [PATCH 03/13] Berry_pouch through sub_813D5BC --- asm/berry_pouch.s | 551 --------------------------------------------- baserom.ips | Bin 2012785 -> 2012786 bytes data/berry_pouch.s | 3 +- include/strings.h | 3 + src/berry_pouch.c | 162 ++++++++++++- 5 files changed, 166 insertions(+), 553 deletions(-) diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index 985be2c93..a34c409e1 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -5,557 +5,6 @@ .text - thumb_func_start sub_813D1C0 -sub_813D1C0: @ 813D1C0 - push {r4,lr} - ldr r4, _0813D1F0 @ =gUnknown_203F37C - movs r0, 0xB0 - lsls r0, 1 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0813D1FC - ldr r4, _0813D1F4 @ =gUnknown_203F380 - ldr r0, _0813D1F8 @ =gUnknown_203F36C - ldr r0, [r0] - ldrb r1, [r0, 0x7] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - subs r0, r1 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0813D1FC - movs r0, 0x1 - b _0813D1FE - .align 2, 0 -_0813D1F0: .4byte gUnknown_203F37C -_0813D1F4: .4byte gUnknown_203F380 -_0813D1F8: .4byte gUnknown_203F36C -_0813D1FC: - movs r0, 0 -_0813D1FE: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_813D1C0 - - thumb_func_start sub_813D204 -sub_813D204: @ 813D204 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _0813D280 @ =gBagPockets + 0x20 - mov r8, r0 - movs r6, 0 - ldr r0, _0813D284 @ =gUnknown_203F36C - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r6, r0 - bcs _0813D254 - ldr r7, _0813D288 @ =gUnknown_203F380 -_0813D21C: - lsls r5, r6, 3 - subs r4, r5, r6 - lsls r4, 2 - subs r4, r6 - ldr r0, [r7] - adds r0, r4 - mov r1, r8 - ldr r2, [r1] - lsls r1, r6, 2 - adds r1, r2 - ldrh r1, [r1] - bl sub_813D31C - ldr r0, _0813D28C @ =gUnknown_203F37C - ldr r0, [r0] - adds r5, r0 - ldr r0, [r7] - adds r0, r4 - str r0, [r5] - str r6, [r5, 0x4] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, _0813D284 @ =gUnknown_203F36C - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r6, r0 - bcc _0813D21C -_0813D254: - ldr r0, _0813D28C @ =gUnknown_203F37C - ldr r2, [r0] - lsls r0, r6, 3 - adds r0, r2 - ldr r1, _0813D290 @ =gText_Close - str r1, [r0] - str r6, [r0, 0x4] - ldr r1, _0813D294 @ =gMultiuseListMenuTemplate - str r2, [r1] - ldr r0, _0813D298 @ =gUnknown_203F370 - ldrb r0, [r0, 0x4] - adds r5, r1, 0 - cmp r0, 0x5 - beq _0813D29C - ldr r1, _0813D284 @ =gUnknown_203F36C - ldr r0, [r1] - ldrb r0, [r0, 0x7] - adds r0, 0x1 - strh r0, [r5, 0xC] - adds r2, r1, 0 - b _0813D2A6 - .align 2, 0 -_0813D280: .4byte gBagPockets + 0x20 -_0813D284: .4byte gUnknown_203F36C -_0813D288: .4byte gUnknown_203F380 -_0813D28C: .4byte gUnknown_203F37C -_0813D290: .4byte gText_Close -_0813D294: .4byte gMultiuseListMenuTemplate -_0813D298: .4byte gUnknown_203F370 -_0813D29C: - ldr r0, _0813D310 @ =gUnknown_203F36C - ldr r1, [r0] - ldrb r1, [r1, 0x7] - strh r1, [r5, 0xC] - adds r2, r0, 0 -_0813D2A6: - movs r0, 0 - strb r0, [r5, 0x10] - strb r0, [r5, 0x11] - movs r0, 0x9 - strb r0, [r5, 0x12] - movs r0, 0x1 - strb r0, [r5, 0x13] - ldrb r0, [r5, 0x16] - movs r3, 0x8 - negs r3, r3 - ands r3, r0 - movs r0, 0x39 - negs r0, r0 - ands r3, r0 - movs r0, 0x10 - orrs r3, r0 - strb r3, [r5, 0x16] - ldrb r1, [r5, 0x14] - movs r0, 0x10 - negs r0, r0 - ands r0, r1 - movs r4, 0x2 - orrs r0, r4 - strb r0, [r5, 0x14] - ldr r1, [r2] - ldrb r1, [r1, 0x8] - strh r1, [r5, 0xE] - ldrb r1, [r5, 0x17] - movs r2, 0x40 - negs r2, r2 - ands r2, r1 - orrs r2, r4 - movs r1, 0xF - ands r0, r1 - movs r1, 0x20 - orrs r0, r1 - strb r0, [r5, 0x14] - movs r0, 0x30 - strb r0, [r5, 0x15] - ldr r0, _0813D314 @ =sub_813D3C0 - str r0, [r5, 0x4] - ldr r0, _0813D318 @ =sub_813D430 - str r0, [r5, 0x8] - movs r0, 0x3F - ands r2, r0 - strb r2, [r5, 0x17] - ands r3, r0 - strb r3, [r5, 0x16] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813D310: .4byte gUnknown_203F36C -_0813D314: .4byte sub_813D3C0 -_0813D318: .4byte sub_813D430 - thumb_func_end sub_813D204 - - thumb_func_start sub_813D31C -sub_813D31C: @ 813D31C - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - lsls r5, r1, 16 - lsrs r5, 16 - ldr r4, _0813D384 @ =gStringVar4 - ldr r1, _0813D388 @ =gText_FontSize0 - adds r0, r4, 0 - bl StringCopy - ldr r1, _0813D38C @ =gOtherText_UnkF9_08_Clear_01 - adds r0, r4, 0 - bl StringAppend - ldr r6, _0813D390 @ =gStringVar1 - adds r1, r5, 0 - subs r1, 0x84 - adds r0, r6, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r0, r4, 0 - adds r1, r6, 0 - bl StringAppend - adds r0, r5, 0 - adds r1, r6, 0 - bl CopyItemName - ldr r1, _0813D394 @ =gUnknown_84643B4 - adds r0, r4, 0 - bl StringAppend - ldr r1, _0813D398 @ =gText_FontSize2 - adds r0, r4, 0 - bl StringAppend - adds r0, r4, 0 - adds r1, r6, 0 - bl StringAppend - mov r0, r8 - adds r1, r4, 0 - bl StringCopy - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813D384: .4byte gStringVar4 -_0813D388: .4byte gText_FontSize0 -_0813D38C: .4byte gOtherText_UnkF9_08_Clear_01 -_0813D390: .4byte gStringVar1 -_0813D394: .4byte gUnknown_84643B4 -_0813D398: .4byte gText_FontSize2 - thumb_func_end sub_813D31C - - thumb_func_start sub_813D39C -sub_813D39C: @ 813D39C - push {lr} - adds r3, r1, 0 - ldr r1, _0813D3BC @ =gUnknown_203F380 - lsls r0, 16 - asrs r0, 16 - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 2 - subs r2, r0 - ldr r1, [r1] - adds r1, r2 - adds r0, r3, 0 - bl StringCopy - pop {r0} - bx r0 - .align 2, 0 -_0813D3BC: .4byte gUnknown_203F380 - thumb_func_end sub_813D39C - - thumb_func_start sub_813D3C0 -sub_813D3C0: @ 813D3C0 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0x1 - beq _0813D3D6 - movs r0, 0xF5 - bl PlaySE - bl sub_813EC28 -_0813D3D6: - ldr r4, _0813D404 @ =gUnknown_203F36C - ldr r0, [r4] - ldrb r1, [r0, 0x9] - movs r0, 0x1 - eors r0, r1 - bl DestroyItemMenuIcon - ldr r1, [r4] - ldrb r0, [r1, 0x7] - cmp r0, r5 - beq _0813D408 - lsls r1, r5, 16 - lsrs r1, 16 - movs r0, 0x5 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - ldr r1, [r4] - ldrb r1, [r1, 0x9] - bl sub_80989A0 - b _0813D410 - .align 2, 0 -_0813D404: .4byte gUnknown_203F36C -_0813D408: - ldr r0, _0813D428 @ =0x00000177 - ldrb r1, [r1, 0x9] - bl sub_80989A0 -_0813D410: - ldr r0, _0813D42C @ =gUnknown_203F36C - ldr r2, [r0] - ldrb r0, [r2, 0x9] - movs r1, 0x1 - eors r0, r1 - strb r0, [r2, 0x9] - adds r0, r5, 0 - bl sub_813D538 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813D428: .4byte 0x00000177 -_0813D42C: .4byte gUnknown_203F36C - thumb_func_end sub_813D3C0 - - thumb_func_start sub_813D430 -sub_813D430: @ 813D430 - push {r4-r6,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r2, 24 - lsrs r5, r2, 24 - movs r0, 0x2 - negs r0, r0 - cmp r1, r0 - beq _0813D498 - ldr r0, _0813D4A0 @ =gUnknown_203F36C - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r0, r1 - beq _0813D498 - lsls r4, r1, 16 - lsrs r4, 16 - movs r0, 0x5 - adds r1, r4, 0 - bl BagGetItemIdByPocketPosition - movs r0, 0x5 - adds r1, r4, 0 - bl BagGetQuantityByPocketPosition - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - ldr r0, _0813D4A4 @ =gStringVar1 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r4, _0813D4A8 @ =gStringVar4 - ldr r1, _0813D4AC @ =gText_TimesStrVar1 - adds r0, r4, 0 - bl StringExpandPlaceholders - str r5, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - movs r0, 0xFF - str r0, [sp, 0xC] - movs r0, 0x1 - str r0, [sp, 0x10] - adds r0, r6, 0 - movs r1, 0 - adds r2, r4, 0 - movs r3, 0x6E - bl sub_813E9A0 -_0813D498: - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813D4A0: .4byte gUnknown_203F36C -_0813D4A4: .4byte gStringVar1 -_0813D4A8: .4byte gStringVar4 -_0813D4AC: .4byte gText_TimesStrVar1 - thumb_func_end sub_813D430 - - thumb_func_start sub_813D4B0 -sub_813D4B0: @ 813D4B0 - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 24 - lsrs r4, 24 - bl ListMenuGetYCoordForPrintingArrowCursor - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - bl sub_813D4D0 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_813D4B0 - - thumb_func_start sub_813D4D0 -sub_813D4D0: @ 813D4D0 - push {r4,r5,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r1, 24 - cmp r1, 0xFF - bne _0813D514 - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - movs r1, 0x1 - bl GetMenuCursorDimensionByFont - lsls r0, 24 - lsrs r0, 24 - str r4, [sp] - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0x1 - adds r3, r5, 0 - bl FillWindowPixelRect - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - b _0813D52A -_0813D514: - ldr r2, _0813D534 @ =gFameCheckerText_ListMenuCursor - str r5, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r1, [sp, 0x10] - movs r1, 0x2 - movs r3, 0x1 - bl sub_813E9A0 -_0813D52A: - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813D534: .4byte gFameCheckerText_ListMenuCursor - thumb_func_end sub_813D4D0 - - thumb_func_start sub_813D538 -sub_813D538: @ 813D538 - push {r4,lr} - sub sp, 0x14 - adds r1, r0, 0 - ldr r0, _0813D560 @ =gUnknown_203F36C - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r1, r0 - beq _0813D564 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x5 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl ItemId_GetDescription - adds r4, r0, 0 - b _0813D566 - .align 2, 0 -_0813D560: .4byte gUnknown_203F36C -_0813D564: - ldr r4, _0813D590 @ =gUnknown_8416716 -_0813D566: - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x2 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r0, [sp, 0x10] - movs r0, 0x1 - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0 - bl sub_813E9A0 - add sp, 0x14 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D590: .4byte gUnknown_8416716 - thumb_func_end sub_813D538 - - thumb_func_start sub_813D594 -sub_813D594: @ 813D594 - push {lr} - sub sp, 0x8 - movs r1, 0x4 - str r1, [sp] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0x10 - movs r3, 0x1E - bl SetBgRectPal - movs r0, 0x1 - bl ScheduleBgCopyTilemapToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_813D594 - - thumb_func_start sub_813D5BC -sub_813D5BC: @ 813D5BC - push {r4,lr} - sub sp, 0x10 - ldr r2, _0813D5D8 @ =gUnknown_203F370 - ldrb r0, [r2, 0x4] - cmp r0, 0x5 - beq _0813D5E0 - ldr r4, _0813D5DC @ =gUnknown_203F36C - ldr r1, [r4] - ldrb r0, [r1, 0x7] - ldrb r1, [r1, 0x8] - subs r0, r1 - adds r0, 0x1 - b _0813D5EA - .align 2, 0 -_0813D5D8: .4byte gUnknown_203F370 -_0813D5DC: .4byte gUnknown_203F36C -_0813D5E0: - ldr r4, _0813D610 @ =gUnknown_203F36C - ldr r1, [r4] - ldrb r0, [r1, 0x7] - ldrb r1, [r1, 0x8] - subs r0, r1 -_0813D5EA: - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r0, r2, 0 - adds r0, 0xA - str r0, [sp, 0xC] - movs r0, 0x2 - movs r1, 0xA0 - movs r2, 0x8 - movs r3, 0x78 - bl AddScrollIndicatorArrowPairParameterized - ldr r1, [r4] - strb r0, [r1, 0x6] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D610: .4byte gUnknown_203F36C - thumb_func_end sub_813D5BC - thumb_func_start sub_813D614 sub_813D614: @ 813D614 push {r4,lr} diff --git a/baserom.ips b/baserom.ips index 3de64bdf688e080da1e9428008b33f67c6d0da31..9d0a620e2dcbeb73107eace1984395d1f7a2ca20 100644 GIT binary patch delta 121 zcmWN=xebFr00cmO1ICB>A3x0?(EuX5N{9$nq6Esg1O$OgBEYV|JJNiQ;dcxpbQmyU z!G?niTzK$tMS$BPI%Q~b?v;>s+w9sotx9mncaAvbgj3Eq=YmVFxaJ2x`L(U;{c-*e CSv8*k delta 120 zcmWN=I}Uteoe;KGBC z03i;D5FX?_eB~S8x#f-@KP%5U`~#<9 BG;#m{ diff --git a/data/berry_pouch.s b/data/berry_pouch.s index ac62b258b..7c45b0383 100644 --- a/data/berry_pouch.s +++ b/data/berry_pouch.s @@ -28,8 +28,9 @@ gUnknown_84643B0:: @ 84643B0 .incbin "baserom.gba", 0x4643B0, 0x4 gUnknown_84643B4:: @ 84643B4 - .incbin "baserom.gba", 0x4643B4, 0x4 + .string " $" + .align 2 gUnknown_84643B8:: @ 84643B8 .incbin "baserom.gba", 0x4643B8, 0x20 diff --git a/include/strings.h b/include/strings.h index dfedb4afa..5c3cbb67b 100644 --- a/include/strings.h +++ b/include/strings.h @@ -315,4 +315,7 @@ extern const u8 gCreditsString_The_Royal_New_Zealand_Foundation_of_the_Blind_Gre extern const u8 gCreditsString_Graphic_Designer[]; extern const u8 gCreditsString_Akira_Kinashi[]; +// berry_pouch +extern const u8 gUnknown_8416716[]; + #endif //GUARD_STRINGS_H diff --git a/src/berry_pouch.c b/src/berry_pouch.c index fb69600fc..c8d6b508c 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -13,14 +13,22 @@ #include "item_menu_icons.h" #include "list_menu.h" #include "graphics.h" +#include "berry.h" +#include "item.h" +#include "strings.h" +#include "string_util.h" +#include "sound.h" +#include "menu_indicators.h" #include "constants/items.h" +#include "constants/songs.h" struct BerryPouchStruct_203F36C { u32 unk_000; u8 filler_004[2]; u8 unk_006; - u8 filler_007[2]; + u8 unk_007; + u8 unk_008; u8 unk_009; u8 filler_00a[2]; u8 unk_00C[BG_SCREEN_SIZE]; @@ -39,6 +47,8 @@ struct BerryPouchStruct_203F370 EWRAM_DATA struct BerryPouchStruct_203F36C *gUnknown_203F36C = NULL; EWRAM_DATA struct BerryPouchStruct_203F370 gUnknown_203F370 = {}; +EWRAM_DATA struct ListMenuItem *gUnknown_203F37C = NULL; +EWRAM_DATA u8 *gUnknown_203F380 = NULL; void sub_813CE30(void); bool8 sub_813CE5C(void); @@ -48,6 +58,11 @@ void sub_813D07C(void); bool8 sub_813D0E4(void); bool8 sub_813D1C0(void); void sub_813D204(void); +void sub_813D31C(u8 * dest, u16 itemId); +void sub_813D3C0(s32 itemIndex, bool8 onInit, struct ListMenu *list); +void sub_813D430(u8 windowId, s32 itemId, u8 y); +void sub_813D4D0(u8 y, u8 colorIdx); +void sub_813D538(s32 itemIndex); void sub_813D5BC(void); void sub_813D6A4(void); void sub_813D6F4(void); @@ -55,7 +70,9 @@ void sub_813D754(void); void sub_813D7CC(void); void sub_813D8AC(void); void sub_813DA68(u8 taskId); +void sub_813EC28(void); void sub_813E910(void); +void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); void sub_813EC08(void); static const struct BgTemplate gUnknown_846434C[] = { @@ -86,6 +103,8 @@ static const struct BgTemplate gUnknown_846434C[] = { } }; +extern const u8 gUnknown_84643B4[]; + extern const struct CompressedSpriteSheet gUnknown_84644A8; extern const struct CompressedSpritePalette gUnknown_84644B0; @@ -315,3 +334,144 @@ bool8 sub_813D0E4(void) return FALSE; } + +bool8 sub_813D1C0(void) +{ + gUnknown_203F37C = Alloc(NUM_BERRIES * sizeof(struct ListMenuItem)); + if (gUnknown_203F37C == NULL) + return FALSE; + gUnknown_203F380 = Alloc(gUnknown_203F36C->unk_007 * 27); + if (gUnknown_203F380 == NULL) + return FALSE; + return TRUE; +} + +void sub_813D204(void) +{ + u16 i; + struct BagPocket *pocket = &gBagPockets[POCKET_BERRY_POUCH - 1]; + for (i = 0; i < gUnknown_203F36C->unk_007; i++) + { + sub_813D31C(&gUnknown_203F380[i * 27], pocket->itemSlots[i].itemId); + gUnknown_203F37C[i].label = &gUnknown_203F380[i * 27]; + gUnknown_203F37C[i].index = i; + } + gUnknown_203F37C[i].label = gText_Close; + gUnknown_203F37C[i].index = i; + gMultiuseListMenuTemplate.items = gUnknown_203F37C; + if (gUnknown_203F370.unk_04 != 5) + gMultiuseListMenuTemplate.totalItems = gUnknown_203F36C->unk_007 + 1; + else + gMultiuseListMenuTemplate.totalItems = gUnknown_203F36C->unk_007; + gMultiuseListMenuTemplate.windowId = 0; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 0; + gMultiuseListMenuTemplate.itemVerticalPadding = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.maxShowed = gUnknown_203F36C->unk_008; + gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.cursorPal = 2; + gMultiuseListMenuTemplate.fillValue = 0; + gMultiuseListMenuTemplate.cursorShadowPal = 3; + gMultiuseListMenuTemplate.moveCursorFunc = sub_813D3C0; + gMultiuseListMenuTemplate.itemPrintFunc = sub_813D430; + gMultiuseListMenuTemplate.cursorKind = 0; + gMultiuseListMenuTemplate.scrollMultiple = 0; +} + +void sub_813D31C(u8 * dest, u16 itemId) +{ + StringCopy(gStringVar4, gText_FontSize0); + StringAppend(gStringVar4, gOtherText_UnkF9_08_Clear_01); + ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringAppend(gStringVar4, gStringVar1); + CopyItemName(itemId, gStringVar1); + StringAppend(gStringVar4, gUnknown_84643B4); + StringAppend(gStringVar4, gText_FontSize2); + StringAppend(gStringVar4, gStringVar1); + StringCopy(dest, gStringVar4); +} + +void sub_813D39C(s16 a0, u8 *dest) +{ + StringCopy(dest, &gUnknown_203F380[a0 * 27]); +} + +void sub_813D3C0(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + if (onInit != TRUE) + { + PlaySE(SE_W287B); + sub_813EC28(); + } + DestroyItemMenuIcon(gUnknown_203F36C->unk_009 ^ 1); + if (gUnknown_203F36C->unk_007 != itemIndex) + sub_80989A0(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIndex), gUnknown_203F36C->unk_009); + else + sub_80989A0(ITEM_N_A, gUnknown_203F36C->unk_009); + gUnknown_203F36C->unk_009 ^= 1; + sub_813D538(itemIndex); +} + +void sub_813D430(u8 windowId, s32 itemId, u8 y) +{ + u16 unused; + u16 itemQuantity; + if (itemId != -2 && gUnknown_203F36C->unk_007 != itemId) + { + unused = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemId); + itemQuantity = BagGetQuantityByPocketPosition(POCKET_BERRY_POUCH, itemId); + ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_813E9A0(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1); + } +} + +void sub_813D4B0(u8 taskId, u8 colorIdx) +{ + sub_813D4D0(ListMenuGetYCoordForPrintingArrowCursor(taskId), colorIdx); +} + +void sub_813D4D0(u8 y, u8 colorIdx) +{ + u8 width; + u8 height; + if (colorIdx == 0xFF) + { + width = GetMenuCursorDimensionByFont(2, 0); + height = GetMenuCursorDimensionByFont(2, 1); + FillWindowPixelRect(0, 0, 1, y, width, height); + CopyWindowToVram(0, 2); + } + else + { + sub_813E9A0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); + } +} + +void sub_813D538(s32 itemIdx) +{ + const u8 *str; + if (itemIdx != gUnknown_203F36C->unk_007) + str = ItemId_GetDescription(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIdx)); + else + str = gUnknown_8416716; + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + sub_813E9A0(1, 2, str, 0, 2, 2, 0, 0, 0); +} + +void sub_813D594(s32 pal) +{ + SetBgRectPal(1, 0, 16, 30, 4, pal + 1); + ScheduleBgCopyTilemapToVram(1); +} + +void sub_813D5BC(void) +{ + if (gUnknown_203F370.unk_04 != 5) + gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, gUnknown_203F36C->unk_007 - gUnknown_203F36C->unk_008 + 1, 110, 110, &gUnknown_203F370.unk_0A); + else + gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, gUnknown_203F36C->unk_007 - gUnknown_203F36C->unk_008, 110, 110, &gUnknown_203F370.unk_0A); +} From b843b5529227e301895920b56585cf9ec69c9b53 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 28 Sep 2019 21:35:20 -0400 Subject: [PATCH 04/13] berry_pouch through sub_813D940 --- asm/berry_pouch.s | 537 +--------------------------------------------- include/item.h | 1 + include/strings.h | 1 + src/berry_pouch.c | 152 ++++++++++++- sym_ewram.txt | 18 +- 5 files changed, 162 insertions(+), 547 deletions(-) diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index a34c409e1..9d5ecb593 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -5,527 +5,6 @@ .text - thumb_func_start sub_813D614 -sub_813D614: @ 813D614 - push {r4,lr} - sub sp, 0x10 - ldr r4, _0813D648 @ =gUnknown_203F36C - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0x4] - movs r0, 0x2 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r1, 0x4 - str r1, [sp, 0xC] - movs r0, 0x2 - movs r1, 0xD4 - movs r2, 0x78 - movs r3, 0x98 - bl AddScrollIndicatorArrowPairParameterized - ldr r1, [r4] - strb r0, [r1, 0x6] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D648: .4byte gUnknown_203F36C - thumb_func_end sub_813D614 - - thumb_func_start sub_813D64C -sub_813D64C: @ 813D64C - push {r4,lr} - sub sp, 0x10 - ldr r4, _0813D680 @ =gUnknown_203F36C - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0x4] - movs r0, 0x2 - str r0, [sp] - movs r0, 0x6E - str r0, [sp, 0x4] - str r0, [sp, 0x8] - adds r1, 0x4 - str r1, [sp, 0xC] - movs r0, 0x2 - movs r1, 0x98 - movs r2, 0x48 - movs r3, 0x68 - bl AddScrollIndicatorArrowPairParameterized - ldr r1, [r4] - strb r0, [r1, 0x6] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D680: .4byte gUnknown_203F36C - thumb_func_end sub_813D64C - - thumb_func_start sub_813D684 -sub_813D684: @ 813D684 - push {r4,lr} - ldr r4, _0813D6A0 @ =gUnknown_203F36C - ldr r1, [r4] - ldrb r0, [r1, 0x6] - cmp r0, 0xFF - beq _0813D69A - bl RemoveScrollIndicatorArrowPair - ldr r1, [r4] - movs r0, 0xFF - strb r0, [r1, 0x6] -_0813D69A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D6A0: .4byte gUnknown_203F36C - thumb_func_end sub_813D684 - - thumb_func_start sub_813D6A4 -sub_813D6A4: @ 813D6A4 - push {r4,lr} - sub sp, 0x14 - ldr r4, _0813D6E0 @ =gUnknown_841670A - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0 - bl GetStringWidth - movs r3, 0x48 - subs r3, r0 - lsrs r3, 1 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0x1 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r0, [sp, 0x10] - movs r0, 0x2 - movs r1, 0x1 - adds r2, r4, 0 - bl sub_813E9A0 - add sp, 0x14 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D6E0: .4byte gUnknown_841670A - thumb_func_end sub_813D6A4 - - thumb_func_start sub_813D6E4 -sub_813D6E4: @ 813D6E4 - ldr r1, _0813D6F0 @ =gUnknown_203F370 - movs r0, 0 - strh r0, [r1, 0x8] - strh r0, [r1, 0xA] - bx lr - .align 2, 0 -_0813D6F0: .4byte gUnknown_203F370 - thumb_func_end sub_813D6E4 - - thumb_func_start sub_813D6F4 -sub_813D6F4: @ 813D6F4 - push {r4,lr} - ldr r0, _0813D70C @ =gUnknown_203F370 - ldrb r1, [r0, 0x4] - adds r4, r0, 0 - cmp r1, 0x5 - beq _0813D714 - ldr r0, _0813D710 @ =gUnknown_203F36C - ldr r1, [r0] - ldrb r1, [r1, 0x7] - adds r2, r1, 0x1 - adds r1, r0, 0 - b _0813D71A - .align 2, 0 -_0813D70C: .4byte gUnknown_203F370 -_0813D710: .4byte gUnknown_203F36C -_0813D714: - ldr r1, _0813D744 @ =gUnknown_203F36C - ldr r0, [r1] - ldrb r2, [r0, 0x7] -_0813D71A: - ldrh r0, [r4, 0xA] - cmp r0, 0 - beq _0813D72E - ldr r1, [r1] - ldrb r1, [r1, 0x8] - adds r0, r1 - cmp r0, r2 - ble _0813D72E - subs r0, r2, r1 - strh r0, [r4, 0xA] -_0813D72E: - adds r3, r4, 0 - ldrh r0, [r3, 0xA] - ldrh r1, [r3, 0x8] - adds r0, r1 - cmp r0, r2 - blt _0813D74C - cmp r2, 0x1 - bhi _0813D748 - movs r0, 0 - strh r0, [r3, 0x8] - b _0813D74C - .align 2, 0 -_0813D744: .4byte gUnknown_203F36C -_0813D748: - subs r0, r2, 0x1 - strh r0, [r4, 0x8] -_0813D74C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_813D6F4 - - thumb_func_start sub_813D754 -sub_813D754: @ 813D754 - push {r4-r6,lr} - ldr r0, _0813D770 @ =gUnknown_203F370 - ldrb r1, [r0, 0x4] - adds r5, r0, 0 - cmp r1, 0x5 - beq _0813D778 - ldr r1, _0813D774 @ =gUnknown_203F36C - ldr r0, [r1] - ldrb r0, [r0, 0x7] - adds r0, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - b _0813D77E - .align 2, 0 -_0813D770: .4byte gUnknown_203F370 -_0813D774: .4byte gUnknown_203F36C -_0813D778: - ldr r1, _0813D7C8 @ =gUnknown_203F36C - ldr r0, [r1] - ldrb r4, [r0, 0x7] -_0813D77E: - adds r6, r1, 0 - ldrh r0, [r5, 0x8] - cmp r0, 0x4 - bls _0813D7C2 - movs r3, 0 - subs r0, 0x4 - cmp r3, r0 - bgt _0813D7C2 - ldrh r0, [r5, 0xA] - ldr r1, [r6] - ldrb r1, [r1, 0x8] - adds r0, r1 - cmp r0, r4 - beq _0813D7C2 - adds r2, r5, 0 -_0813D79C: - ldrh r0, [r2, 0x8] - subs r0, 0x1 - strh r0, [r2, 0x8] - ldrh r0, [r2, 0xA] - adds r0, 0x1 - strh r0, [r2, 0xA] - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - ldrh r0, [r2, 0x8] - subs r0, 0x4 - cmp r3, r0 - bgt _0813D7C2 - ldrh r0, [r5, 0xA] - ldr r1, [r6] - ldrb r1, [r1, 0x8] - adds r0, r1 - cmp r0, r4 - bne _0813D79C -_0813D7C2: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813D7C8: .4byte gUnknown_203F36C - thumb_func_end sub_813D754 - - thumb_func_start sub_813D7CC -sub_813D7CC: @ 813D7CC - push {lr} - ldr r0, _0813D7FC @ =gUnknown_203F36C - ldr r0, [r0] - cmp r0, 0 - beq _0813D7DA - bl Free -_0813D7DA: - ldr r0, _0813D800 @ =gUnknown_203F37C - ldr r0, [r0] - cmp r0, 0 - beq _0813D7E6 - bl Free -_0813D7E6: - ldr r0, _0813D804 @ =gUnknown_203F380 - ldr r0, [r0] - cmp r0, 0 - beq _0813D7F2 - bl Free -_0813D7F2: - bl FreeAllWindowBuffers - pop {r0} - bx r0 - .align 2, 0 -_0813D7FC: .4byte gUnknown_203F36C -_0813D800: .4byte gUnknown_203F37C -_0813D804: .4byte gUnknown_203F380 - thumb_func_end sub_813D7CC - - thumb_func_start BerryPouch_StartFadeToExitCallback -BerryPouch_StartFadeToExitCallback: @ 813D808 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x2 - negs r1, r1 - movs r2, 0 - str r2, [sp] - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _0813D83C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0813D840 @ =sub_813D844 - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813D83C: .4byte gTasks -_0813D840: .4byte sub_813D844 - thumb_func_end BerryPouch_StartFadeToExitCallback - - thumb_func_start sub_813D844 -sub_813D844: @ 813D844 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0813D87C @ =gTasks+0x8 - adds r2, r0, r1 - ldr r0, _0813D880 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0813D8A4 - ldrb r0, [r2] - ldr r4, _0813D884 @ =gUnknown_203F37A - subs r2, r4, 0x2 - adds r1, r4, 0 - bl DestroyListMenuTask - ldr r0, _0813D888 @ =gUnknown_203F36C - ldr r0, [r0] - ldr r0, [r0] - cmp r0, 0 - beq _0813D88C - bl SetMainCallback2 - b _0813D896 - .align 2, 0 -_0813D87C: .4byte gTasks+0x8 -_0813D880: .4byte gPaletteFade -_0813D884: .4byte gUnknown_203F37A -_0813D888: .4byte gUnknown_203F36C -_0813D88C: - adds r0, r4, 0 - subs r0, 0xA - ldr r0, [r0] - bl SetMainCallback2 -_0813D896: - bl sub_813D684 - bl sub_813D7CC - adds r0, r5, 0 - bl DestroyTask -_0813D8A4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_813D844 - - thumb_func_start sub_813D8AC -sub_813D8AC: @ 813D8AC - push {r4,lr} - ldr r4, _0813D904 @ =gBagPockets + 0x20 - adds r0, r4, 0 - bl SortAndCompactBagPocket - ldr r3, _0813D908 @ =gUnknown_203F36C - ldr r1, [r3] - movs r0, 0 - strb r0, [r1, 0x7] - movs r2, 0 - ldrb r0, [r4, 0x4] - cmp r2, r0 - bcs _0813D8EE - ldr r0, [r4] - ldrh r0, [r0] - cmp r0, 0 - beq _0813D8EE -_0813D8CE: - ldr r0, [r3] - ldrb r1, [r0, 0x7] - adds r1, 0x1 - strb r1, [r0, 0x7] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - ldrb r0, [r4, 0x4] - cmp r2, r0 - bcs _0813D8EE - ldr r0, [r4] - lsls r1, r2, 2 - adds r1, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _0813D8CE -_0813D8EE: - ldr r0, _0813D90C @ =gUnknown_203F370 - ldrb r0, [r0, 0x4] - cmp r0, 0x5 - beq _0813D910 - ldr r0, _0813D908 @ =gUnknown_203F36C - ldr r1, [r0] - ldrb r1, [r1, 0x7] - adds r2, r1, 0x1 - adds r1, r0, 0 - b _0813D916 - .align 2, 0 -_0813D904: .4byte gBagPockets + 0x20 -_0813D908: .4byte gUnknown_203F36C -_0813D90C: .4byte gUnknown_203F370 -_0813D910: - ldr r1, _0813D924 @ =gUnknown_203F36C - ldr r0, [r1] - ldrb r2, [r0, 0x7] -_0813D916: - cmp r2, 0x7 - bls _0813D928 - ldr r1, [r1] - movs r0, 0x7 - strb r0, [r1, 0x8] - b _0813D92C - .align 2, 0 -_0813D924: .4byte gUnknown_203F36C -_0813D928: - ldr r0, [r1] - strb r2, [r0, 0x8] -_0813D92C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_813D8AC - - thumb_func_start BerryPouch_SetExitCallback -BerryPouch_SetExitCallback: @ 813D934 - ldr r1, _0813D93C @ =gUnknown_203F36C - ldr r1, [r1] - str r0, [r1] - bx lr - .align 2, 0 -_0813D93C: .4byte gUnknown_203F36C - thumb_func_end BerryPouch_SetExitCallback - - thumb_func_start sub_813D940 -sub_813D940: @ 813D940 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x14 - adds r6, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0813D9E8 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x8 - bl sub_813EA08 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r1, 0x2 - ldrsh r0, [r4, r1] - ldr r1, _0813D9EC @ =gStringVar1 - mov r10, r1 - bl sub_813D39C - ldr r0, _0813D9F0 @ =gStringVar4 - mov r9, r0 - adds r1, r6, 0 - bl StringExpandPlaceholders - movs r0, 0x2 - str r0, [sp] - movs r6, 0x1 - str r6, [sp, 0x4] - str r0, [sp, 0x8] - movs r1, 0 - mov r8, r1 - str r1, [sp, 0xC] - str r6, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - mov r2, r9 - movs r3, 0 - bl sub_813E9A0 - movs r0, 0 - bl sub_813EA08 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r0, r10 - movs r1, 0x1 - movs r2, 0x2 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r1, _0813D9F4 @ =gText_TimesStrVar1 - mov r0, r9 - bl StringExpandPlaceholders - movs r0, 0xA - str r0, [sp] - str r6, [sp, 0x4] - mov r0, r8 - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r6, [sp, 0x10] - adds r0, r4, 0 - movs r1, 0 - mov r2, r9 - movs r3, 0x4 - bl sub_813E9A0 - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813D9E8: .4byte gTasks+0x8 -_0813D9EC: .4byte gStringVar1 -_0813D9F0: .4byte gStringVar4 -_0813D9F4: .4byte gText_TimesStrVar1 - thumb_func_end sub_813D940 - thumb_func_start sub_813D9F8 sub_813D9F8: @ 813D9F8 push {r4-r6,lr} @@ -613,7 +92,7 @@ _0813DA9E: bl ListMenu_ProcessInput adds r5, r0, 0 ldrb r0, [r7] - ldr r4, _0813DAE0 @ =gUnknown_203F37A + ldr r4, _0813DAE0 @ =gUnknown_203F370 + 10 subs r2, r4, 0x2 adds r1, r4, 0 bl ListMenuGetScrollAndRow @@ -637,7 +116,7 @@ _0813DA9E: .align 2, 0 _0813DAD8: .4byte gTasks+0x8 _0813DADC: .4byte gPaletteFade -_0813DAE0: .4byte gUnknown_203F37A +_0813DAE0: .4byte gUnknown_203F370 + 10 _0813DAE4: .4byte gMain _0813DAE8: .4byte gSpecialVar_ItemId _0813DAEC: @@ -1423,7 +902,7 @@ _0813E18A: movs r0, 0x9 bl sub_813EA98 ldrb r0, [r5] - ldr r4, _0813E1F8 @ =gUnknown_203F37A + ldr r4, _0813E1F8 @ =gUnknown_203F370 + 10 subs r2, r4, 0x2 adds r1, r4, 0 bl DestroyListMenuTask @@ -1455,7 +934,7 @@ _0813E1E4: _0813E1EC: .4byte gTasks+0x8 _0813E1F0: .4byte gMain _0813E1F4: .4byte gSpecialVar_ItemId -_0813E1F8: .4byte gUnknown_203F37A +_0813E1F8: .4byte gUnknown_203F370 + 10 _0813E1FC: .4byte gMultiuseListMenuTemplate thumb_func_end sub_813E164 @@ -1565,7 +1044,7 @@ sub_813E2B8: @ 813E2B8 movs r0, 0x5 bl sub_813EACC ldrb r0, [r5] - ldr r4, _0813E318 @ =gUnknown_203F37A + ldr r4, _0813E318 @ =gUnknown_203F370 + 10 subs r2, r4, 0x2 adds r1, r4, 0 bl DestroyListMenuTask @@ -1592,7 +1071,7 @@ sub_813E2B8: @ 813E2B8 bx r0 .align 2, 0 _0813E314: .4byte gTasks+0x8 -_0813E318: .4byte gUnknown_203F37A +_0813E318: .4byte gUnknown_203F370 + 10 _0813E31C: .4byte gMultiuseListMenuTemplate thumb_func_end sub_813E2B8 @@ -2196,7 +1675,7 @@ sub_813E7F0: @ 813E7F0 bl sub_809C09C mov r3, r8 ldrb r0, [r3] - ldr r4, _0813E8C8 @ =gUnknown_203F37A + ldr r4, _0813E8C8 @ =gUnknown_203F370 + 10 subs r2, r4, 0x2 adds r1, r4, 0 bl DestroyListMenuTask @@ -2243,7 +1722,7 @@ sub_813E7F0: @ 813E7F0 _0813E8BC: .4byte gTasks+0x8 _0813E8C0: .4byte gSpecialVar_ItemId _0813E8C4: .4byte gSaveBlock1Ptr -_0813E8C8: .4byte gUnknown_203F37A +_0813E8C8: .4byte gUnknown_203F370 + 10 _0813E8CC: .4byte gMultiuseListMenuTemplate _0813E8D0: .4byte sub_813E8D4 thumb_func_end sub_813E7F0 diff --git a/include/item.h b/include/item.h index 0f0adbca8..f0aaa0f6c 100644 --- a/include/item.h +++ b/include/item.h @@ -77,5 +77,6 @@ u16 GetPcItemQuantity(u16 *); void ItemPcCompaction(void); void RemoveItemFromPC(u16 itemId, u16 quantity); +void SortAndCompactBagPocket(struct BagPocket * pocket); #endif // GUARD_ITEM_H diff --git a/include/strings.h b/include/strings.h index 5c3cbb67b..c0863dffb 100644 --- a/include/strings.h +++ b/include/strings.h @@ -316,6 +316,7 @@ extern const u8 gCreditsString_Graphic_Designer[]; extern const u8 gCreditsString_Akira_Kinashi[]; // berry_pouch +extern const u8 gUnknown_841670A[]; extern const u8 gUnknown_8416716[]; #endif //GUARD_STRINGS_H diff --git a/src/berry_pouch.c b/src/berry_pouch.c index c8d6b508c..48baac93a 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -24,8 +24,8 @@ struct BerryPouchStruct_203F36C { - u32 unk_000; - u8 filler_004[2]; + void (*unk_000)(void); + u16 unk_004; u8 unk_006; u8 unk_007; u8 unk_008; @@ -68,11 +68,13 @@ void sub_813D6A4(void); void sub_813D6F4(void); void sub_813D754(void); void sub_813D7CC(void); +void sub_813D844(u8 taskId); void sub_813D8AC(void); void sub_813DA68(u8 taskId); void sub_813EC28(void); void sub_813E910(void); void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); +u8 sub_813EA08(u8); void sub_813EC08(void); static const struct BgTemplate gUnknown_846434C[] = { @@ -125,7 +127,7 @@ void InitBerryPouch(u8 a0, void (*savedCallback)(void), u8 a2) gUnknown_203F370.unk_05 = a2; if (savedCallback != NULL) gUnknown_203F370.savedCallback = savedCallback; - gUnknown_203F36C->unk_000 = 0; + gUnknown_203F36C->unk_000 = NULL; gUnknown_203F36C->unk_009 = 0; gUnknown_203F36C->unk_006 = 0xFF; for (i = 0; i < 4; i++) @@ -475,3 +477,147 @@ void sub_813D5BC(void) else gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, gUnknown_203F36C->unk_007 - gUnknown_203F36C->unk_008, 110, 110, &gUnknown_203F370.unk_0A); } + +void sub_813D614(void) +{ + gUnknown_203F36C->unk_004 = 1; + gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &gUnknown_203F36C->unk_004); +} + +void sub_813D64C(void) +{ + gUnknown_203F36C->unk_004 = 1; + gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 152, 72, 104, 2, 110, 110, &gUnknown_203F36C->unk_004); +} + +void sub_813D684(void) +{ + if (gUnknown_203F36C->unk_006 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_203F36C->unk_006); + gUnknown_203F36C->unk_006 = 0xFF; + } +} + +void sub_813D6A4(void) +{ + u32 slack = 72 - GetStringWidth(1, gUnknown_841670A, 0); + sub_813E9A0(2, 1, gUnknown_841670A, slack / 2, 1, 0, 0, 0, 0); +} + +void sub_813D6E4(void) +{ + gUnknown_203F370.unk_08 = 0; + gUnknown_203F370.unk_0A = 0; +} + +void sub_813D6F4(void) +{ + s32 r2; + if (gUnknown_203F370.unk_04 != 5) + r2 = gUnknown_203F36C->unk_007 + 1; + else + r2 = gUnknown_203F36C->unk_007; + if (gUnknown_203F370.unk_0A != 0 && gUnknown_203F370.unk_0A + gUnknown_203F36C->unk_008 > r2) + gUnknown_203F370.unk_0A = r2 - gUnknown_203F36C->unk_008; + if (gUnknown_203F370.unk_0A + gUnknown_203F370.unk_08 >= r2) + { + if (r2 == 0 || r2 == 1) + gUnknown_203F370.unk_08 = 0; + else + gUnknown_203F370.unk_08 = r2 - 1; + } +} + +void sub_813D754(void) +{ + u8 lim; + u8 i; + if (gUnknown_203F370.unk_04 != 5) + lim = gUnknown_203F36C->unk_007 + 1; + else + lim = gUnknown_203F36C->unk_007; + if (gUnknown_203F370.unk_08 > 4) + { + for (i = 0; i <= gUnknown_203F370.unk_08 - 4; gUnknown_203F370.unk_08--, gUnknown_203F370.unk_0A++, i++) + { + if (gUnknown_203F370.unk_0A + gUnknown_203F36C->unk_008 == lim) + break; + } + } +} + +void sub_813D7CC(void) +{ + if (gUnknown_203F36C != NULL) + Free(gUnknown_203F36C); + if (gUnknown_203F37C != NULL) + Free(gUnknown_203F37C); + if (gUnknown_203F380 != NULL) + Free(gUnknown_203F380); + FreeAllWindowBuffers(); +} + +void BerryPouch_StartFadeToExitCallback(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); + gTasks[taskId].func = sub_813D844; +} + +void sub_813D844(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); + if (gUnknown_203F36C->unk_000 != NULL) + SetMainCallback2(gUnknown_203F36C->unk_000); + else + SetMainCallback2(gUnknown_203F370.savedCallback); + sub_813D684(); + sub_813D7CC(); + DestroyTask(taskId); + } +} + +void sub_813D8AC(void) +{ + u16 i; + u32 r2; + struct BagPocket *pocket = &gBagPockets[POCKET_BERRY_POUCH - 1]; + SortAndCompactBagPocket(pocket); + gUnknown_203F36C->unk_007 = 0; + for (i = 0; i < pocket->capacity; i++) + { + if (pocket->itemSlots[i].itemId == ITEM_NONE) + break; + gUnknown_203F36C->unk_007++; + } + if (gUnknown_203F370.unk_04 != 5) + r2 = gUnknown_203F36C->unk_007 + 1; + else + r2 = gUnknown_203F36C->unk_007; + if (r2 > 7) + gUnknown_203F36C->unk_008 = 7; + else + gUnknown_203F36C->unk_008 = r2; +} + +void BerryPouch_SetExitCallback(void (*callback)(void)) +{ + gUnknown_203F36C->unk_000 = callback; +} + +void sub_813D940(u8 taskId, const u8 * str) +{ + s16 * data = gTasks[taskId].data; + u8 windowId = sub_813EA08(8); + u8 windowId2; + sub_813D39C(data[1], gStringVar1); + StringExpandPlaceholders(gStringVar4, str); + sub_813E9A0(windowId, 2, gStringVar4, 0, 2, 1, 2, 0, 1); + windowId2 = sub_813EA08(0); + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_813E9A0(windowId2, 0, gStringVar4, 4, 10, 1, 0, 0, 1); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 0a91bcce7..1ee1f4b5b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1342,22 +1342,10 @@ gUnknown_203B170: @ 203B170 .align 2 .include "src/help_system.o" + .align 2 .include "src/dynamic_placeholder_text_util.o" - -gUnknown_203F36C: @ 203F36C - .space 0x4 - -gUnknown_203F370: @ 203F370 - .space 0xA - -gUnknown_203F37A: @ 203F37A - .space 0x2 - -gUnknown_203F37C: @ 203F37C - .space 0x4 - -gUnknown_203F380: @ 203F380 - .space 0x4 + .align 2 + .include "src/berry_pouch.o" gUnknown_203F384: @ 203F384 .space 0x4 From 01d42d07f849ea476bad3e80fb75c36806f39382 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 28 Sep 2019 21:40:58 -0400 Subject: [PATCH 05/13] Berry Pouch sub_813D9F8 --- asm/berry_pouch.s | 53 ----------------------------------------------- src/berry_pouch.c | 10 +++++++++ 2 files changed, 10 insertions(+), 53 deletions(-) diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index 9d5ecb593..e5828dff3 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -5,59 +5,6 @@ .text - thumb_func_start sub_813D9F8 -sub_813D9F8: @ 813D9F8 - push {r4-r6,lr} - sub sp, 0x14 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - bl sub_813EB10 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - adds r0, r6, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, _0813DA5C @ =gStringVar1 - lsls r4, 16 - asrs r4, 16 - adds r1, r4, 0 - movs r2, 0x2 - adds r3, r5, 0 - bl ConvertIntToDecimalStringN - ldr r4, _0813DA60 @ =gStringVar4 - ldr r1, _0813DA64 @ =gText_TimesStrVar1 - adds r0, r4, 0 - bl StringExpandPlaceholders - movs r0, 0xA - str r0, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - str r0, [sp, 0xC] - str r1, [sp, 0x10] - adds r0, r6, 0 - movs r1, 0 - adds r2, r4, 0 - movs r3, 0x4 - bl sub_813E9A0 - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813DA5C: .4byte gStringVar1 -_0813DA60: .4byte gStringVar4 -_0813DA64: .4byte gText_TimesStrVar1 - thumb_func_end sub_813D9F8 - thumb_func_start sub_813DA68 sub_813DA68: @ 813DA68 push {r4-r7,lr} diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 48baac93a..a00a15f0c 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -75,6 +75,7 @@ void sub_813EC28(void); void sub_813E910(void); void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); u8 sub_813EA08(u8); +u8 sub_813EB10(u8); void sub_813EC08(void); static const struct BgTemplate gUnknown_846434C[] = { @@ -621,3 +622,12 @@ void sub_813D940(u8 taskId, const u8 * str) StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); sub_813E9A0(windowId2, 0, gStringVar4, 4, 10, 1, 0, 0, 1); } + +void sub_813D9F8(u8 whichWindow, s16 quantity, u8 ndigits) +{ + u8 windowId = sub_813EB10(whichWindow); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, ndigits); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_813E9A0(windowId, 0, gStringVar4, 4, 10, 1, 0, 0, 1); +} From 3766ddcfda811cff3a7c38808c9efe294c33ed7c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 29 Sep 2019 12:48:11 -0400 Subject: [PATCH 06/13] berry pouch through sub_813DD74 --- asm/berry_pouch.s | 383 --------------------------------------------- baserom.ips | Bin 2012786 -> 2012710 bytes data/berry_pouch.s | 17 +- data/strings.s | 2 +- src/berry_pouch.c | 136 +++++++++++++++- sym_ewram.txt | 13 -- 6 files changed, 145 insertions(+), 406 deletions(-) diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index e5828dff3..5d3db9265 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -5,389 +5,6 @@ .text - thumb_func_start sub_813DA68 -sub_813DA68: @ 813DA68 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0813DAD8 @ =gTasks+0x8 - adds r7, r0, r1 - ldr r0, _0813DADC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0 - beq _0813DA90 - b _0813DB9E -_0813DA90: - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813DA9E - b _0813DB9E -_0813DA9E: - ldrb r0, [r7] - bl ListMenu_ProcessInput - adds r5, r0, 0 - ldrb r0, [r7] - ldr r4, _0813DAE0 @ =gUnknown_203F370 + 10 - subs r2, r4, 0x2 - adds r1, r4, 0 - bl ListMenuGetScrollAndRow - ldr r0, _0813DAE4 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0813DAEC - adds r0, r4, 0 - subs r0, 0xA - ldrb r0, [r0, 0x5] - cmp r0, 0x1 - bne _0813DAEC - movs r0, 0x5 - bl PlaySE - ldr r0, _0813DAE8 @ =gSpecialVar_ItemId - mov r1, r8 - strh r1, [r0] - b _0813DB48 - .align 2, 0 -_0813DAD8: .4byte gTasks+0x8 -_0813DADC: .4byte gPaletteFade -_0813DAE0: .4byte gUnknown_203F370 + 10 -_0813DAE4: .4byte gMain -_0813DAE8: .4byte gSpecialVar_ItemId -_0813DAEC: - movs r0, 0x2 - negs r0, r0 - cmp r5, r0 - beq _0813DAFC - adds r0, 0x1 - cmp r5, r0 - bne _0813DB10 - b _0813DB9E -_0813DAFC: - ldr r0, _0813DB0C @ =gUnknown_203F370 - ldrb r0, [r0, 0x4] - cmp r0, 0x5 - beq _0813DB9E - movs r0, 0x5 - bl PlaySE - b _0813DB42 - .align 2, 0 -_0813DB0C: .4byte gUnknown_203F370 -_0813DB10: - movs r0, 0x5 - bl PlaySE - ldr r3, _0813DB30 @ =gUnknown_203F370 - mov r8, r3 - ldrb r0, [r3, 0x4] - cmp r0, 0x5 - bne _0813DB38 - lsls r1, r5, 16 - lsrs r1, 16 - movs r0, 0x5 - bl BagGetItemIdByPocketPosition - ldr r1, _0813DB34 @ =gSpecialVar_ItemId - b _0813DB46 - .align 2, 0 -_0813DB30: .4byte gUnknown_203F370 -_0813DB34: .4byte gSpecialVar_ItemId -_0813DB38: - ldr r0, _0813DB50 @ =gUnknown_203F36C - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r5, r0 - bne _0813DB58 -_0813DB42: - ldr r1, _0813DB54 @ =gSpecialVar_ItemId - movs r0, 0 -_0813DB46: - strh r0, [r1] -_0813DB48: - adds r0, r6, 0 - bl BerryPouch_StartFadeToExitCallback - b _0813DB9E - .align 2, 0 -_0813DB50: .4byte gUnknown_203F36C -_0813DB54: .4byte gSpecialVar_ItemId -_0813DB58: - bl sub_813D684 - movs r0, 0x1 - bl sub_813D594 - ldrb r0, [r7] - movs r1, 0x2 - bl sub_813D4B0 - strh r5, [r7, 0x2] - lsls r4, r5, 16 - lsrs r4, 16 - movs r0, 0x5 - adds r1, r4, 0 - bl BagGetQuantityByPocketPosition - strh r0, [r7, 0x4] - movs r0, 0x5 - adds r1, r4, 0 - bl BagGetItemIdByPocketPosition - ldr r1, _0813DBA8 @ =gSpecialVar_ItemId - strh r0, [r1] - ldr r0, _0813DBAC @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r2, _0813DBB0 @ =gUnknown_8464358 - mov r3, r8 - ldrb r0, [r3, 0x4] - lsls r0, 2 - adds r0, r2 - ldr r0, [r0] - str r0, [r1] -_0813DB9E: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813DBA8: .4byte gSpecialVar_ItemId -_0813DBAC: .4byte gTasks -_0813DBB0: .4byte gUnknown_8464358 - thumb_func_end sub_813DA68 - - thumb_func_start sub_813DBB4 -sub_813DBB4: @ 813DBB4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - bl sub_813D594 - bl sub_813D5BC - ldr r1, _0813DBDC @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0813DBE0 @ =sub_813DA68 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813DBDC: .4byte gTasks -_0813DBE0: .4byte sub_813DA68 - thumb_func_end sub_813DBB4 - - thumb_func_start sub_813DBE4 -sub_813DBE4: @ 813DBE4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813DC10 @ =gTasks+0x8 - adds r7, r1, r0 - ldr r0, _0813DC14 @ =gUnknown_203F370 - ldrb r0, [r0, 0x4] - cmp r0, 0x4 - bne _0813DC24 - ldr r1, _0813DC18 @ =gUnknown_203F384 - ldr r0, _0813DC1C @ =gUnknown_84643B0 - str r0, [r1] - ldr r1, _0813DC20 @ =gUnknown_203F388 - movs r0, 0x3 - b _0813DC86 - .align 2, 0 -_0813DC10: .4byte gTasks+0x8 -_0813DC14: .4byte gUnknown_203F370 -_0813DC18: .4byte gUnknown_203F384 -_0813DC1C: .4byte gUnknown_84643B0 -_0813DC20: .4byte gUnknown_203F388 -_0813DC24: - bl MenuHelpers_LinkSomething - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0813DC38 - bl InUnionRoom - cmp r0, 0x1 - bne _0813DC7C -_0813DC38: - ldr r0, _0813DC54 @ =gSpecialVar_ItemId - ldrh r0, [r0] - bl sub_80BF6A8 - lsls r0, 24 - cmp r0, 0 - bne _0813DC64 - ldr r1, _0813DC58 @ =gUnknown_203F384 - ldr r0, _0813DC5C @ =gUnknown_84643AC - str r0, [r1] - ldr r1, _0813DC60 @ =gUnknown_203F388 - movs r0, 0x1 - b _0813DC86 - .align 2, 0 -_0813DC54: .4byte gSpecialVar_ItemId -_0813DC58: .4byte gUnknown_203F384 -_0813DC5C: .4byte gUnknown_84643AC -_0813DC60: .4byte gUnknown_203F388 -_0813DC64: - ldr r1, _0813DC70 @ =gUnknown_203F384 - ldr r0, _0813DC74 @ =gUnknown_84643A8 - str r0, [r1] - ldr r1, _0813DC78 @ =gUnknown_203F388 - movs r0, 0x2 - b _0813DC86 - .align 2, 0 -_0813DC70: .4byte gUnknown_203F384 -_0813DC74: .4byte gUnknown_84643A8 -_0813DC78: .4byte gUnknown_203F388 -_0813DC7C: - ldr r1, _0813DD58 @ =gUnknown_203F384 - ldr r0, _0813DD5C @ =gUnknown_84643A4 - str r0, [r1] - ldr r1, _0813DD60 @ =gUnknown_203F388 - movs r0, 0x4 -_0813DC86: - strb r0, [r1] - mov r8, r1 - mov r1, r8 - ldrb r0, [r1] - adds r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - bl sub_813EA08 - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - movs r0, 0x2 - movs r1, 0 - bl GetMenuCursorDimensionByFont - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0x2 - movs r1, 0x2 - bl GetFontAttribute - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r4, [sp] - str r0, [sp, 0x4] - mov r1, r8 - ldrb r0, [r1] - str r0, [sp, 0x8] - ldr r0, _0813DD64 @ =gUnknown_846437C - str r0, [sp, 0xC] - ldr r0, _0813DD58 @ =gUnknown_203F384 - ldr r0, [r0] - str r0, [sp, 0x10] - adds r0, r6, 0 - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0x2 - bl AddItemMenuActionTextPrinters - movs r0, 0x2 - movs r1, 0x1 - bl GetFontAttribute - adds r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - mov r1, r8 - ldrb r0, [r1] - str r0, [sp, 0x4] - movs r0, 0 - mov r8, r0 - str r0, [sp, 0x8] - adds r0, r6, 0 - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor - movs r0, 0x6 - bl sub_813EA08 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r1, 0x2 - ldrsh r0, [r7, r1] - ldr r1, _0813DD68 @ =gStringVar1 - bl sub_813D39C - ldr r5, _0813DD6C @ =gStringVar4 - ldr r1, _0813DD70 @ =gOtherText_StrVar1 - adds r0, r5, 0 - bl StringExpandPlaceholders - movs r0, 0x2 - str r0, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - str r0, [sp, 0x8] - mov r0, r8 - str r0, [sp, 0xC] - str r1, [sp, 0x10] - adds r0, r4, 0 - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0 - bl sub_813E9A0 - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813DD58: .4byte gUnknown_203F384 -_0813DD5C: .4byte gUnknown_84643A4 -_0813DD60: .4byte gUnknown_203F388 -_0813DD64: .4byte gUnknown_846437C -_0813DD68: .4byte gStringVar1 -_0813DD6C: .4byte gStringVar4 -_0813DD70: .4byte gOtherText_StrVar1 - thumb_func_end sub_813DBE4 - - thumb_func_start sub_813DD74 -sub_813DD74: @ 813DD74 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_813DBE4 - ldr r1, _0813DD98 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0813DD9C @ =sub_813DDA0 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813DD98: .4byte gTasks -_0813DD9C: .4byte sub_813DDA0 - thumb_func_end sub_813DD74 - thumb_func_start sub_813DDA0 sub_813DDA0: @ 813DDA0 push {r4-r6,lr} diff --git a/baserom.ips b/baserom.ips index 9d0a620e2dcbeb73107eace1984395d1f7a2ca20..5f7a8d538774e4cfe60b9dc3098bec51b2030b67 100644 GIT binary patch delta 127 zcmezLrfS)ns)iQE7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~Eqp=ig>x7L?miIaIC)=~ zBl9^BKNaR^-?*L+i1~q70Eh*FSO|!Pfmj5HMS)lhh{b_e0*EDnSPF=xfmjBJWw&o! IFL#g)00~$(c>n+a delta 203 zcmWm5ISRsH5QgFW$!{E&#AVz!u=E&S!OB7qixeKfCLmZ0cnu4&4TxZ6VW)*hh>8m~ zsq6*64D;|Z#cU$~8~F=SVu~eN5@JhINK%rPjAX^xxr1OlG)A+KY5rvDy_kMze1~_Y z^Nnfxfj84?(kJK2v_=o;7F7?X6WYbk1vTO^m1SC5W3{0yz4QVXa*&4t6oH`xWvDunk_007) + { + gSpecialVar_ItemId = 0; + BerryPouch_StartFadeToExitCallback(taskId); + } + else + { + sub_813D684(); + sub_813D594(1); + sub_813D4B0(data[0], 2); + data[1] = menuInput; + data[2] = BagGetQuantityByPocketPosition(POCKET_BERRY_POUCH, menuInput); + gSpecialVar_ItemId = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, menuInput); + gTasks[taskId].func = gUnknown_8464358[gUnknown_203F370.unk_04]; + } + break; + } + } + } +} + +void sub_813DBB4(u8 taskId) +{ + sub_813D594(0); + sub_813D5BC(); + gTasks[taskId].func = sub_813DA68; +} + +void sub_813DBE4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 windowId; + u8 windowId2; + + if (gUnknown_203F370.unk_04 == 4) + { + gUnknown_203F384 = gUnknown_84643B0; + gUnknown_203F388 = 3; + } + else if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) + { + if (!sub_80BF6A8(gSpecialVar_ItemId)) + { + gUnknown_203F384 = gUnknown_84643AC; + gUnknown_203F388 = 1; + } + else + { + gUnknown_203F384 = gUnknown_84643A8; + gUnknown_203F388 = 2; + } + } + else + { + gUnknown_203F384 = gUnknown_84643A4; + gUnknown_203F388 = 4; + } + windowId = sub_813EA08(gUnknown_203F388 + 9); + AddItemMenuActionTextPrinters(windowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, GetFontAttribute(2, FONTATTR_LETTER_SPACING), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, gUnknown_203F388, gUnknown_846437C, gUnknown_203F384); + Menu_InitCursor(windowId, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, gUnknown_203F388, 0); + windowId2 = sub_813EA08(6); + sub_813D39C(data[1], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); + sub_813E9A0(windowId2, 2, gStringVar4, 0, 2, 1, 2, 0, 1); +} + +void sub_813DD74(u8 taskId) +{ + sub_813DBE4(taskId); + gTasks[taskId].func = sub_813DDA0; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 1ee1f4b5b..c50347082 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1346,19 +1346,6 @@ gUnknown_203B170: @ 203B170 .include "src/dynamic_placeholder_text_util.o" .align 2 .include "src/berry_pouch.o" - -gUnknown_203F384: @ 203F384 - .space 0x4 - -gUnknown_203F388: @ 203F388 - .space 0x4 - -gUnknown_203F38C: @ 203F38C - .space 0x10 - -gUnknown_203F39C: @ 203F39C - .space 0x4 - .align 2 .include "src/slot_machine.o" From e65487716a0afc3c48d712f706783c58cc82676c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 30 Sep 2019 16:59:39 -0400 Subject: [PATCH 07/13] berry_pouch through sub_813E2B8 --- asm/berry_pouch.s | 634 --------------------------- baserom.ips | Bin 2012710 -> 2012689 bytes data/berry_pouch.s | 29 -- data/strings.s | 8 +- graphics/berry_pouch/unk_8E85C1C.pal | 19 + include/party_menu.h | 1 + include/strings.h | 4 + src/berry_pouch.c | 269 +++++++++++- 8 files changed, 290 insertions(+), 674 deletions(-) create mode 100644 graphics/berry_pouch/unk_8E85C1C.pal diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index 5d3db9265..e30e12580 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -5,640 +5,6 @@ .text - thumb_func_start sub_813DDA0 -sub_813DDA0: @ 813DDA0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0813DDFE - bl Menu_ProcessInputNoWrapAround - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _0813DDFE - adds r0, 0x1 - cmp r4, r0 - bne _0813DDE0 - movs r0, 0x5 - bl PlaySE - ldr r0, _0813DDDC @ =gUnknown_846437C - ldr r1, [r0, 0x1C] - adds r0, r5, 0 - bl _call_via_r1 - b _0813DDFE - .align 2, 0 -_0813DDDC: .4byte gUnknown_846437C -_0813DDE0: - movs r0, 0x5 - bl PlaySE - ldr r1, _0813DE04 @ =gUnknown_846437C - ldr r0, _0813DE08 @ =gUnknown_203F384 - ldr r0, [r0] - adds r0, r4 - ldrb r0, [r0] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r1, [r0] - adds r0, r6, 0 - bl _call_via_r1 -_0813DDFE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813DE04: .4byte gUnknown_846437C -_0813DE08: .4byte gUnknown_203F384 - thumb_func_end sub_813DDA0 - - thumb_func_start sub_813DE0C -sub_813DE0C: @ 813DE0C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _0813DE5C @ =gUnknown_203F388 - ldrb r0, [r0] - adds r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - bl sub_813EA98 - movs r0, 0x6 - bl sub_813EA98 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r0, _0813DE60 @ =gUnknown_203F370 - ldrb r0, [r0, 0x4] - cmp r0, 0x4 - bne _0813DE78 - ldr r4, _0813DE64 @ =gSpecialVar_ItemId - ldrh r0, [r4] - bl ItemId_GetBattleFunc - cmp r0, 0 - bne _0813DE68 - adds r0, r5, 0 - bl FieldUseFunc_OakStopsYou - b _0813DEB0 - .align 2, 0 -_0813DE5C: .4byte gUnknown_203F388 -_0813DE60: .4byte gUnknown_203F370 -_0813DE64: .4byte gSpecialVar_ItemId -_0813DE68: - ldrh r0, [r4] - bl ItemId_GetBattleFunc - adds r1, r0, 0 - adds r0, r5, 0 - bl _call_via_r1 - b _0813DEB0 -_0813DE78: - bl CalculatePlayerPartyCount - lsls r0, 24 - cmp r0, 0 - bne _0813DEA0 - ldr r0, _0813DE9C @ =gSpecialVar_ItemId - ldrh r0, [r0] - bl ItemId_GetType - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813DEA0 - adds r0, r5, 0 - bl sub_813E274 - b _0813DEB0 - .align 2, 0 -_0813DE9C: .4byte gSpecialVar_ItemId -_0813DEA0: - ldr r0, _0813DEB8 @ =gSpecialVar_ItemId - ldrh r0, [r0] - bl ItemId_GetFieldFunc - adds r1, r0, 0 - adds r0, r5, 0 - bl _call_via_r1 -_0813DEB0: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813DEB8: .4byte gSpecialVar_ItemId - thumb_func_end sub_813DE0C - - thumb_func_start sub_813DEBC -sub_813DEBC: @ 813DEBC - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r7, r0, 3 - ldr r0, _0813DF24 @ =gTasks+0x8 - mov r8, r0 - adds r5, r7, r0 - ldr r4, _0813DF28 @ =gUnknown_203F388 - ldrb r0, [r4] - adds r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - bl sub_813EB10 - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - movs r0, 0x6 - bl sub_813EB10 - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - ldrb r0, [r4] - adds r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - bl sub_813EA98 - movs r0, 0x6 - bl sub_813EA98 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - strh r0, [r5, 0x10] - movs r1, 0x4 - ldrsh r0, [r5, r1] - cmp r0, 0x1 - bne _0813DF2C - adds r0, r6, 0 - bl sub_813DF54 - b _0813DF42 - .align 2, 0 -_0813DF24: .4byte gTasks+0x8 -_0813DF28: .4byte gUnknown_203F388 -_0813DF2C: - ldr r1, _0813DF4C @ =gUnknown_84163DB - adds r0, r6, 0 - bl sub_813D940 - bl sub_813D614 - mov r0, r8 - subs r0, 0x8 - adds r0, r7, r0 - ldr r1, _0813DF50 @ =sub_813E010 - str r1, [r0] -_0813DF42: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813DF4C: .4byte gUnknown_84163DB -_0813DF50: .4byte sub_813E010 - thumb_func_end sub_813DEBC - - thumb_func_start sub_813DF54 -sub_813DF54: @ 813DF54 - push {r4,r5,lr} - sub sp, 0x14 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - ldr r0, _0813DFB4 @ =gTasks+0x8 - adds r1, r0 - ldr r0, _0813DFB8 @ =gStringVar2 - movs r2, 0x10 - ldrsh r1, [r1, r2] - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r5, _0813DFBC @ =gStringVar4 - ldr r1, _0813DFC0 @ =gUnknown_8416409 - adds r0, r5, 0 - bl StringExpandPlaceholders - movs r0, 0x7 - bl sub_813EA08 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - str r1, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0 - str r1, [sp, 0xC] - str r2, [sp, 0x10] - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0 - bl sub_813E9A0 - ldr r1, _0813DFC4 @ =gUnknown_846436C - adds r0, r4, 0 - bl sub_813EB7C - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813DFB4: .4byte gTasks+0x8 -_0813DFB8: .4byte gStringVar2 -_0813DFBC: .4byte gStringVar4 -_0813DFC0: .4byte gUnknown_8416409 -_0813DFC4: .4byte gUnknown_846436C - thumb_func_end sub_813DF54 - - thumb_func_start sub_813DFC8 -sub_813DFC8: @ 813DFC8 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _0813E00C @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x7 - bl sub_813EA98 - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r4] - movs r1, 0x1 - bl sub_813D4B0 - adds r0, r5, 0 - bl sub_813DBB4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813E00C: .4byte gTasks+0x8 - thumb_func_end sub_813DFC8 - - thumb_func_start sub_813E010 -sub_813E010: @ 813E010 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r6, r5, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0813E044 @ =gTasks+0x8 - adds r4, r0, r1 - adds r0, r4, 0 - adds r0, 0x10 - ldrh r1, [r4, 0x4] - bl AdjustQuantityAccordingToDPadInput - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813E048 - movs r0, 0x10 - ldrsh r1, [r4, r0] - movs r0, 0 - movs r2, 0x3 - bl sub_813D9F8 - b _0813E0D4 - .align 2, 0 -_0813E044: .4byte gTasks+0x8 -_0813E048: - ldr r0, _0813E08C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813E090 - movs r0, 0x5 - bl PlaySE - movs r0, 0x8 - bl sub_813EB10 - lsls r0, 24 - lsrs r0, 24 - bl ClearWindowTilemap - movs r0, 0x8 - bl sub_813EA98 - movs r0, 0 - bl sub_813EA98 - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - bl sub_813D684 - adds r0, r5, 0 - bl sub_813DF54 - b _0813E0D4 - .align 2, 0 -_0813E08C: .4byte gMain -_0813E090: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0813E0D4 - movs r0, 0x5 - bl PlaySE - movs r0, 0x8 - bl sub_813EA98 - movs r0, 0 - bl sub_813EA98 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r4] - movs r1, 0x1 - bl sub_813D4B0 - bl sub_813D684 - adds r0, r6, 0 - bl sub_813DBB4 -_0813E0D4: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_813E010 - - thumb_func_start sub_813E0DC -sub_813E0DC: @ 813E0DC - push {r4-r6,lr} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r6, _0813E14C @ =gTasks+0x8 - adds r5, r4, r6 - movs r0, 0x7 - bl sub_813EA98 - movs r1, 0x2 - ldrsh r0, [r5, r1] - ldr r1, _0813E150 @ =gStringVar1 - bl sub_813D39C - ldr r0, _0813E154 @ =gStringVar2 - movs r2, 0x10 - ldrsh r1, [r5, r2] - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r5, _0813E158 @ =gStringVar4 - ldr r1, _0813E15C @ =gUnknown_84163F4 - adds r0, r5, 0 - bl StringExpandPlaceholders - movs r0, 0x9 - bl sub_813EA08 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x2 - str r1, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - str r1, [sp, 0x8] - movs r1, 0 - str r1, [sp, 0xC] - str r2, [sp, 0x10] - movs r1, 0x2 - adds r2, r5, 0 - movs r3, 0 - bl sub_813E9A0 - subs r6, 0x8 - adds r4, r6 - ldr r0, _0813E160 @ =sub_813E164 - str r0, [r4] - add sp, 0x14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813E14C: .4byte gTasks+0x8 -_0813E150: .4byte gStringVar1 -_0813E154: .4byte gStringVar2 -_0813E158: .4byte gStringVar4 -_0813E15C: .4byte gUnknown_84163F4 -_0813E160: .4byte sub_813E164 - thumb_func_end sub_813E0DC - - thumb_func_start sub_813E164 -sub_813E164: @ 813E164 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - adds r6, r0, 0 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0813E1EC @ =gTasks+0x8 - adds r5, r0, r1 - ldr r0, _0813E1F0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0813E18A - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0813E1E4 -_0813E18A: - movs r0, 0x5 - bl PlaySE - ldr r0, _0813E1F4 @ =gSpecialVar_ItemId - ldrh r0, [r0] - ldrh r1, [r5, 0x10] - bl RemoveBagItem - movs r0, 0x9 - bl sub_813EA98 - ldrb r0, [r5] - ldr r4, _0813E1F8 @ =gUnknown_203F370 + 10 - subs r2, r4, 0x2 - adds r1, r4, 0 - bl DestroyListMenuTask - bl sub_813D8AC - bl sub_813D6F4 - bl sub_813D204 - ldr r0, _0813E1FC @ =gMultiuseListMenuTemplate - subs r4, 0xA - ldrh r1, [r4, 0xA] - ldrh r2, [r4, 0x8] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r5] - movs r1, 0x1 - bl sub_813D4B0 - adds r0, r6, 0 - bl sub_813DBB4 -_0813E1E4: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813E1EC: .4byte gTasks+0x8 -_0813E1F0: .4byte gMain -_0813E1F4: .4byte gSpecialVar_ItemId -_0813E1F8: .4byte gUnknown_203F370 + 10 -_0813E1FC: .4byte gMultiuseListMenuTemplate - thumb_func_end sub_813E164 - - thumb_func_start sub_813E200 -sub_813E200: @ 813E200 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813E244 @ =gUnknown_203F388 - ldrb r0, [r0] - adds r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - bl sub_813EA98 - movs r0, 0x6 - bl sub_813EA98 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - bl CalculatePlayerPartyCount - lsls r0, 24 - cmp r0, 0 - bne _0813E248 - adds r0, r4, 0 - bl sub_813E274 - b _0813E25E - .align 2, 0 -_0813E244: .4byte gUnknown_203F388 -_0813E248: - ldr r0, _0813E264 @ =gUnknown_203F36C - ldr r1, [r0] - ldr r0, _0813E268 @ =sub_8126EDC - str r0, [r1] - ldr r1, _0813E26C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _0813E270 @ =BerryPouch_StartFadeToExitCallback - str r1, [r0] -_0813E25E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813E264: .4byte gUnknown_203F36C -_0813E268: .4byte sub_8126EDC -_0813E26C: .4byte gTasks -_0813E270: .4byte BerryPouch_StartFadeToExitCallback - thumb_func_end sub_813E200 - - thumb_func_start sub_813E274 -sub_813E274: @ 813E274 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0813E288 @ =gText_ThereIsNoPokemon - ldr r3, _0813E28C @ =sub_813E290 - movs r1, 0x2 - bl DisplayItemMessageInBerryPouch - pop {r0} - bx r0 - .align 2, 0 -_0813E288: .4byte gText_ThereIsNoPokemon -_0813E28C: .4byte sub_813E290 - thumb_func_end sub_813E274 - - thumb_func_start sub_813E290 -sub_813E290: @ 813E290 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813E2B4 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813E2AE - movs r0, 0x5 - bl PlaySE - adds r0, r4, 0 - bl sub_813E2B8 -_0813E2AE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813E2B4: .4byte gMain - thumb_func_end sub_813E290 - - thumb_func_start sub_813E2B8 -sub_813E2B8: @ 813E2B8 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r6, 24 - lsrs r6, 24 - lsls r5, r6, 2 - adds r5, r6 - lsls r5, 3 - ldr r0, _0813E314 @ =gTasks+0x8 - adds r5, r0 - movs r0, 0x5 - bl sub_813EACC - ldrb r0, [r5] - ldr r4, _0813E318 @ =gUnknown_203F370 + 10 - subs r2, r4, 0x2 - adds r1, r4, 0 - bl DestroyListMenuTask - bl sub_813D8AC - bl sub_813D6F4 - bl sub_813D204 - ldr r0, _0813E31C @ =gMultiuseListMenuTemplate - subs r4, 0xA - ldrh r1, [r4, 0xA] - ldrh r2, [r4, 0x8] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - strh r0, [r5] - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r5] - movs r1, 0x1 - bl sub_813D4B0 - adds r0, r6, 0 - bl sub_813DBB4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813E314: .4byte gTasks+0x8 -_0813E318: .4byte gUnknown_203F370 + 10 -_0813E31C: .4byte gMultiuseListMenuTemplate - thumb_func_end sub_813E2B8 - thumb_func_start sub_813E320 sub_813E320: @ 813E320 push {r4,lr} diff --git a/baserom.ips b/baserom.ips index 5f7a8d538774e4cfe60b9dc3098bec51b2030b67..1ede5acbe422799011695c8c8ad4771f46193a21 100644 GIT binary patch delta 107 zcmWN=w+((uDIrgTkg2$fk&Qr=7rZ+>g^Lh<$fzJ delta 127 zcmbRErfS)ns)iQE7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~Eqp=ig>x7L?miIaIC)=~ zBl9^BKNaR^4_MC!#QZ=k0K|eoECj^DKr8~pqChML#Nt3K0mPC(ECs~UKr92qvfBgJ I%N=9`0P4mtrvLx| diff --git a/data/berry_pouch.s b/data/berry_pouch.s index 19bf0c3df..68d9cd5a3 100644 --- a/data/berry_pouch.s +++ b/data/berry_pouch.s @@ -3,35 +3,6 @@ .section .rodata .align 2 -gUnknown_846436C:: @ 846436C - .incbin "baserom.gba", 0x46436C, 0x8 - -gUnknown_8464374:: @ 8464374 - .incbin "baserom.gba", 0x464374, 0x8 - -gUnknown_846437C:: @ 846437C - .4byte gOtherText_Use, sub_813DE0C - .4byte gOtherText_Toss, sub_813DEBC - .4byte gOtherText_Give, sub_813E200 - .4byte gOtherText_Exit, sub_813E320 - .4byte gString_Dummy, NULL - -gUnknown_84643A4:: @ 84643A4 - .byte 0, 2, 1, 3 - -gUnknown_84643A8:: @ 84643A8 - .byte 2, 3, 4, 4 - -gUnknown_84643AC:: @ 84643AC - .byte 3, 4, 4, 4 - -gUnknown_84643B0:: @ 84643B0 - .byte 0, 1, 3, 4 - -gUnknown_84643B4:: @ 84643B4 - .string " $" - - .align 2 gUnknown_84643B8:: @ 84643B8 .incbin "baserom.gba", 0x4643B8, 0x20 diff --git a/data/strings.s b/data/strings.s index bb12c0ad3..5f1616eaf 100644 --- a/data/strings.s +++ b/data/strings.s @@ -559,19 +559,19 @@ gUnknown_8416374:: @ 8416374 .string "The {STR_VAR_1} can't be held\nhere.$" gUnknown_841638F:: @ 841638F - .string "Deposit how many\n{STR_VAR_1}シsス?$" + .string "Deposit how many\n{STR_VAR_1}(s)?$" gUnknown_84163A7:: @ 84163A7 - .string "Deposited {STR_VAR_2}\n{STR_VAR_1}シsス.$" + .string "Deposited {STR_VAR_2}\n{STR_VAR_1}(s).$" gUnknown_84163BB:: @ 84163BB .string "There's no room to\nstore items.$" gUnknown_84163DB:: @ 84163DB - .string "Toss out how many\n{STR_VAR_1}シsス?$" + .string "Toss out how many\n{STR_VAR_1}(s)?$" gUnknown_84163F4:: @ 84163F4 - .string "Threw away {STR_VAR_2}\n{STR_VAR_1}シsス.$" + .string "Threw away {STR_VAR_2}\n{STR_VAR_1}(s).$" gUnknown_8416409:: @ 8416409 .string "Throw away {STR_VAR_2} of\nthis item?$" diff --git a/graphics/berry_pouch/unk_8E85C1C.pal b/graphics/berry_pouch/unk_8E85C1C.pal new file mode 100644 index 000000000..87d0fc7fb --- /dev/null +++ b/graphics/berry_pouch/unk_8E85C1C.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +222 222 90 +98 115 123 +255 205 156 +230 189 139 +213 164 115 +189 139 90 +156 82 0 +115 57 0 +197 205 213 +246 115 0 +222 57 0 +230 148 98 +255 172 123 +222 230 230 +49 57 57 +255 255 255 diff --git a/include/party_menu.h b/include/party_menu.h index cd2a5bc37..bea5dcdde 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -81,5 +81,6 @@ void sub_8127DA8(u8 battlerId, u8 multiplayerFlag); void OpenPartyMenuInBattle(u8 arg); void sub_8127EC4(u8 battlerId, u8 unk, u8 arrayIndex); bool8 IsMultiBattle(void); +void sub_8126EDC(void); #endif // GUARD_PARTY_MENU_H diff --git a/include/strings.h b/include/strings.h index c0863dffb..e60344731 100644 --- a/include/strings.h +++ b/include/strings.h @@ -94,6 +94,7 @@ extern const u8 gText_Pokemon[]; extern const u8 gText_PkmnFainted3[]; extern const u8 gOtherText_Use[]; +extern const u8 gOtherText_Toss[]; extern const u8 gOtherText_Give[]; extern const u8 gOtherText_Exit[]; extern const u8 gText_ThreeHyphens[]; @@ -316,6 +317,9 @@ extern const u8 gCreditsString_Graphic_Designer[]; extern const u8 gCreditsString_Akira_Kinashi[]; // berry_pouch +extern const u8 gUnknown_84163DB[]; +extern const u8 gUnknown_84163F4[]; +extern const u8 gUnknown_8416409[]; extern const u8 gUnknown_841670A[]; extern const u8 gUnknown_8416716[]; diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 31657a381..8e394be37 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -15,6 +15,8 @@ #include "graphics.h" #include "berry.h" #include "item.h" +#include "item_use.h" +#include "party_menu.h" #include "strings.h" #include "string_util.h" #include "sound.h" @@ -47,6 +49,15 @@ struct BerryPouchStruct_203F370 u16 unk_0A; }; +enum +{ + BP_ACTION_USE = 0, + BP_ACTION_TOSS, + BP_ACTION_GIVE, + BP_ACTION_EXIT, + BP_ACTION_DUMMY +}; + EWRAM_DATA struct BerryPouchStruct_203F36C *gUnknown_203F36C = NULL; EWRAM_DATA struct BerryPouchStruct_203F370 gUnknown_203F370 = {}; EWRAM_DATA struct ListMenuItem *gUnknown_203F37C = NULL; @@ -81,17 +92,29 @@ void sub_813DD74(u8 taskId); void sub_813DDA0(u8 taskId); void sub_813DE0C(u8 taskId); void sub_813DEBC(u8 taskId); +void sub_813DF54(u8 taskId); +void sub_813DFC8(u8 taskId); +void sub_813E010(u8 taskId); +void sub_813E0DC(u8 taskId); +void sub_813E164(u8 taskId); void sub_813E200(u8 taskId); +void sub_813E274(u8 taskId); +void sub_813E290(u8 taskId); void sub_813E320(u8 taskId); void sub_813E37C(u8 taskId); void sub_813E3FC(u8 taskId); void sub_813E428(u8 taskId); -void sub_813EC28(void); +void sub_813E568(u8 taskId); +void sub_813E768(u8 taskId); void sub_813E910(void); void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); u8 sub_813EA08(u8); +void sub_813EA98(u8); +void sub_813EACC(u8); u8 sub_813EB10(u8); +void sub_813EB7C(u8 taskId, const struct YesNoFuncTable * ptrs); void sub_813EC08(void); +void sub_813EC28(void); static const struct BgTemplate gUnknown_846434C[] = { { @@ -129,12 +152,54 @@ const TaskFunc gUnknown_8464358[] = { sub_813DD74 }; -extern const struct MenuAction gUnknown_846437C[]; -extern const u8 gUnknown_84643A4[]; -extern const u8 gUnknown_84643A8[]; -extern const u8 gUnknown_84643AC[]; -extern const u8 gUnknown_84643B0[]; -extern const u8 gUnknown_84643B4[]; +const struct YesNoFuncTable gUnknown_846436C = { + .yesFunc = sub_813E0DC, + .noFunc = sub_813DFC8 +}; + +const struct YesNoFuncTable gUnknown_8464374 = { + .yesFunc = sub_813E768, + .noFunc = sub_813E568 +}; + +const struct MenuAction gUnknown_846437C[] = { + {gOtherText_Use, sub_813DE0C}, + {gOtherText_Toss, sub_813DEBC}, + {gOtherText_Give, sub_813E200}, + {gOtherText_Exit, sub_813E320}, + {gString_Dummy, NULL} +}; + +const u8 gUnknown_84643A4[] = { + BP_ACTION_USE, + BP_ACTION_GIVE, + BP_ACTION_TOSS, + BP_ACTION_EXIT +}; + +const u8 gUnknown_84643A8[] = { + BP_ACTION_GIVE, + BP_ACTION_EXIT, + BP_ACTION_DUMMY, + BP_ACTION_DUMMY +}; + +const u8 gUnknown_84643AC[] = { + BP_ACTION_EXIT, + BP_ACTION_DUMMY, + BP_ACTION_DUMMY, + BP_ACTION_DUMMY +}; + +const u8 gUnknown_84643B0[] = { + BP_ACTION_USE, + BP_ACTION_TOSS, + BP_ACTION_EXIT, + BP_ACTION_DUMMY +}; + +const u8 gUnknown_84643B4[] = _(" "); + extern const struct CompressedSpriteSheet gUnknown_84644A8; extern const struct CompressedSpritePalette gUnknown_84644B0; @@ -765,3 +830,193 @@ void sub_813DD74(u8 taskId) sub_813DBE4(taskId); gTasks[taskId].func = sub_813DDA0; } + +void sub_813DDA0(u8 taskId) +{ + s8 input; + if (sub_80BF72C() != TRUE) + { + input = Menu_ProcessInputNoWrapAround(); + switch (input) + { + case -2: + break; + case -1: + PlaySE(SE_SELECT); + gUnknown_846437C[BP_ACTION_EXIT].func.void_u8(taskId); + break; + default: + PlaySE(SE_SELECT); + gUnknown_846437C[gUnknown_203F384[input]].func.void_u8(taskId); + break; + } + } +} + +void sub_813DE0C(u8 taskId) +{ + sub_813EA98(gUnknown_203F388 + 9); + sub_813EA98(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + if (gUnknown_203F370.unk_04 == 4) + { + if (ItemId_GetBattleFunc(gSpecialVar_ItemId) == NULL) + FieldUseFunc_OakStopsYou(taskId); + else + ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); + } + else if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) + sub_813E274(taskId); + else + ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); +} + +void sub_813DEBC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + ClearWindowTilemap(sub_813EB10(gUnknown_203F388 + 9)); + ClearWindowTilemap(sub_813EB10(6)); + sub_813EA98(gUnknown_203F388 + 9); + sub_813EA98(6); + PutWindowTilemap(0); + data[8] = 1; + if (data[2] == 1) + sub_813DF54(taskId); + else + { + sub_813D940(taskId, gUnknown_84163DB); + sub_813D614(); + gTasks[taskId].func = sub_813E010; + } +} + +void sub_813DF54(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gUnknown_8416409); + sub_813E9A0(sub_813EA08(7), 2, gStringVar4, 0, 2, 1, 2, 0, 1); + sub_813EB7C(taskId, &gUnknown_846436C); +} + +void sub_813DFC8(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + sub_813EA98(7); + PutWindowTilemap(1); + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + sub_813D4B0(data[0], 1); + sub_813DBB4(taskId); +} + +void sub_813E010(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + sub_813D9F8(0, data[8], 3); + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + ClearWindowTilemap(sub_813EB10(8)); + sub_813EA98(8); + sub_813EA98(0); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + sub_813D684(); + sub_813DF54(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_813EA98(8); + sub_813EA98(0); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + sub_813D4B0(data[0], 1); + sub_813D684(); + sub_813DBB4(taskId); + } +} + +void sub_813E0DC(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + sub_813EA98(7); + sub_813D39C(data[1], gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gUnknown_84163F4); + sub_813E9A0(sub_813EA08(9), 2, gStringVar4, 0, 2, 1, 2, 0, 1); + gTasks[taskId].func = sub_813E164; +} + +void sub_813E164(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + RemoveBagItem(gSpecialVar_ItemId, data[8]); + sub_813EA98(9); + DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); + sub_813D8AC(); + sub_813D6F4(); + sub_813D204(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + sub_813D4B0(data[0], 1); + sub_813DBB4(taskId); + } +} + +void sub_813E200(u8 taskId) +{ + sub_813EA98(gUnknown_203F388 + 9); + sub_813EA98(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + if (CalculatePlayerPartyCount() == 0) + sub_813E274(taskId); + else + { + gUnknown_203F36C->unk_000 = sub_8126EDC; + gTasks[taskId].func = BerryPouch_StartFadeToExitCallback; + } +} + +void sub_813E274(u8 taskId) +{ + DisplayItemMessageInBerryPouch(taskId, 2, gText_ThereIsNoPokemon, sub_813E290); +} + +void sub_813E290(u8 taskId) +{ + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_813E2B8(taskId); + } +} + +void sub_813E2B8(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + sub_813EACC(5); + DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); + sub_813D8AC(); + sub_813D6F4(); + sub_813D204(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); + ScheduleBgCopyTilemapToVram(0); + sub_813D4B0(data[0], 1); + sub_813DBB4(taskId); +} From 64362d3040b3defb722bf72203fda64b96da1e06 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 30 Sep 2019 17:33:57 -0400 Subject: [PATCH 08/13] Berry Pouch rodata --- asm/berry_pouch.s | 12 +-- baserom.ips | Bin 2012689 -> 2012420 bytes data/berry_pouch.s | 31 ------- data/itemfinder.s | 4 + include/graphics.h | 4 +- ld_script.txt | 1 - src/berry_pouch.c | 197 ++++++++++++++++++++++++++++++++++++++++++++- 7 files changed, 207 insertions(+), 42 deletions(-) delete mode 100644 data/berry_pouch.s diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index e30e12580..f86bff256 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -969,7 +969,7 @@ DisplayItemMessageInBerryPouch: @ 813EB20 ldrb r0, [r4, 0x5] cmp r0, 0xFF bne _0813EB44 - ldr r0, _0813EB78 @ =gUnknown_8464400 + ldr r0, _0813EB78 @ =gUnknown_84643D8 + 0x28 bl AddWindow strb r0, [r4, 0x5] _0813EB44: @@ -996,7 +996,7 @@ _0813EB44: bx r0 .align 2, 0 _0813EB74: .4byte gUnknown_203F38C -_0813EB78: .4byte gUnknown_8464400 +_0813EB78: .4byte gUnknown_84643D8 + 0x28 thumb_func_end DisplayItemMessageInBerryPouch thumb_func_start sub_813EB7C @@ -1006,7 +1006,7 @@ sub_813EB7C: @ 813EB7C adds r3, r1, 0 lsls r0, 24 lsrs r0, 24 - ldr r1, _0813EBA4 @ =gUnknown_84643F0 + ldr r1, _0813EBA4 @ =gUnknown_84643D8 + 0x18 movs r2, 0x2 str r2, [sp] movs r2, 0x1 @@ -1021,7 +1021,7 @@ sub_813EB7C: @ 813EB7C pop {r0} bx r0 .align 2, 0 -_0813EBA4: .4byte gUnknown_84643F0 +_0813EBA4: .4byte gUnknown_84643D8 + 0x18 thumb_func_end sub_813EB7C thumb_func_start sub_813EBA8 @@ -1031,7 +1031,7 @@ sub_813EBA8: @ 813EBA8 adds r3, r1, 0 lsls r0, 24 lsrs r0, 24 - ldr r1, _0813EBD0 @ =gUnknown_84643F8 + ldr r1, _0813EBD0 @ =gUnknown_84643D8 + 0x20 movs r2, 0x2 str r2, [sp] movs r2, 0x1 @@ -1046,7 +1046,7 @@ sub_813EBA8: @ 813EBA8 pop {r0} bx r0 .align 2, 0 -_0813EBD0: .4byte gUnknown_84643F8 +_0813EBD0: .4byte gUnknown_84643D8 + 0x20 thumb_func_end sub_813EBA8 thumb_func_start sub_813EBD4 diff --git a/baserom.ips b/baserom.ips index 1ede5acbe422799011695c8c8ad4771f46193a21..e4c815c03307d39ddd1f569581da4eeeae830b06 100644 GIT binary patch delta 117 zcmbRErmE#tRYMD73sVbo3rh=Y3tJ0&3r7oQ3s(zw3r`F07QVpsEG`$AO{P1#Gl{oX yZr}rAejpYAVnHAl0%Bnx76D>WAQl5+kU9wla>ooP@+lcr+=fIRYXI4Gj_{r3;W!Bb3GzBc-MSIvQ#>NTlQn z9D)W>aDs$cJFN8Ww=?>8cjSBV@UyrV6cSI2_!3Ack;JkiiC9VBvWvPpUBNFT*vS@O&EZ- z+4a_>{r}vx-n~<1)0KB#LJ5~WtxETzt`~KB3(@1r85PTUohhv3N=NA`J!MzvD+9&l ThRR48D|^bma_~N{51;%$t9eXq diff --git a/data/berry_pouch.s b/data/berry_pouch.s deleted file mode 100644 index 68d9cd5a3..000000000 --- a/data/berry_pouch.s +++ /dev/null @@ -1,31 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_84643B8:: @ 84643B8 - .incbin "baserom.gba", 0x4643B8, 0x20 - -gUnknown_84643D8:: @ 84643D8 - .incbin "baserom.gba", 0x4643D8, 0x18 - -gUnknown_84643F0:: @ 84643F0 - .incbin "baserom.gba", 0x4643F0, 0x8 - -gUnknown_84643F8:: @ 84643F8 - .incbin "baserom.gba", 0x4643F8, 0x8 - -gUnknown_8464400:: @ 8464400 - .incbin "baserom.gba", 0x464400, 0x48 - -gUnknown_8464448:: @ 8464448 - .incbin "baserom.gba", 0x464448, 0x60 - -gUnknown_84644A8:: @ 84644A8 - obj_tiles gUnknown_8E8560C, 0x800, 100 - -gUnknown_84644B0:: @ 84644B0 - obj_pal gUnknown_8E85C1C, 100 - -gUnknown_84644B8:: @ 84644B8 - .incbin "baserom.gba", 0x4644B8, 0x32C diff --git a/data/itemfinder.s b/data/itemfinder.s index 3a955deeb..88e9910f4 100644 --- a/data/itemfinder.s +++ b/data/itemfinder.s @@ -1,5 +1,9 @@ .section .rodata .align 2 + +gUnknown_84644D0:: @ 84644D0 + .incbin "baserom.gba", 0x4644D0, 0x314 + gUnknown_84647E4:: @ 84647E4 .incbin "baserom.gba", 0x4647E4, 0x18 diff --git a/include/graphics.h b/include/graphics.h index 9d4bdf177..ce671246e 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -999,11 +999,11 @@ extern const u8 gCreditsAllRightsReservedGfxTiles[]; extern const u8 gCreditsAllRightsReservedGfxMap[]; // berry_pouch -extern const u8 gUnknown_8E8560C[]; +extern const u32 gUnknown_8E8560C[]; extern const u8 gUnknown_8E859D0[]; extern const u8 gUnknown_8E85BA4[]; extern const u8 gUnknown_8E85BF4[]; -extern const u8 gUnknown_8E85C1C[]; +extern const u32 gUnknown_8E85C1C[]; extern const u8 gUnknown_8E85C44[]; #endif //GUARD_GRAPHICS_H diff --git a/ld_script.txt b/ld_script.txt index 7e28cc850..a7ab32150 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -468,7 +468,6 @@ SECTIONS { data/wild_pokemon_area.o(.rodata); src/dynamic_placeholder_text_util.o(.rodata); src/berry_pouch.o(.rodata); - data/berry_pouch.o(.rodata); data/itemfinder.o(.rodata); src/buy_menu_helpers.o(.rodata); src/slot_machine.o(.rodata); diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 8e394be37..ff4652ee2 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -200,8 +200,201 @@ const u8 gUnknown_84643B0[] = { const u8 gUnknown_84643B4[] = _(" "); -extern const struct CompressedSpriteSheet gUnknown_84644A8; -extern const struct CompressedSpritePalette gUnknown_84644B0; +const struct WindowTemplate gUnknown_84643B8[] = { + { + .bg = 0, + .tilemapLeft = 11, + .tilemapTop = 1, + .width = 18, + .height = 14, + .paletteNum = 15, + .baseBlock = 0x027 + }, { + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 16, + .width = 25, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x123 + }, { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 9, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x187 + }, DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate gUnknown_84643D8[] = { + { + .bg = 0x02, + .tilemapLeft = 0x18, + .tilemapTop = 0x0f, + .width = 0x05, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x1d1 + }, { + .bg = 0x02, + .tilemapLeft = 0x11, + .tilemapTop = 0x09, + .width = 0x0c, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x1d1 + }, { + .bg = 0x02, + .tilemapLeft = 0x01, + .tilemapTop = 0x01, + .width = 0x08, + .height = 0x03, + .paletteNum = 0x0c, + .baseBlock = 0x201 + }, { + .bg = 0x02, + .tilemapLeft = 0x17, + .tilemapTop = 0x0f, + .width = 0x06, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x219 + }, { + .bg = 0x02, + .tilemapLeft = 0x15, + .tilemapTop = 0x09, + .width = 0x06, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x219 + }, { + .bg = 0x02, + .tilemapLeft = 0x02, + .tilemapTop = 0x0f, + .width = 0x1a, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x231 + }, { + .bg = 0x02, + .tilemapLeft = 0x06, + .tilemapTop = 0x0f, + .width = 0x0e, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x231 + }, { + .bg = 0x02, + .tilemapLeft = 0x06, + .tilemapTop = 0x0f, + .width = 0x0f, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x269 + }, { + .bg = 0x02, + .tilemapLeft = 0x06, + .tilemapTop = 0x0f, + .width = 0x10, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x2a5 + }, { + .bg = 0x02, + .tilemapLeft = 0x06, + .tilemapTop = 0x0f, + .width = 0x17, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x2e5 + }, { + .bg = 0x02, + .tilemapLeft = 0x16, + .tilemapTop = 0x11, + .width = 0x07, + .height = 0x02, + .paletteNum = 0x0f, + .baseBlock = 0x199 + }, { + .bg = 0x02, + .tilemapLeft = 0x16, + .tilemapTop = 0x0f, + .width = 0x07, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x199 + }, { + .bg = 0x02, + .tilemapLeft = 0x16, + .tilemapTop = 0x0d, + .width = 0x07, + .height = 0x06, + .paletteNum = 0x0f, + .baseBlock = 0x199 + }, { + .bg = 0x02, + .tilemapLeft = 0x16, + .tilemapTop = 0x0b, + .width = 0x07, + .height = 0x08, + .paletteNum = 0x0f, + .baseBlock = 0x199 + } +}; + +const u8 gUnknown_8464448[][3] = { + { 0, 1, 2 }, + { 0, 2, 3 }, + { 0, 3, 2 } +}; + +const struct OamData gOamData_8464454 = { + .affineMode = ST_OAM_AFFINE_NORMAL, + .shape = ST_OAM_SQUARE, + .size = ST_OAM_SIZE_3, + .priority = 1 +}; + +const union AnimCmd gSpriteAnims_846445C[] = { + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_8464464[] = { + gSpriteAnims_846445C +}; + +const union AffineAnimCmd gSpriteAffineAnims_8464468[] = { + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnims_8464478[] = { + 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_84644A0[] = { + gSpriteAffineAnims_8464468, + gSpriteAffineAnims_8464478 +}; + +const struct CompressedSpriteSheet gUnknown_84644A8 = { + gUnknown_8E8560C, 0x800, 100 +}; + +const struct CompressedSpritePalette gUnknown_84644B0 = { + gUnknown_8E85C1C, 100 +}; + +const struct SpriteTemplate gUnknown_84644B8 = { + 100, 100, &gOamData_8464454, gSpriteAnimTable_8464464, NULL, gSpriteAffineAnimTable_84644A0, SpriteCallbackDummy +}; void InitBerryPouch(u8 a0, void (*savedCallback)(void), u8 a2) { From 89be71dcb846b1d1eded569db6dd6709cc42201f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 30 Sep 2019 18:06:49 -0400 Subject: [PATCH 09/13] berry_pouch through sub_813E8D4 --- asm/berry_pouch.s | 684 ---------------------------------------------- include/item.h | 7 +- include/strings.h | 1 + src/berry_pouch.c | 191 +++++++++++++ 4 files changed, 195 insertions(+), 688 deletions(-) diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s index f86bff256..82ce14f9d 100644 --- a/asm/berry_pouch.s +++ b/asm/berry_pouch.s @@ -5,690 +5,6 @@ .text - thumb_func_start sub_813E320 -sub_813E320: @ 813E320 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813E374 @ =gUnknown_203F388 - ldrb r0, [r0] - adds r0, 0x9 - lsls r0, 24 - lsrs r0, 24 - bl sub_813EA98 - movs r0, 0x6 - bl sub_813EA98 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r1, _0813E378 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0, 0x8] - movs r1, 0x1 - bl sub_813D4B0 - adds r0, r4, 0 - bl sub_813DBB4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813E374: .4byte gUnknown_203F388 -_0813E378: .4byte gTasks - thumb_func_end sub_813E320 - - thumb_func_start sub_813E37C -sub_813E37C: @ 813E37C - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r6, r0, 3 - ldr r7, _0813E3C4 @ =gTasks+0x8 - adds r0, r6, r7 - ldrh r1, [r0, 0x2] - movs r0, 0x5 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - bl sub_80BF6A8 - lsls r0, 24 - cmp r0, 0 - bne _0813E3D8 - ldr r1, _0813E3C8 @ =gStringVar1 - adds r0, r4, 0 - bl CopyItemName - ldr r4, _0813E3CC @ =gStringVar4 - ldr r1, _0813E3D0 @ =gUnknown_8416374 - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r3, _0813E3D4 @ =sub_813E290 - adds r0, r5, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl DisplayItemMessageInBerryPouch - b _0813E3EA - .align 2, 0 -_0813E3C4: .4byte gTasks+0x8 -_0813E3C8: .4byte gStringVar1 -_0813E3CC: .4byte gStringVar4 -_0813E3D0: .4byte gUnknown_8416374 -_0813E3D4: .4byte sub_813E290 -_0813E3D8: - ldr r0, _0813E3F0 @ =gUnknown_203F36C - ldr r1, [r0] - ldr r0, _0813E3F4 @ =c2_8123744 - str r0, [r1] - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0813E3F8 @ =BerryPouch_StartFadeToExitCallback - str r1, [r0] -_0813E3EA: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813E3F0: .4byte gUnknown_203F36C -_0813E3F4: .4byte c2_8123744 -_0813E3F8: .4byte BerryPouch_StartFadeToExitCallback - thumb_func_end sub_813E37C - - thumb_func_start sub_813E3FC -sub_813E3FC: @ 813E3FC - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813E418 @ =gUnknown_203F36C - ldr r2, [r1] - ldr r1, _0813E41C @ =sub_808CE60 - str r1, [r2] - ldr r2, _0813E420 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _0813E424 @ =BerryPouch_StartFadeToExitCallback - str r0, [r1] - bx lr - .align 2, 0 -_0813E418: .4byte gUnknown_203F36C -_0813E41C: .4byte sub_808CE60 -_0813E420: .4byte gTasks -_0813E424: .4byte BerryPouch_StartFadeToExitCallback - thumb_func_end sub_813E3FC - - thumb_func_start sub_813E428 -sub_813E428: @ 813E428 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, r5, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0813E470 @ =gTasks+0x8 - adds r4, r0, r1 - ldr r6, _0813E474 @ =gSpecialVar_ItemId - ldrh r0, [r6] - bl itemid_get_market_price - lsls r0, 16 - cmp r0, 0 - bne _0813E488 - ldrh r0, [r6] - ldr r1, _0813E478 @ =gStringVar1 - bl CopyItemName - ldr r4, _0813E47C @ =gStringVar4 - ldr r1, _0813E480 @ =gText_OhNoICantBuyThat - adds r0, r4, 0 - bl StringExpandPlaceholders - bl sub_80BF8E4 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0813E484 @ =sub_813E2B8 - adds r0, r5, 0 - adds r2, r4, 0 - bl DisplayItemMessageInBerryPouch - b _0813E4CE - .align 2, 0 -_0813E470: .4byte gTasks+0x8 -_0813E474: .4byte gSpecialVar_ItemId -_0813E478: .4byte gStringVar1 -_0813E47C: .4byte gStringVar4 -_0813E480: .4byte gText_OhNoICantBuyThat -_0813E484: .4byte sub_813E2B8 -_0813E488: - movs r0, 0x1 - strh r0, [r4, 0x10] - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _0813E4A0 - bl sub_813EBD4 - adds r0, r5, 0 - bl sub_813E4E4 - b _0813E4CE -_0813E4A0: - cmp r0, 0x63 - ble _0813E4A8 - movs r0, 0x63 - strh r0, [r4, 0x4] -_0813E4A8: - ldrh r0, [r6] - ldr r1, _0813E4D4 @ =gStringVar1 - bl CopyItemName - ldr r4, _0813E4D8 @ =gStringVar4 - ldr r1, _0813E4DC @ =gText_HowManyWouldYouLikeToSell - adds r0, r4, 0 - bl StringExpandPlaceholders - bl sub_80BF8E4 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0813E4E0 @ =sub_813E5B8 - adds r0, r7, 0 - adds r2, r4, 0 - bl DisplayItemMessageInBerryPouch -_0813E4CE: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813E4D4: .4byte gStringVar1 -_0813E4D8: .4byte gStringVar4 -_0813E4DC: .4byte gText_HowManyWouldYouLikeToSell -_0813E4E0: .4byte sub_813E5B8 - thumb_func_end sub_813E428 - - thumb_func_start sub_813E4E4 -sub_813E4E4: @ 813E4E4 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _0813E540 @ =gTasks+0x8 - adds r4, r0 - ldr r6, _0813E544 @ =gStringVar3 - ldrh r1, [r4, 0x2] - movs r0, 0x5 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - movs r2, 0x10 - ldrsh r1, [r4, r2] - muls r1, r0 - adds r0, r6, 0 - movs r2, 0 - movs r3, 0x6 - bl ConvertIntToDecimalStringN - ldr r4, _0813E548 @ =gStringVar4 - ldr r1, _0813E54C @ =gText_ICanPayThisMuch_WouldThatBeOkay - adds r0, r4, 0 - bl StringExpandPlaceholders - bl sub_80BF8E4 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0813E550 @ =sub_813E554 - adds r0, r5, 0 - adds r2, r4, 0 - bl DisplayItemMessageInBerryPouch - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813E540: .4byte gTasks+0x8 -_0813E544: .4byte gStringVar3 -_0813E548: .4byte gStringVar4 -_0813E54C: .4byte gText_ICanPayThisMuch_WouldThatBeOkay -_0813E550: .4byte sub_813E554 - thumb_func_end sub_813E4E4 - - thumb_func_start sub_813E554 -sub_813E554: @ 813E554 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813E564 @ =gUnknown_8464374 - bl sub_813EBA8 - pop {r0} - bx r0 - .align 2, 0 -_0813E564: .4byte gUnknown_8464374 - thumb_func_end sub_813E554 - - thumb_func_start sub_813E568 -sub_813E568: @ 813E568 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _0813E5B4 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0x2 - bl sub_813EA98 - movs r0, 0x5 - bl sub_813EACC - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldrb r0, [r4] - movs r1, 0x1 - bl sub_813D4B0 - adds r0, r5, 0 - bl sub_813DBB4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813E5B4: .4byte gTasks+0x8 - thumb_func_end sub_813E568 - - thumb_func_start sub_813E5B8 -sub_813E5B8: @ 813E5B8 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x14 - lsls r0, 24 - lsrs r0, 24 - lsls r5, r0, 2 - adds r5, r0 - lsls r5, 3 - ldr r6, _0813E654 @ =gTasks+0x8 - adds r0, r5, r6 - mov r9, r0 - movs r0, 0x1 - bl sub_813EA08 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813E658 @ =gStringVar1 - movs r1, 0x1 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r2, _0813E65C @ =gStringVar4 - mov r8, r2 - ldr r1, _0813E660 @ =gText_TimesStrVar1 - mov r0, r8 - bl StringExpandPlaceholders - movs r0, 0xA - str r0, [sp] - movs r1, 0x1 - str r1, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0xFF - str r0, [sp, 0xC] - str r1, [sp, 0x10] - adds r0, r4, 0 - movs r1, 0 - mov r2, r8 - movs r3, 0x4 - bl sub_813E9A0 - mov r3, r9 - ldrh r1, [r3, 0x2] - movs r0, 0x5 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - mov r2, r9 - movs r3, 0x10 - ldrsh r1, [r2, r3] - muls r0, r1 - bl sub_813E668 - bl sub_813EBD4 - bl sub_813D64C - subs r6, 0x8 - adds r5, r6 - ldr r0, _0813E664 @ =sub_813E690 - str r0, [r5] - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813E654: .4byte gTasks+0x8 -_0813E658: .4byte gStringVar1 -_0813E65C: .4byte gStringVar4 -_0813E660: .4byte gText_TimesStrVar1 -_0813E664: .4byte sub_813E690 - thumb_func_end sub_813E5B8 - - thumb_func_start sub_813E668 -sub_813E668: @ 813E668 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - movs r0, 0x1 - bl sub_813EB10 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - str r1, [sp] - movs r1, 0x38 - movs r2, 0xA - adds r3, r4, 0 - bl PrintMoneyAmount - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_813E668 - - thumb_func_start sub_813E690 -sub_813E690: @ 813E690 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r6, r4, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, _0813E6E0 @ =gTasks+0x8 - adds r5, r0, r1 - adds r0, r5, 0 - adds r0, 0x10 - ldrh r1, [r5, 0x4] - bl AdjustQuantityAccordingToDPadInput - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813E6E4 - movs r0, 0x10 - ldrsh r1, [r5, r0] - movs r0, 0x1 - movs r2, 0x2 - bl sub_813D9F8 - ldrh r1, [r5, 0x2] - movs r0, 0x5 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - movs r2, 0x10 - ldrsh r1, [r5, r2] - muls r0, r1 - bl sub_813E668 - b _0813E762 - .align 2, 0 -_0813E6E0: .4byte gTasks+0x8 -_0813E6E4: - ldr r0, _0813E714 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0813E718 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl sub_813EA98 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl sub_813D684 - adds r0, r4, 0 - bl sub_813E4E4 - b _0813E762 - .align 2, 0 -_0813E714: .4byte gMain -_0813E718: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0813E762 - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl sub_813EA98 - movs r0, 0x2 - bl sub_813EA98 - movs r0, 0x5 - bl sub_813EACC - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - bl sub_813D684 - ldrb r0, [r5] - movs r1, 0x1 - bl sub_813D4B0 - adds r0, r6, 0 - bl sub_813DBB4 -_0813E762: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_813E690 - - thumb_func_start sub_813E768 -sub_813E768: @ 813E768 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - ldr r0, _0813E7D4 @ =gTasks+0x8 - adds r4, r0 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - ldr r0, _0813E7D8 @ =gSpecialVar_ItemId - ldrh r0, [r0] - ldr r1, _0813E7DC @ =gStringVar1 - bl CopyItemName - ldr r6, _0813E7E0 @ =gStringVar3 - ldrh r1, [r4, 0x2] - movs r0, 0x5 - bl BagGetItemIdByPocketPosition - lsls r0, 16 - lsrs r0, 16 - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - movs r2, 0x10 - ldrsh r1, [r4, r2] - muls r1, r0 - adds r0, r6, 0 - movs r2, 0 - movs r3, 0x6 - bl ConvertIntToDecimalStringN - ldr r4, _0813E7E4 @ =gStringVar4 - ldr r1, _0813E7E8 @ =gText_TurnedOverItemsWorthYen - adds r0, r4, 0 - bl StringExpandPlaceholders - ldr r3, _0813E7EC @ =sub_813E7F0 - adds r0, r5, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl DisplayItemMessageInBerryPouch - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0813E7D4: .4byte gTasks+0x8 -_0813E7D8: .4byte gSpecialVar_ItemId -_0813E7DC: .4byte gStringVar1 -_0813E7E0: .4byte gStringVar3 -_0813E7E4: .4byte gStringVar4 -_0813E7E8: .4byte gText_TurnedOverItemsWorthYen -_0813E7EC: .4byte sub_813E7F0 - thumb_func_end sub_813E768 - - thumb_func_start sub_813E7F0 -sub_813E7F0: @ 813E7F0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - lsls r6, r0, 2 - adds r6, r0 - lsls r6, 3 - ldr r0, _0813E8BC @ =gTasks+0x8 - mov r9, r0 - adds r1, r6, 0 - add r1, r9 - mov r8, r1 - movs r0, 0xF8 - bl PlaySE - ldr r5, _0813E8C0 @ =gSpecialVar_ItemId - ldrh r0, [r5] - mov r2, r8 - ldrh r1, [r2, 0x10] - bl RemoveBagItem - ldr r7, _0813E8C4 @ =gSaveBlock1Ptr - ldr r4, [r7] - movs r3, 0xA4 - lsls r3, 2 - mov r10, r3 - add r4, r10 - ldrh r0, [r5] - bl itemid_get_market_price - lsls r0, 16 - lsrs r0, 17 - mov r2, r8 - movs r3, 0x10 - ldrsh r1, [r2, r3] - muls r1, r0 - adds r0, r4, 0 - bl AddMoney - ldrh r0, [r5] - mov r2, r8 - ldrh r1, [r2, 0x10] - movs r2, 0x2 - bl sub_809C09C - mov r3, r8 - ldrb r0, [r3] - ldr r4, _0813E8C8 @ =gUnknown_203F370 + 10 - subs r2, r4, 0x2 - adds r1, r4, 0 - bl DestroyListMenuTask - bl sub_813D8AC - bl sub_813D6F4 - bl sub_813D204 - ldr r0, _0813E8CC @ =gMultiuseListMenuTemplate - subs r4, 0xA - ldrh r1, [r4, 0xA] - ldrh r2, [r4, 0x8] - bl ListMenuInit - lsls r0, 24 - lsrs r0, 24 - mov r1, r8 - strh r0, [r1] - movs r1, 0x2 - bl sub_813D4B0 - movs r0, 0x2 - bl sub_813EB10 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, [r7] - add r0, r10 - bl GetMoney - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0 - bl PrintMoneyAmountInMoneyBox - movs r2, 0x8 - negs r2, r2 - add r9, r2 - add r6, r9 - ldr r0, _0813E8D0 @ =sub_813E8D4 - str r0, [r6] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813E8BC: .4byte gTasks+0x8 -_0813E8C0: .4byte gSpecialVar_ItemId -_0813E8C4: .4byte gSaveBlock1Ptr -_0813E8C8: .4byte gUnknown_203F370 + 10 -_0813E8CC: .4byte gMultiuseListMenuTemplate -_0813E8D0: .4byte sub_813E8D4 - thumb_func_end sub_813E7F0 - - thumb_func_start sub_813E8D4 -sub_813E8D4: @ 813E8D4 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813E90C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0813E8EE - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0813E906 -_0813E8EE: - movs r0, 0x5 - bl PlaySE - movs r0, 0x2 - bl sub_813EA98 - movs r0, 0x2 - bl PutWindowTilemap - adds r0, r4, 0 - bl sub_813E2B8 -_0813E906: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813E90C: .4byte gMain - thumb_func_end sub_813E8D4 - thumb_func_start sub_813E910 sub_813E910: @ 813E910 push {r4,lr} diff --git a/include/item.h b/include/item.h index f0aaa0f6c..583a47cdc 100644 --- a/include/item.h +++ b/include/item.h @@ -64,13 +64,12 @@ u8 ItemId_GetSecondaryId(u16 itemId); u16 itemid_get_market_price(u16 itemId); void ClearItemSlotsInAllBagPockets(void); void ClearPCItemSlots(void); -void CopyItemName(u16, u8 *); void sub_809A824(u16 itemId); bool8 AddBagItem(u16 itemId, u16 amount); -void SortPocketAndPlaceHMsFirst(struct BagPocket *); -u16 BagGetItemIdByPocketPosition(u8 a0, u16 a1); -u16 BagGetQuantityByPocketPosition(u8 a0, u16 a1); +void SortPocketAndPlaceHMsFirst(struct BagPocket * pocket); +u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 itemId); +u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 itemId); bool8 itemid_is_unique(u16 itemId); void BagPocketCompaction(struct ItemSlot * slots, u8 capacity); u16 GetPcItemQuantity(u16 *); diff --git a/include/strings.h b/include/strings.h index e60344731..a56139909 100644 --- a/include/strings.h +++ b/include/strings.h @@ -317,6 +317,7 @@ extern const u8 gCreditsString_Graphic_Designer[]; extern const u8 gCreditsString_Akira_Kinashi[]; // berry_pouch +extern const u8 gUnknown_8416374[]; extern const u8 gUnknown_84163DB[]; extern const u8 gUnknown_84163F4[]; extern const u8 gUnknown_8416409[]; diff --git a/src/berry_pouch.c b/src/berry_pouch.c index ff4652ee2..e6746d4ca 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -21,8 +21,11 @@ #include "string_util.h" #include "sound.h" #include "link.h" +#include "money.h" +#include "shop.h" #include "menu.h" #include "menu_indicators.h" +#include "pokemon_storage_system.h" #include "constants/items.h" #include "constants/songs.h" @@ -104,8 +107,15 @@ void sub_813E320(u8 taskId); void sub_813E37C(u8 taskId); void sub_813E3FC(u8 taskId); void sub_813E428(u8 taskId); +void sub_813E4E4(u8 taskId); +void sub_813E554(u8 taskId); void sub_813E568(u8 taskId); +void sub_813E5B8(u8 taskId); +void sub_813E668(s32 price); +void sub_813E690(u8 taskId); void sub_813E768(u8 taskId); +void sub_813E7F0(u8 taskId); +void sub_813E8D4(u8 taskId); void sub_813E910(void); void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); u8 sub_813EA08(u8); @@ -113,6 +123,8 @@ void sub_813EA98(u8); void sub_813EACC(u8); u8 sub_813EB10(u8); void sub_813EB7C(u8 taskId, const struct YesNoFuncTable * ptrs); +void sub_813EBA8(u8 taskId, const struct YesNoFuncTable * ptrs); +void sub_813EBD4(void); void sub_813EC08(void); void sub_813EC28(void); @@ -1213,3 +1225,182 @@ void sub_813E2B8(u8 taskId) sub_813D4B0(data[0], 1); sub_813DBB4(taskId); } + +void sub_813E320(u8 taskId) +{ + sub_813EA98(gUnknown_203F388 + 9); + sub_813EA98(6); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + sub_813D4B0(gTasks[taskId].data[0], 1); + sub_813DBB4(taskId); +} + +void sub_813E37C(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u16 itemId = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1]); + if (!sub_80BF6A8(itemId)) + { + CopyItemName(itemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gUnknown_8416374); + DisplayItemMessageInBerryPouch(taskId, 2, gStringVar4, sub_813E290); + } + else + { + gUnknown_203F36C->unk_000 = c2_8123744; + gTasks[taskId].func = BerryPouch_StartFadeToExitCallback; + } +} + +void sub_813E3FC(u8 taskId) +{ + gUnknown_203F36C->unk_000 = sub_808CE60; + gTasks[taskId].func = BerryPouch_StartFadeToExitCallback; +} + +void sub_813E428(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + if (itemid_get_market_price(gSpecialVar_ItemId) == 0) + { + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); + DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, sub_813E2B8); + } + else + { + data[8] = 1; + if (data[2] == 1) + { + sub_813EBD4(); + sub_813E4E4(taskId); + } + else + { + if (data[2] > 99) + data[2] = 99; + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); + DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, sub_813E5B8); + } + } +} + +void sub_813E4E4(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); + DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, sub_813E554); +} + +void sub_813E554(u8 taskId) +{ + sub_813EBA8(taskId, &gUnknown_8464374); +} + +void sub_813E568(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + sub_813EA98(2); + sub_813EACC(5); + PutWindowTilemap(2); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + sub_813D4B0(data[0], 1); + sub_813DBB4(taskId); +} + +void sub_813E5B8(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 windowId = sub_813EA08(1); + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + sub_813E9A0(windowId, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); + sub_813E668(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); + sub_813EBD4(); + sub_813D64C(); + gTasks[taskId].func = sub_813E690; +} + +void sub_813E668(s32 price) +{ + PrintMoneyAmount(sub_813EB10(1), 56, 10, price, 0); +} + +void sub_813E690(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + { + sub_813D9F8(1, data[8], 2); + sub_813E668(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); + } + else if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_813EA98(1); + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + sub_813D684(); + sub_813E4E4(taskId); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_813EA98(1); + sub_813EA98(2); + sub_813EACC(5); + PutWindowTilemap(2); + PutWindowTilemap(0); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + sub_813D684(); + sub_813D4B0(data[0], 1); + sub_813DBB4(taskId); + } +} + +void sub_813E768(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + PutWindowTilemap(0); + ScheduleBgCopyTilemapToVram(0); + CopyItemName(gSpecialVar_ItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); + StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); + DisplayItemMessageInBerryPouch(taskId, 2, gStringVar4, sub_813E7F0); +} + +void sub_813E7F0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + PlaySE(SE_CASHIER); + RemoveBagItem(gSpecialVar_ItemId, data[8]); + AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); + sub_809C09C(gSpecialVar_ItemId, data[8], 2); + DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); + sub_813D8AC(); + sub_813D6F4(); + sub_813D204(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); + sub_813D4B0(data[0], 2); + PrintMoneyAmountInMoneyBox(sub_813EB10(2), GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = sub_813E8D4; +} + +void sub_813E8D4(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_813EA98(2); + PutWindowTilemap(2); + sub_813E2B8(taskId); + } +} From 8eea5b6d750a629c14a152c240f84b02b5e4f0c6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 30 Sep 2019 19:47:38 -0400 Subject: [PATCH 10/13] Finish berry_pouch code decomp --- asm/berry_pouch.s | 466 ------------------------------------------ include/berry_pouch.h | 2 +- ld_script.txt | 1 - src/berry_pouch.c | 131 +++++++++++- 4 files changed, 128 insertions(+), 472 deletions(-) delete mode 100644 asm/berry_pouch.s diff --git a/asm/berry_pouch.s b/asm/berry_pouch.s deleted file mode 100644 index 82ce14f9d..000000000 --- a/asm/berry_pouch.s +++ /dev/null @@ -1,466 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_813E910 -sub_813E910: @ 813E910 - push {r4,lr} - ldr r0, _0813E994 @ =gUnknown_84643B8 - bl InitWindows - bl DeactivateAllTextPrinters - movs r0, 0 - movs r1, 0x1 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0 - movs r1, 0x13 - movs r2, 0xD0 - bl TextWindow_LoadResourcesStdFrame0 - movs r0, 0 - movs r1, 0xA - movs r2, 0xC0 - bl TextWindow_SetStdFrame0_WithPal - ldr r0, _0813E998 @ =gTMCaseMainWindowPalette - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - movs r4, 0 -_0813E946: - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x2 - bls _0813E946 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - movs r4, 0 - ldr r3, _0813E99C @ =gUnknown_203F38C - movs r2, 0xFF -_0813E97C: - adds r0, r4, r3 - ldrb r1, [r0] - orrs r1, r2 - strb r1, [r0] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xD - bls _0813E97C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813E994: .4byte gUnknown_84643B8 -_0813E998: .4byte gTMCaseMainWindowPalette -_0813E99C: .4byte gUnknown_203F38C - thumb_func_end sub_813E910 - - thumb_func_start sub_813E9A0 -sub_813E9A0: @ 813E9A0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x14 - mov r9, r3 - ldr r3, [sp, 0x30] - ldr r4, [sp, 0x34] - ldr r6, [sp, 0x38] - ldr r5, [sp, 0x3C] - mov r8, r5 - ldr r5, [sp, 0x40] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r7, r9 - lsls r7, 24 - lsrs r7, 24 - mov r9, r7 - lsls r3, 24 - lsrs r3, 24 - lsls r4, 24 - lsrs r4, 24 - lsls r6, 24 - lsrs r6, 24 - lsls r5, 24 - lsrs r5, 24 - str r4, [sp] - str r6, [sp, 0x4] - lsls r4, r5, 1 - adds r4, r5 - ldr r5, _0813EA04 @ =gUnknown_8464448 - adds r4, r5 - str r4, [sp, 0x8] - mov r4, r8 - lsls r4, 24 - asrs r4, 24 - str r4, [sp, 0xC] - str r2, [sp, 0x10] - mov r2, r9 - bl AddTextPrinterParameterized4 - add sp, 0x14 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813EA04: .4byte gUnknown_8464448 - thumb_func_end sub_813E9A0 - - thumb_func_start sub_813EA08 -sub_813EA08: @ 813EA08 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0813EA4C @ =gUnknown_203F38C - adds r5, r4, r0 - ldrb r0, [r5] - cmp r0, 0xFF - bne _0813EA6C - lsls r0, r4, 3 - ldr r1, _0813EA50 @ =gUnknown_84643D8 - adds r0, r1 - bl AddWindow - strb r0, [r5] - cmp r4, 0x2 - beq _0813EA38 - cmp r4, 0x6 - beq _0813EA38 - cmp r4, 0x7 - beq _0813EA38 - cmp r4, 0x8 - beq _0813EA38 - cmp r4, 0x9 - bne _0813EA54 -_0813EA38: - ldr r0, _0813EA4C @ =gUnknown_203F38C - adds r0, r4, r0 - ldrb r0, [r0] - movs r1, 0 - movs r2, 0xA - movs r3, 0xC - bl DrawStdFrameWithCustomTileAndPalette - b _0813EA60 - .align 2, 0 -_0813EA4C: .4byte gUnknown_203F38C -_0813EA50: .4byte gUnknown_84643D8 -_0813EA54: - ldrb r0, [r5] - movs r1, 0 - movs r2, 0x1 - movs r3, 0xE - bl DrawStdFrameWithCustomTileAndPalette -_0813EA60: - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - ldr r0, _0813EA74 @ =gUnknown_203F38C - adds r0, r4, r0 - ldrb r0, [r0] -_0813EA6C: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0813EA74: .4byte gUnknown_203F38C - thumb_func_end sub_813EA08 - - thumb_func_start sub_813EA78 -sub_813EA78: @ 813EA78 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EA94 @ =gUnknown_203F38C - adds r0, r1 - ldrb r0, [r0] - movs r1, 0 - movs r2, 0x1 - movs r3, 0xE - bl DrawStdFrameWithCustomTileAndPalette - pop {r0} - bx r0 - .align 2, 0 -_0813EA94: .4byte gUnknown_203F38C - thumb_func_end sub_813EA78 - - thumb_func_start sub_813EA98 -sub_813EA98: @ 813EA98 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813EAC8 @ =gUnknown_203F38C - adds r4, r0 - ldrb r0, [r4] - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldrb r0, [r4] - bl ClearWindowTilemap - ldrb r0, [r4] - bl RemoveWindow - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - movs r0, 0xFF - strb r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EAC8: .4byte gUnknown_203F38C - thumb_func_end sub_813EA98 - - thumb_func_start sub_813EACC -sub_813EACC: @ 813EACC - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EB0C @ =gUnknown_203F38C - adds r4, r0, r1 - ldrb r0, [r4] - cmp r0, 0xFF - beq _0813EB04 - movs r1, 0 - bl ClearDialogWindowAndFrameToTransparent - ldrb r0, [r4] - bl ClearWindowTilemap - ldrb r0, [r4] - bl RemoveWindow - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0 - bl ScheduleBgCopyTilemapToVram - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - movs r0, 0xFF - strb r0, [r4] -_0813EB04: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EB0C: .4byte gUnknown_203F38C - thumb_func_end sub_813EACC - - thumb_func_start sub_813EB10 -sub_813EB10: @ 813EB10 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EB1C @ =gUnknown_203F38C - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_0813EB1C: .4byte gUnknown_203F38C - thumb_func_end sub_813EB10 - - thumb_func_start DisplayItemMessageInBerryPouch -DisplayItemMessageInBerryPouch: @ 813EB20 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r7, r2, 0 - mov r8, r3 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r4, _0813EB74 @ =gUnknown_203F38C - ldrb r0, [r4, 0x5] - cmp r0, 0xFF - bne _0813EB44 - ldr r0, _0813EB78 @ =gUnknown_84643D8 + 0x28 - bl AddWindow - strb r0, [r4, 0x5] -_0813EB44: - bl GetTextSpeedSetting - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4, 0x5] - str r5, [sp] - str r0, [sp, 0x4] - str r7, [sp, 0x8] - mov r0, r8 - str r0, [sp, 0xC] - adds r0, r6, 0 - movs r2, 0x13 - movs r3, 0xD - bl DisplayMessageAndContinueTask - movs r0, 0x2 - bl ScheduleBgCopyTilemapToVram - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813EB74: .4byte gUnknown_203F38C -_0813EB78: .4byte gUnknown_84643D8 + 0x28 - thumb_func_end DisplayItemMessageInBerryPouch - - thumb_func_start sub_813EB7C -sub_813EB7C: @ 813EB7C - push {lr} - sub sp, 0x10 - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EBA4 @ =gUnknown_84643D8 + 0x18 - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0xE - str r2, [sp, 0x8] - str r3, [sp, 0xC] - movs r2, 0x2 - movs r3, 0 - bl CreateYesNoMenuWithCallbacks - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_0813EBA4: .4byte gUnknown_84643D8 + 0x18 - thumb_func_end sub_813EB7C - - thumb_func_start sub_813EBA8 -sub_813EBA8: @ 813EBA8 - push {lr} - sub sp, 0x10 - adds r3, r1, 0 - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0813EBD0 @ =gUnknown_84643D8 + 0x20 - movs r2, 0x2 - str r2, [sp] - movs r2, 0x1 - str r2, [sp, 0x4] - movs r2, 0xE - str r2, [sp, 0x8] - str r3, [sp, 0xC] - movs r2, 0x2 - movs r3, 0 - bl CreateYesNoMenuWithCallbacks - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_0813EBD0: .4byte gUnknown_84643D8 + 0x20 - thumb_func_end sub_813EBA8 - - thumb_func_start sub_813EBD4 -sub_813EBD4: @ 813EBD4 - push {r4,lr} - movs r0, 0x2 - bl sub_813EA08 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0813EC04 @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0xA4 - lsls r1, 2 - adds r0, r1 - bl GetMoney - adds r3, r0, 0 - adds r0, r4, 0 - movs r1, 0xA - movs r2, 0xC - bl PrintMoneyAmountInMoneyBoxWithBorder - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EC04: .4byte gSaveBlock1Ptr - thumb_func_end sub_813EBD4 - - thumb_func_start sub_813EC08 -sub_813EC08: @ 813EC08 - push {lr} - ldr r0, _0813EC20 @ =gUnknown_84644B8 - movs r1, 0x28 - movs r2, 0x4C - movs r3, 0 - bl CreateSprite - ldr r1, _0813EC24 @ =gUnknown_203F39C - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0813EC20: .4byte gUnknown_84644B8 -_0813EC24: .4byte gUnknown_203F39C - thumb_func_end sub_813EC08 - - thumb_func_start sub_813EC28 -sub_813EC28: @ 813EC28 - push {r4,lr} - ldr r0, _0813EC58 @ =gUnknown_203F39C - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0813EC5C @ =gSprites - adds r4, r0, r1 - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0813EC52 - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, _0813EC60 @ =sub_813EC64 - str r0, [r4, 0x1C] -_0813EC52: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EC58: .4byte gUnknown_203F39C -_0813EC5C: .4byte gSprites -_0813EC60: .4byte sub_813EC64 - thumb_func_end sub_813EC28 - - thumb_func_start sub_813EC64 -sub_813EC64: @ 813EC64 - push {r4,lr} - adds r4, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0813EC80 - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAffineAnim - ldr r0, _0813EC88 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_0813EC80: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0813EC88: .4byte SpriteCallbackDummy - thumb_func_end sub_813EC64 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/berry_pouch.h b/include/berry_pouch.h index 8e652225b..58f58fd99 100644 --- a/include/berry_pouch.h +++ b/include/berry_pouch.h @@ -6,7 +6,7 @@ void BerryPouch_StartFadeToExitCallback(u8 taskId); void BerryPouch_SetExitCallback(void (*)(void)); void InitBerryPouch(u8, void (*)(void), u8); -void DisplayItemMessageInBerryPouch(u8 taskId, u8 bgId, const u8 * str, TaskFunc followUpFunc); +void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFunc followUpFunc); void sub_813E2B8(u8 taskId); #endif //GUARD_BERRY_POUCH_H diff --git a/ld_script.txt b/ld_script.txt index a7ab32150..fa7f1302b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -252,7 +252,6 @@ SECTIONS { asm/wild_pokemon_area.o(.text); src/dynamic_placeholder_text_util.o(.text); src/berry_pouch.o(.text); - asm/berry_pouch.o(.text); asm/itemfinder.o(.text); src/buy_menu_helpers.o(.text); src/slot_machine.o(.text); diff --git a/src/berry_pouch.c b/src/berry_pouch.c index e6746d4ca..abfa4aacf 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -17,6 +17,7 @@ #include "item.h" #include "item_use.h" #include "party_menu.h" +#include "text_window.h" #include "strings.h" #include "string_util.h" #include "sound.h" @@ -118,15 +119,16 @@ void sub_813E7F0(u8 taskId); void sub_813E8D4(u8 taskId); void sub_813E910(void); void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); -u8 sub_813EA08(u8); -void sub_813EA98(u8); -void sub_813EACC(u8); -u8 sub_813EB10(u8); +u8 sub_813EA08(u8 winIdx); +void sub_813EA98(u8 winIdx); +void sub_813EACC(u8 winIdx); +u8 sub_813EB10(u8 winIdx); void sub_813EB7C(u8 taskId, const struct YesNoFuncTable * ptrs); void sub_813EBA8(u8 taskId, const struct YesNoFuncTable * ptrs); void sub_813EBD4(void); void sub_813EC08(void); void sub_813EC28(void); +void sub_813EC64(struct Sprite * sprite); static const struct BgTemplate gUnknown_846434C[] = { { @@ -1404,3 +1406,124 @@ void sub_813E8D4(u8 taskId) sub_813E2B8(taskId); } } + +void sub_813E910(void) +{ + u8 i; + InitWindows(gUnknown_84643B8); + DeactivateAllTextPrinters(); + TextWindow_SetUserSelectedFrame(0, 0x001, 0xE0); + TextWindow_LoadResourcesStdFrame0(0, 0x013, 0xD0); + TextWindow_SetStdFrame0_WithPal(0, 0x00A, 0xC0); + LoadPalette(gTMCaseMainWindowPalette, 0xF0, 0x20); + for (i = 0; i < 3; i++) + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + PutWindowTilemap(0); + PutWindowTilemap(1); + PutWindowTilemap(2); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + for (i = 0; i < 14; i++) + gUnknown_203F38C[i] = 0xFF; +} + +void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) +{ + AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_8464448[colorIdx], speed, str); +} + +u8 sub_813EA08(u8 winIdx) +{ + u8 retval = gUnknown_203F38C[winIdx]; + if (retval == 0xFF) + { + gUnknown_203F38C[winIdx] = AddWindow(&gUnknown_84643D8[winIdx]); + if (winIdx == 2 || winIdx == 6 || winIdx == 7 || winIdx == 8 || winIdx == 9) + DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x00A, 0xC); + else + DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x001, 0xE); + ScheduleBgCopyTilemapToVram(2); + retval = gUnknown_203F38C[winIdx]; + } + return retval; +} + +void sub_813EA78(u8 winIdx) +{ + DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x001, 0xE); +} + +void sub_813EA98(u8 winIdx) +{ + ClearStdWindowAndFrameToTransparent(gUnknown_203F38C[winIdx], FALSE); + ClearWindowTilemap(gUnknown_203F38C[winIdx]); + RemoveWindow(gUnknown_203F38C[winIdx]); + ScheduleBgCopyTilemapToVram(2); + gUnknown_203F38C[winIdx] = 0xFF; +} + +void sub_813EACC(u8 winIdx) +{ + if (gUnknown_203F38C[winIdx] != 0xFF) + { + ClearDialogWindowAndFrameToTransparent(gUnknown_203F38C[winIdx], FALSE); + ClearWindowTilemap(gUnknown_203F38C[winIdx]); + RemoveWindow(gUnknown_203F38C[winIdx]); + PutWindowTilemap(1); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(2); + gUnknown_203F38C[winIdx] = 0xFF; + } +} + +u8 sub_813EB10(u8 winIdx) +{ + return gUnknown_203F38C[winIdx]; +} + +void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFunc followUpFunc) +{ + if (gUnknown_203F38C[5] == 0xFF) + gUnknown_203F38C[5] = AddWindow(&gUnknown_84643D8[5]); + DisplayMessageAndContinueTask(taskId, gUnknown_203F38C[5], 0x013, 0xD, fontId, GetTextSpeedSetting(), str, followUpFunc); + ScheduleBgCopyTilemapToVram(2); +} + +void sub_813EB7C(u8 taskId, const struct YesNoFuncTable * ptrs) +{ + CreateYesNoMenuWithCallbacks(taskId, &gUnknown_84643D8[3], 2, 0, 2, 0x001, 0xE, ptrs); +} + +void sub_813EBA8(u8 taskId, const struct YesNoFuncTable * ptrs) +{ + CreateYesNoMenuWithCallbacks(taskId, &gUnknown_84643D8[4], 2, 0, 2, 0x001, 0xE, ptrs); +} + +void sub_813EBD4(void) +{ + PrintMoneyAmountInMoneyBoxWithBorder(sub_813EA08(2), 0x00A, 0xC, GetMoney(&gSaveBlock1Ptr->money)); +} + +void sub_813EC08(void) +{ + gUnknown_203F39C = CreateSprite(&gUnknown_84644B8, 40, 76, 0); +} + +void sub_813EC28(void) +{ + struct Sprite * sprite = &gSprites[gUnknown_203F39C]; + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_813EC64; + } +} + +void sub_813EC64(struct Sprite * sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 0); + sprite->callback = SpriteCallbackDummy; + } +} From beedb8d73f40b045906f521b48f40367697b6ebb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 30 Sep 2019 20:58:29 -0400 Subject: [PATCH 11/13] Tidy global namespace and document --- asm/item_menu.s | 18 +- asm/new_game.s | 2 +- data/graphics.s | 4 +- data/strings.s | 12 +- include/berry_pouch.h | 17 +- include/graphics.h | 4 +- include/menu_helpers.h | 2 +- include/strings.h | 12 +- src/berry_pouch.c | 989 ++++++++++++++++++++--------------------- src/item_use.c | 8 +- src/menu_helpers.c | 2 +- 11 files changed, 540 insertions(+), 530 deletions(-) diff --git a/asm/item_menu.s b/asm/item_menu.s index 46fa08f33..e58abf87f 100644 --- a/asm/item_menu.s +++ b/asm/item_menu.s @@ -3922,7 +3922,7 @@ sub_8109CC0: @ 8109CC0 _08109D14: .4byte gTasks+0x8 _08109D18: ldrh r0, [r4, 0x2] - ldr r1, _08109D30 @ =gUnknown_84163DB + ldr r1, _08109D30 @ =gText_TossOutHowManyStrVar1s bl sub_810971C adds r0, r7, 0 subs r0, 0x8 @@ -3934,7 +3934,7 @@ _08109D2A: pop {r0} bx r0 .align 2, 0 -_08109D30: .4byte gUnknown_84163DB +_08109D30: .4byte gText_TossOutHowManyStrVar1s _08109D34: .4byte sub_8109DEC thumb_func_end sub_8109CC0 @@ -3957,7 +3957,7 @@ sub_8109D38: @ 8109D38 movs r3, 0x3 bl ConvertIntToDecimalStringN ldr r5, _08109DA4 @ =gStringVar4 - ldr r1, _08109DA8 @ =gUnknown_8416409 + ldr r1, _08109DA8 @ =gText_ThrowAwayStrVar2OfThisItemQM adds r0, r5, 0 bl StringExpandPlaceholders movs r0, 0x6 @@ -3988,7 +3988,7 @@ sub_8109D38: @ 8109D38 _08109D9C: .4byte gTasks+0x8 _08109DA0: .4byte gStringVar2 _08109DA4: .4byte gStringVar4 -_08109DA8: .4byte gUnknown_8416409 +_08109DA8: .4byte gText_ThrowAwayStrVar2OfThisItemQM _08109DAC: .4byte gUnknown_8452F50 thumb_func_end sub_8109D38 @@ -4133,7 +4133,7 @@ sub_8109EA8: @ 8109EA8 movs r3, 0x3 bl ConvertIntToDecimalStringN ldr r6, _08109F38 @ =gStringVar4 - ldr r1, _08109F3C @ =gUnknown_84163F4 + ldr r1, _08109F3C @ =gText_ThrewAwayStrVar2StrVar1s adds r0, r6, 0 bl StringExpandPlaceholders movs r0, 0x6 @@ -4167,7 +4167,7 @@ _08109F2C: .4byte gUnknown_203ACFC _08109F30: .4byte gStringVar1 _08109F34: .4byte gStringVar2 _08109F38: .4byte gStringVar4 -_08109F3C: .4byte gUnknown_84163F4 +_08109F3C: .4byte gText_ThrewAwayStrVar2StrVar1s _08109F40: .4byte sub_8109F44 thumb_func_end sub_8109EA8 @@ -4706,7 +4706,7 @@ _0810A3C4: .4byte gUnknown_841630F _0810A3C8: .4byte sub_810A1D0 _0810A3CC: movs r0, 0xB6 - lsls r0, 1 + lsls r0, 1 @ ITEM_TM_CASE cmp r4, r0 bne _0810A3DC ldr r0, _0810A3D8 @ =sub_810A434 @@ -4714,7 +4714,7 @@ _0810A3CC: .align 2, 0 _0810A3D8: .4byte sub_810A434 _0810A3DC: - ldr r0, _0810A3F0 @ =0x0000016d + ldr r0, _0810A3F0 @ =ITEM_BERRY_POUCH cmp r4, r0 bne _0810A3F8 ldr r0, _0810A3F4 @ =sub_810A448 @@ -4724,7 +4724,7 @@ _0810A3E4: bl ItemMenu_StartFadeToExitCallback b _0810A426 .align 2, 0 -_0810A3F0: .4byte 0x0000016d +_0810A3F0: .4byte 0x0000016d @ ITEM_BERRY_POUCH _0810A3F4: .4byte sub_810A448 _0810A3F8: mov r1, r8 diff --git a/asm/new_game.s b/asm/new_game.s index e2b9c876f..15c06e8eb 100644 --- a/asm/new_game.s +++ b/asm/new_game.s @@ -184,7 +184,7 @@ ResetMenuAndMonGlobals: @ 8054A28 bl ZeroEnemyPartyMons bl sub_81089BC bl ResetTMCaseCursorPos - bl sub_813D6E4 + bl BerryPouch_CursorResetToTop bl sub_811089C bl Random lsls r0, 16 diff --git a/data/graphics.s b/data/graphics.s index a7f262aca..e03266f85 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -13988,7 +13988,7 @@ gItemPcBgPals:: @ 8E85408 gItemPcTilemap:: @ 8E85458 .incbin "graphics/item_pc/unk_8E85458.bin.lz" -gUnknown_8E8560C:: @ 8E8560C +gBerryPouchSpriteTiles:: @ 8E8560C .incbin "graphics/berry_pouch/unk_8E8560C.4bpp.lz" gUnknown_8E859D0:: @ 8E859D0 @@ -14000,7 +14000,7 @@ gUnknown_8E85BA4:: @ 8E85BA4 gUnknown_8E85BF4:: @ 8E85BF4 .incbin "graphics/berry_pouch/unk_8E85BF4.gbapal.lz" -gUnknown_8E85C1C:: @ 8E85C1C +gBerryPouchSpritePalette:: @ 8E85C1C .incbin "graphics/berry_pouch/unk_8E85C1C.gbapal.lz" gUnknown_8E85C44:: @ 8E85C44 diff --git a/data/strings.s b/data/strings.s index 5f1616eaf..05bd47c88 100644 --- a/data/strings.s +++ b/data/strings.s @@ -555,7 +555,7 @@ gOtherText_WhereShouldTheStrVar1BePlaced:: @ 841633F gText_ItemCantBeHeld:: @ 841635E .string "The {STR_VAR_1} can't be held.$" -gUnknown_8416374:: @ 8416374 +gText_TheStrVar1CantBeHeldHere:: @ 8416374 .string "The {STR_VAR_1} can't be held\nhere.$" gUnknown_841638F:: @ 841638F @@ -567,13 +567,13 @@ gUnknown_84163A7:: @ 84163A7 gUnknown_84163BB:: @ 84163BB .string "There's no room to\nstore items.$" -gUnknown_84163DB:: @ 84163DB +gText_TossOutHowManyStrVar1s:: @ 84163DB .string "Toss out how many\n{STR_VAR_1}(s)?$" -gUnknown_84163F4:: @ 84163F4 +gText_ThrewAwayStrVar2StrVar1s:: @ 84163F4 .string "Threw away {STR_VAR_2}\n{STR_VAR_1}(s).$" -gUnknown_8416409:: @ 8416409 +gText_ThrowAwayStrVar2OfThisItemQM:: @ 8416409 .string "Throw away {STR_VAR_2} of\nthis item?$" gUnknown_8416425:: @ 8416425 @@ -654,10 +654,10 @@ gText_FontSize2:: @ 8416703 gUnknown_8416707:: @ 8416707 .string " $" -gUnknown_841670A:: @ 841670A +gText_BerryPouch:: @ 841670A .string "BERRY POUCH$" -gUnknown_8416716:: @ 8416716 +gText_TheBerryPouchWillBePutAway:: @ 8416716 .string "The BERRY POUCH will be\nput away.$" gUnknown_8416738:: @ 0x8416738 diff --git a/include/berry_pouch.h b/include/berry_pouch.h index 58f58fd99..cd9866d81 100644 --- a/include/berry_pouch.h +++ b/include/berry_pouch.h @@ -3,10 +3,21 @@ #include "task.h" +enum BerryPouchType +{ + BERRYPOUCH_FROMFIELD, + BERRYPOUCH_FROMPARTYGIVE, + BERRYPOUCH_FROMMARTSELL, + BERRYPOUCH_FROMPOKEMONSTORAGEPC, + BERRYPOUCH_FROMBATTLE, + BERRYPOUCH_FROMBERRYCRUSH, + BERRYPOUCH_NA +}; + void BerryPouch_StartFadeToExitCallback(u8 taskId); -void BerryPouch_SetExitCallback(void (*)(void)); -void InitBerryPouch(u8, void (*)(void), u8); +void BerryPouch_SetExitCallback(void (*exitCallback)(void)); +void InitBerryPouch(u8 type, void (*savedCallback)(void), u8 allowSelect); void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFunc followUpFunc); -void sub_813E2B8(u8 taskId); +void Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu(u8 taskId); #endif //GUARD_BERRY_POUCH_H diff --git a/include/graphics.h b/include/graphics.h index ce671246e..5c6f201db 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -999,11 +999,11 @@ extern const u8 gCreditsAllRightsReservedGfxTiles[]; extern const u8 gCreditsAllRightsReservedGfxMap[]; // berry_pouch -extern const u32 gUnknown_8E8560C[]; +extern const u32 gBerryPouchSpriteTiles[]; extern const u8 gUnknown_8E859D0[]; extern const u8 gUnknown_8E85BA4[]; extern const u8 gUnknown_8E85BF4[]; -extern const u32 gUnknown_8E85C1C[]; +extern const u32 gBerryPouchSpritePalette[]; extern const u8 gUnknown_8E85C44[]; #endif //GUARD_GRAPHICS_H diff --git a/include/menu_helpers.h b/include/menu_helpers.h index c18d4313e..6ea771500 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -23,7 +23,7 @@ void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 tileNum, u8 palet void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 fontId, u8 left, u8 top, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo); u8 GetLRKeysState(void); u8 sub_80BF66C(void); -bool8 sub_80BF6A8(u16 itemId); +bool8 itemid_link_can_give_berry(u16 itemId); bool8 itemid_80BF6D8_mail_related(u16 itemId); void ClearVramOamPltt(void); diff --git a/include/strings.h b/include/strings.h index a56139909..b0221b8e9 100644 --- a/include/strings.h +++ b/include/strings.h @@ -317,11 +317,11 @@ extern const u8 gCreditsString_Graphic_Designer[]; extern const u8 gCreditsString_Akira_Kinashi[]; // berry_pouch -extern const u8 gUnknown_8416374[]; -extern const u8 gUnknown_84163DB[]; -extern const u8 gUnknown_84163F4[]; -extern const u8 gUnknown_8416409[]; -extern const u8 gUnknown_841670A[]; -extern const u8 gUnknown_8416716[]; +extern const u8 gText_TheStrVar1CantBeHeldHere[]; +extern const u8 gText_TossOutHowManyStrVar1s[]; +extern const u8 gText_ThrewAwayStrVar2StrVar1s[]; +extern const u8 gText_ThrowAwayStrVar2OfThisItemQM[]; +extern const u8 gText_BerryPouch[]; +extern const u8 gText_TheBerryPouchWillBePutAway[]; #endif //GUARD_STRINGS_H diff --git a/src/berry_pouch.c b/src/berry_pouch.c index abfa4aacf..abf2484f6 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -32,25 +32,24 @@ struct BerryPouchStruct_203F36C { - void (*unk_000)(void); - u16 unk_004; - u8 unk_006; - u8 unk_007; - u8 unk_008; - u8 unk_009; - u8 filler_00a[2]; - u8 unk_00C[BG_SCREEN_SIZE]; - s16 unk_80C[4]; + void (*exitCallback)(void); + u16 indicatorOffset; + u8 indicatorTaskId; + u8 listMenuNumItems; + u8 listMenuMaxShowed; + u8 itemMenuIconId; + u8 ALIGNED(4) bg1TilemapBuffer[BG_SCREEN_SIZE]; + s16 data[4]; }; struct BerryPouchStruct_203F370 { void (*savedCallback)(void); - u8 unk_04; - u8 unk_05; - u8 filler_06[2]; - u16 unk_08; - u16 unk_0A; + u8 type; + u8 allowSelect; + u8 unused_06; + u16 listMenuSelectedRow; + u16 listMenuScrollOffset; }; enum @@ -62,75 +61,75 @@ enum BP_ACTION_DUMMY }; -EWRAM_DATA struct BerryPouchStruct_203F36C *gUnknown_203F36C = NULL; -EWRAM_DATA struct BerryPouchStruct_203F370 gUnknown_203F370 = {}; -EWRAM_DATA struct ListMenuItem *gUnknown_203F37C = NULL; -EWRAM_DATA u8 *gUnknown_203F380 = NULL; -EWRAM_DATA const u8 *gUnknown_203F384 = NULL; -EWRAM_DATA u8 gUnknown_203F388 = 0; -ALIGNED(4) EWRAM_DATA u8 gUnknown_203F38C[14] = {}; -ALIGNED(4) EWRAM_DATA u8 gUnknown_203F39C = 0; +static EWRAM_DATA struct BerryPouchStruct_203F36C *sResources = NULL; +static EWRAM_DATA struct BerryPouchStruct_203F370 sStaticCnt = {}; +static EWRAM_DATA struct ListMenuItem *sListMenuItems = NULL; +static EWRAM_DATA u8 *sListMenuStrbuf = NULL; +static EWRAM_DATA const u8 *sContextMenuOptions = NULL; +static EWRAM_DATA u8 sContextMenuNumOptions = 0; +static ALIGNED(4) EWRAM_DATA u8 sVariableWindowIds[14] = {}; +static ALIGNED(4) EWRAM_DATA u8 sBerryPouchSpriteId = 0; -void sub_813CE30(void); -bool8 sub_813CE5C(void); -void sub_813D00C(void); -void sub_813D048(u8 taskId); -void sub_813D07C(void); -bool8 sub_813D0E4(void); -bool8 sub_813D1C0(void); -void sub_813D204(void); -void sub_813D31C(u8 * dest, u16 itemId); -void sub_813D3C0(s32 itemIndex, bool8 onInit, struct ListMenu *list); -void sub_813D430(u8 windowId, s32 itemId, u8 y); -void sub_813D4D0(u8 y, u8 colorIdx); -void sub_813D538(s32 itemIndex); -void sub_813D5BC(void); -void sub_813D6A4(void); -void sub_813D6F4(void); -void sub_813D754(void); -void sub_813D7CC(void); -void sub_813D844(u8 taskId); -void sub_813D8AC(void); -void sub_813DA68(u8 taskId); -void sub_813DD74(u8 taskId); -void sub_813DDA0(u8 taskId); -void sub_813DE0C(u8 taskId); -void sub_813DEBC(u8 taskId); -void sub_813DF54(u8 taskId); -void sub_813DFC8(u8 taskId); -void sub_813E010(u8 taskId); -void sub_813E0DC(u8 taskId); -void sub_813E164(u8 taskId); -void sub_813E200(u8 taskId); -void sub_813E274(u8 taskId); -void sub_813E290(u8 taskId); -void sub_813E320(u8 taskId); -void sub_813E37C(u8 taskId); -void sub_813E3FC(u8 taskId); -void sub_813E428(u8 taskId); -void sub_813E4E4(u8 taskId); -void sub_813E554(u8 taskId); -void sub_813E568(u8 taskId); -void sub_813E5B8(u8 taskId); -void sub_813E668(s32 price); -void sub_813E690(u8 taskId); -void sub_813E768(u8 taskId); -void sub_813E7F0(u8 taskId); -void sub_813E8D4(u8 taskId); -void sub_813E910(void); -void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); -u8 sub_813EA08(u8 winIdx); -void sub_813EA98(u8 winIdx); -void sub_813EACC(u8 winIdx); -u8 sub_813EB10(u8 winIdx); -void sub_813EB7C(u8 taskId, const struct YesNoFuncTable * ptrs); -void sub_813EBA8(u8 taskId, const struct YesNoFuncTable * ptrs); -void sub_813EBD4(void); -void sub_813EC08(void); -void sub_813EC28(void); -void sub_813EC64(struct Sprite * sprite); +static void CB2_InitBerryPouch(void); +static bool8 RunBerryPouchInit(void); +static void AbortBerryPouchLoading(void); +static void Task_AbortBerryPouchLoading_WaitFade(u8 taskId); +static void BerryPouchInitBgs(void); +static bool8 BerryPouchLoadGfx(void); +static bool8 AllocateListMenuBuffers(void); +static void SetUpListMenuTemplate(void); +static void GetBerryNameAndIndexForMenu(u8 * dest, u16 itemId); +static void BerryPouchMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static void BerryPouchItemPrintFunc(u8 windowId, s32 itemId, u8 y); +static void BerryPouchSetArrowCursorAt(u8 y, u8 colorIdx); +static void PrintSelectedBerryDescription(s32 itemIndex); +static void CreateScrollIndicatorArrows_BerryPouchList(void); +static void PrintBerryPouchHeaderCentered(void); +static void SanitizeListMenuSelectionParams(void); +static void UpdateListMenuScrollOffset(void); +static void BerryPouch_DestroyResources(void); +static void Task_BerryPouchFadeToExitCallback(u8 taskId); +static void SortAndCountBerries(void); +static void Task_BerryPouchMain(u8 taskId); +static void Task_NormalContextMenu_0(u8 taskId); +static void Task_NormalContextMenu_1(u8 taskId); +static void Task_BerryPouch_Use_0(u8 taskId); +static void Task_BerryPouch_Toss_0(u8 taskId); +static void Task_AskTossMultiple(u8 taskId); +static void Task_TossNo(u8 taskId); +static void Task_Toss_SelectMultiple(u8 taskId); +static void Task_TossYes(u8 taskId); +static void Task_WaitButtonThenTossBerries(u8 taskId); +static void Task_BerryPouch_Give_0(u8 taskId); +static void Task_Give_PrintThereIsNoPokemon(u8 taskId); +static void Task_WaitButtonBeforeDialogueWindowDestruction(u8 taskId); +static void Task_BerryPouch_Exit_0(u8 taskId); +static void Task_ContextMenu_FromPartyGiveMenu_0(u8 taskId); +static void Task_ContextMenu_FromPokemonPC(u8 taskId); +static void Task_ContextMenu_Sell_0(u8 taskId); +static void Task_AskSellMultiple(u8 taskId); +static void Task_SellMultiple_CreateYesNoMenu(u8 taskId); +static void Task_SellNo(u8 taskId); +static void Task_Sell_PrintSelectMultipleUI(u8 taskId); +static void SellMultiple_UpdateSellPriceDisplay(s32 price); +static void Task_Sell_SelectMultiple(u8 taskId); +static void Task_SellYes(u8 taskId); +static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId); +static void Task_SellBerries_WaitButton(u8 taskId); +static void BerryPouchInitWindows(void); +static void BerryPouchPrint(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx); +static u8 GetOrCreateVariableWindow(u8 winIdx); +static void DestroyVariableWindow(u8 winIdx); +static void TryDestroyVariableWindow(u8 winIdx); +static u8 GetVariableWindowId(u8 winIdx); +static void CreateYesNoMenuWin3(u8 taskId, const struct YesNoFuncTable * ptrs); +static void CreateYesNoMenuWin4(u8 taskId, const struct YesNoFuncTable * ptrs); +static void PrintMoneyInWin2(void); +static void CreateBerryPouchSprite(void); +static void StartBerryPouchSpriteWobbleAnim(void); +static void SpriteCB_BerryPouchWaitWobbleAnim(struct Sprite * sprite); -static const struct BgTemplate gUnknown_846434C[] = { +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, .charBaseIndex = 0, @@ -158,63 +157,63 @@ static const struct BgTemplate gUnknown_846434C[] = { } }; -const TaskFunc gUnknown_8464358[] = { - sub_813DD74, - sub_813E37C, - sub_813E428, - sub_813E3FC, - sub_813DD74 +static const TaskFunc sBerryPouchContextMenuTasks[] = { + Task_NormalContextMenu_0, + Task_ContextMenu_FromPartyGiveMenu_0, + Task_ContextMenu_Sell_0, + Task_ContextMenu_FromPokemonPC, + Task_NormalContextMenu_0 }; -const struct YesNoFuncTable gUnknown_846436C = { - .yesFunc = sub_813E0DC, - .noFunc = sub_813DFC8 +static const struct YesNoFuncTable sYesNoFuncs_Toss = { + .yesFunc = Task_TossYes, + .noFunc = Task_TossNo }; -const struct YesNoFuncTable gUnknown_8464374 = { - .yesFunc = sub_813E768, - .noFunc = sub_813E568 +static const struct YesNoFuncTable sYesNoFuncs_Sell = { + .yesFunc = Task_SellYes, + .noFunc = Task_SellNo }; -const struct MenuAction gUnknown_846437C[] = { - {gOtherText_Use, sub_813DE0C}, - {gOtherText_Toss, sub_813DEBC}, - {gOtherText_Give, sub_813E200}, - {gOtherText_Exit, sub_813E320}, +static const struct MenuAction sContextMenuActions[] = { + {gOtherText_Use, Task_BerryPouch_Use_0}, + {gOtherText_Toss, Task_BerryPouch_Toss_0}, + {gOtherText_Give, Task_BerryPouch_Give_0}, + {gOtherText_Exit, Task_BerryPouch_Exit_0}, {gString_Dummy, NULL} }; -const u8 gUnknown_84643A4[] = { +static const u8 sOptions_UseGiveTossExit[] = { BP_ACTION_USE, BP_ACTION_GIVE, BP_ACTION_TOSS, BP_ACTION_EXIT }; -const u8 gUnknown_84643A8[] = { +static const u8 sOptions_GiveExit[] = { BP_ACTION_GIVE, BP_ACTION_EXIT, BP_ACTION_DUMMY, BP_ACTION_DUMMY }; -const u8 gUnknown_84643AC[] = { +static const u8 sOptions_Exit[] = { BP_ACTION_EXIT, BP_ACTION_DUMMY, BP_ACTION_DUMMY, BP_ACTION_DUMMY }; -const u8 gUnknown_84643B0[] = { +static const u8 sOptions_UseToss_Exit[] = { BP_ACTION_USE, BP_ACTION_TOSS, BP_ACTION_EXIT, BP_ACTION_DUMMY }; -const u8 gUnknown_84643B4[] = _(" "); +static const u8 sText_Space[] = _(" "); -const struct WindowTemplate gUnknown_84643B8[] = { +static const struct WindowTemplate sWindowTemplates_Main[] = { { .bg = 0, .tilemapLeft = 11, @@ -242,7 +241,7 @@ const struct WindowTemplate gUnknown_84643B8[] = { }, DUMMY_WIN_TEMPLATE }; -const struct WindowTemplate gUnknown_84643D8[] = { +static const struct WindowTemplate sWindowTemplates_Variable[] = { { .bg = 0x02, .tilemapLeft = 0x18, @@ -358,34 +357,34 @@ const struct WindowTemplate gUnknown_84643D8[] = { } }; -const u8 gUnknown_8464448[][3] = { +static const u8 sTextColors[][3] = { { 0, 1, 2 }, { 0, 2, 3 }, { 0, 3, 2 } }; -const struct OamData gOamData_8464454 = { +static const struct OamData sOamData = { .affineMode = ST_OAM_AFFINE_NORMAL, .shape = ST_OAM_SQUARE, .size = ST_OAM_SIZE_3, .priority = 1 }; -const union AnimCmd gSpriteAnims_846445C[] = { +static const union AnimCmd sSpriteAnim_Dummy[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -const union AnimCmd *const gSpriteAnimTable_8464464[] = { - gSpriteAnims_846445C +static const union AnimCmd *const sSpriteAnimTable[] = { + sSpriteAnim_Dummy }; -const union AffineAnimCmd gSpriteAffineAnims_8464468[] = { +static const union AffineAnimCmd sSpriteAffineAnim_Static[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END }; -const union AffineAnimCmd gSpriteAffineAnims_8464478[] = { +static const union AffineAnimCmd sSpriteAffineAnim_Wobble[] = { AFFINEANIMCMD_FRAME(0, 0, -2, 2), AFFINEANIMCMD_FRAME(0, 0, 2, 4), AFFINEANIMCMD_FRAME(0, 0, -2, 4), @@ -393,52 +392,52 @@ const union AffineAnimCmd gSpriteAffineAnims_8464478[] = { AFFINEANIMCMD_END }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_84644A0[] = { - gSpriteAffineAnims_8464468, - gSpriteAffineAnims_8464478 +static const union AffineAnimCmd *const sSpriteAffineAnimTable[] = { + sSpriteAffineAnim_Static, + sSpriteAffineAnim_Wobble }; -const struct CompressedSpriteSheet gUnknown_84644A8 = { - gUnknown_8E8560C, 0x800, 100 +static const struct CompressedSpriteSheet sBerryPouchSpriteSheet = { + gBerryPouchSpriteTiles, 0x800, 100 }; -const struct CompressedSpritePalette gUnknown_84644B0 = { - gUnknown_8E85C1C, 100 +static const struct CompressedSpritePalette sBerryPouchSpritePal = { + gBerryPouchSpritePalette, 100 }; -const struct SpriteTemplate gUnknown_84644B8 = { - 100, 100, &gOamData_8464454, gSpriteAnimTable_8464464, NULL, gSpriteAffineAnimTable_84644A0, SpriteCallbackDummy +static const struct SpriteTemplate sSpriteTemplate_BerryPouch = { + 100, 100, &sOamData, sSpriteAnimTable, NULL, sSpriteAffineAnimTable, SpriteCallbackDummy }; -void InitBerryPouch(u8 a0, void (*savedCallback)(void), u8 a2) +void InitBerryPouch(u8 type, void (*savedCallback)(void), u8 allowSelect) { u8 i; - gUnknown_203F36C = Alloc(sizeof(struct BerryPouchStruct_203F36C)); - if (gUnknown_203F36C == NULL) + sResources = Alloc(sizeof(struct BerryPouchStruct_203F36C)); + if (sResources == NULL) { SetMainCallback2(savedCallback); } else { - if (a0 != 6) - gUnknown_203F370.unk_04 = a0; - if (a2 != 0xFF) - gUnknown_203F370.unk_05 = a2; + if (type != BERRYPOUCH_NA) + sStaticCnt.type = type; + if (allowSelect != 0xFF) + sStaticCnt.allowSelect = allowSelect; if (savedCallback != NULL) - gUnknown_203F370.savedCallback = savedCallback; - gUnknown_203F36C->unk_000 = NULL; - gUnknown_203F36C->unk_009 = 0; - gUnknown_203F36C->unk_006 = 0xFF; + sStaticCnt.savedCallback = savedCallback; + sResources->exitCallback = NULL; + sResources->itemMenuIconId = 0; + sResources->indicatorTaskId = 0xFF; for (i = 0; i < 4; i++) - gUnknown_203F36C->unk_80C[i] = 0; + sResources->data[i] = 0; gTextFlags.autoScroll = FALSE; gSpecialVar_ItemId = ITEM_NONE; - SetMainCallback2(sub_813CE30); + SetMainCallback2(CB2_InitBerryPouch); } } -void sub_813CE00(void) +static void CB2_BerryPouchIdle(void) { RunTasks(); AnimateSprites(); @@ -447,27 +446,27 @@ void sub_813CE00(void) UpdatePaletteFade(); } -void sub_813CE1C(void) +static void VBlankCB_BerryPouchIdle(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_813CE30(void) +static void CB2_InitBerryPouch(void) { while (1) { if (sub_80BF72C() == TRUE) break; - if (sub_813CE5C() == TRUE) + if (RunBerryPouchInit() == TRUE) break; if (MenuHelpers_LinkSomething() == TRUE) break; } } -bool8 sub_813CE5C(void) +static bool8 RunBerryPouchInit(void) { u8 taskId; @@ -504,52 +503,52 @@ bool8 sub_813CE5C(void) gMain.state++; break; case 7: - sub_813D07C(); - gUnknown_203F36C->unk_80C[0] = 0; + BerryPouchInitBgs(); + sResources->data[0] = 0; gMain.state++; break; case 8: - if (sub_813D0E4()) + if (BerryPouchLoadGfx()) gMain.state++; break; case 9: - sub_813E910(); + BerryPouchInitWindows(); gMain.state++; break; case 10: - sub_813D8AC(); - sub_813D6F4(); - sub_813D754(); + SortAndCountBerries(); + SanitizeListMenuSelectionParams(); + UpdateListMenuScrollOffset(); gMain.state++; break; case 11: - if (!sub_813D1C0()) + if (!AllocateListMenuBuffers()) { - sub_813D00C(); + AbortBerryPouchLoading(); return TRUE; } gMain.state++; break; case 12: - sub_813D204(); + SetUpListMenuTemplate(); gMain.state++; break; case 13: - sub_813D6A4(); + PrintBerryPouchHeaderCentered(); gMain.state++; break; case 14: - taskId = CreateTask(sub_813DA68, 0); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); + taskId = CreateTask(Task_BerryPouchMain, 0); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sStaticCnt.listMenuScrollOffset, sStaticCnt.listMenuSelectedRow); gTasks[taskId].data[8] = 0; gMain.state++; break; case 15: - sub_813EC08(); + CreateBerryPouchSprite(); gMain.state++; break; case 16: - sub_813D5BC(); + CreateScrollIndicatorArrows_BerryPouchList(); gMain.state++; break; case 17: @@ -561,39 +560,39 @@ bool8 sub_813CE5C(void) gMain.state++; break; default: - SetVBlankCallback(sub_813CE1C); - SetMainCallback2(sub_813CE00); + SetVBlankCallback(VBlankCB_BerryPouchIdle); + SetMainCallback2(CB2_BerryPouchIdle); return TRUE; } return FALSE; } -void sub_813D00C(void) +static void AbortBerryPouchLoading(void) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - CreateTask(sub_813D048, 0); - SetVBlankCallback(sub_813CE1C); - SetMainCallback2(sub_813CE00); + CreateTask(Task_AbortBerryPouchLoading_WaitFade, 0); + SetVBlankCallback(VBlankCB_BerryPouchIdle); + SetMainCallback2(CB2_BerryPouchIdle); } -void sub_813D048(u8 taskId) +static void Task_AbortBerryPouchLoading_WaitFade(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(gUnknown_203F370.savedCallback); - sub_813D7CC(); + SetMainCallback2(sStaticCnt.savedCallback); + BerryPouch_DestroyResources(); DestroyTask(taskId); } } -void sub_813D07C(void) +static void BerryPouchInitBgs(void) { ResetAllBgsCoordinatesAndBgCntRegs(); - memset(gUnknown_203F36C->unk_00C, 0, BG_SCREEN_SIZE); + memset(sResources->bg1TilemapBuffer, 0, BG_SCREEN_SIZE); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, gUnknown_846434C, NELEMS(gUnknown_846434C)); - SetBgTilemapBuffer(1, gUnknown_203F36C->unk_00C); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); + SetBgTilemapBuffer(1, sResources->bg1TilemapBuffer); ScheduleBgCopyTilemapToVram(1); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); @@ -602,69 +601,69 @@ void sub_813D07C(void) ShowBg(2); } -bool8 sub_813D0E4(void) +static bool8 BerryPouchLoadGfx(void) { - switch (gUnknown_203F36C->unk_80C[0]) + switch (sResources->data[0]) { case 0: ResetTempTileDataBuffers(); DecompressAndCopyTileDataToVram(1, gUnknown_8E859D0, 0, 0, 0); - gUnknown_203F36C->unk_80C[0]++; + sResources->data[0]++; break; case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - LZDecompressWram(gUnknown_8E85C44, gUnknown_203F36C->unk_00C); - gUnknown_203F36C->unk_80C[0]++; + LZDecompressWram(gUnknown_8E85C44, sResources->bg1TilemapBuffer); + sResources->data[0]++; } break; case 2: LoadCompressedPalette(gUnknown_8E85BA4, 0, 0x60); if (gSaveBlock2Ptr->playerGender != MALE) LoadCompressedPalette(gUnknown_8E85BF4, 0, 0x20); - gUnknown_203F36C->unk_80C[0]++; + sResources->data[0]++; break; case 3: - LoadCompressedSpriteSheet(&gUnknown_84644A8); - gUnknown_203F36C->unk_80C[0]++; + LoadCompressedSpriteSheet(&sBerryPouchSpriteSheet); + sResources->data[0]++; break; default: - LoadCompressedSpritePalette(&gUnknown_84644B0); - gUnknown_203F36C->unk_80C[0] = 0; + LoadCompressedSpritePalette(&sBerryPouchSpritePal); + sResources->data[0] = 0; return TRUE; } return FALSE; } -bool8 sub_813D1C0(void) +static bool8 AllocateListMenuBuffers(void) { - gUnknown_203F37C = Alloc(NUM_BERRIES * sizeof(struct ListMenuItem)); - if (gUnknown_203F37C == NULL) + sListMenuItems = Alloc(NUM_BERRIES * sizeof(struct ListMenuItem)); + if (sListMenuItems == NULL) return FALSE; - gUnknown_203F380 = Alloc(gUnknown_203F36C->unk_007 * 27); - if (gUnknown_203F380 == NULL) + sListMenuStrbuf = Alloc(sResources->listMenuNumItems * 27); + if (sListMenuStrbuf == NULL) return FALSE; return TRUE; } -void sub_813D204(void) +static void SetUpListMenuTemplate(void) { u16 i; struct BagPocket *pocket = &gBagPockets[POCKET_BERRY_POUCH - 1]; - for (i = 0; i < gUnknown_203F36C->unk_007; i++) + for (i = 0; i < sResources->listMenuNumItems; i++) { - sub_813D31C(&gUnknown_203F380[i * 27], pocket->itemSlots[i].itemId); - gUnknown_203F37C[i].label = &gUnknown_203F380[i * 27]; - gUnknown_203F37C[i].index = i; + GetBerryNameAndIndexForMenu(&sListMenuStrbuf[i * 27], pocket->itemSlots[i].itemId); + sListMenuItems[i].label = &sListMenuStrbuf[i * 27]; + sListMenuItems[i].index = i; } - gUnknown_203F37C[i].label = gText_Close; - gUnknown_203F37C[i].index = i; - gMultiuseListMenuTemplate.items = gUnknown_203F37C; - if (gUnknown_203F370.unk_04 != 5) - gMultiuseListMenuTemplate.totalItems = gUnknown_203F36C->unk_007 + 1; + sListMenuItems[i].label = gText_Close; + sListMenuItems[i].index = i; + gMultiuseListMenuTemplate.items = sListMenuItems; + if (sStaticCnt.type != BERRYPOUCH_FROMBERRYCRUSH) + gMultiuseListMenuTemplate.totalItems = sResources->listMenuNumItems + 1; else - gMultiuseListMenuTemplate.totalItems = gUnknown_203F36C->unk_007; + gMultiuseListMenuTemplate.totalItems = sResources->listMenuNumItems; gMultiuseListMenuTemplate.windowId = 0; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = 9; @@ -672,71 +671,71 @@ void sub_813D204(void) gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 2; gMultiuseListMenuTemplate.upText_Y = 2; - gMultiuseListMenuTemplate.maxShowed = gUnknown_203F36C->unk_008; + gMultiuseListMenuTemplate.maxShowed = sResources->listMenuMaxShowed; gMultiuseListMenuTemplate.fontId = 2; gMultiuseListMenuTemplate.cursorPal = 2; gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorShadowPal = 3; - gMultiuseListMenuTemplate.moveCursorFunc = sub_813D3C0; - gMultiuseListMenuTemplate.itemPrintFunc = sub_813D430; + gMultiuseListMenuTemplate.moveCursorFunc = BerryPouchMoveCursorFunc; + gMultiuseListMenuTemplate.itemPrintFunc = BerryPouchItemPrintFunc; gMultiuseListMenuTemplate.cursorKind = 0; gMultiuseListMenuTemplate.scrollMultiple = 0; } -void sub_813D31C(u8 * dest, u16 itemId) +static void GetBerryNameAndIndexForMenu(u8 * dest, u16 itemId) { StringCopy(gStringVar4, gText_FontSize0); StringAppend(gStringVar4, gOtherText_UnkF9_08_Clear_01); ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar4, gStringVar1); CopyItemName(itemId, gStringVar1); - StringAppend(gStringVar4, gUnknown_84643B4); + StringAppend(gStringVar4, sText_Space); StringAppend(gStringVar4, gText_FontSize2); StringAppend(gStringVar4, gStringVar1); StringCopy(dest, gStringVar4); } -void sub_813D39C(s16 a0, u8 *dest) +static void CopySelectedListMenuItemName(s16 itemIdx, u8 *dest) { - StringCopy(dest, &gUnknown_203F380[a0 * 27]); + StringCopy(dest, &sListMenuStrbuf[itemIdx * 27]); } -void sub_813D3C0(s32 itemIndex, bool8 onInit, struct ListMenu *list) +static void BerryPouchMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) { if (onInit != TRUE) { PlaySE(SE_W287B); - sub_813EC28(); + StartBerryPouchSpriteWobbleAnim(); } - DestroyItemMenuIcon(gUnknown_203F36C->unk_009 ^ 1); - if (gUnknown_203F36C->unk_007 != itemIndex) - sub_80989A0(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIndex), gUnknown_203F36C->unk_009); + DestroyItemMenuIcon(sResources->itemMenuIconId ^ 1); + if (sResources->listMenuNumItems != itemIndex) + sub_80989A0(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIndex), sResources->itemMenuIconId); else - sub_80989A0(ITEM_N_A, gUnknown_203F36C->unk_009); - gUnknown_203F36C->unk_009 ^= 1; - sub_813D538(itemIndex); + sub_80989A0(ITEM_N_A, sResources->itemMenuIconId); + sResources->itemMenuIconId ^= 1; + PrintSelectedBerryDescription(itemIndex); } -void sub_813D430(u8 windowId, s32 itemId, u8 y) +static void BerryPouchItemPrintFunc(u8 windowId, s32 itemId, u8 y) { u16 unused; u16 itemQuantity; - if (itemId != -2 && gUnknown_203F36C->unk_007 != itemId) + if (itemId != -2 && sResources->listMenuNumItems != itemId) { unused = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemId); itemQuantity = BagGetQuantityByPocketPosition(POCKET_BERRY_POUCH, itemId); ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_813E9A0(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1); + BerryPouchPrint(windowId, 0, gStringVar4, 110, y, 0, 0, 0xFF, 1); } } -void sub_813D4B0(u8 taskId, u8 colorIdx) +static void BerryPouchSetArrowCursorFromListMenu(u8 taskId, u8 colorIdx) { - sub_813D4D0(ListMenuGetYCoordForPrintingArrowCursor(taskId), colorIdx); + BerryPouchSetArrowCursorAt(ListMenuGetYCoordForPrintingArrowCursor(taskId), colorIdx); } -void sub_813D4D0(u8 y, u8 colorIdx) +static void BerryPouchSetArrowCursorAt(u8 y, u8 colorIdx) { u8 width; u8 height; @@ -749,197 +748,197 @@ void sub_813D4D0(u8 y, u8 colorIdx) } else { - sub_813E9A0(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); + BerryPouchPrint(0, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, colorIdx); } } -void sub_813D538(s32 itemIdx) +static void PrintSelectedBerryDescription(s32 itemIdx) { const u8 *str; - if (itemIdx != gUnknown_203F36C->unk_007) + if (itemIdx != sResources->listMenuNumItems) str = ItemId_GetDescription(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIdx)); else - str = gUnknown_8416716; + str = gText_TheBerryPouchWillBePutAway; FillWindowPixelBuffer(1, PIXEL_FILL(0)); - sub_813E9A0(1, 2, str, 0, 2, 2, 0, 0, 0); + BerryPouchPrint(1, 2, str, 0, 2, 2, 0, 0, 0); } -void sub_813D594(s32 pal) +static void SetDescriptionWindowBorderPalette(s32 pal) { SetBgRectPal(1, 0, 16, 30, 4, pal + 1); ScheduleBgCopyTilemapToVram(1); } -void sub_813D5BC(void) +static void CreateScrollIndicatorArrows_BerryPouchList(void) { - if (gUnknown_203F370.unk_04 != 5) - gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, gUnknown_203F36C->unk_007 - gUnknown_203F36C->unk_008 + 1, 110, 110, &gUnknown_203F370.unk_0A); + if (sStaticCnt.type != BERRYPOUCH_FROMBERRYCRUSH) + sResources->indicatorTaskId = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, sResources->listMenuNumItems - sResources->listMenuMaxShowed + 1, 110, 110, &sStaticCnt.listMenuScrollOffset); else - gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, gUnknown_203F36C->unk_007 - gUnknown_203F36C->unk_008, 110, 110, &gUnknown_203F370.unk_0A); + sResources->indicatorTaskId = AddScrollIndicatorArrowPairParameterized(2, 160, 8, 120, sResources->listMenuNumItems - sResources->listMenuMaxShowed, 110, 110, &sStaticCnt.listMenuScrollOffset); } -void sub_813D614(void) +static void CreateScrollIndicatorArrows_TossQuantity(void) { - gUnknown_203F36C->unk_004 = 1; - gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &gUnknown_203F36C->unk_004); + sResources->indicatorOffset = 1; + sResources->indicatorTaskId = AddScrollIndicatorArrowPairParameterized(2, 212, 120, 152, 2, 110, 110, &sResources->indicatorOffset); } -void sub_813D64C(void) +static void CreateScrollIndicatorArrows_SellQuantity(void) { - gUnknown_203F36C->unk_004 = 1; - gUnknown_203F36C->unk_006 = AddScrollIndicatorArrowPairParameterized(2, 152, 72, 104, 2, 110, 110, &gUnknown_203F36C->unk_004); + sResources->indicatorOffset = 1; + sResources->indicatorTaskId = AddScrollIndicatorArrowPairParameterized(2, 152, 72, 104, 2, 110, 110, &sResources->indicatorOffset); } -void sub_813D684(void) +static void DestroyScrollIndicatorArrows(void) { - if (gUnknown_203F36C->unk_006 != 0xFF) + if (sResources->indicatorTaskId != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_203F36C->unk_006); - gUnknown_203F36C->unk_006 = 0xFF; + RemoveScrollIndicatorArrowPair(sResources->indicatorTaskId); + sResources->indicatorTaskId = 0xFF; } } -void sub_813D6A4(void) +static void PrintBerryPouchHeaderCentered(void) { - u32 slack = 72 - GetStringWidth(1, gUnknown_841670A, 0); - sub_813E9A0(2, 1, gUnknown_841670A, slack / 2, 1, 0, 0, 0, 0); + u32 slack = 72 - GetStringWidth(1, gText_BerryPouch, 0); + BerryPouchPrint(2, 1, gText_BerryPouch, slack / 2, 1, 0, 0, 0, 0); } -void sub_813D6E4(void) +void BerryPouch_CursorResetToTop(void) { - gUnknown_203F370.unk_08 = 0; - gUnknown_203F370.unk_0A = 0; + sStaticCnt.listMenuSelectedRow = 0; + sStaticCnt.listMenuScrollOffset = 0; } -void sub_813D6F4(void) +static void SanitizeListMenuSelectionParams(void) { s32 r2; - if (gUnknown_203F370.unk_04 != 5) - r2 = gUnknown_203F36C->unk_007 + 1; + if (sStaticCnt.type != BERRYPOUCH_FROMBERRYCRUSH) + r2 = sResources->listMenuNumItems + 1; else - r2 = gUnknown_203F36C->unk_007; - if (gUnknown_203F370.unk_0A != 0 && gUnknown_203F370.unk_0A + gUnknown_203F36C->unk_008 > r2) - gUnknown_203F370.unk_0A = r2 - gUnknown_203F36C->unk_008; - if (gUnknown_203F370.unk_0A + gUnknown_203F370.unk_08 >= r2) + r2 = sResources->listMenuNumItems; + if (sStaticCnt.listMenuScrollOffset != 0 && sStaticCnt.listMenuScrollOffset + sResources->listMenuMaxShowed > r2) + sStaticCnt.listMenuScrollOffset = r2 - sResources->listMenuMaxShowed; + if (sStaticCnt.listMenuScrollOffset + sStaticCnt.listMenuSelectedRow >= r2) { if (r2 == 0 || r2 == 1) - gUnknown_203F370.unk_08 = 0; + sStaticCnt.listMenuSelectedRow = 0; else - gUnknown_203F370.unk_08 = r2 - 1; + sStaticCnt.listMenuSelectedRow = r2 - 1; } } -void sub_813D754(void) +static void UpdateListMenuScrollOffset(void) { u8 lim; u8 i; - if (gUnknown_203F370.unk_04 != 5) - lim = gUnknown_203F36C->unk_007 + 1; + if (sStaticCnt.type != BERRYPOUCH_FROMBERRYCRUSH) + lim = sResources->listMenuNumItems + 1; else - lim = gUnknown_203F36C->unk_007; - if (gUnknown_203F370.unk_08 > 4) + lim = sResources->listMenuNumItems; + if (sStaticCnt.listMenuSelectedRow > 4) { - for (i = 0; i <= gUnknown_203F370.unk_08 - 4; gUnknown_203F370.unk_08--, gUnknown_203F370.unk_0A++, i++) + for (i = 0; i <= sStaticCnt.listMenuSelectedRow - 4; sStaticCnt.listMenuSelectedRow--, sStaticCnt.listMenuScrollOffset++, i++) { - if (gUnknown_203F370.unk_0A + gUnknown_203F36C->unk_008 == lim) + if (sStaticCnt.listMenuScrollOffset + sResources->listMenuMaxShowed == lim) break; } } } -void sub_813D7CC(void) +static void BerryPouch_DestroyResources(void) { - if (gUnknown_203F36C != NULL) - Free(gUnknown_203F36C); - if (gUnknown_203F37C != NULL) - Free(gUnknown_203F37C); - if (gUnknown_203F380 != NULL) - Free(gUnknown_203F380); + if (sResources != NULL) + Free(sResources); + if (sListMenuItems != NULL) + Free(sListMenuItems); + if (sListMenuStrbuf != NULL) + Free(sListMenuStrbuf); FreeAllWindowBuffers(); } void BerryPouch_StartFadeToExitCallback(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, -2, 0, 16, RGB_BLACK); - gTasks[taskId].func = sub_813D844; + gTasks[taskId].func = Task_BerryPouchFadeToExitCallback; } -void sub_813D844(u8 taskId) +static void Task_BerryPouchFadeToExitCallback(u8 taskId) { s16 * data = gTasks[taskId].data; if (!gPaletteFade.active) { - DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); - if (gUnknown_203F36C->unk_000 != NULL) - SetMainCallback2(gUnknown_203F36C->unk_000); + DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); + if (sResources->exitCallback != NULL) + SetMainCallback2(sResources->exitCallback); else - SetMainCallback2(gUnknown_203F370.savedCallback); - sub_813D684(); - sub_813D7CC(); + SetMainCallback2(sStaticCnt.savedCallback); + DestroyScrollIndicatorArrows(); + BerryPouch_DestroyResources(); DestroyTask(taskId); } } -void sub_813D8AC(void) +static void SortAndCountBerries(void) { u16 i; u32 r2; struct BagPocket *pocket = &gBagPockets[POCKET_BERRY_POUCH - 1]; SortAndCompactBagPocket(pocket); - gUnknown_203F36C->unk_007 = 0; + sResources->listMenuNumItems = 0; for (i = 0; i < pocket->capacity; i++) { if (pocket->itemSlots[i].itemId == ITEM_NONE) break; - gUnknown_203F36C->unk_007++; + sResources->listMenuNumItems++; } - if (gUnknown_203F370.unk_04 != 5) - r2 = gUnknown_203F36C->unk_007 + 1; + if (sStaticCnt.type != BERRYPOUCH_FROMBERRYCRUSH) + r2 = sResources->listMenuNumItems + 1; else - r2 = gUnknown_203F36C->unk_007; + r2 = sResources->listMenuNumItems; if (r2 > 7) - gUnknown_203F36C->unk_008 = 7; + sResources->listMenuMaxShowed = 7; else - gUnknown_203F36C->unk_008 = r2; + sResources->listMenuMaxShowed = r2; } void BerryPouch_SetExitCallback(void (*callback)(void)) { - gUnknown_203F36C->unk_000 = callback; + sResources->exitCallback = callback; } -void sub_813D940(u8 taskId, const u8 * str) +void InitTossQuantitySelectUI(u8 taskId, const u8 * str) { s16 * data = gTasks[taskId].data; - u8 windowId = sub_813EA08(8); + u8 windowId = GetOrCreateVariableWindow(8); u8 windowId2; - sub_813D39C(data[1], gStringVar1); + CopySelectedListMenuItemName(data[1], gStringVar1); StringExpandPlaceholders(gStringVar4, str); - sub_813E9A0(windowId, 2, gStringVar4, 0, 2, 1, 2, 0, 1); - windowId2 = sub_813EA08(0); + BerryPouchPrint(windowId, 2, gStringVar4, 0, 2, 1, 2, 0, 1); + windowId2 = GetOrCreateVariableWindow(0); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_813E9A0(windowId2, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + BerryPouchPrint(windowId2, 0, gStringVar4, 4, 10, 1, 0, 0, 1); } -void sub_813D9F8(u8 whichWindow, s16 quantity, u8 ndigits) +static void PrintxQuantityOnWindow(u8 whichWindow, s16 quantity, u8 ndigits) { - u8 windowId = sub_813EB10(whichWindow); + u8 windowId = GetVariableWindowId(whichWindow); FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); ConvertIntToDecimalStringN(gStringVar1, quantity, STR_CONV_MODE_LEADING_ZEROS, ndigits); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_813E9A0(windowId, 0, gStringVar4, 4, 10, 1, 0, 0, 1); + BerryPouchPrint(windowId, 0, gStringVar4, 4, 10, 1, 0, 0, 1); } -void sub_813DA68(u8 taskId) +static void Task_BerryPouchMain(u8 taskId) { s16 * data = gTasks[taskId].data; s32 menuInput; if (!gPaletteFade.active && sub_80BF72C() != TRUE) { menuInput = ListMenu_ProcessInput(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); - if (JOY_NEW(SELECT_BUTTON) && gUnknown_203F370.unk_05 == 1) + ListMenuGetScrollAndRow(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); + if (JOY_NEW(SELECT_BUTTON) && sStaticCnt.allowSelect == 1) { PlaySE(SE_SELECT); gSpecialVar_ItemId = 0; @@ -952,7 +951,7 @@ void sub_813DA68(u8 taskId) case -1: return; case -2: - if (gUnknown_203F370.unk_04 != 5) + if (sStaticCnt.type != BERRYPOUCH_FROMBERRYCRUSH) { PlaySE(SE_SELECT); gSpecialVar_ItemId = 0; @@ -961,25 +960,25 @@ void sub_813DA68(u8 taskId) break; default: PlaySE(SE_SELECT); - if (gUnknown_203F370.unk_04 == 5) + if (sStaticCnt.type == BERRYPOUCH_FROMBERRYCRUSH) { gSpecialVar_ItemId = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, menuInput); BerryPouch_StartFadeToExitCallback(taskId); } - else if (menuInput == gUnknown_203F36C->unk_007) + else if (menuInput == sResources->listMenuNumItems) { gSpecialVar_ItemId = 0; BerryPouch_StartFadeToExitCallback(taskId); } else { - sub_813D684(); - sub_813D594(1); - sub_813D4B0(data[0], 2); + DestroyScrollIndicatorArrows(); + SetDescriptionWindowBorderPalette(1); + BerryPouchSetArrowCursorFromListMenu(data[0], 2); data[1] = menuInput; data[2] = BagGetQuantityByPocketPosition(POCKET_BERRY_POUCH, menuInput); gSpecialVar_ItemId = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, menuInput); - gTasks[taskId].func = gUnknown_8464358[gUnknown_203F370.unk_04]; + gTasks[taskId].func = sBerryPouchContextMenuTasks[sStaticCnt.type]; } break; } @@ -987,58 +986,58 @@ void sub_813DA68(u8 taskId) } } -void sub_813DBB4(u8 taskId) +static void Task_CleanUpAndReturnToMain(u8 taskId) { - sub_813D594(0); - sub_813D5BC(); - gTasks[taskId].func = sub_813DA68; + SetDescriptionWindowBorderPalette(0); + CreateScrollIndicatorArrows_BerryPouchList(); + gTasks[taskId].func = Task_BerryPouchMain; } -void sub_813DBE4(u8 taskId) +static void CreateNormalContextMenu(u8 taskId) { s16 * data = gTasks[taskId].data; u8 windowId; u8 windowId2; - if (gUnknown_203F370.unk_04 == 4) + if (sStaticCnt.type == BERRYPOUCH_FROMBATTLE) { - gUnknown_203F384 = gUnknown_84643B0; - gUnknown_203F388 = 3; + sContextMenuOptions = sOptions_UseToss_Exit; + sContextMenuNumOptions = 3; } else if (MenuHelpers_LinkSomething() == TRUE || InUnionRoom() == TRUE) { - if (!sub_80BF6A8(gSpecialVar_ItemId)) + if (!itemid_link_can_give_berry(gSpecialVar_ItemId)) { - gUnknown_203F384 = gUnknown_84643AC; - gUnknown_203F388 = 1; + sContextMenuOptions = sOptions_Exit; + sContextMenuNumOptions = 1; } else { - gUnknown_203F384 = gUnknown_84643A8; - gUnknown_203F388 = 2; + sContextMenuOptions = sOptions_GiveExit; + sContextMenuNumOptions = 2; } } else { - gUnknown_203F384 = gUnknown_84643A4; - gUnknown_203F388 = 4; + sContextMenuOptions = sOptions_UseGiveTossExit; + sContextMenuNumOptions = 4; } - windowId = sub_813EA08(gUnknown_203F388 + 9); - AddItemMenuActionTextPrinters(windowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, GetFontAttribute(2, FONTATTR_LETTER_SPACING), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, gUnknown_203F388, gUnknown_846437C, gUnknown_203F384); - Menu_InitCursor(windowId, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, gUnknown_203F388, 0); - windowId2 = sub_813EA08(6); - sub_813D39C(data[1], gStringVar1); + windowId = GetOrCreateVariableWindow(sContextMenuNumOptions + 9); + AddItemMenuActionTextPrinters(windowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, GetFontAttribute(2, FONTATTR_LETTER_SPACING), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, sContextMenuActions, sContextMenuOptions); + Menu_InitCursor(windowId, 2, 0, 2, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) + 2, sContextMenuNumOptions, 0); + windowId2 = GetOrCreateVariableWindow(6); + CopySelectedListMenuItemName(data[1], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_StrVar1); - sub_813E9A0(windowId2, 2, gStringVar4, 0, 2, 1, 2, 0, 1); + BerryPouchPrint(windowId2, 2, gStringVar4, 0, 2, 1, 2, 0, 1); } -void sub_813DD74(u8 taskId) +static void Task_NormalContextMenu_0(u8 taskId) { - sub_813DBE4(taskId); - gTasks[taskId].func = sub_813DDA0; + CreateNormalContextMenu(taskId); + gTasks[taskId].func = Task_NormalContextMenu_1; } -void sub_813DDA0(u8 taskId) +static void Task_NormalContextMenu_1(u8 taskId) { s8 input; if (sub_80BF72C() != TRUE) @@ -1050,25 +1049,25 @@ void sub_813DDA0(u8 taskId) break; case -1: PlaySE(SE_SELECT); - gUnknown_846437C[BP_ACTION_EXIT].func.void_u8(taskId); + sContextMenuActions[BP_ACTION_EXIT].func.void_u8(taskId); break; default: PlaySE(SE_SELECT); - gUnknown_846437C[gUnknown_203F384[input]].func.void_u8(taskId); + sContextMenuActions[sContextMenuOptions[input]].func.void_u8(taskId); break; } } } -void sub_813DE0C(u8 taskId) +static void Task_BerryPouch_Use_0(u8 taskId) { - sub_813EA98(gUnknown_203F388 + 9); - sub_813EA98(6); + DestroyVariableWindow(sContextMenuNumOptions + 9); + DestroyVariableWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(2); - if (gUnknown_203F370.unk_04 == 4) + if (sStaticCnt.type == BERRYPOUCH_FROMBATTLE) { if (ItemId_GetBattleFunc(gSpecialVar_ItemId) == NULL) FieldUseFunc_OakStopsYou(taskId); @@ -1076,209 +1075,209 @@ void sub_813DE0C(u8 taskId) ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); } else if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) - sub_813E274(taskId); + Task_Give_PrintThereIsNoPokemon(taskId); else ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); } -void sub_813DEBC(u8 taskId) +static void Task_BerryPouch_Toss_0(u8 taskId) { s16 * data = gTasks[taskId].data; - ClearWindowTilemap(sub_813EB10(gUnknown_203F388 + 9)); - ClearWindowTilemap(sub_813EB10(6)); - sub_813EA98(gUnknown_203F388 + 9); - sub_813EA98(6); + ClearWindowTilemap(GetVariableWindowId(sContextMenuNumOptions + 9)); + ClearWindowTilemap(GetVariableWindowId(6)); + DestroyVariableWindow(sContextMenuNumOptions + 9); + DestroyVariableWindow(6); PutWindowTilemap(0); data[8] = 1; if (data[2] == 1) - sub_813DF54(taskId); + Task_AskTossMultiple(taskId); else { - sub_813D940(taskId, gUnknown_84163DB); - sub_813D614(); - gTasks[taskId].func = sub_813E010; + InitTossQuantitySelectUI(taskId, gText_TossOutHowManyStrVar1s); + CreateScrollIndicatorArrows_TossQuantity(); + gTasks[taskId].func = Task_Toss_SelectMultiple; } } -void sub_813DF54(u8 taskId) +static void Task_AskTossMultiple(u8 taskId) { s16 * data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); - StringExpandPlaceholders(gStringVar4, gUnknown_8416409); - sub_813E9A0(sub_813EA08(7), 2, gStringVar4, 0, 2, 1, 2, 0, 1); - sub_813EB7C(taskId, &gUnknown_846436C); + StringExpandPlaceholders(gStringVar4, gText_ThrowAwayStrVar2OfThisItemQM); + BerryPouchPrint(GetOrCreateVariableWindow(7), 2, gStringVar4, 0, 2, 1, 2, 0, 1); + CreateYesNoMenuWin3(taskId, &sYesNoFuncs_Toss); } -void sub_813DFC8(u8 taskId) +static void Task_TossNo(u8 taskId) { s16 * data = gTasks[taskId].data; - sub_813EA98(7); + DestroyVariableWindow(7); PutWindowTilemap(1); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(2); - sub_813D4B0(data[0], 1); - sub_813DBB4(taskId); + BerryPouchSetArrowCursorFromListMenu(data[0], 1); + Task_CleanUpAndReturnToMain(taskId); } -void sub_813E010(u8 taskId) +static void Task_Toss_SelectMultiple(u8 taskId) { s16 * data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) - sub_813D9F8(0, data[8], 3); + PrintxQuantityOnWindow(0, data[8], 3); else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - ClearWindowTilemap(sub_813EB10(8)); - sub_813EA98(8); - sub_813EA98(0); + ClearWindowTilemap(GetVariableWindowId(8)); + DestroyVariableWindow(8); + DestroyVariableWindow(0); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(2); - sub_813D684(); - sub_813DF54(taskId); + DestroyScrollIndicatorArrows(); + Task_AskTossMultiple(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_813EA98(8); - sub_813EA98(0); + DestroyVariableWindow(8); + DestroyVariableWindow(0); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(2); - sub_813D4B0(data[0], 1); - sub_813D684(); - sub_813DBB4(taskId); + BerryPouchSetArrowCursorFromListMenu(data[0], 1); + DestroyScrollIndicatorArrows(); + Task_CleanUpAndReturnToMain(taskId); } } -void sub_813E0DC(u8 taskId) +static void Task_TossYes(u8 taskId) { s16 * data = gTasks[taskId].data; - sub_813EA98(7); - sub_813D39C(data[1], gStringVar1); + DestroyVariableWindow(7); + CopySelectedListMenuItemName(data[1], gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); - StringExpandPlaceholders(gStringVar4, gUnknown_84163F4); - sub_813E9A0(sub_813EA08(9), 2, gStringVar4, 0, 2, 1, 2, 0, 1); - gTasks[taskId].func = sub_813E164; + StringExpandPlaceholders(gStringVar4, gText_ThrewAwayStrVar2StrVar1s); + BerryPouchPrint(GetOrCreateVariableWindow(9), 2, gStringVar4, 0, 2, 1, 2, 0, 1); + gTasks[taskId].func = Task_WaitButtonThenTossBerries; } -void sub_813E164(u8 taskId) +static void Task_WaitButtonThenTossBerries(u8 taskId) { s16 * data = gTasks[taskId].data; if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); RemoveBagItem(gSpecialVar_ItemId, data[8]); - sub_813EA98(9); - DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); - sub_813D8AC(); - sub_813D6F4(); - sub_813D204(); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); + DestroyVariableWindow(9); + DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); + SortAndCountBerries(); + SanitizeListMenuSelectionParams(); + SetUpListMenuTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sStaticCnt.listMenuScrollOffset, sStaticCnt.listMenuSelectedRow); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); - sub_813D4B0(data[0], 1); - sub_813DBB4(taskId); + BerryPouchSetArrowCursorFromListMenu(data[0], 1); + Task_CleanUpAndReturnToMain(taskId); } } -void sub_813E200(u8 taskId) +static void Task_BerryPouch_Give_0(u8 taskId) { - sub_813EA98(gUnknown_203F388 + 9); - sub_813EA98(6); + DestroyVariableWindow(sContextMenuNumOptions + 9); + DestroyVariableWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(2); if (CalculatePlayerPartyCount() == 0) - sub_813E274(taskId); + Task_Give_PrintThereIsNoPokemon(taskId); else { - gUnknown_203F36C->unk_000 = sub_8126EDC; + sResources->exitCallback = sub_8126EDC; gTasks[taskId].func = BerryPouch_StartFadeToExitCallback; } } -void sub_813E274(u8 taskId) +static void Task_Give_PrintThereIsNoPokemon(u8 taskId) { - DisplayItemMessageInBerryPouch(taskId, 2, gText_ThereIsNoPokemon, sub_813E290); + DisplayItemMessageInBerryPouch(taskId, 2, gText_ThereIsNoPokemon, Task_WaitButtonBeforeDialogueWindowDestruction); } -void sub_813E290(u8 taskId) +static void Task_WaitButtonBeforeDialogueWindowDestruction(u8 taskId) { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_813E2B8(taskId); + Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu(taskId); } } -void sub_813E2B8(u8 taskId) +void Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu(u8 taskId) { s16 * data = gTasks[taskId].data; - sub_813EACC(5); - DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); - sub_813D8AC(); - sub_813D6F4(); - sub_813D204(); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); + TryDestroyVariableWindow(5); + DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); + SortAndCountBerries(); + SanitizeListMenuSelectionParams(); + SetUpListMenuTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sStaticCnt.listMenuScrollOffset, sStaticCnt.listMenuSelectedRow); ScheduleBgCopyTilemapToVram(0); - sub_813D4B0(data[0], 1); - sub_813DBB4(taskId); + BerryPouchSetArrowCursorFromListMenu(data[0], 1); + Task_CleanUpAndReturnToMain(taskId); } -void sub_813E320(u8 taskId) +static void Task_BerryPouch_Exit_0(u8 taskId) { - sub_813EA98(gUnknown_203F388 + 9); - sub_813EA98(6); + DestroyVariableWindow(sContextMenuNumOptions + 9); + DestroyVariableWindow(6); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(2); - sub_813D4B0(gTasks[taskId].data[0], 1); - sub_813DBB4(taskId); + BerryPouchSetArrowCursorFromListMenu(gTasks[taskId].data[0], 1); + Task_CleanUpAndReturnToMain(taskId); } -void sub_813E37C(u8 taskId) +static void Task_ContextMenu_FromPartyGiveMenu_0(u8 taskId) { s16 * data = gTasks[taskId].data; u16 itemId = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1]); - if (!sub_80BF6A8(itemId)) + if (!itemid_link_can_give_berry(itemId)) { CopyItemName(itemId, gStringVar1); - StringExpandPlaceholders(gStringVar4, gUnknown_8416374); - DisplayItemMessageInBerryPouch(taskId, 2, gStringVar4, sub_813E290); + StringExpandPlaceholders(gStringVar4, gText_TheStrVar1CantBeHeldHere); + DisplayItemMessageInBerryPouch(taskId, 2, gStringVar4, Task_WaitButtonBeforeDialogueWindowDestruction); } else { - gUnknown_203F36C->unk_000 = c2_8123744; + sResources->exitCallback = c2_8123744; gTasks[taskId].func = BerryPouch_StartFadeToExitCallback; } } -void sub_813E3FC(u8 taskId) +static void Task_ContextMenu_FromPokemonPC(u8 taskId) { - gUnknown_203F36C->unk_000 = sub_808CE60; + sResources->exitCallback = sub_808CE60; gTasks[taskId].func = BerryPouch_StartFadeToExitCallback; } -void sub_813E428(u8 taskId) +static void Task_ContextMenu_Sell_0(u8 taskId) { s16 * data = gTasks[taskId].data; if (itemid_get_market_price(gSpecialVar_ItemId) == 0) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_OhNoICantBuyThat); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, sub_813E2B8); + DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu); } else { data[8] = 1; if (data[2] == 1) { - sub_813EBD4(); - sub_813E4E4(taskId); + PrintMoneyInWin2(); + Task_AskSellMultiple(taskId); } else { @@ -1286,89 +1285,89 @@ void sub_813E428(u8 taskId) data[2] = 99; CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_HowManyWouldYouLikeToSell); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, sub_813E5B8); + DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_Sell_PrintSelectMultipleUI); } } } -void sub_813E4E4(u8 taskId) +static void Task_AskSellMultiple(u8 taskId) { s16 * data = gTasks[taskId].data; ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayThisMuch_WouldThatBeOkay); - DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, sub_813E554); + DisplayItemMessageInBerryPouch(taskId, sub_80BF8E4(), gStringVar4, Task_SellMultiple_CreateYesNoMenu); } -void sub_813E554(u8 taskId) +static void Task_SellMultiple_CreateYesNoMenu(u8 taskId) { - sub_813EBA8(taskId, &gUnknown_8464374); + CreateYesNoMenuWin4(taskId, &sYesNoFuncs_Sell); } -void sub_813E568(u8 taskId) +static void Task_SellNo(u8 taskId) { s16 * data = gTasks[taskId].data; - sub_813EA98(2); - sub_813EACC(5); + DestroyVariableWindow(2); + TryDestroyVariableWindow(5); PutWindowTilemap(2); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); - sub_813D4B0(data[0], 1); - sub_813DBB4(taskId); + BerryPouchSetArrowCursorFromListMenu(data[0], 1); + Task_CleanUpAndReturnToMain(taskId); } -void sub_813E5B8(u8 taskId) +static void Task_Sell_PrintSelectMultipleUI(u8 taskId) { s16 * data = gTasks[taskId].data; - u8 windowId = sub_813EA08(1); + u8 windowId = GetOrCreateVariableWindow(1); ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - sub_813E9A0(windowId, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); - sub_813E668(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); - sub_813EBD4(); - sub_813D64C(); - gTasks[taskId].func = sub_813E690; + BerryPouchPrint(windowId, 0, gStringVar4, 4, 10, 1, 0, 0xFF, 1); + SellMultiple_UpdateSellPriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); + PrintMoneyInWin2(); + CreateScrollIndicatorArrows_SellQuantity(); + gTasks[taskId].func = Task_Sell_SelectMultiple; } -void sub_813E668(s32 price) +static void SellMultiple_UpdateSellPriceDisplay(s32 price) { - PrintMoneyAmount(sub_813EB10(1), 56, 10, price, 0); + PrintMoneyAmount(GetVariableWindowId(1), 56, 10, price, 0); } -void sub_813E690(u8 taskId) +static void Task_Sell_SelectMultiple(u8 taskId) { s16 * data = gTasks[taskId].data; if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_813D9F8(1, data[8], 2); - sub_813E668(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); + PrintxQuantityOnWindow(1, data[8], 2); + SellMultiple_UpdateSellPriceDisplay(itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8]); } else if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_813EA98(1); + DestroyVariableWindow(1); PutWindowTilemap(0); ScheduleBgCopyTilemapToVram(0); - sub_813D684(); - sub_813E4E4(taskId); + DestroyScrollIndicatorArrows(); + Task_AskSellMultiple(taskId); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_813EA98(1); - sub_813EA98(2); - sub_813EACC(5); + DestroyVariableWindow(1); + DestroyVariableWindow(2); + TryDestroyVariableWindow(5); PutWindowTilemap(2); PutWindowTilemap(0); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); - sub_813D684(); - sub_813D4B0(data[0], 1); - sub_813DBB4(taskId); + DestroyScrollIndicatorArrows(); + BerryPouchSetArrowCursorFromListMenu(data[0], 1); + Task_CleanUpAndReturnToMain(taskId); } } -void sub_813E768(u8 taskId) +static void Task_SellYes(u8 taskId) { s16 * data = gTasks[taskId].data; PutWindowTilemap(0); @@ -1376,41 +1375,41 @@ void sub_813E768(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar3, itemid_get_market_price(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1])) / 2 * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverItemsWorthYen); - DisplayItemMessageInBerryPouch(taskId, 2, gStringVar4, sub_813E7F0); + DisplayItemMessageInBerryPouch(taskId, 2, gStringVar4, Task_SellBerries_PlaySfxAndRemoveBerries); } -void sub_813E7F0(u8 taskId) +static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId) { s16 * data = gTasks[taskId].data; PlaySE(SE_CASHIER); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); sub_809C09C(gSpecialVar_ItemId, data[8], 2); - DestroyListMenuTask(data[0], &gUnknown_203F370.unk_0A, &gUnknown_203F370.unk_08); - sub_813D8AC(); - sub_813D6F4(); - sub_813D204(); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203F370.unk_0A, gUnknown_203F370.unk_08); - sub_813D4B0(data[0], 2); - PrintMoneyAmountInMoneyBox(sub_813EB10(2), GetMoney(&gSaveBlock1Ptr->money), 0); - gTasks[taskId].func = sub_813E8D4; + DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); + SortAndCountBerries(); + SanitizeListMenuSelectionParams(); + SetUpListMenuTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, sStaticCnt.listMenuScrollOffset, sStaticCnt.listMenuSelectedRow); + BerryPouchSetArrowCursorFromListMenu(data[0], 2); + PrintMoneyAmountInMoneyBox(GetVariableWindowId(2), GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = Task_SellBerries_WaitButton; } -void sub_813E8D4(u8 taskId) +static void Task_SellBerries_WaitButton(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_813EA98(2); + DestroyVariableWindow(2); PutWindowTilemap(2); - sub_813E2B8(taskId); + Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu(taskId); } } -void sub_813E910(void) +static void BerryPouchInitWindows(void) { u8 i; - InitWindows(gUnknown_84643B8); + InitWindows(sWindowTemplates_Main); DeactivateAllTextPrinters(); TextWindow_SetUserSelectedFrame(0, 0x001, 0xE0); TextWindow_LoadResourcesStdFrame0(0, 0x013, 0xD0); @@ -1424,102 +1423,102 @@ void sub_813E910(void) ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(2); for (i = 0; i < 14; i++) - gUnknown_203F38C[i] = 0xFF; + sVariableWindowIds[i] = 0xFF; } -void sub_813E9A0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) +static void BerryPouchPrint(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorIdx) { - AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, gUnknown_8464448[colorIdx], speed, str); + AddTextPrinterParameterized4(windowId, fontId, x, y, letterSpacing, lineSpacing, sTextColors[colorIdx], speed, str); } -u8 sub_813EA08(u8 winIdx) +static u8 GetOrCreateVariableWindow(u8 winIdx) { - u8 retval = gUnknown_203F38C[winIdx]; + u8 retval = sVariableWindowIds[winIdx]; if (retval == 0xFF) { - gUnknown_203F38C[winIdx] = AddWindow(&gUnknown_84643D8[winIdx]); + sVariableWindowIds[winIdx] = AddWindow(&sWindowTemplates_Variable[winIdx]); if (winIdx == 2 || winIdx == 6 || winIdx == 7 || winIdx == 8 || winIdx == 9) - DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x00A, 0xC); + DrawStdFrameWithCustomTileAndPalette(sVariableWindowIds[winIdx], FALSE, 0x00A, 0xC); else - DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x001, 0xE); + DrawStdFrameWithCustomTileAndPalette(sVariableWindowIds[winIdx], FALSE, 0x001, 0xE); ScheduleBgCopyTilemapToVram(2); - retval = gUnknown_203F38C[winIdx]; + retval = sVariableWindowIds[winIdx]; } return retval; } -void sub_813EA78(u8 winIdx) +static void VariableWindowSetAltFrameTileAndPalette(u8 winIdx) { - DrawStdFrameWithCustomTileAndPalette(gUnknown_203F38C[winIdx], FALSE, 0x001, 0xE); + DrawStdFrameWithCustomTileAndPalette(sVariableWindowIds[winIdx], FALSE, 0x001, 0xE); } -void sub_813EA98(u8 winIdx) +static void DestroyVariableWindow(u8 winIdx) { - ClearStdWindowAndFrameToTransparent(gUnknown_203F38C[winIdx], FALSE); - ClearWindowTilemap(gUnknown_203F38C[winIdx]); - RemoveWindow(gUnknown_203F38C[winIdx]); + ClearStdWindowAndFrameToTransparent(sVariableWindowIds[winIdx], FALSE); + ClearWindowTilemap(sVariableWindowIds[winIdx]); + RemoveWindow(sVariableWindowIds[winIdx]); ScheduleBgCopyTilemapToVram(2); - gUnknown_203F38C[winIdx] = 0xFF; + sVariableWindowIds[winIdx] = 0xFF; } -void sub_813EACC(u8 winIdx) +static void TryDestroyVariableWindow(u8 winIdx) { - if (gUnknown_203F38C[winIdx] != 0xFF) + if (sVariableWindowIds[winIdx] != 0xFF) { - ClearDialogWindowAndFrameToTransparent(gUnknown_203F38C[winIdx], FALSE); - ClearWindowTilemap(gUnknown_203F38C[winIdx]); - RemoveWindow(gUnknown_203F38C[winIdx]); + ClearDialogWindowAndFrameToTransparent(sVariableWindowIds[winIdx], FALSE); + ClearWindowTilemap(sVariableWindowIds[winIdx]); + RemoveWindow(sVariableWindowIds[winIdx]); PutWindowTilemap(1); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(2); - gUnknown_203F38C[winIdx] = 0xFF; + sVariableWindowIds[winIdx] = 0xFF; } } -u8 sub_813EB10(u8 winIdx) +static u8 GetVariableWindowId(u8 winIdx) { - return gUnknown_203F38C[winIdx]; + return sVariableWindowIds[winIdx]; } void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFunc followUpFunc) { - if (gUnknown_203F38C[5] == 0xFF) - gUnknown_203F38C[5] = AddWindow(&gUnknown_84643D8[5]); - DisplayMessageAndContinueTask(taskId, gUnknown_203F38C[5], 0x013, 0xD, fontId, GetTextSpeedSetting(), str, followUpFunc); + if (sVariableWindowIds[5] == 0xFF) + sVariableWindowIds[5] = AddWindow(&sWindowTemplates_Variable[5]); + DisplayMessageAndContinueTask(taskId, sVariableWindowIds[5], 0x013, 0xD, fontId, GetTextSpeedSetting(), str, followUpFunc); ScheduleBgCopyTilemapToVram(2); } -void sub_813EB7C(u8 taskId, const struct YesNoFuncTable * ptrs) +static void CreateYesNoMenuWin3(u8 taskId, const struct YesNoFuncTable * ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &gUnknown_84643D8[3], 2, 0, 2, 0x001, 0xE, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[3], 2, 0, 2, 0x001, 0xE, ptrs); } -void sub_813EBA8(u8 taskId, const struct YesNoFuncTable * ptrs) +static void CreateYesNoMenuWin4(u8 taskId, const struct YesNoFuncTable * ptrs) { - CreateYesNoMenuWithCallbacks(taskId, &gUnknown_84643D8[4], 2, 0, 2, 0x001, 0xE, ptrs); + CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[4], 2, 0, 2, 0x001, 0xE, ptrs); } -void sub_813EBD4(void) +static void PrintMoneyInWin2(void) { - PrintMoneyAmountInMoneyBoxWithBorder(sub_813EA08(2), 0x00A, 0xC, GetMoney(&gSaveBlock1Ptr->money)); + PrintMoneyAmountInMoneyBoxWithBorder(GetOrCreateVariableWindow(2), 0x00A, 0xC, GetMoney(&gSaveBlock1Ptr->money)); } -void sub_813EC08(void) +static void CreateBerryPouchSprite(void) { - gUnknown_203F39C = CreateSprite(&gUnknown_84644B8, 40, 76, 0); + sBerryPouchSpriteId = CreateSprite(&sSpriteTemplate_BerryPouch, 40, 76, 0); } -void sub_813EC28(void) +static void StartBerryPouchSpriteWobbleAnim(void) { - struct Sprite * sprite = &gSprites[gUnknown_203F39C]; + struct Sprite * sprite = &gSprites[sBerryPouchSpriteId]; if (sprite->affineAnimEnded) { StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_813EC64; + sprite->callback = SpriteCB_BerryPouchWaitWobbleAnim; } } -void sub_813EC64(struct Sprite * sprite) +static void SpriteCB_BerryPouchWaitWobbleAnim(struct Sprite * sprite) { if (sprite->affineAnimEnded) { diff --git a/src/item_use.c b/src/item_use.c index 3653a1699..5fa9390c1 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -435,7 +435,7 @@ void FieldUseFunc_BerryPouch(u8 taskId) void InitBerryPouchFromBag(void) { - InitBerryPouch(0, ReturnToBagFromKeyItem, 0); + InitBerryPouch(BERRYPOUCH_FROMFIELD, ReturnToBagFromKeyItem, 0); } void Task_InitBerryPouchFromField(u8 taskId) @@ -444,7 +444,7 @@ void Task_InitBerryPouchFromField(u8 taskId) { CleanupOverworldWindowsAndTilemaps(); sub_80A1184(); - InitBerryPouch(0, CB2_ReturnToField, 1); + InitBerryPouch(BERRYPOUCH_FROMFIELD, CB2_ReturnToField, 1); DestroyTask(taskId); } } @@ -457,7 +457,7 @@ void BattleUseFunc_BerryPouch(u8 taskId) void InitBerryPouchFromBattle(void) { - InitBerryPouch(4, sub_8107ECC, 0); + InitBerryPouch(BERRYPOUCH_FROMBATTLE, sub_8107ECC, 0); } void FieldUseFunc_TeachyTv(u8 taskId) @@ -852,7 +852,7 @@ void FieldUseFunc_OakStopsYou(u8 taskId) if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) { StringExpandPlaceholders(gStringVar4, gUnknown_8416425); - DisplayItemMessageInBerryPouch(taskId, 4, gStringVar4, sub_813E2B8); + DisplayItemMessageInBerryPouch(taskId, 4, gStringVar4, Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu); } else sub_80A1110(taskId, gTasks[taskId].data[3]); diff --git a/src/menu_helpers.c b/src/menu_helpers.c index fdcb9a56e..06e7bb08b 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -95,7 +95,7 @@ u8 sub_80BF66C(void) return 0; } -bool8 sub_80BF6A8(u16 itemId) +bool8 itemid_link_can_give_berry(u16 itemId) { if (itemId != ITEM_ENIGMA_BERRY) return TRUE; From 07064bd58603de0f0470bab373196a40fe5d929c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 30 Sep 2019 21:04:25 -0400 Subject: [PATCH 12/13] Name extern berry pouch gfx --- data/graphics.s | 8 ++++---- include/graphics.h | 8 ++++---- src/berry_pouch.c | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/data/graphics.s b/data/graphics.s index e03266f85..9c5d1c3f9 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -13991,19 +13991,19 @@ gItemPcTilemap:: @ 8E85458 gBerryPouchSpriteTiles:: @ 8E8560C .incbin "graphics/berry_pouch/unk_8E8560C.4bpp.lz" -gUnknown_8E859D0:: @ 8E859D0 +gBerryPouchBgGfx:: @ 8E859D0 .incbin "graphics/berry_pouch/unk_8E859D0.4bpp.lz" -gUnknown_8E85BA4:: @ 8E85BA4 +gBerryPouchBgPals:: @ 8E85BA4 .incbin "graphics/berry_pouch/unk_8E85BA4.gbapal.lz" -gUnknown_8E85BF4:: @ 8E85BF4 +gBerryPouchBgPal0FemaleOverride:: @ 8E85BF4 .incbin "graphics/berry_pouch/unk_8E85BF4.gbapal.lz" gBerryPouchSpritePalette:: @ 8E85C1C .incbin "graphics/berry_pouch/unk_8E85C1C.gbapal.lz" -gUnknown_8E85C44:: @ 8E85C44 +gBerryPouchBg1Tilemap:: @ 8E85C44 .incbin "graphics/berry_pouch/unk_8E85C44.bin.lz" gUnknown_8E85DC8:: @ 8E85DC8 diff --git a/include/graphics.h b/include/graphics.h index 5c6f201db..a76607f40 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -1000,10 +1000,10 @@ extern const u8 gCreditsAllRightsReservedGfxMap[]; // berry_pouch extern const u32 gBerryPouchSpriteTiles[]; -extern const u8 gUnknown_8E859D0[]; -extern const u8 gUnknown_8E85BA4[]; -extern const u8 gUnknown_8E85BF4[]; +extern const u8 gBerryPouchBgGfx[]; +extern const u8 gBerryPouchBgPals[]; +extern const u8 gBerryPouchBgPal0FemaleOverride[]; extern const u32 gBerryPouchSpritePalette[]; -extern const u8 gUnknown_8E85C44[]; +extern const u8 gBerryPouchBg1Tilemap[]; #endif //GUARD_GRAPHICS_H diff --git a/src/berry_pouch.c b/src/berry_pouch.c index abf2484f6..9be2537b9 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -607,20 +607,20 @@ static bool8 BerryPouchLoadGfx(void) { case 0: ResetTempTileDataBuffers(); - DecompressAndCopyTileDataToVram(1, gUnknown_8E859D0, 0, 0, 0); + DecompressAndCopyTileDataToVram(1, gBerryPouchBgGfx, 0, 0, 0); sResources->data[0]++; break; case 1: if (FreeTempTileDataBuffersIfPossible() != TRUE) { - LZDecompressWram(gUnknown_8E85C44, sResources->bg1TilemapBuffer); + LZDecompressWram(gBerryPouchBg1Tilemap, sResources->bg1TilemapBuffer); sResources->data[0]++; } break; case 2: - LoadCompressedPalette(gUnknown_8E85BA4, 0, 0x60); + LoadCompressedPalette(gBerryPouchBgPals, 0, 0x60); if (gSaveBlock2Ptr->playerGender != MALE) - LoadCompressedPalette(gUnknown_8E85BF4, 0, 0x20); + LoadCompressedPalette(gBerryPouchBgPal0FemaleOverride, 0, 0x20); sResources->data[0]++; break; case 3: From 32f2bb3ddaf1107f8e6bb02c0acadc96ecc55772 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 1 Oct 2019 19:44:10 -0400 Subject: [PATCH 13/13] Address review comments --- src/berry_pouch.c | 72 +++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/src/berry_pouch.c b/src/berry_pouch.c index 9be2537b9..525249514 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -64,8 +64,8 @@ enum static EWRAM_DATA struct BerryPouchStruct_203F36C *sResources = NULL; static EWRAM_DATA struct BerryPouchStruct_203F370 sStaticCnt = {}; static EWRAM_DATA struct ListMenuItem *sListMenuItems = NULL; -static EWRAM_DATA u8 *sListMenuStrbuf = NULL; -static EWRAM_DATA const u8 *sContextMenuOptions = NULL; +static EWRAM_DATA u8 * sListMenuStrbuf = NULL; +static EWRAM_DATA const u8 * sContextMenuOptions = NULL; static EWRAM_DATA u8 sContextMenuNumOptions = 0; static ALIGNED(4) EWRAM_DATA u8 sVariableWindowIds[14] = {}; static ALIGNED(4) EWRAM_DATA u8 sBerryPouchSpriteId = 0; @@ -91,22 +91,22 @@ static void BerryPouch_DestroyResources(void); static void Task_BerryPouchFadeToExitCallback(u8 taskId); static void SortAndCountBerries(void); static void Task_BerryPouchMain(u8 taskId); -static void Task_NormalContextMenu_0(u8 taskId); -static void Task_NormalContextMenu_1(u8 taskId); -static void Task_BerryPouch_Use_0(u8 taskId); -static void Task_BerryPouch_Toss_0(u8 taskId); +static void Task_NormalContextMenu(u8 taskId); +static void Task_NormalContextMenu_HandleInput(u8 taskId); +static void Task_BerryPouch_Use(u8 taskId); +static void Task_BerryPouch_Toss(u8 taskId); static void Task_AskTossMultiple(u8 taskId); static void Task_TossNo(u8 taskId); static void Task_Toss_SelectMultiple(u8 taskId); static void Task_TossYes(u8 taskId); static void Task_WaitButtonThenTossBerries(u8 taskId); -static void Task_BerryPouch_Give_0(u8 taskId); +static void Task_BerryPouch_Give(u8 taskId); static void Task_Give_PrintThereIsNoPokemon(u8 taskId); static void Task_WaitButtonBeforeDialogueWindowDestruction(u8 taskId); -static void Task_BerryPouch_Exit_0(u8 taskId); -static void Task_ContextMenu_FromPartyGiveMenu_0(u8 taskId); +static void Task_BerryPouch_Exit(u8 taskId); +static void Task_ContextMenu_FromPartyGiveMenu(u8 taskId); static void Task_ContextMenu_FromPokemonPC(u8 taskId); -static void Task_ContextMenu_Sell_0(u8 taskId); +static void Task_ContextMenu_Sell(u8 taskId); static void Task_AskSellMultiple(u8 taskId); static void Task_SellMultiple_CreateYesNoMenu(u8 taskId); static void Task_SellNo(u8 taskId); @@ -122,12 +122,12 @@ static u8 GetOrCreateVariableWindow(u8 winIdx); static void DestroyVariableWindow(u8 winIdx); static void TryDestroyVariableWindow(u8 winIdx); static u8 GetVariableWindowId(u8 winIdx); -static void CreateYesNoMenuWin3(u8 taskId, const struct YesNoFuncTable * ptrs); -static void CreateYesNoMenuWin4(u8 taskId, const struct YesNoFuncTable * ptrs); +static void CreateYesNoMenuWin3(u8 taskId, const struct YesNoFuncTable *ptrs); +static void CreateYesNoMenuWin4(u8 taskId, const struct YesNoFuncTable *ptrs); static void PrintMoneyInWin2(void); static void CreateBerryPouchSprite(void); static void StartBerryPouchSpriteWobbleAnim(void); -static void SpriteCB_BerryPouchWaitWobbleAnim(struct Sprite * sprite); +static void SpriteCB_BerryPouchWaitWobbleAnim(struct Sprite *sprite); static const struct BgTemplate sBgTemplates[] = { { @@ -158,11 +158,11 @@ static const struct BgTemplate sBgTemplates[] = { }; static const TaskFunc sBerryPouchContextMenuTasks[] = { - Task_NormalContextMenu_0, - Task_ContextMenu_FromPartyGiveMenu_0, - Task_ContextMenu_Sell_0, + Task_NormalContextMenu, + Task_ContextMenu_FromPartyGiveMenu, + Task_ContextMenu_Sell, Task_ContextMenu_FromPokemonPC, - Task_NormalContextMenu_0 + Task_NormalContextMenu }; static const struct YesNoFuncTable sYesNoFuncs_Toss = { @@ -176,10 +176,10 @@ static const struct YesNoFuncTable sYesNoFuncs_Sell = { }; static const struct MenuAction sContextMenuActions[] = { - {gOtherText_Use, Task_BerryPouch_Use_0}, - {gOtherText_Toss, Task_BerryPouch_Toss_0}, - {gOtherText_Give, Task_BerryPouch_Give_0}, - {gOtherText_Exit, Task_BerryPouch_Exit_0}, + {gOtherText_Use, Task_BerryPouch_Use}, + {gOtherText_Toss, Task_BerryPouch_Toss}, + {gOtherText_Give, Task_BerryPouch_Give}, + {gOtherText_Exit, Task_BerryPouch_Exit}, {gString_Dummy, NULL} }; @@ -695,7 +695,7 @@ static void GetBerryNameAndIndexForMenu(u8 * dest, u16 itemId) StringCopy(dest, gStringVar4); } -static void CopySelectedListMenuItemName(s16 itemIdx, u8 *dest) +static void CopySelectedListMenuItemName(s16 itemIdx, u8 * dest) { StringCopy(dest, &sListMenuStrbuf[itemIdx * 27]); } @@ -754,7 +754,7 @@ static void BerryPouchSetArrowCursorAt(u8 y, u8 colorIdx) static void PrintSelectedBerryDescription(s32 itemIdx) { - const u8 *str; + const u8 * str; if (itemIdx != sResources->listMenuNumItems) str = ItemId_GetDescription(BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, itemIdx)); else @@ -1031,13 +1031,13 @@ static void CreateNormalContextMenu(u8 taskId) BerryPouchPrint(windowId2, 2, gStringVar4, 0, 2, 1, 2, 0, 1); } -static void Task_NormalContextMenu_0(u8 taskId) +static void Task_NormalContextMenu(u8 taskId) { CreateNormalContextMenu(taskId); - gTasks[taskId].func = Task_NormalContextMenu_1; + gTasks[taskId].func = Task_NormalContextMenu_HandleInput; } -static void Task_NormalContextMenu_1(u8 taskId) +static void Task_NormalContextMenu_HandleInput(u8 taskId) { s8 input; if (sub_80BF72C() != TRUE) @@ -1059,7 +1059,7 @@ static void Task_NormalContextMenu_1(u8 taskId) } } -static void Task_BerryPouch_Use_0(u8 taskId) +static void Task_BerryPouch_Use(u8 taskId) { DestroyVariableWindow(sContextMenuNumOptions + 9); DestroyVariableWindow(6); @@ -1080,7 +1080,7 @@ static void Task_BerryPouch_Use_0(u8 taskId) ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); } -static void Task_BerryPouch_Toss_0(u8 taskId) +static void Task_BerryPouch_Toss(u8 taskId) { s16 * data = gTasks[taskId].data; ClearWindowTilemap(GetVariableWindowId(sContextMenuNumOptions + 9)); @@ -1182,7 +1182,7 @@ static void Task_WaitButtonThenTossBerries(u8 taskId) } } -static void Task_BerryPouch_Give_0(u8 taskId) +static void Task_BerryPouch_Give(u8 taskId) { DestroyVariableWindow(sContextMenuNumOptions + 9); DestroyVariableWindow(6); @@ -1227,7 +1227,7 @@ void Task_BerryPouch_DestroyDialogueWindowAndRefreshListMenu(u8 taskId) Task_CleanUpAndReturnToMain(taskId); } -static void Task_BerryPouch_Exit_0(u8 taskId) +static void Task_BerryPouch_Exit(u8 taskId) { DestroyVariableWindow(sContextMenuNumOptions + 9); DestroyVariableWindow(6); @@ -1239,7 +1239,7 @@ static void Task_BerryPouch_Exit_0(u8 taskId) Task_CleanUpAndReturnToMain(taskId); } -static void Task_ContextMenu_FromPartyGiveMenu_0(u8 taskId) +static void Task_ContextMenu_FromPartyGiveMenu(u8 taskId) { s16 * data = gTasks[taskId].data; u16 itemId = BagGetItemIdByPocketPosition(POCKET_BERRY_POUCH, data[1]); @@ -1262,7 +1262,7 @@ static void Task_ContextMenu_FromPokemonPC(u8 taskId) gTasks[taskId].func = BerryPouch_StartFadeToExitCallback; } -static void Task_ContextMenu_Sell_0(u8 taskId) +static void Task_ContextMenu_Sell(u8 taskId) { s16 * data = gTasks[taskId].data; if (itemid_get_market_price(gSpecialVar_ItemId) == 0) @@ -1488,12 +1488,12 @@ void DisplayItemMessageInBerryPouch(u8 taskId, u8 fontId, const u8 * str, TaskFu ScheduleBgCopyTilemapToVram(2); } -static void CreateYesNoMenuWin3(u8 taskId, const struct YesNoFuncTable * ptrs) +static void CreateYesNoMenuWin3(u8 taskId, const struct YesNoFuncTable *ptrs) { CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[3], 2, 0, 2, 0x001, 0xE, ptrs); } -static void CreateYesNoMenuWin4(u8 taskId, const struct YesNoFuncTable * ptrs) +static void CreateYesNoMenuWin4(u8 taskId, const struct YesNoFuncTable *ptrs) { CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_Variable[4], 2, 0, 2, 0x001, 0xE, ptrs); } @@ -1510,7 +1510,7 @@ static void CreateBerryPouchSprite(void) static void StartBerryPouchSpriteWobbleAnim(void) { - struct Sprite * sprite = &gSprites[sBerryPouchSpriteId]; + struct Sprite *sprite = &gSprites[sBerryPouchSpriteId]; if (sprite->affineAnimEnded) { StartSpriteAffineAnim(sprite, 1); @@ -1518,7 +1518,7 @@ static void StartBerryPouchSpriteWobbleAnim(void) } } -static void SpriteCB_BerryPouchWaitWobbleAnim(struct Sprite * sprite) +static void SpriteCB_BerryPouchWaitWobbleAnim(struct Sprite *sprite) { if (sprite->affineAnimEnded) {