diff options
Diffstat (limited to 'src/kecleon_items_1.c')
-rw-r--r-- | src/kecleon_items_1.c | 170 |
1 files changed, 166 insertions, 4 deletions
diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c index 6d73eb0..610fd4f 100644 --- a/src/kecleon_items_1.c +++ b/src/kecleon_items_1.c @@ -1,5 +1,6 @@ #include "global.h" #include "file_system.h" +#include "memory.h" #include "pokemon.h" #include "input.h" #include "item.h" @@ -7,10 +8,7 @@ #include "team_inventory.h" extern struct unkStruct_203B210 *gUnknown_203B210; -extern struct TeamInventory *gTeamInventory_203B460; -extern u32 GetStackSellPrice(struct ItemSlot *); -extern u32 xxx_count_inv_unk230(void); extern s32 sub_80144A4(s32 *); void UpdateKecleonStoreState(u32); extern u32 sub_801B410(void); @@ -19,13 +17,64 @@ extern void sub_801B450(void); extern void sub_8099690(u32); extern u8 sub_8012FD8(u32 *); extern void sub_8013114(u32 *, u32 *); -extern void sub_8019EDC(u32); +extern u32 sub_8019EDC(u8); extern void sub_801A2A8(u32); extern s32 sub_801A8AC(void); extern u32 sub_801A6E8(u32); extern void sub_801A928(void); extern void DrawTeamMoneyBox(u32); +struct unkStruct_203B214 +{; + // size: 0xA0 + u8 fill0[0x18]; + // NOTE: has to be packed here so it doesn't take 4 bytes.. + union __attribute__ ((__packed__)) temp2 + { + u16 unk18; + u8 unk18_u8; + } temp; + s16 unk1A; + s16 unk1C; + s16 unk1E; + s16 unk20; + u16 unk22; + u8 fill24[0x34 - 0x24]; + u32 unk34; + struct UnkTextStruct2 *unk38; + struct UnkTextStruct2 unk3C[4]; + u8 unk9C[4]; +}; + +extern struct unkStruct_203B214 *gUnknown_203B214; + +struct ItemSlot_Alt +{ + union temp { + struct ItemSlot norm; + u32 full_bits; + } temp; +}; + +extern void sub_8013818(void *, u32, u32, u32); + +extern u8 sub_8019FB0(void); +extern u8 sub_80138B8(void *, u32); + +extern void PlayMenuSoundEffect(u32); +extern s32 GetStackBuyPrice(struct ItemSlot *); +extern s32 GetKeyPress(void *); +extern void sub_8013660(void *); + +extern struct UnkTextStruct2 gUnknown_80DB8CC; +extern struct UnkTextStruct2 gUnknown_80DB8B4; +extern u16 gUnknown_203B218; +extern void sub_8013984(u8 *); +extern void sub_801A064(void); +extern void sub_801A0D8(void); +extern void AddMenuCursorSprite(void *); +extern s32 xxx_count_inv_unk230(); + void sub_8019B08(void) { switch(sub_801A6E8(1)) @@ -207,3 +256,116 @@ void sub_8019E04(s32 param_1) } } +u32 sub_8019E40(u32 r0) +{ + if(xxx_count_inv_unk230() == 0) + { + return 0; + } + else + { + gUnknown_203B214 = MemoryAlloc(sizeof(struct unkStruct_203B214), 0x8); + gUnknown_203B214->unk34 = r0; + gUnknown_203B214->unk38 = &gUnknown_203B214->unk3C[gUnknown_203B214->unk34]; + sub_8006518(gUnknown_203B214->unk3C); + gUnknown_203B214->unk3C[gUnknown_203B214->unk34] = gUnknown_80DB8CC; + gUnknown_203B214->unk38->unk14 = gUnknown_203B214->unk9C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B214->unk3C, 1, 1); + sub_8013818(gUnknown_203B214, xxx_count_inv_unk230(), 0xA, r0); + gUnknown_203B214->temp.unk18 = gUnknown_203B218; + sub_8013984((u8 *)gUnknown_203B214); + sub_801A064(); + sub_801A0D8(); + return 1; + } +} + +u32 sub_8019EDC(u8 r0) +{ + struct ItemSlot_Alt slot; + struct HeldItem *return_var; + u32 r2; + u32 r3; + + if(r0 == 0) + { + sub_8013660(gUnknown_203B214); + return 0; + } + else + { + switch(GetKeyPress(gUnknown_203B214)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + return_var = xxx_get_inv_unk230_at_809185C(sub_8019FB0()); + + // NOTE: needs seperate vars to match + r2 = return_var->itemIndex << 16; + slot.temp.full_bits = (slot.temp.full_bits & 0xff00ffff) | r2; + r3 = return_var->numItems << 8; + slot.temp.full_bits = (slot.temp.full_bits & 0xffff00ff) | r3; + + if(GetStackBuyPrice((struct ItemSlot *)&slot) > gTeamInventory_203B460->teamMoney) + { + PlayMenuSoundEffect(2); + } + else + { + PlayMenuSoundEffect(0); + } + return 3; + case 4: + PlayMenuSoundEffect(4); + return 4; + default: + if(sub_80138B8(gUnknown_203B214, 1) != 0) + { + sub_801A064(); + sub_801A0D8(); + return 1; + } + else + { + return 0; + } + } + } +} + +u8 sub_8019FB0(void) +{ + return (gUnknown_203B214->unk1E * gUnknown_203B214->unk1C) + gUnknown_203B214->temp.unk18_u8; +} + +void sub_8019FCC(u32 r0) +{ + u8 r0_u8; + + r0_u8 = r0; + + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B214->unk3C, 0, 0); + gUnknown_203B214->unk22 = xxx_count_inv_unk230(); + sub_8013984((u8 *)gUnknown_203B214); + sub_801A064(); + sub_801A0D8(); + if(r0_u8) + AddMenuCursorSprite(gUnknown_203B214); +} + +void sub_801A010(void) +{ + if(gUnknown_203B214 != NULL) + { + gUnknown_203B218 = gUnknown_203B214->temp.unk18; + gUnknown_203B214->unk3C[gUnknown_203B214->unk34] = gUnknown_80DB8B4; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B214->unk3C, 1, 1); + MemoryFree(gUnknown_203B214); + gUnknown_203B214 = NULL; + } +} |