summaryrefslogtreecommitdiff
path: root/src/friend_area_action_menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/friend_area_action_menu.c')
-rw-r--r--src/friend_area_action_menu.c246
1 files changed, 246 insertions, 0 deletions
diff --git a/src/friend_area_action_menu.c b/src/friend_area_action_menu.c
new file mode 100644
index 0000000..04896d2
--- /dev/null
+++ b/src/friend_area_action_menu.c
@@ -0,0 +1,246 @@
+#include "global.h"
+#include "memory.h"
+#include "text.h"
+#include "input.h"
+#include "menu.h"
+#include "friend_area_action_menu.h"
+
+extern struct unkStruct_203B2BC *gUnknown_203B2BC;
+extern struct UnkTextStruct2 gUnknown_80DD74C;
+extern struct UnkTextStruct2 gUnknown_80DD704;
+extern struct UnkTextStruct2 gUnknown_80DD6EC;
+extern struct UnkTextStruct2 gUnknown_80DD71C;
+extern const char gUnknown_80DD764[];
+extern const char gUnknown_80DD7FC[];
+extern const char gUnknown_80DD8A0[];
+extern const char gUnknown_80DD8D0[];
+
+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, u8 *);
+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, u32 *, 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_8090B64(u8 *, u8 *);
+extern void sub_801B3C0(u8 *);
+extern void sub_809401C(u32 *, u32 *);
+extern void sub_801EE10(u32, s16, u32 *, u32, u32, u32);
+
+extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
+extern void sub_8027184(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();
+
+
+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;
+ sub_8027184(0);
+ return 1;
+}
+
+u32 sub_80270A4(void)
+{
+ switch(gUnknown_203B2BC->state) {
+ case 0:
+ sub_8027184(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 sub_8027184(u32 newState)
+{
+ gUnknown_203B2BC->state = newState;
+ sub_802719C();
+ sub_8027274();
+}
+
+void sub_802719C(void)
+{
+ s32 iVar3;
+
+ 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(iVar3 = 0; iVar3 < 4; iVar3++)
+ {
+ gUnknown_203B2BC->unk180[iVar3] = gUnknown_80DD6EC;
+ }
+ break;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B2BC->unk180, 1, 1);
+}
+
+void sub_8027274(void)
+{
+ u8 auStack12 [4];
+
+ 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->unk14);
+ 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->unk8,2);
+ break;
+ case 5:
+ sub_801BEEC(gUnknown_203B2BC->unk8);
+ 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:
+ sub_8090B64(auStack12,&gUnknown_203B2BC->unk10);
+ sub_801B3C0(auStack12);
+ break;
+ case 0xe:
+ sub_809401C(&gUnknown_203B2BC->unk28,&gUnknown_203B2BC->unk18->unk2C);
+ sub_801EE10(3,gUnknown_203B2BC->unk8,&gUnknown_203B2BC->unk28,0,0,0);
+ break;
+ case 0xf:
+ sub_801F1B0(1,0);
+ break;
+ case 8:
+ sub_8027794();
+ // You have chosen to say farewell to this Pokemon.
+ // The pokemon will leave its friend area.
+ // It will no longer be available for adventures.
+ // Is that OK?
+ sub_8014248(gUnknown_80DD764,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101);
+ break;
+ case 9:
+ sub_8027794();
+ // If you say farewell to this Pokemon, it will be gone forever.
+ // You will never be able to get another one
+ // like it to join your team.
+ // Will you release it anyway?
+ sub_8014248(gUnknown_80DD7FC,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 #C4$i0#R was
+ // returned to the Toolbox
+ sub_80141B4(gUnknown_80DD8A0,0,0,0x101);
+ break;
+ case 7:
+ gUnknown_203B2BC->unk4 = 2;
+ // The #C4$i0#R was
+ // returned to storage
+ sub_80141B4(gUnknown_80DD8D0,0,0,0x101);
+ break;
+ }
+}