summaryrefslogtreecommitdiff
path: root/src/friend_area_action_menu_1.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/friend_area_action_menu_1.c')
-rw-r--r--src/friend_area_action_menu_1.c194
1 files changed, 188 insertions, 6 deletions
diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c
index 33cbded..6856d5f 100644
--- a/src/friend_area_action_menu_1.c
+++ b/src/friend_area_action_menu_1.c
@@ -4,6 +4,7 @@
#include "menu.h"
#include "item.h"
#include "team_inventory.h"
+#include "pokemon.h"
#include "friend_area_action_menu.h"
extern struct unkStruct_203B2BC *gUnknown_203B2BC;
@@ -11,17 +12,14 @@ extern struct TeamInventory *gTeamInventory_203B460;
u32 sub_801B410();
void sub_801B450();
-u32 sub_801EF38(u8 r0);
-void sub_801F214();
+extern u32 sub_801EF38(u8 r0);
+extern void sub_801F214();
extern void SetFriendAreaActionMenuState(u32);
extern u8 sub_8012FD8(u32 *r0);
extern void sub_8013114(u32 *, s32 *);
extern void PlaySound(u32);
-extern void ShiftItemsDownFrom(u32);
-extern void FillInventoryGaps();
extern void nullsub_104();
-extern void sub_8091274(struct ItemSlot *);
extern void sub_801A928();
extern void sub_8099690(u32);
extern void GivePokemonItem(s16, struct HeldItem *);
@@ -31,6 +29,21 @@ extern u32 sub_801A6E8(u32);
extern s32 sub_80144A4(s32 *);
extern void sub_8027EB8();
extern void sub_808D31C(struct PokemonStruct *);
+u32 sub_8027E18(struct PokemonStruct *);
+bool8 IsNotMoneyOrUsedTMItem(u8 id);
+u8 sub_8027E4C(struct PokemonStruct *r0);
+extern u8 sub_80023E4(u32);
+extern struct PokemonStruct *sub_808D3F8(void);
+extern struct PokemonStruct *sub_808D3BC(void);
+extern u32 sub_801F890(void);
+extern void sub_801F8D0(void);
+extern u8 gUnknown_80DD958[];
+extern void xxx_format_and_draw(u32, u32, u8 *, ...);
+extern void sub_8008C54(u32);
+extern void sub_80073B8(u32);
+extern void sub_80073E0(u32);
+extern u8 gUnknown_202DE58[];
+extern u32 sub_801F194(void);
void sub_8027AE4(void)
{
@@ -93,7 +106,7 @@ void sub_8027BD8(void)
PlaySound(0x14d);
ShiftItemsDownFrom(gUnknown_203B2BC->itemIndex);
FillInventoryGaps();
- if (gUnknown_203B2BC->unk14.itemFlags != 0) {
+ if (gUnknown_203B2BC->unk14.itemIndex != 0) {
sub_8091274(&gUnknown_203B2BC->unk14);
}
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive);
@@ -124,3 +137,172 @@ void sub_8027C84()
break;
}
}
+
+void sub_8027CA0(void)
+{
+ switch(sub_801EF38(1))
+ {
+ case 3:
+ case 4:
+ gUnknown_203B2BC->unk20 = sub_801F194();
+ gUnknown_203B2BC->unk24 = gUnknown_203B2BC->unk28[gUnknown_203B2BC->unk20].moveID;
+ SetFriendAreaActionMenuState(0x10);
+ break;
+ case 2:
+ sub_801F214();
+ SetFriendAreaActionMenuState(0x2);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_8027D00(void)
+{
+ switch(sub_801F890())
+ {
+ case 2:
+ case 3:
+ sub_801F8D0();
+ SetFriendAreaActionMenuState(0xF);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_8027D1C(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ SetFriendAreaActionMenuState(gUnknown_203B2BC->unk4);
+ }
+}
+
+void sub_8027D40(u32 r0, struct HeldItem *heldItem)
+{
+
+ struct ItemSlot slot;
+ struct unkStruct_8090F58 a3;
+
+ sub_8008C54(r0);
+ sub_80073B8(r0);
+ HeldItemToSlot(&slot, heldItem);
+ a3.unk0 = 0;
+ a3.unk4 = 0;
+ a3.unk8 = 1;
+ slot.itemFlags = 1;
+ sub_8090E14(gUnknown_202DE58, &slot, &a3);
+ xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0);
+ sub_80073E0(r0);
+}
+
+u32 sub_8027D9C(struct PokemonStruct *r0)
+{
+ u32 var1;
+ if(r0->unk2 == 0)
+ {
+ var1 = 0;
+ if(r0->unk4.unk4 == 0x41)
+ var1 = 1;
+ if(var1 != 0)
+ {
+ if(sub_80023E4(8) == 0)
+ return 0;
+ }
+ }
+ else
+ return 0;
+ return 1;
+}
+
+u32 sub_8027DCC(struct PokemonStruct *r0)
+{
+ u32 var1;
+ if(sub_808D3BC() != r0)
+ if(sub_808D3F8() != r0)
+ if(r0->unk2 == 0)
+ {
+ var1 = 0;
+ if(r0->unk4.unk4 == 0x41)
+ var1 = 1;
+ if(var1 != 0)
+ {
+ if(sub_80023E4(8) != 0)
+ goto check;
+ }
+ else
+ {
+ check:
+ if(sub_8027E18(r0) != 3)
+ return 1;
+ }
+ }
+ return 0;
+}
+
+u32 sub_8027E18(struct PokemonStruct *r0)
+{
+ if(r0->heldItem.itemIndex == 0)
+ return 0;
+ else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)
+ return 1;
+ else if(sub_8027E4C(r0))
+ return 2;
+ else
+ return 3;
+}
+
+u8 sub_8027E4C(struct PokemonStruct *r0)
+{
+ if(!IsNotMoneyOrUsedTMItem(r0->heldItem.itemIndex))
+ return 0;
+ else
+ {
+ if(IsThrowableItem(r0->heldItem.itemIndex))
+ {
+ if(gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] + r0->heldItem.numItems > 0x3e7)
+ return 0;
+ }
+ else if(gTeamInventory_203B460->teamStorage[r0->heldItem.itemIndex] > 0x3e6)
+ {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+void sub_8027EB8(void)
+{
+ switch(sub_8027E18(gUnknown_203B2BC->unk18))
+ {
+ case 1:
+ PlaySound(0x14d);
+ sub_8091274(&gUnknown_203B2BC->unk14);
+ FillInventoryGaps();
+ gUnknown_203B2BC->unk14.itemIndex = 0;
+ gUnknown_203B2BC->unk14.numItems = 0;
+ GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->unk14);
+ SetFriendAreaActionMenuState(6);
+ break;
+ case 2:
+ PlaySound(0x14d);
+ if(IsThrowableItem(gUnknown_203B2BC->unk14.itemIndex))
+ gTeamInventory_203B460->teamStorage[gUnknown_203B2BC->unk14.itemIndex] += gUnknown_203B2BC->unk14.numItems;
+ else
+ gTeamInventory_203B460->teamStorage[gUnknown_203B2BC->unk14.itemIndex] += 1;
+ gUnknown_203B2BC->unk14.itemIndex = 0;
+ gUnknown_203B2BC->unk14.numItems = 0;
+ GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->unk14);
+ SetFriendAreaActionMenuState(7);
+ break;
+ case 0:
+ default:
+ SetFriendAreaActionMenuState(2);
+ break;
+ }
+}
+