summaryrefslogtreecommitdiff
path: root/src/code_801B3C0.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/code_801B3C0.c')
-rw-r--r--src/code_801B3C0.c341
1 files changed, 339 insertions, 2 deletions
diff --git a/src/code_801B3C0.c b/src/code_801B3C0.c
index 19f2f7f..7dde248 100644
--- a/src/code_801B3C0.c
+++ b/src/code_801B3C0.c
@@ -1,8 +1,11 @@
#include "global.h"
+#include "constants/colors.h"
#include "text.h"
#include "input.h"
-#include "memory.h"
#include "item.h"
+#include "memory.h"
+#include "menu.h"
+#include "pokemon.h"
#include "team_inventory.h"
struct subStruct_203B240
@@ -30,9 +33,54 @@ struct unkStruct_203B230
};
extern struct unkStruct_203B230 *gUnknown_203B230;
+struct unkStruct_203B234
+{
+ // size: 0x154
+ u32 unk0;
+ u32 state;
+ u32 unk8;
+ u8 unkC;
+ u8 fillD[0x10 - 0xD];
+ struct ItemSlot unk10;
+ struct unkStruct_8090F58 unk14;
+ struct ItemSlot unk20;
+ u32 unk24;
+ u32 unk28;
+ u8 fill2C[0x78 - 0x2C];
+ u32 unk78;
+ u8 fill7C[0xC8 - 0x7C];
+ u32 unkC8;
+ struct MenuItem unkCC[5];
+ struct UnkTextStruct2 unkF4[4];
+};
+
+extern struct unkStruct_203B234 *gUnknown_203B234;
+
+extern u8 gUnknown_202DE58[];
extern u8 gAvailablePokemonNames[0x58];
extern u8 gUnknown_80DBA4C[];
+extern u8 gUnknown_80DBB9C[];
+extern u8 gUnknown_80DBD24[];
+extern u8 gUnknown_80DBCE8[];
+extern u8 gUnknown_80DBCC4[];
+extern u8 gUnknown_80DBC98[];
+extern u8 gUnknown_80DBC60[];
+extern u8 gUnknown_80DBC28[];
+extern u8 gUnknown_80DBB9C[];
+extern u8 gUnknown_80DBAA0[];
+extern u8 gUnknown_80DBAD0[];
+extern u8 gUnknown_80DBB08[];
+extern u8 gUnknown_80DBB38[];
+extern u8 gKangaskhanTrashToolboxItem[];
+extern u8 gKangaskhanTrashReceivedItem[];
+extern struct UnkTextStruct2 gUnknown_80DBA58;
+extern struct UnkTextStruct2 gUnknown_80DBA88;
+extern struct UnkTextStruct2 gUnknown_80DBA70;
+extern void sub_801BB5C(void);
+extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
+extern struct PokemonStruct *GetPlayerPokemonStruct(void);
+extern void sub_801B748(u32);
extern void sub_8008C54(u32);
extern void sub_80073E0(u32);
extern void sub_80073B8(u32);
@@ -41,11 +89,32 @@ extern void PlayMenuSoundEffect(u32);
extern void sub_8013F84(void);
extern u32 sub_8012A64(u32 *, u32);
extern s32 sub_80913E0(struct ItemSlot *, u32, struct subStruct_203B240 **);
-
+extern void sub_80141B4(u8 *, u32, u32 *, u32);
+extern void sub_8012EA4(u32 *, u32);
+extern void sub_8012D60(u32 *, struct MenuItem *, u32, u16 *, u32, u32);
+extern void sub_801BB20(void);
+extern void sub_801A8D0(u32);
+extern void sub_801A9E0(void);
+extern void sub_801BC24(void);
+extern void sub_801A5D8(u32, u32, u32, u32);
+extern void sub_8014248(const char *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32);
extern void sub_801317C(u32 *);
extern void sub_80140B4(struct UnkTextStruct2 *);
extern void sub_801B46C(u32);
extern void ResetSprites(u32);
+extern void sub_801BC64(void);
+extern void sub_801BC94(void);
+extern void sub_801BCCC(void);
+extern void sub_801BD80(void);
+extern void sub_801BEAC(void);
+extern void sub_801BE30(void);
+extern void sub_801BEC8(void);
+extern void sub_801B760(void);
+extern void sub_801B874(void);
+extern u32 sub_8001784(u32, u32, u32);
+extern void sub_800199C(u32, u32, u32, u32);
+extern void PlaySound(u32);
+extern s32 sub_808D544(u32);
void sub_801B51C();
void sub_801B590();
@@ -181,3 +250,271 @@ void sub_801B590(void)
break;
}
}
+
+u32 sub_801B60C(u32 r0, u8 itemIndex, u8 numItems)
+{
+ gUnknown_203B234 = MemoryAlloc(0x154, 8);
+ gUnknown_203B234->unkC8 = 0;
+ gUnknown_203B234->unk0 = r0;
+ gUnknown_203B234->unk10.itemIndex = itemIndex;
+ if(IsThrowableItem(gUnknown_203B234->unk10.itemIndex))
+ {
+ gUnknown_203B234->unk10.numItems = numItems;
+ gUnknown_203B234->unkC = numItems;
+ }
+ else
+ {
+ gUnknown_203B234->unk10.numItems = 0;
+ gUnknown_203B234->unkC = 1;
+ }
+ gUnknown_203B234->unk10.itemFlags = ITEM_FLAG_EXISTS;
+ gUnknown_203B234->unk14.unk0 = 0;
+ gUnknown_203B234->unk14.unk4 = 0;
+ gUnknown_203B234->unk14.unk8 = 1;
+ PrintColoredPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct(), COLOR_YELLOW);
+ sub_8090E14(gUnknown_202DE58, &gUnknown_203B234->unk10, &gUnknown_203B234->unk14);
+ sub_801B748(0);
+ return 1;
+}
+
+u32 sub_801B6AC(void)
+{
+ switch(gUnknown_203B234->state)
+ {
+ case 16:
+ return 3;
+ case 6:
+ sub_801BC64();
+ break;
+ case 7:
+ sub_801BC94();
+ break;
+ case 8:
+ case 9:
+ sub_801BCCC();
+ break;
+ case 10:
+ sub_801BD80();
+ break;
+ case 11:
+ sub_801BEAC();
+ break;
+ case 12:
+ sub_801BE30();
+ break;
+ case 13:
+ case 14:
+ case 15:
+ default:
+ sub_801BEC8();
+ break;
+
+ }
+ return 0;
+}
+
+void sub_801B72C(void)
+{
+ if(gUnknown_203B234 != NULL)
+ {
+ MemoryFree(gUnknown_203B234);
+ gUnknown_203B234 = NULL;
+ }
+}
+
+void sub_801B748(u32 newState)
+{
+ gUnknown_203B234->state = newState;
+ sub_801B760();
+ sub_801B874();
+}
+
+void sub_801B760(void)
+{
+ s32 iVar4;
+ switch(gUnknown_203B234->state)
+ {
+ case 1:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 11:
+ case 13:
+ case 14:
+ case 15:
+ sub_8006518(gUnknown_203B234->unkF4);
+ for(iVar4 = 0; iVar4 < 4; iVar4++)
+ {
+ gUnknown_203B234->unkF4[iVar4] = gUnknown_80DBA58;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B234->unkF4, 1, 1);
+ break;
+ case 10:
+ sub_8006518(gUnknown_203B234->unkF4);
+ sub_801BB5C();
+ gUnknown_203B234->unkF4[2] = gUnknown_80DBA70;
+ sub_8012CAC(&gUnknown_203B234->unkF4[2], gUnknown_203B234->unkCC);
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B234->unkF4, 1, 1);
+ break;
+ case 12:
+ sub_8006518(gUnknown_203B234->unkF4);
+ gUnknown_203B234->unkF4[1] = gUnknown_80DBA88;
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B234->unkF4, 1, 1);
+ break;
+ }
+}
+
+void sub_801B874(void)
+{
+
+ switch(gUnknown_203B234->state)
+ {
+ case 0:
+ if (gUnknown_203B234->unk10.itemIndex == ITEM_ID_WEAVILE_FIG) {
+ gUnknown_203B234->unk8 = 0x10;
+ if(sub_8001784(0,0x47,1) != 0)
+ {
+ AddToTeamMoney(1000);
+ sub_801B748(4);
+ }
+ else
+ {
+ sub_800199C(0, 0x47, 1, 1);
+ sub_801B748(3);
+ }
+ }
+ else if (gUnknown_203B234->unk10.itemIndex == ITEM_ID_MIME_JR_FIG)
+ {
+ gUnknown_203B234->unk8 = 0x10;
+ if(sub_8001784(0, 0x47, 0) != 0)
+ {
+ AddToTeamMoney(1000);
+ sub_801B748(4);
+ }
+ else
+ {
+ sub_800199C(0, 0x47, 0, 1);
+ sub_801B748(3);
+ }
+ }
+ else
+ {
+ if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
+ {
+ if(IsNotMoneyOrUsedTMItem(gUnknown_203B234->unk10.itemIndex))
+ {
+ if((gTeamInventory_203B460->teamStorage[gUnknown_203B234->unk10.itemIndex] + gUnknown_203B234->unkC) > 0x3e7)
+ {
+ store:
+ gUnknown_203B234->unk8 = 6;
+ }
+ else
+ {
+ gTeamInventory_203B460->teamStorage[gUnknown_203B234->unk10.itemIndex] += gUnknown_203B234->unkC;
+ PlaySound(0xCB);
+ gUnknown_203B234->unk8 = 5;
+ }
+ }
+ else
+ {
+ goto store;
+ }
+ }
+ else
+ {
+ AddItemToInventory(&gUnknown_203B234->unk10);
+ FillInventoryGaps();
+ PlaySound(0xCB);
+ gUnknown_203B234->unk8 = 0x10;
+ }
+ if(gUnknown_203B234->unk0 == 1)
+ sub_801B748(2);
+ else
+ sub_801B748(1);
+ }
+ break;
+ case 1:
+ if (sub_808D544(0) < 2) {
+ sub_80141B4(gUnknown_80DBAA0,0,0,0x101);
+ }
+ else {
+ sub_80141B4(gUnknown_80DBAD0,0,0,0x101);
+ }
+ break;
+ case 2:
+ sub_80141B4(gUnknown_80DBB08,0,0,0x101);
+ break;
+ case 3:
+ PlaySound(0xd4);
+ sub_80141B4(gUnknown_80DBB38,0,0,0x101);
+ break;
+ case 4:
+ sub_80141B4(gUnknown_80DBB9C,0,0,0x101);
+ break;
+ case 5:
+ gUnknown_203B234->unk8 = 0x10;
+ sub_80141B4(gUnknown_80DBC28,0,0,0x101);
+ break;
+ case 6:
+ sub_801BB20();
+ sub_8014248(gUnknown_80DBC60,0,4,gUnknown_203B234->unkCC,
+ 0,4,0,0,0);
+ break;
+ case 7:
+ sub_801BC24();
+ sub_8014248(gUnknown_80DBC98,0,3,gUnknown_203B234->unkCC,0,4,0,0,0);
+ break;
+ case 8:
+ sub_801A5D8(1,3,0,10);
+ break;
+ case 9:
+ sub_801A8D0(1);
+ break;
+ case 10:
+ sub_801A9E0();
+ sub_8012D60(&gUnknown_203B234->unk28,gUnknown_203B234->unkCC,0,0,gUnknown_203B234->unkC8,2);
+ break;
+ case 0xb:
+ sub_801B3C0(&gUnknown_203B234->unk20);
+ break;
+ case 0xc:
+ sub_801A9E0();
+ sub_8012EA4(&gUnknown_203B234->unk28,0);
+ sub_801BC24();
+ sub_8012D60(&gUnknown_203B234->unk78,gUnknown_203B234->unkCC,0,0,3,1);
+ break;
+ case 0xd:
+ gUnknown_203B234->unk8 = 0x10;
+ sub_80141B4(gUnknown_80DBCC4,0,0,0x101);
+ break;
+ case 0xe:
+ gUnknown_203B234->unk8 = 0x10;
+ sub_80141B4(gUnknown_80DBCE8,0,0,0x101);
+ break;
+ case 0xf:
+ gUnknown_203B234->unk8 = 0x10;
+ sub_80141B4(gUnknown_80DBD24,0,0,0x101);
+ break;
+ case 0x10:
+ break;
+ }
+}
+
+void sub_801BB20(void)
+{
+ struct unkStruct_203B234 *preload;
+ u8 *nullText;
+
+ preload = gUnknown_203B234;
+ nullText = NULL;
+ preload->unkCC[0].text = gKangaskhanTrashToolboxItem;
+ preload->unkCC[0].menuAction = 4;
+ preload->unkCC[1].text = gKangaskhanTrashReceivedItem;
+ preload->unkCC[1].menuAction = 5;
+ preload->unkCC[2].text = nullText;
+ preload->unkCC[2].menuAction = -1;
+}