summaryrefslogtreecommitdiff
path: root/src/kangaskhan_storage_2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kangaskhan_storage_2.c')
-rw-r--r--src/kangaskhan_storage_2.c303
1 files changed, 298 insertions, 5 deletions
diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c
index d9d253c..e3dcd70 100644
--- a/src/kangaskhan_storage_2.c
+++ b/src/kangaskhan_storage_2.c
@@ -3,17 +3,42 @@
#include "memory.h"
#include "text.h"
#include "item.h"
+#include "input.h"
#include "kangaskhan_storage.h"
+#include "gUnknown_203B460.h"
extern struct unkStruct_203B208 *gUnknown_203B208;
+extern struct unkStruct_203B460 *gUnknown_203B460;
struct unkStruct_203B20C
{
u32 state;
- u8 unk4[0x10];
+ u8 unk4[4];
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ u8 fillC[0x14 - 0xC];
u32 unk14;
u32 unk18;
u32 unk1C;
+ u32 unk20;
+ u8 fill24[0x60 - 0x24];
+ u32 unk60;
+ u8 fill64[0x70 - 0x64];
+ u32 unk70;
+ u8 fill74[0xC0 - 0x74];
+ u32 unkC0;
+ u32 unkC4;
+ u32 unkC8;
+ u32 unkCC;
+ u32 unkD0;
+ u32 unkD4;
+ struct UnkTextStruct2 *unkD8;
+ u32 unkDC;
+ u32 unkE0;
+ u8 fillE4[0xF0 - 0xE4];
+ struct UnkTextStruct2 unkF0[4];
};
extern struct unkStruct_203B20C *gUnknown_203B20C;
@@ -38,13 +63,172 @@ extern u32 sub_801B410(void);
extern u8 sub_8012FD8(u32 *r0);
extern void sub_8013114(u32 *, s32 *);
extern void sub_801CBB8();
-extern void sub_801CA08();
+
+extern u8 sub_8091524(u8);
+extern u8 sub_801ADA0(u32);
+extern void sub_8099690(u32);
+extern u32 sub_8013BBC(u32 *);
+extern void sub_8017598(void);
+
+extern u32 sub_801CA08(u32);
+extern u32 sub_801CFB8(void);
+extern u8 sub_801CB24();
+extern void sub_8090A8C(struct ItemStruct_203B460 *, u8, u32);
+extern void sub_801AD34(u32);
+extern u32 sub_801A6E8(u32);
+extern u32 sub_801AEA8(void);
+extern u32 sub_801A8AC(void);
+extern void sub_801A928(void);
+extern void sub_8012CAC(struct UnkTextStruct2 *, u32 *);
+extern void sub_80182E4(void);
+
+extern void sub_801A9E0();
+extern void sub_801841C();
+extern void sub_801CCD8();
+extern void sub_80184D4();
+extern void sub_8018280();
+extern void sub_8013AA0(u32 *);
+extern void sub_801B3C0(u8 *);
+extern void sub_801A5D8(u32, u32, u32, u32);
+extern void sub_801C8C4(u32, u32, u32, u32);
+extern void sub_8012D60(u32 *, u32 *, u32, u32 *, u32, u32);
+extern void sub_801CB5C(u32);
+extern void sub_801A8D0(u32);
+
+extern struct UnkTextStruct2 gUnknown_80DB7B8;
+extern struct UnkTextStruct2 gUnknown_80DB7E8;
+extern struct UnkTextStruct2 gUnknown_80DB7D0;
+extern struct UnkTextStruct2 gUnknown_80DB800;
+extern struct UnkTextStruct2 gUnknown_80DB818;
+
+void sub_8017AF8(void)
+{
+ switch(sub_801A6E8(1))
+ {
+ case 3:
+ if(sub_801AEA8() != 0)
+ {
+ sub_8099690(0);
+ UpdateKangaskhanStorageState(0x12);
+ }
+ else
+ {
+ gUnknown_203B208->unk10 = sub_801A8AC();
+ gUnknown_203B208->unkC = gUnknown_203B460->fill0[gUnknown_203B208->unk10];
+ UpdateKangaskhanStorageState(0xF);
+ }
+ break;
+ case 4:
+ gUnknown_203B208->unk10 = sub_801A8AC();
+ gUnknown_203B208->unkC = gUnknown_203B460->fill0[gUnknown_203B208->unk10];
+ UpdateKangaskhanStorageState(0x10);
+ break;
+ case 2:
+ sub_801A928();
+ UpdateKangaskhanStorageState(1);
+ break;
+ }
+}
+
+void sub_8017B88(void)
+{
+ switch(sub_801CA08(1))
+ {
+ case 3:
+ if(sub_801CFB8() != 0){
+ UpdateKangaskhanStorageState(0x1C);
+ }
+ else
+ {
+ gUnknown_203B208->unk14 = sub_801CB24();
+ sub_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->unk14, 0);
+ gUnknown_203B208->unkC.numItems = 1;
+ UpdateKangaskhanStorageState(0x19);
+ }
+ break;
+ case 4:
+ gUnknown_203B208->unk14 = sub_801CB24();
+ sub_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->unk14, 0);
+ gUnknown_203B208->unkC.numItems = 1;
+ UpdateKangaskhanStorageState(0x1A);
+ break;
+ case 2:
+ sub_801CBB8();
+ UpdateKangaskhanStorageState(1);
+ break;
+ case 1:
+ sub_801AD34(0);
+ break;
+ }
+}
+
+void sub_8017C28(void)
+{
+ sub_801CA08(0);
+ sub_8012FD8(&gUnknown_203B208->unk58);
+ switch(sub_8013BBC(&gUnknown_203B208->unkA8))
+ {
+ case 1:
+ sub_8017598();
+ break;
+ case 3:
+ gUnknown_203B208->unkC.numItems = gUnknown_203B208->unkA8;
+ UpdateKangaskhanStorageState(0x1B);
+ break;
+ case 2:
+ UpdateKangaskhanStorageState(0x17);
+ break;
+ case 0:
+ default:
+ break;
+ }
+}
+
+void sub_8017C7C(void)
+{
+ s32 menuAction;
+ menuAction = 0;
+ sub_801A6E8(0);
+ if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) {
+ sub_8013114(&gUnknown_203B208->unk58, &menuAction);
+ if(menuAction != 1) gUnknown_203B208->unk1C = menuAction;
+ }
+
+ switch(menuAction)
+ {
+ case 2:
+ sub_8099690(0);
+ if(sub_8091524(gUnknown_203B208->unkC.itemIndex) == 0)
+ {
+ UpdateKangaskhanStorageState(9);
+ }
+ else
+ {
+ if(sub_801ADA0(gUnknown_203B208->unk10) == 0)
+ {
+ UpdateKangaskhanStorageState(0xA);
+ }
+ else
+ {
+ UpdateKangaskhanStorageState(0x11);
+ }
+ }
+ break;
+ case 6:
+ sub_8099690(0);
+ UpdateKangaskhanStorageState(0x10);
+ break;
+ case 1:
+ UpdateKangaskhanStorageState(0xE);
+ break;
+ }
+}
void sub_8017D24(void)
{
s32 menuAction;
menuAction = 0;
- sub_801CA08();
+ sub_801CA08(0);
if (sub_8012FD8(&gUnknown_203B208->unk58) == 0) {
sub_8013114(&gUnknown_203B208->unk58, &menuAction);
if(menuAction != 1) gUnknown_203B208->unk20 = menuAction;
@@ -56,11 +240,11 @@ void sub_8017D24(void)
if (sub_8090A34() > 0x13)
{
sub_801CBB8();
- UpdateKangaskhanStorageState(0x6);
+ UpdateKangaskhanStorageState(6);
}
else
{
- if(sub_8090A60(gUnknown_203B208->itemIndex))
+ if(sub_8090A60(gUnknown_203B208->unkC.itemIndex))
UpdateKangaskhanStorageState(0x18);
else
UpdateKangaskhanStorageState(0x1B);
@@ -182,3 +366,112 @@ void sub_8017F10(u32 newState)
sub_8017F28();
sub_8018100();
}
+
+void sub_8017F28(void)
+{
+ s32 iVar2;
+
+ sub_8006518(gUnknown_203B20C->unkF0);
+
+ switch(gUnknown_203B20C->state)
+ {
+ case 1:
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ sub_80182E4();
+ gUnknown_203B20C->unkF0[2] = gUnknown_80DB7D0;
+ sub_8012CAC(&gUnknown_203B20C->unkF0[2], &gUnknown_203B20C->unk20);
+ break;
+ case 4:
+ case 5:
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ break;
+ case 10:
+ case 11:
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[1] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[2] = gUnknown_80DB7B8;
+ gUnknown_203B20C->unkF0[0] = gUnknown_80DB800;
+ break;
+ case 12:
+ gUnknown_203B20C->unkF0[1] = gUnknown_80DB818;
+ break;
+ case 6:
+ case 13:
+ gUnknown_203B20C->unkF0[2] = gUnknown_80DB7E8;
+ break;
+ default:
+ case 0:
+ for(iVar2 = 0; iVar2 < 4; iVar2++)
+ {
+ gUnknown_203B20C->unkF0[iVar2] = gUnknown_80DB7B8;
+ }
+ break;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B20C->unkF0, 1, 1);
+}
+
+void sub_8018100(void)
+{
+
+ switch(gUnknown_203B20C->state)
+ {
+ case 1:
+ sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk14, 2);
+ break;
+ case 4:
+ sub_801A5D8(3, 3, 0, 0xA);
+ break;
+ case 5:
+ sub_801A8D0(1);
+ break;
+ case 6:
+ sub_801A9E0();
+ sub_801841C();
+ sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk18, 2);
+ break;
+ case 7:
+ sub_801B3C0(&gUnknown_203B20C->unk8);
+ break;
+ case 10:
+ sub_801C8C4(1, 3, 0, 0xA);
+ sub_801AD34(0);
+ break;
+ case 11:
+ sub_801CB5C(1);
+ sub_801AD34(0);
+ break;
+ case 12:
+ gUnknown_203B20C->unkD0 = 2;
+ gUnknown_203B20C->unkC8 = 1;
+ if(gUnknown_203B460->unk50[gUnknown_203B20C->unkA] > 0x63)
+ gUnknown_203B20C->unkCC = 0x63;
+ else
+ gUnknown_203B20C->unkCC = gUnknown_203B460->unk50[gUnknown_203B20C->unkA];
+ gUnknown_203B20C->unkC4 = gUnknown_203B20C->unkCC;
+ gUnknown_203B20C->unkD4 = 1;
+ gUnknown_203B20C->unkD8 = &gUnknown_203B20C->unkF0[1];
+ gUnknown_203B20C->unkDC = 0x28;
+ gUnknown_203B20C->unkE0 = 0x12;
+ sub_8013AA0(&gUnknown_203B20C->unkC0);
+ sub_8018280();
+ break;
+ case 13:
+ sub_801CCD8();
+ sub_801AD34(0);
+ sub_80184D4();
+ sub_8012D60(&gUnknown_203B20C->unk70, &gUnknown_203B20C->unk20, 0, &gUnknown_203B20C->unk60, gUnknown_203B20C->unk1C, 2);
+ break;
+ case 14:
+ sub_801B3C0(&gUnknown_203B20C->unk8);
+ break;
+ case 0:
+ default:
+ break;
+ }
+}