summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-09-28 12:33:01 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-09-28 12:33:01 -0400
commitdb3d5c90433a94747c23e48cf85badfc5286b07f (patch)
tree41cc0e3434015001f9b8a858399459c7a400a731
parent3ab2de40cf164a86af27eff7a46215d3d927f47f (diff)
Start berry_pouch decomp
-rw-r--r--asm/berry_pouch.s378
-rw-r--r--include/menu_helpers.h1
-rw-r--r--ld_script.txt1
-rw-r--r--src/berry_pouch.c233
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);
+ }
+}