pmd-red/src/friend_area_action_menu.c
2023-01-20 09:58:22 -08:00

306 lines
7.8 KiB
C

#include "global.h"
#include "memory.h"
#include "text.h"
#include "input.h"
#include "menu.h"
#include "item.h"
#include "pokemon.h"
#include "team_inventory.h"
#include "friend_area_action_menu.h"
extern struct unkStruct_203B2BC *gUnknown_203B2BC;
extern void sub_80141B4(const char *r0, u32, u32 *r1, u32);
extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u32, u32, u32, u32 *r5, u32);
extern void sub_8012D60(u32 *, struct MenuItem *, u32, u32 *, u32, u32);
extern void sub_8027D40(u32, struct BulkItem *);
extern void sub_8023868(u32, u32, u32, u32);
extern void sub_8023B7C(u32);
extern void sub_8023DA4();
extern void sub_8024458(s16, u32);
extern void sub_801BEEC(s16);
extern void sub_8093560(u32, struct Move *, u32 *);
extern void sub_801F808(u32 *);
extern void sub_8027794();
extern void sub_801A5D8(u32, u32, u32, u32);
extern void sub_801A8D0(u32);
extern void sub_801A9E0();
extern void sub_801F1B0(u32, u32);
extern void sub_801B3C0(struct Item *);
extern void sub_809401C(struct Move *, struct Move *);
extern void sub_801EE10(u32, s16, struct Move *, u32, u32, u32);
extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
extern void SetFriendAreaActionMenuState(u32);
extern void ResetSprites(u8 );
extern void sub_802719C();
extern void sub_8027274();
extern void sub_80277FC();
extern void sub_80278B4();
extern void sub_8027A40();
extern void sub_8027A5C();
extern void sub_8027D1C();
extern void sub_8027A78();
extern void sub_8027AE4();
extern void sub_8027B28();
extern void sub_8027BD8();
extern void sub_8027C84();
extern void sub_8027CA0();
extern void sub_8027D00();
extern void CreateFriendActionMenu();
extern void sub_80276A8();
const struct UnkTextStruct2 gUnknown_80DD6EC =
{
0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const struct UnkTextStruct2 gUnknown_80DD704 =
{
0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00,
0x13, 0x00, 0x04, 0x00,
0x09, 0x03,
0x03, 0x00,
NULL
};
const struct UnkTextStruct2 gUnknown_80DD71C =
{
0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00,
0x14, 0x00, 0x04, 0x00,
0x06, 0x03,
0x03, 0x00,
NULL
};
const struct UnkTextStruct2 gUnknown_80DD734 =
{
0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00,
0x16, 0x00, 0x04, 0x00,
0x06, 0x03,
0x03, 0x00,
NULL
};
const struct UnkTextStruct2 gUnknown_80DD74C =
{
0x00, 0x00, 0x00, 0x00,
0x03, 0x00, 0x00, 0x00,
0x02, 0x00, 0x11, 0x00,
0x1A, 0x02,
0x02, 0x00,
NULL
};
ALIGNED(4) const u8 gFriendAreaActionSayFarewellPrompt[] = _(
"You have chosen to say farewell\n"
"to this Pokémon.{EXTRA_MSG}"
"The Pokémon will leave its Friend Area.\n"
"It will no longer be available for\n"
"adventures. Is that OK?");
ALIGNED(4) const u8 gFriendAreaActionSayFarewellConfirm[] = _(
"If you say farewell to this\n"
"Pokémon{COMMA} it will be gone forever.{EXTRA_MSG}"
"You will never be able to get another one\n"
"like it to join your team.\n"
"Will you release it anyway?");
ALIGNED(4) const u8 gUnknown_80DD8A0[] = _(
"{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n"
"{CENTER_ALIGN}returned to the Toolbox.");
ALIGNED(4) const u8 gUnknown_80DD8D0[] = _(
"{CENTER_ALIGN}The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was\n{CENTER_ALIGN}sent to storage.");
u32 sub_8027074(void)
{
ResetSprites(0);
gUnknown_203B2BC = MemoryAlloc(sizeof(struct unkStruct_203B2BC), 8);
gUnknown_203B2BC->unk70 = 0;
gUnknown_203B2BC->unk74 = 0;
gUnknown_203B2BC->unk78 = 0;
SetFriendAreaActionMenuState(0);
return 1;
}
u32 sub_80270A4(void)
{
switch(gUnknown_203B2BC->state) {
case 0:
SetFriendAreaActionMenuState(1);
break;
case 1:
case 2:
sub_80277FC();
break;
case 3:
sub_80278B4();
break;
case 4:
sub_8027A40();
break;
case 5:
sub_8027A5C();
break;
case 8:
sub_8027A78();
break;
case 9:
sub_8027AE4();
break;
case 10:
case 0xb:
sub_8027B28();
break;
case 0xc:
sub_8027BD8();
break;
case 0xd:
sub_8027C84();
break;
case 0xe:
case 0xf:
sub_8027CA0();
break;
case 0x10:
sub_8027D00();
break;
default:
sub_8027D1C();
break;
case 0x11:
return 3;
}
return 0;
}
void sub_8027168(void)
{
if(gUnknown_203B2BC != NULL)
{
MemoryFree(gUnknown_203B2BC);
gUnknown_203B2BC = NULL;
}
}
void SetFriendAreaActionMenuState(u32 newState)
{
gUnknown_203B2BC->state = newState;
sub_802719C();
sub_8027274();
}
void sub_802719C(void)
{
s32 index;
sub_8006518(gUnknown_203B2BC->unk180);
switch(gUnknown_203B2BC->state)
{
case 3:
gUnknown_203B2BC->unk180[3] = gUnknown_80DD74C;
CreateFriendActionMenu();
gUnknown_203B2BC->unk180[2] = gUnknown_80DD704;
sub_8012CAC(&gUnknown_203B2BC->unk180[2], gUnknown_203B2BC->menuItems);
break;
case 0xC:
sub_80276A8();
gUnknown_203B2BC->unk180[2] = gUnknown_80DD71C;
sub_8012CAC(&gUnknown_203B2BC->unk180[2], gUnknown_203B2BC->menuItems);
break;
default:
for(index = 0; index < 4; index++)
{
gUnknown_203B2BC->unk180[index] = gUnknown_80DD6EC;
}
break;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B2BC->unk180, 1, 1);
}
void sub_8027274(void)
{
struct Item slot;
switch(gUnknown_203B2BC->state) {
case 0:
case 0x11:
break;
case 1:
sub_8023868(1,0,0,7);
break;
case 2:
sub_8023B7C(1);
break;
case 3:
sub_8027D40(3,&gUnknown_203B2BC->item2);
sub_8023DA4();
sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->unk70,2);
break;
case 4:
sub_8024458(gUnknown_203B2BC->targetPoke,2);
break;
case 5:
sub_801BEEC(gUnknown_203B2BC->targetPoke);
break;
case 10:
sub_801A5D8(1,0,0,10);
break;
case 0xb:
sub_801A8D0(1);
break;
case 0xc:
sub_801A9E0();
sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->unk74,2);
break;
case 0xd:
HeldItemToSlot(&slot, &gUnknown_203B2BC->itemToGive);
sub_801B3C0(&slot);
break;
case 0xe:
sub_809401C(gUnknown_203B2BC->unk28,gUnknown_203B2BC->unk18->moves);
sub_801EE10(3,gUnknown_203B2BC->targetPoke,gUnknown_203B2BC->unk28,0,0,0);
break;
case 0xf:
sub_801F1B0(1,0);
break;
case 8:
sub_8027794();
sub_8014248(gFriendAreaActionSayFarewellPrompt,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101);
break;
case 9:
sub_8027794();
sub_8014248(gFriendAreaActionSayFarewellConfirm,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101);
break;
case 0x10:
sub_8093560(gUnknown_203B2BC->unk20,gUnknown_203B2BC->unk28,&gUnknown_203B2BC->unk68);
sub_801F808(&gUnknown_203B2BC->unk68);
break;
case 6:
gUnknown_203B2BC->unk4 = 2;
// The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was
// returned to the Toolbox
sub_80141B4(gUnknown_80DD8A0,0,0,0x101);
break;
case 7:
gUnknown_203B2BC->unk4 = 2;
// The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was
// returned to storage
sub_80141B4(gUnknown_80DD8D0,0,0,0x101);
break;
}
}