summaryrefslogtreecommitdiff
path: root/src/friend_list_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/friend_list_menu.c')
-rw-r--r--src/friend_list_menu.c446
1 files changed, 446 insertions, 0 deletions
diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c
new file mode 100644
index 0000000..9fbf686
--- /dev/null
+++ b/src/friend_list_menu.c
@@ -0,0 +1,446 @@
+#include "global.h"
+#include "item.h"
+#include "pokemon.h"
+#include "text.h"
+#include "team_inventory.h"
+#include "constants/move.h"
+
+struct unkStruct_203B2B8
+{
+ // size: 0x280
+ u32 state;
+ u32 unk4;
+ u8 unk8;
+ s16 pokeSpecies;
+ u32 unkC;
+ struct HeldItem unk10;
+ struct HeldItem unk14;
+ struct PokemonStruct *unk18;
+ u8 fill1C[0x4];
+ u32 unk20;
+ u16 unk24;
+ struct PokemonMove unk28[4];
+ u8 fill48[0x70 - 0x48];
+ u32 unk70;
+ u32 unk74;
+ u32 unk78;
+ u32 unk7C;
+ u8 fill80[0xCC - 0x80];
+ u32 unkCC;
+};
+extern struct unkStruct_203B2B8 *gUnknown_203B2B8;
+extern u8 gAvailablePokemonNames[0x58];
+extern u8 gUnknown_202DEA8[0x58];
+extern u8 gUnknown_202DE58[0x58];
+extern u8 gUnknown_80DD6E0[];
+extern u8 gPartyMenuItemPlaceholder[];
+extern struct UnkTextStruct2 gUnknown_80DD370;
+
+extern u32 sub_8026F04(struct PokemonStruct *);
+extern void GivePokemonItem(s16 index_, struct HeldItem* item);
+extern void sub_8026074(u32);
+extern void PlaySound(u32);
+bool8 sub_8026F38(struct PokemonStruct *r0);
+extern u8 sub_80023E4(u8);
+extern struct PokemonStruct *sub_808D3F8(void);
+extern struct PokemonStruct *sub_808D3BC(void);
+extern void sub_801F214(void);
+extern u32 sub_801F194(void);
+extern u32 sub_801EF38(u32);
+
+
+extern void sub_8008C54(u32);
+extern void sub_80073B8(u32);
+extern void sub_80073E0(u32);
+extern void sub_80922B4(u8 *, const u8 *, u32);
+extern void ExpandPlaceholdersBuffer(u8 *buffer, const u8 *text, ...);
+extern void sub_808D930(u8 *, s16);
+extern s32 sub_8008ED0(u8 *);
+extern void xxx_call_draw_string(s32 x, s32 y, u8 *, u32, u32);
+extern void xxx_format_and_draw(s32, s32, u8 *, ...);
+extern s32 sub_80144A4(s32 *);
+
+extern u32 sub_801F890(void);
+extern void sub_801F8D0(void);
+extern u32 sub_801B410(void);
+extern void sub_801B450(void);
+
+extern void nullsub_104(void);
+extern void sub_801A928(void);
+extern void sub_8099690(u32);
+extern u32 sub_801A6E8(u32);
+extern u8 sub_8012FD8(u32 *);
+extern void sub_8013114(u32 *, s32 *);
+
+extern u32 sub_801A8AC(void);
+extern u32 sub_8022860(void);
+extern void sub_8022908(void);
+
+extern void sub_801BF98(void);
+extern u32 sub_801BF48(void);
+extern void sub_802453C(void);
+extern u32 sub_80244E4(void);
+
+
+void sub_8026A78(void)
+{
+ switch(sub_80244E4())
+ {
+ case 2:
+ case 3:
+ sub_802453C();
+ sub_8026074(2);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_8026A94(void)
+{
+ switch(sub_801BF48())
+ {
+ case 2:
+ case 3:
+ sub_801BF98();
+ sub_8026074(2);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+
+static inline bool8 sub_8026AB0_sub(void) {
+ if (gUnknown_203B2B8->unk18->unk4.unk4 == 0x44 || gUnknown_203B2B8->unk18->unk4.unk4 == 0x45)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_8026AB0(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 1:
+ case 3:
+ sub_8026074(2);
+ break;
+ case 2:
+ if (sub_8026AB0_sub())
+ sub_8026074(0xD);
+ else
+ sub_8026074(8);
+ break;
+ }
+ }
+}
+
+void sub_8026B10(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 1:
+ case 3:
+ sub_8026074(2);
+ break;
+ case 2:
+ sub_8026074(8);
+ break;
+ }
+ }
+}
+
+
+void sub_8026B48(void)
+{
+ switch(sub_8022860())
+ {
+ case 2:
+ case 3:
+ sub_8022908();
+ sub_8026074(2);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+
+void sub_8026B64(void)
+{
+ switch(sub_801A6E8(1))
+ {
+ case 3:
+ gUnknown_203B2B8->unkC = sub_801A8AC();
+ gUnknown_203B2B8->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex;
+ gUnknown_203B2B8->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems;
+ sub_8026074(0x14);
+ break;
+ case 4:
+ gUnknown_203B2B8->unkC = sub_801A8AC();
+ gUnknown_203B2B8->unk10.itemIndex = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].itemIndex;
+ gUnknown_203B2B8->unk10.numItems = gTeamInventory_203B460->teamItems[gUnknown_203B2B8->unkC].numItems;
+ sub_8099690(0);
+ sub_8026074(0x15);
+ break;
+ case 2:
+ sub_801A928();
+ sub_8026074(2);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_8026C14(void)
+{
+ u32 nextState;
+ struct unkStruct_8090F58 temp;
+ int menuAction;
+ struct ItemSlot slot;
+
+ menuAction = 0;
+ sub_801A6E8(0);
+ if ((sub_8012FD8(&gUnknown_203B2B8->unkCC) == '\0') && (sub_8013114(&gUnknown_203B2B8->unkCC,&menuAction), menuAction != 1)) {
+ gUnknown_203B2B8->unk74 = menuAction;
+ }
+ switch(menuAction)
+ {
+ case 0xb:
+ nextState = 0xF;
+ PlaySound(0x14d);
+ ShiftItemsDownFrom(gUnknown_203B2B8->unkC);
+ FillInventoryGaps();
+ if (gUnknown_203B2B8->unk14.itemIndex != '\0') {
+ sub_8091274(&gUnknown_203B2B8->unk14);
+ nextState = 0x10;
+ }
+ HeldItemToSlot(&slot,&gUnknown_203B2B8->unk10);
+ temp.unk0 = 0;
+ temp.unk4 = 0;
+ temp.unk8 = 1;
+ slot.itemFlags = ITEM_FLAG_EXISTS;
+ sub_8090E14(gUnknown_202DEA8,&slot,&temp);
+ GivePokemonItem(gUnknown_203B2B8->pokeSpecies,&gUnknown_203B2B8->unk10);
+ sub_801A928();
+ nullsub_104();
+ sub_8026074(nextState);
+ break;
+ case 4:
+ sub_8099690(0);
+ sub_8026074(0x15);
+ break;
+ case 1:
+ sub_8026074(0x13);
+ break;
+ }
+}
+
+void sub_8026CF0(void)
+{
+ switch(sub_801B410())
+ {
+ case 2:
+ case 3:
+ sub_801B450();
+ sub_8026074(0x13);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+
+void sub_8026D0C(void)
+{
+ switch(sub_801EF38(1))
+ {
+ case 0:
+ case 1:
+ break;
+ case 3:
+ case 4:
+ gUnknown_203B2B8->unk20 = sub_801F194();
+ gUnknown_203B2B8->unk24 = gUnknown_203B2B8->unk28[gUnknown_203B2B8->unk20].moveID;
+ sub_8026074(0x18);
+ break;
+ case 2:
+ sub_801F214();
+ sub_8026074(2);
+ break;
+ }
+}
+
+void sub_8026D6C(void)
+{
+ switch(sub_801F890())
+ {
+ case 2:
+ case 3:
+ sub_801F8D0();
+ sub_8026074(0x17);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_8026D88(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_8026074(gUnknown_203B2B8->unk4);
+ }
+}
+
+void sub_8026DAC(u32 r0, struct HeldItem *r1)
+{
+ struct ItemSlot slot;
+ struct unkStruct_8090F58 temp;
+
+ sub_8008C54(r0);
+ sub_80073B8(r0);
+ HeldItemToSlot(&slot, r1);
+ temp.unk0 = 0;
+ temp.unk4 = 0;
+ temp.unk8 = 1;
+ slot.itemFlags = ITEM_FLAG_EXISTS;
+ sub_8090E14(gUnknown_202DE58, &slot, &temp);
+ xxx_format_and_draw(4, 3, gPartyMenuItemPlaceholder, r0, 0);
+ sub_80073E0(r0);
+}
+
+void sub_8026E08(u32 r0)
+{
+ u8 buffer1[40];
+ u8 buffer[20];
+ s32 x;
+
+ sub_8008C54(r0);
+ sub_80073B8(r0);
+ sub_80922B4(gAvailablePokemonNames, gUnknown_203B2B8->unk18->name, POKEMON_NAME_LENGTH);
+ sub_808D930(buffer, gUnknown_203B2B8->unk18->speciesNum);
+ ExpandPlaceholdersBuffer(buffer1, gUnknown_80DD6E0, gAvailablePokemonNames);
+ x = sub_8008ED0(buffer1);
+ xxx_call_draw_string(((gUnknown_80DD370.unk0c << 3) - x) / 2, 3, buffer1, r0, 0);
+ sub_80073E0(r0);
+}
+
+u32 sub_8026E88(struct PokemonStruct *r0)
+{
+ u8 iVar3;
+ if(r0->unk2 == 0)
+ {
+ iVar3 = (r0->unk4.unk4 == 0x41);
+ if(iVar3 != 0)
+ if(sub_80023E4(0x8) == 0)
+ return 0;
+ }
+ else
+ return 0;
+ return 1;
+}
+
+u32 sub_8026EB8(struct PokemonStruct *r0)
+{
+ u8 iVar3;
+ if(sub_808D3BC() != r0)
+ if(sub_808D3F8() != r0)
+ if(r0->unk2 == 0)
+ {
+ iVar3 = (r0->unk4.unk4 == 0x41);
+ if(iVar3 != 0)
+ {
+ if(sub_80023E4(0x8) != 0)
+ goto check;
+ }
+ else
+ check:
+ if(sub_8026F04(r0) != 3)
+ return 1;
+ }
+ return 0;
+}
+
+
+u32 sub_8026F04(struct PokemonStruct *r0)
+{
+ if(r0->heldItem.itemIndex == 0)
+ return 0;
+ else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)
+ return 1;
+ else if(sub_8026F38(r0))
+ return 2;
+ else
+ return 3;
+}
+
+bool8 sub_8026F38(struct PokemonStruct *r0)
+{
+ if(IsNotMoneyOrUsedTMItem(r0->heldItem.itemIndex))
+ {
+ if(IsThrowableItem(r0->heldItem.itemIndex))
+ {
+ if((gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] + r0->heldItem.numItems) > 999)
+ return FALSE;
+ }
+ else
+ {
+ if(gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] > 998)
+ return FALSE;
+ }
+ }
+ else
+ return FALSE;
+ return TRUE;
+}
+
+void sub_8026FA4(void)
+{
+ switch(sub_8026F04(gUnknown_203B2B8->unk18))
+ {
+ case 1:
+ PlaySound(0x14d);
+ sub_8091274(&gUnknown_203B2B8->unk14);
+ FillInventoryGaps();
+ gUnknown_203B2B8->unk14.itemIndex = 0;
+ gUnknown_203B2B8->unk14.numItems = 0;
+ GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->unk14);
+ sub_8026074(0xA);
+ break;
+ case 2:
+ PlaySound(0x14d);
+ if(IsThrowableItem(gUnknown_203B2B8->unk14.itemIndex))
+ {
+ gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->unk14.itemIndex] += gUnknown_203B2B8->unk14.numItems;
+ }
+ else
+ {
+ gTeamInventory_203B460->teamStorage[gUnknown_203B2B8->unk14.itemIndex] += 1;
+ }
+
+ gUnknown_203B2B8->unk14.itemIndex = 0;
+ gUnknown_203B2B8->unk14.numItems = 0;
+ GivePokemonItem(gUnknown_203B2B8->pokeSpecies, &gUnknown_203B2B8->unk14);
+ sub_8026074(0xB);
+ break;
+ case 0:
+ default:
+ sub_8026074(0x19);
+ break;
+ }
+}