diff options
Diffstat (limited to 'src/code_801B3C0.c')
-rw-r--r-- | src/code_801B3C0.c | 341 |
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; +} |