summaryrefslogtreecommitdiff
path: root/src/wonder_mail_802DF88.c
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-12-01 16:33:06 -0600
committerGitHub <noreply@github.com>2021-12-01 14:33:06 -0800
commit4fc272fea6bc7332fae031ebeb12362cff1c35de (patch)
tree88092c6da3a6bb741caceab54f5372aee4ad5bae /src/wonder_mail_802DF88.c
parentfd8720b75c56ef3f641e6c5abf6c446929c824b9 (diff)
No wifi + 2 days on train = more decomp (#80)
* No wifi + 2 days on train = more decomp * layin some more * one func, one file
Diffstat (limited to 'src/wonder_mail_802DF88.c')
-rw-r--r--src/wonder_mail_802DF88.c316
1 files changed, 316 insertions, 0 deletions
diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c
new file mode 100644
index 0000000..b85df28
--- /dev/null
+++ b/src/wonder_mail_802DF88.c
@@ -0,0 +1,316 @@
+#include "global.h"
+#include "exclusive_pokemon.h"
+#include "input.h"
+#include "item.h"
+#include "memory.h"
+#include "text.h"
+#include "wonder_mail.h"
+
+struct unkStruct_203B2FC
+{
+ // size: 0xA8
+ /* 0x0 */ u32 state;
+ /* 0x4 */ u32 fallbackState;
+ u32 unk8;
+ s16 unkC;
+ s16 unkE;
+ u8 unk10;
+ u8 fill11[0x30 - 0x11];
+ u8 unk30;
+ u8 fill31[3];
+ struct WonderMail *unk34;
+ struct OpenedFile *faceFile;
+ u8 *faceData;
+ u16 unk40;
+ u16 unk42;
+ u8 unk44;
+ u8 unk45;
+ u8 unk46;
+ u8 fill47[0x48 - 0x47];
+ struct UnkTextStruct2 unk48[4];
+};
+extern struct unkStruct_203B2FC *gUnknown_203B2FC;
+
+
+struct unkStruct_203B300
+{
+ // size: 0x7C
+ u8 fill0[0xC];
+ u32 *unkC;
+ u32 unk10;
+ struct UnkTextStruct2 *unk14;
+ struct UnkTextStruct2 unk18[4];
+ u8 unk78[4];
+};
+
+extern struct unkStruct_203B300 *gUnknown_203B300;
+extern struct UnkTextStruct2 gUnknown_80E0248;
+extern struct UnkTextStruct2 gUnknown_80E0264;
+extern struct UnkTextStruct2 gUnknown_80E016C;
+extern void sub_80073B8(u32);
+extern void sub_80073E0(u32);
+extern void CreateRescueDescription(u32 *);
+extern void PlayMenuSoundEffect(u32);
+extern s32 sub_8012A64(void *, u32);
+void sub_802DF6C(void);
+void sub_802DF88(void);
+void sub_802DF14(void);
+void sub_801317C(void);
+extern s32 sub_80144A4(s32 *);
+extern void sub_802DC28(u32);
+extern void sub_802F2C0(void);
+extern void sub_802DC28(u32);
+extern u32 sub_802F298(void);
+extern u8 gUnknown_202E5D8[];
+extern u8 gUnknown_202E1C8[];
+extern u8 gUnknown_202DE58[];
+
+extern u8 gWonderMailClientThanksForRescuingMe[];
+extern u8 gWonderMailClientThanksForRescuingThem[];
+extern u8 gWonderMailClientEscorted[];
+extern u8 gWonderMailClientItemDelivered1[];
+extern u8 gWonderMailClientItemDelivered2[];
+extern void sub_802F204(u32 *, u32);
+extern void sub_80141B4(u8 *r0, u32, struct OpenedFile **r1, u32);
+extern void sub_802DC40(void);
+extern void sub_802DC9C(void);
+void sub_802DE44(void);
+void sub_802DE60(void);
+struct WonderMail *sub_8096AB4(u8);
+extern void sub_8096AF8(u8 *, u32, u32);
+extern void sub_8096EEC(void);
+extern void sub_803C21C(struct WonderMail *, u32 *);
+
+u32 sub_802DB28(u8 param_1, u8 param_2)
+{
+ char local_18 [8];
+
+ sub_8096AF8(local_18,param_1,param_2);
+ if (local_18[0] == '\0') {
+ return 0;
+ }
+ else {
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ gUnknown_203B2FC = MemoryAlloc(sizeof(struct unkStruct_203B2FC),8);
+ gUnknown_203B2FC->unk30 = param_1;
+ gUnknown_203B2FC->unk34 = sub_8096AB4(param_1);
+ sub_8096EEC();
+ sub_803C21C(gUnknown_203B2FC->unk34,&gUnknown_203B2FC->unk8);
+ gUnknown_203B2FC->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B2FC->unk34->clientSpecies);
+ gUnknown_203B2FC->faceData = NULL;
+ gUnknown_203B2FC->unk44 = 0;
+ gUnknown_203B2FC->unk45 = 0;
+ gUnknown_203B2FC->unk46 = 0;
+ gUnknown_203B2FC->unk40 = 2;
+ gUnknown_203B2FC->unk42 = 8;
+ if (gUnknown_203B2FC->faceFile != NULL) {
+ gUnknown_203B2FC->faceData = gUnknown_203B2FC->faceFile->data;
+ }
+ sub_802DC28(0);
+ return 1;
+ }
+}
+
+u32 sub_802DBD4(void)
+{
+ switch(gUnknown_203B2FC->state)
+ {
+ case 7:
+ gUnknown_203B2FC->unk34->mailType = 7;
+ return 3;
+ case 6:
+ sub_802DE44();
+ return 0;
+ default:
+ sub_802DE60();
+ return 0;
+ }
+}
+
+void sub_802DC00(void)
+{
+ if(gUnknown_203B2FC != NULL)
+ {
+ if(gUnknown_203B2FC->faceFile != NULL)
+ {
+ CloseFile(gUnknown_203B2FC->faceFile);
+ }
+ MemoryFree(gUnknown_203B2FC);
+ gUnknown_203B2FC = NULL;
+ }
+}
+
+void sub_802DC28(u32 newState)
+{
+ gUnknown_203B2FC->state = newState;
+ sub_802DC40();
+ sub_802DC9C();
+}
+
+void sub_802DC40(void)
+{
+ s32 iVar3;
+ sub_8006518(gUnknown_203B2FC->unk48);
+ switch(gUnknown_203B2FC->state)
+ {
+ case 0:
+ case 7:
+ for(iVar3 = 0; iVar3 < 4; iVar3++)
+ {
+ gUnknown_203B2FC->unk48[iVar3] = gUnknown_80E016C;
+ }
+ break;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B2FC->unk48, 1, 1);
+}
+
+void sub_802DC9C(void)
+{
+ char *speciesText;
+ s32 index;
+
+ switch(gUnknown_203B2FC->state) {
+ case 0:
+ CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8,gUnknown_203B2FC->unk34->clientSpecies);
+ CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8,gUnknown_203B2FC->unk34->clientSpecies);
+ speciesText = GetMonSpecies(gUnknown_203B2FC->unk34->clientSpecies);
+ strcpy(gUnknown_202E1C8 + 0xfffffdd0,speciesText);
+ speciesText = GetMonSpecies(gUnknown_203B2FC->unk34->targetSpecies);
+ strcpy(gUnknown_202E1C8 + 0xfffffe20,speciesText);
+ UnlockExclusivePokemon(gUnknown_203B2FC->unk34->clientSpecies);
+ sub_8090DC4(gUnknown_202DE58,gUnknown_203B2FC->unk34->targetItem,0);
+ gUnknown_203B2FC->fallbackState = 6;
+ switch(gUnknown_203B2FC->unk34->missionType) {
+ case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM:
+ sub_802DC28(5);
+ break;
+ case WONDER_MAIL_MISSION_TYPE_FIND_ITEM:
+ sub_802DC28(4);
+ break;
+ case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET:
+ sub_802DC28(2);
+ UnlockExclusivePokemon(gUnknown_203B2FC->unk34->targetSpecies);
+ break;
+ case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT:
+ sub_802DC28(3);
+ UnlockExclusivePokemon(gUnknown_203B2FC->unk34->targetSpecies);
+ break;
+ default:
+ case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT:
+ sub_802DC28(1);
+ break;
+ }
+ break;
+ case 1:
+ sub_80141B4(gWonderMailClientThanksForRescuingMe,0,&gUnknown_203B2FC->faceFile,0x10d);
+ break;
+ case 2:
+ sub_80141B4(gWonderMailClientThanksForRescuingThem,0,&gUnknown_203B2FC->faceFile,0x10d);
+ break;
+ case 3:
+ sub_80141B4(gWonderMailClientEscorted,0,&gUnknown_203B2FC->faceFile,0x10d);
+ break;
+ case 5:
+ sub_80141B4(gWonderMailClientItemDelivered1,0,&gUnknown_203B2FC->faceFile,0x10d);
+ break;
+ case 4:
+ index = FindItemInInventory(gUnknown_203B2FC->unk34->targetItem);
+ if (index != -1) {
+ ShiftItemsDownFrom(index);
+ FillInventoryGaps();
+ }
+ sub_80141B4(gWonderMailClientItemDelivered2,0,&gUnknown_203B2FC->faceFile,0x10d);
+ break;
+ case 6:
+ sub_802F204(&gUnknown_203B2FC->unk8,1);
+ break;
+ case 7:
+ default:
+ break;
+ }
+}
+
+void sub_802DE44(void)
+{
+ switch(sub_802F298())
+ {
+ case 2:
+ case 3:
+ sub_802F2C0();
+ sub_802DC28(7);
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void sub_802DE60(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802DC28(gUnknown_203B2FC->fallbackState);
+ }
+}
+
+u32 sub_802DE84(u32 *r0)
+{
+ gUnknown_203B300 = MemoryAlloc(sizeof(struct unkStruct_203B300), 8);
+ gUnknown_203B300->unkC = r0;
+ sub_801317C();
+ gUnknown_203B300->unk10 = *gUnknown_203B300->unkC;
+ gUnknown_203B300->unk14 = &gUnknown_203B300->unk18[gUnknown_203B300->unk10];
+ sub_8006518(gUnknown_203B300->unk18);
+ gUnknown_203B300->unk18[gUnknown_203B300->unk10] = gUnknown_80E0264;
+ sub_802DF14();
+ return 1;
+}
+
+u32 sub_802DEE0(void)
+{
+ switch(sub_8012A64(gUnknown_203B300, gUnknown_203B300->unk10))
+ {
+ case 2:
+ PlayMenuSoundEffect(1);
+ return 2;
+ case 1:
+ PlayMenuSoundEffect(0);
+ return 3;
+ default:
+ return 0;
+ }
+}
+
+void sub_802DF14(void)
+{
+ sub_802DF6C();
+ sub_802DF88();
+}
+
+void sub_802DF24(void)
+{
+ if(gUnknown_203B300 != NULL)
+ {
+ gUnknown_203B300->unk18[gUnknown_203B300->unk10] = gUnknown_80E0248;
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B300->unk18, 1, 1);
+ MemoryFree(gUnknown_203B300);
+ gUnknown_203B300 = NULL;
+ }
+}
+
+void sub_802DF6C(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B300->unk18, 1, 1);
+}
+
+void sub_802DF88(void)
+{
+ sub_80073B8(gUnknown_203B300->unk10);
+ CreateRescueDescription(gUnknown_203B300->unkC);
+ sub_80073E0(gUnknown_203B300->unk10);
+}