diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-09-28 12:33:01 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-09-28 12:33:01 -0400 |
commit | db3d5c90433a94747c23e48cf85badfc5286b07f (patch) | |
tree | 41cc0e3434015001f9b8a858399459c7a400a731 | |
parent | 3ab2de40cf164a86af27eff7a46215d3d927f47f (diff) |
Start berry_pouch decomp
-rw-r--r-- | asm/berry_pouch.s | 378 | ||||
-rw-r--r-- | include/menu_helpers.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/berry_pouch.c | 233 |
4 files changed, 235 insertions, 378 deletions
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); + } +} |