summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-02-27 10:16:45 -0800
committerGitHub <noreply@github.com>2021-02-27 12:16:45 -0600
commitd72e17b5f5d795bebda2f6dc78dccb5e80c432b5 (patch)
tree776df17a36e2b30d2b362649db4408d701d55f9d /src
parent7fa4f1a92bdc4cefb094f9e3f1144ad3e3a588d9 (diff)
Miscellaneous decomp/labeling/splitting (#29)
* lots of wonder mail work, credits and label some stuff * nonmatch one intr func, match another, and label unused intr func * seperate credits out * split out debug menu and other stuff that isn't main menu * label another func * label some more funcs
Diffstat (limited to 'src')
-rw-r--r--src/code_8048480.c4
-rw-r--r--src/code_80521D0_1.c13
-rw-r--r--src/credits.c107
-rw-r--r--src/main_menu.c8
-rw-r--r--src/music_pre.c195
-rw-r--r--src/personality_test_pre.c16
-rw-r--r--src/wonder_mail.c579
-rw-r--r--src/wonder_mail_1.c30
-rw-r--r--src/wonder_mail_mid.c399
9 files changed, 1121 insertions, 230 deletions
diff --git a/src/code_8048480.c b/src/code_8048480.c
index 7860fa8..880bf05 100644
--- a/src/code_8048480.c
+++ b/src/code_8048480.c
@@ -7,7 +7,7 @@ struct unkDungeon_8041D5C
};
extern u32 gUnknown_80F89F4;
-extern u32 gUnknown_202DF98;
+extern u32 gAvailablePokemonNames;
extern u32 gUnknown_80FB580;
extern s16 gUnknown_80F4FB6;
extern s16 gUnknown_80F4FB8;
@@ -162,6 +162,6 @@ void sub_80484E8(u32 r0, struct unkDungeon_8041D5C *r1)
sub_807A290(r0, r1);
return;
}
- sub_8045B94(&gUnknown_202DF98, r1, 0);
+ sub_8045B94(&gAvailablePokemonNames, r1, 0);
sub_80522F4(r0, r1, gUnknown_80FB580);
}
diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c
index dd6dc7c..8be3be6 100644
--- a/src/code_80521D0_1.c
+++ b/src/code_80521D0_1.c
@@ -1,8 +1,9 @@
#include "global.h"
+#include "constants/species.h"
extern s16 *sub_8085480(void);
extern u32 sub_8085680(u32);
-extern u32 gUnknown_202E038;
+extern char gUnknown_202E038[0x50];
extern u8* gUnknown_203B418;
extern u32 gUnknown_8106778;
@@ -15,7 +16,7 @@ extern u32 gUnknown_8106918;
extern u32 gUnknown_8106934;
extern void sub_8086A3C(void);
-extern void sub_808D8BC(u32 *r0, u32 r1);
+extern void CopySpeciesNametoBuffer(char *r0, u32 r1);
extern void sub_8083E88(u32);
extern void sub_80854D4(void);
extern void sub_80855E4(void *);
@@ -51,7 +52,7 @@ void sub_808C9C4(void)
sub_80855E4(sub_8086A3C);
sub_8085918(temp_2, 0);
sub_8085860(array[2], array[3] - 3);
- sub_808D8BC(&gUnknown_202E038, 0x14d);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM);
}
void sub_808CA1C(void)
@@ -112,7 +113,7 @@ void sub_808CB5C(void)
sub_8085930(0x4);
sub_8068FE0(temp_2, 0x87 << 2, 0);
sub_8085860(array[2], array[3]);
- sub_808D8BC(&gUnknown_202E038, 0x14d);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM);
}
void nullsub_101(void)
@@ -132,7 +133,7 @@ void sub_808CBB0(void)
sub_80855E4(sub_8086A3C);
sub_8085918(temp_2, 0);
sub_8085860(array[2], array[3] - 3);
- sub_808D8BC(&gUnknown_202E038, 0x82 << 1);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE);
}
void sub_808CC04(void)
@@ -195,6 +196,6 @@ void sub_808CD44(void)
sub_80855E4(sub_8086A3C);
sub_8068FE0(temp_2, 0x87 << 2, 0);
sub_8085860(array[2], array[3] - 3);
- sub_808D8BC(&gUnknown_202E038, 0x82 << 1);
+ CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE);
}
diff --git a/src/credits.c b/src/credits.c
index 2f499fb..2329bd4 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -1,33 +1,108 @@
#include "global.h"
+#include "input.h"
-extern s32 sub_80144A4(s32 *);
-extern void sub_80338C4(u32);
-extern void sub_80338C4(u32);
+extern struct Inputs gRealInputs;
-void sub_8035404(u32 param_1)
+struct unkStruct_203B344
{
- s32 iVar1;
+ u32 unk0; // state variable
+ u32 unk4; // timer??
+};
- if(sub_80144A4(&iVar1) == 0){
- sub_80338C4(param_1);
- }
-}
+struct unkStruct_203B340
+{
+ // size: 0x84
+ u32 unk0;
+};
+
+extern void MemoryFree(void *);
+extern void* MemoryAlloc(u32, u32);
+extern void sub_80015C0(u32, u32);
-void sub_8035424(void)
+extern u16 gUnknown_80E5990[];
+extern struct unkStruct_203B344 *gUnknown_203B344;
+extern struct unkStruct_203B340 *gUnknown_203B340;
+extern s32 sub_8001658(u32, u32);
+
+void sub_803565C(void)
{
- sub_80338C4(6);
+ if(gUnknown_203B340 != NULL)
+ {
+ MemoryFree(gUnknown_203B340);
+ gUnknown_203B340 = NULL;
+ }
}
-void sub_8035430(void)
+
+u32 sub_8035678(void)
{
- sub_80338C4(0x4F);
+ gUnknown_203B344 = MemoryAlloc(sizeof(struct unkStruct_203B344), 8);
+ gUnknown_203B344->unk0 = 0;
+ gUnknown_203B344->unk4 = 0;
+ sub_80015C0(0, 0x39);
+ return 1;
}
-void nullsub_50(void)
+u32 sub_80356A0(void)
{
+ u16 uVar1;
+ u16 held_input;
+
+ held_input = gRealInputs.held;
+ uVar1 = gUnknown_80E5990[gUnknown_203B344->unk4];
+
+ switch(gUnknown_203B344->unk0) {
+ case 0:
+ gUnknown_203B344->unk0 = 3;
+ break;
+ case 1:
+ if (uVar1 == 0)
+ gUnknown_203B344->unk0 = 4;
+ else {
+ if (held_input == uVar1)
+ gUnknown_203B344->unk0 = 2;
+ else {
+ // NOTE: couldn't match with OR'd condition so split up to match
+ if ((uVar1 & held_input) != held_input)
+ gUnknown_203B344->unk0 = 3;
+ else
+ {
+ if (gUnknown_203B344->unk4 == 0)
+ gUnknown_203B344->unk0 = 3;
+ }
+ }
+ }
+ break;
+ case 2:
+ if (held_input == 0) {
+ gUnknown_203B344->unk0 = 1;
+ gUnknown_203B344->unk4++;
+ }
+ else {
+ if ((uVar1 & held_input) != held_input)
+ gUnknown_203B344->unk0 = 3;
+ }
+ break;
+ case 3:
+ return 2;
+ case 4:
+ return 3; // sub_809C478 clears the flash data when this is returned
+ }
+
+ if (sub_8001658(0,0x39) != 0) {
+ gUnknown_203B344->unk0 = 3;
+ return 2;
+ }
+ else {
+ return 0;
+ }
}
-void nullsub_51(void)
+void sub_8035758(void)
{
+ if(gUnknown_203B344 != NULL)
+ {
+ MemoryFree(gUnknown_203B344);
+ gUnknown_203B344 = NULL;
+ }
}
-
diff --git a/src/main_menu.c b/src/main_menu.c
index 0302550..d0a8f36 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -39,7 +39,7 @@ extern void sub_803225C(void);
extern void sub_803A1D8(void);
extern void sub_80398AC(void);
extern void sub_80382A0(void);
-extern void sub_8039254(u32);
+extern void CreateLoadScreen(u32);
extern void sub_8035DB4(u32);
extern void sub_8038900(u32);
extern void sub_803850C(u32);
@@ -57,7 +57,7 @@ extern s32 sub_8038630(void);
extern s32 sub_803A2A4(void);
extern void CleanMainMenu(void);
-extern void sub_80393F0(void);
+extern void CleanLoadScreen(void);
extern void sub_8036B04(void);
extern void sub_80370D4(void);
extern void sub_80327E4(void);
@@ -109,7 +109,7 @@ void SetUpMenu(void)
case 7:
case 8:
case 9:
- sub_8039254(gUnknown_203B348->unk4);
+ CreateLoadScreen(gUnknown_203B348->unk4);
break;
case 0xc:
sub_8036400();
@@ -248,7 +248,7 @@ void CleanUpMenu(void)
case 7:
case 8:
case 9:
- sub_80393F0();
+ CleanLoadScreen();
break;
case 0xc:
sub_8036B04();
diff --git a/src/music_pre.c b/src/music_pre.c
index edb00cd..53c5688 100644
--- a/src/music_pre.c
+++ b/src/music_pre.c
@@ -19,6 +19,15 @@ extern void sub_800C298(u16 r0);
typedef void (*IntrCallback)(void);
extern IntrCallback gUnknown_202D5F0[];
+struct unkStruct_202D648
+{
+ s16 unk0;
+ s16 unk2; // Vcount??
+ IntrCallback unk4; // some function... just making it IntrCallback for now
+};
+extern struct unkStruct_202D648 gUnknown_202D648[8];
+extern struct unkStruct_202D648 gUnknown_202D608[8];
+
extern struct MusicPlayerInfo gUnknown_20008F0; // BGM??
extern u32 gUnknown_203B0A0;
extern u32 gUnknown_203B0A4;
@@ -34,6 +43,13 @@ extern u8 gUnknown_203B09B;
extern u32 gUnknown_203B09C;
extern u8 gUnknown_203B09A;
+extern u32 gUnknown_203B0A0;
+extern s16 gUnknown_203B0AA;
+extern s16 gUnknown_203B0AC;
+extern s16 gUnknown_203B0AE;
+extern s16 gUnknown_203B0B0;
+extern s16 gUnknown_203B0B2;
+
struct unkStruct_3000FD8
{
u16 unk0;
@@ -51,9 +67,188 @@ extern struct BGControlStruct gBG1Control;
extern struct BGControlStruct gBG2Control;
extern struct BGControlStruct gBG3Control;
+extern void SoundVSync();
+extern void BlinkSavingIcon();
+
void sub_800BF80(void);
void xxx_update_bg_sound_input(void);
+void UnusedIntrFunc(void)
+{
+}
+
+void VBlankIntr(void)
+{
+ int index;
+
+ gUnknown_203B0A0++;
+ SoundVSync();
+ BlinkSavingIcon();
+ if (gUnknown_202D5F0[1] != NULL) {
+ gUnknown_202D5F0[1]();
+ }
+ index = 0;
+ while (index < gUnknown_203B0AA) {
+ gUnknown_202D648[index] = gUnknown_202D608[index];
+ index++;
+ }
+ gUnknown_203B0AC = gUnknown_203B0AA;
+ gUnknown_203B0AE = -1;
+ gUnknown_203B0B0 = -1;
+ gUnknown_203B0B2 = -1;
+ REG_DISPSTAT = DISPSTAT_VBLANK_INTR | DISPSTAT_VCOUNT_INTR;
+ if (gUnknown_203B099 == 0) {
+ UpdateSound();
+ }
+ SetInterruptFlag(INTR_FLAG_VBLANK);
+}
+
+// Registers are a little off.. seems to be around the while loop
+#ifdef NONMATCHING
+void VCountIntr(void)
+{
+ s32 sVar1;
+ s32 sVar2;
+
+ // Hack to get the lsr/asr shifts
+ sVar2 = REG_VCOUNT << 16;
+ sVar2 = sVar2 >> 16;
+
+ if (gUnknown_203B0AE < 0) {
+ if (gUnknown_202D5F0[2] != 0) {
+ gUnknown_202D5F0[2]();
+ }
+ gUnknown_203B0AE = 0;
+ }
+ if (gUnknown_203B0AE < gUnknown_203B0AC) {
+ sVar1 = gUnknown_202D648[gUnknown_203B0AE].unk2;
+ while (sVar1 <= sVar2) {
+ if ( gUnknown_202D648[gUnknown_203B0AE].unk4 != NULL) {
+ gUnknown_202D648[gUnknown_203B0AE].unk4();
+ }
+ gUnknown_203B0AE++;
+ if (gUnknown_203B0AC >= gUnknown_203B0AE) break;
+ sVar1 = gUnknown_202D648[gUnknown_203B0AE].unk2;
+ }
+ if (gUnknown_203B0AE < gUnknown_203B0AC) {
+ REG_DISPSTAT = gUnknown_202D648[gUnknown_203B0AE].unk2 << 8 | DISPSTAT_VBLANK_INTR | DISPSTAT_VCOUNT_INTR;
+ }
+ }
+ SetInterruptFlag(INTR_FLAG_VCOUNT);
+}
+#else
+NAKED
+void VCountIntr(void)
+{
+ asm_unified(
+ "\tpush {r4-r7,lr}\n"
+ "\tmov r7, r8\n"
+ "\tpush {r7}\n"
+ "\tldr r0, _0800BA44\n"
+ "\tldrh r0, [r0]\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r6, r0, 16\n"
+ "\tldr r0, _0800BA48\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r1, [r0, r2]\n"
+ "\tadds r7, r0, 0\n"
+ "\tcmp r1, 0\n"
+ "\tbge _0800B9B2\n"
+ "\tldr r0, _0800BA4C\n"
+ "\tldr r0, [r0, 0x8]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0800B9AE\n"
+ "\tbl _call_via_r0\n"
+"_0800B9AE:\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r7]\n"
+"_0800B9B2:\n"
+ "\tldr r0, _0800BA50\n"
+ "\tmovs r3, 0\n"
+ "\tldrsh r2, [r7, r3]\n"
+ "\tmovs r3, 0\n"
+ "\tldrsh r1, [r0, r3]\n"
+ "\tmov r8, r0\n"
+ "\tcmp r2, r1\n"
+ "\tbge _0800BA34\n"
+ "\tldr r1, _0800BA54\n"
+ "\tadds r0, r2, 0\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r1\n"
+ "\tmovs r3, 0x2\n"
+ "\tldrsh r0, [r0, r3]\n"
+ "\tcmp r0, r6\n"
+ "\tbgt _0800BA10\n"
+ "\tadds r5, r1, 0\n"
+ "\tadds r4, r7, 0\n"
+"_0800B9D6:\n"
+ "\tmovs r1, 0\n"
+ "\tldrsh r0, [r4, r1]\n"
+ "\tlsls r0, 3\n"
+ "\tadds r1, r5, 0x4\n"
+ "\tadds r0, r1\n"
+ "\tldr r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0800B9EA\n"
+ "\tbl _call_via_r0\n"
+"_0800B9EA:\n"
+ "\tldrh r0, [r4]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r4]\n"
+ "\tldr r1, _0800BA50\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r1, [r1, r2]\n"
+ "\tcmp r0, r1\n"
+ "\tbge _0800BA34\n"
+ "\tmovs r3, 0\n"
+ "\tldrsh r0, [r4, r3]\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r5\n"
+ "\tmovs r1, 0x2\n"
+ "\tldrsh r0, [r0, r1]\n"
+ "\tldr r7, _0800BA48\n"
+ "\tcmp r0, r6\n"
+ "\tble _0800B9D6\n"
+"_0800BA10:\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r1, [r7, r2]\n"
+ "\tmov r3, r8\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r0, [r3, r2]\n"
+ "\tcmp r1, r0\n"
+ "\tbge _0800BA34\n"
+ "\tldr r2, _0800BA58\n"
+ "\tldr r1, _0800BA54\n"
+ "\tmovs r3, 0\n"
+ "\tldrsh r0, [r7, r3]\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r1\n"
+ "\tldrh r0, [r0, 0x2]\n"
+ "\tlsls r0, 8\n"
+ "\tmovs r1, 0x28\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+"_0800BA34:\n"
+ "\tmovs r0, 0x4\n"
+ "\tbl SetInterruptFlag\n"
+ "\tpop {r3}\n"
+ "\tmov r8, r3\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_0800BA44: .4byte 0x04000006\n"
+"_0800BA48: .4byte gUnknown_203B0AE\n"
+"_0800BA4C: .4byte gUnknown_202D5F0\n"
+"_0800BA50: .4byte gUnknown_203B0AC\n"
+"_0800BA54: .4byte gUnknown_202D648\n"
+"_0800BA58: .4byte 0x04000004"
+ );
+}
+#endif
+
void sub_800BA5C(void)
{
if(gUnknown_203B09A != 0)
diff --git a/src/personality_test_pre.c b/src/personality_test_pre.c
index 27a55a8..5c5f85e 100644
--- a/src/personality_test_pre.c
+++ b/src/personality_test_pre.c
@@ -50,14 +50,14 @@ extern void sub_8014248(const char *text, u32, u32, u32 *r0, u32, u32, u32, u32,
extern u32 sub_80144A4(s32 *);
extern void sub_803CE6C(void);
-extern u32 sub_808D994(u32);
-extern void sub_80922F4(s32 *r0, u32);
+extern char* GetMonSpecies(u32);
+extern void CopyStringtoBuffer(s32 *r0, char *r1);
extern void sub_801602C(u32, s32 *r0);
extern u32 sub_8016080(void);
extern void sub_80160D8(void);
extern void sub_8099690(u32);
-extern void sub_808D8BC(u32 *r0, u32);
+extern void CopySpeciesNametoBuffer(char *r0, u32);
extern void sub_8006518(void *);
extern void sub_800641C(void *, u32, u32);
@@ -89,7 +89,7 @@ extern u32 gGenderMenu;
extern u8 gNatureQuestionTable[NUM_QUIZ_QUESTIONS];
extern const char *gPersonalityTypeDescriptionTable[];
-extern u32 gUnknown_202DF98;
+extern char gAvailablePokemonNames[0x50];
struct unkData gUnknown_80F4244 =
@@ -503,12 +503,12 @@ void sub_803CB5C(void)
void sub_803CB7C(void)
{
- u32 uVar1;
+ char *monName;
s32 *iVar2;
iVar2 = &gUnknown_203B400->unk20;
- uVar1 = sub_808D994(gUnknown_203B400->PartnerID);
- sub_80922F4(iVar2,uVar1);
+ monName = GetMonSpecies(gUnknown_203B400->PartnerID);
+ CopyStringtoBuffer(iVar2, monName);
sub_801602C(3, &gUnknown_203B400->unk20);
gUnknown_203B400->TestState = 13;
}
@@ -567,7 +567,7 @@ void PromptNewQuestion(void)
void PrintPersonalityTypeDescription(void)
{
- sub_808D8BC(&gUnknown_202DF98,gUnknown_203B400->StarterID);
+ CopySpeciesNametoBuffer(gAvailablePokemonNames, gUnknown_203B400->StarterID);
sub_80141B4(gPersonalityTypeDescriptionTable[gUnknown_203B400->playerNature],0,
0,0x101);
}
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index 274625c..e2daaa6 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -1,12 +1,16 @@
#include "global.h"
#include "save.h"
+#include "pokemon.h"
+#include "file_system.h"
+#include "constants/species.h"
// Wonder Mail Related
struct WonderMailStruct_203B2C0
{
+ // size: 0x548
u32 unk0;
u32 unk4;
- u8 padding2[0x38];
+ u8 unk8[0x38];
u32 unk40;
u32 unk44;
u16 unk48[232];
@@ -22,7 +26,7 @@ struct WonderMailStruct_203B2C0
u8 padding5[0x5C];
u32 unk3BC;
u8 padding4[0x60];
- u32 unk420;
+ u32 unk420; // Is this supposed to be a File like 203B2C4?
u8 padding3[0x110];
u32 unk534;
s32 unk538; // A7 << 3
@@ -31,29 +35,65 @@ struct WonderMailStruct_203B2C0
s16 unk544;
};
+struct unkStruct_203B2C4
+{
+ // size: 0x564
+ u8 unk0;
+ u8 padding[3];
+ u32 unk4; // wonder mail link status??
+ u8 unk8[0x36];
+ u8 unk3E;
+ u32 unk40;
+ u32 unk44; // another link status
+ u8 filler48[0x218 - 0x48];
+ s8 unk218;
+ u32 unk21C;
+ u8 filler220[0x30C - 0x220];
+ u32 unk30C;
+ u8 filler310[0x35C - 0x310];
+ u32 unk35C;
+ u8 filler360[0x3BC - 0x360];
+ u32 unk3BC;
+ u8 filler3C0[0x41C - 0x3C0];
+ u8 *unk41C;
+ /* 0x420 */ struct OpenedFile *faceFile;
+ /* 0x424 */ u8 *faceData;
+ u16 unk428;
+ u16 unk42A;
+ u8 unk42C;
+ u8 unk42D;
+ u8 unk42E;
+ u32 unk430;
+ u8 padding3[0x534 - 0x434];
+ s32 unk534;
+ u32 unk538;
+};
+extern struct unkStruct_203B2C4 *gUnknown_203B2C4;
+
struct unkStruct_8095228
{
u32 unk0;
u8 unk4;
- u8 padding[0x27];
+ u8 padding[0x10 - 0x5];
+ u32 unk10;
+ u8 padding2[0x20 - 0x14];
+ u8 *unk20;
+ u8 padding3[0x2C - 0x24];
+ s8 unk2C;
+ u8 padding4[0x30 - 0x2D];
s8 unk30;
};
+// Used as a temp storage when receiveing A-OK Mail
struct unkStruct_80293F4
{
- // size of 0x44
- u32 unk0;
- u32 unk4;
- u32 unk8;
- u32 *unkC;
+ u8 unkArray[0x10];
u32 unk10;
- u8 unk14[0xA]; // very unsure about this one
- u32 unk20;
- u32 unk24;
- u32 padding[7];
+ u8 padding[0x30 - 0x14];
};
+
extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
extern u32 sub_80144A4(s32 *r0);
@@ -81,6 +121,19 @@ extern u32 gWonderMailPasswordIncorrectText;
extern u32 gWonderMailSOSPasswordIncorrectText;
extern u32 gWonderMailDuplicateText;
extern u32 gWonderMailAOKMailReceivedText;
+extern u32 gUnknown_80DDA48;
+extern u32 gUnknown_80DEF04;
+extern u32 gUnknown_80DEF28;
+extern u32 gUnknown_80DEF80;
+extern u32 gUnknown_80DEFDC;
+extern u32 gUnknown_80DF044;
+extern u32 gUnknown_80DF0A0;
+extern u32 gUnknown_80DF0E0;
+extern u32 gUnknown_80DF138;
+extern u32 gUnknown_80DF194;
+extern char gUnknown_202E5D8[0x50];
+extern char gAvailablePokemonNames[0x50];
+extern u8 *gUnknown_80DED44;
extern s32 sub_8095190(void);
extern u32 sub_8095324(u32);
@@ -91,7 +144,7 @@ extern void sub_800641C(void *r0, u8, u8);
extern void ResetUnusedInputStruct();
extern void sub_803084C();
extern u32 sub_8030768(u32);
-extern u8 sub_80307EC();
+extern s8 sub_80307EC();
extern void sub_8030D40(u8, u32);
extern void sub_8006518(u32 *r0);
extern u8 sub_8012FD8(u32 *r0);
@@ -104,11 +157,13 @@ extern void sub_803092C(void);
extern void sub_8011C28(u32);
+extern void MemoryFill8(u8 *dest, u8 value, s32 size);
+extern void* MemoryAlloc(u32, u32);
+extern void MemoryFree(void *);
+
extern u32 sub_80154F0();
-void MemoryFill8(u8 *dest, u8 value, s32 size);
-extern u32 sub_8039068(u32, u32 *r1, u8 *r0);
-extern u32 gUnknown_80DDA48;
-extern void sub_8014248(u32 *r0, u32, u32, u32 *r1);
+extern u32 sub_8039068(u32, u8 *r1, u8 *r0);
+extern void sub_8014248(u32 *r0, u32, u32, u32 *r4, u32, u32, u32, u32 *r5, u32);
extern void sub_8095274(u32);
extern void sub_80155F0();
extern void sub_80951BC(u8 *r0);
@@ -126,6 +181,61 @@ extern u8 sub_8024108(u32);
extern u32 sub_8031DCC();
extern void sub_8031E10();
extern void sub_8031E00();
+void sub_808D8E0(u8 *, u32);
+extern char* GetMonSpecies(u32);
+extern s32 sub_80953D4(u32);
+extern void sub_802B2BC(u32);
+
+extern void sub_802AAE4();
+extern void sub_802AAC8();
+extern void sub_802AAAC();
+extern void sub_802AB7C();
+extern void sub_802AA28();
+extern void sub_802A98C();
+extern void sub_802A9A8();
+extern void sub_802A910();
+extern void sub_802A8BC();
+extern void sub_802A8A0();
+extern void sub_802A798();
+extern void sub_802A474();
+extern void sub_802A090();
+extern void sub_802A158();
+extern void sub_802A0C8();
+extern void sub_802A174();
+extern void sub_802A230();
+extern void sub_802A28C();
+extern void sub_802A39C();
+extern void sub_802A33C();
+extern void sub_802A740();
+extern void sub_802A6F0();
+extern void sub_802A68C();
+extern void sub_802A4D4();
+extern void sub_802A050();
+extern void sub_802A4AC();
+extern void sub_802A458();
+extern void sub_802A75C();
+extern void sub_8029F98();
+extern void sub_8029EA8();
+extern void sub_802A490();
+extern void sub_802AB60();
+extern void sub_802AB98();
+extern void sub_802A718();
+extern void sub_802A6B4();
+extern void sub_802A4F0();
+extern void sub_802A50C();
+extern void sub_802A9FC();
+extern void sub_802A828();
+extern void sub_802A850();
+extern void sub_8030DE4();
+extern void sub_801B450();
+extern void sub_803084C();
+extern void sub_801CBB8();
+extern void sub_80155F0();
+extern void sub_8031E10();
+extern void sub_802F2C0();
+
+
+
void sub_8028B04(u32 r0)
{
@@ -546,7 +656,7 @@ void sub_8028FDC(void)
}
else
{
- if(return_var->unk30 <= 0)
+ if(return_var->unk2C <= 0)
{
sub_8028B04(0x1D);
}
@@ -817,24 +927,20 @@ void sub_80293D8(void)
sub_8028B04(0x27);
}
-#ifndef NONMATCHING
-NAKED
-#endif
+// TODO: pls someone fix this madness of a match - Sese
+// This is definitely a fake match with the casting and switch could probably be cleaned up too..
+//
void sub_80293F4(void)
{
-#ifdef NONMATCHING
u32 return_var;
- u32 temp_var;
struct unkStruct_80293F4 temp;
+
return_var = sub_80154F0();
- MemoryFill8(temp.unk14, 0, 0x30);
+ MemoryFill8((u8 *)temp.unkArray, 0, 0x30);
switch(return_var)
{
case 3:
- return_var = sub_8039068(0x1C, &(gUnknown_203B2C0->unk8), temp.unk14) - 7;
- if(return_var <= 0x11)
- {
- switch(return_var)
+ switch(sub_8039068(0x1C, (gUnknown_203B2C0->unk8), temp.unkArray) - 7)
{
case 1:
case 2:
@@ -847,13 +953,7 @@ void sub_80293F4(void)
case 9:
break;
case 10:
- // TODO one register off from matching
- temp.unk0 = 0;
- temp.unk4 = 4;
- temp.unk8 = 0;
- temp.unkC = &(gUnknown_203B2C0->unk420);
- temp.unk10 = 0xC;
- sub_8014248(&gWonderMailPasswordIncorrectText, 0, 8, &gUnknown_80DDA48);
+ sub_8014248(&gWonderMailPasswordIncorrectText, 0, 8, &gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->unk420, 0xC);
sub_8028B04(0x28);
break;
case 11:
@@ -869,10 +969,9 @@ void sub_80293F4(void)
case 14:
break;
case 15:
- sub_8095274(temp.unk24);
- // This one is iffy.. not sure
- temp.unk14[0] = 2;
- sub_80951BC(temp.unk14);
+ sub_8095274(temp.unk10);
+ temp.unkArray[0] = 2; // Some sort of Ack?
+ sub_80951BC(temp.unkArray);
sub_80141B4(&gWonderMailAOKMailReceivedText, 0, &gUnknown_203B2C0->unk420, 0x101);
sub_8028B04(0x23);
break;
@@ -881,7 +980,6 @@ void sub_80293F4(void)
default:
break;
}
- }
sub_80155F0();
break;
case 2:
@@ -893,158 +991,6 @@ void sub_80293F4(void)
default:
break;
}
-#else
- asm_unified("\tpush {r4,lr}\n"
- "\tsub sp, 0x44\n"
- "\tbl sub_80154F0\n"
- "\tadds r4, r0, 0\n"
- "\tadd r0, sp, 0x14\n"
- "\tmovs r1, 0\n"
- "\tmovs r2, 0x30\n"
- "\tbl MemoryFill8\n"
- "\tcmp r4, 0x2\n"
- "\tbne _0802940E\n"
- "\tb _08029530\n"
-"_0802940E:\n"
- "\tcmp r4, 0x3\n"
- "\tbeq _08029414\n"
- "\tb _08029550\n"
-"_08029414:\n"
- "\tldr r0, _08029434\n"
- "\tldr r1, [r0]\n"
- "\tadds r1, 0x8\n"
- "\tmovs r0, 0x1C\n"
- "\tadd r2, sp, 0x14\n"
- "\tbl sub_8039068\n"
- "\tsubs r0, 0x7\n"
- "\tcmp r0, 0x11\n"
- "\tbls _0802942A\n"
- "\tb _0802951C\n"
-"_0802942A:\n"
- "\tlsls r0, 2\n"
- "\tldr r1, _08029438\n"
- "\tadds r0, r1\n"
- "\tldr r0, [r0]\n"
- "\tmov pc, r0\n"
- "\t.align 2, 0\n"
-"_08029434: .4byte gUnknown_203B2C0\n"
-"_08029438: .4byte _0802943C\n"
- "\t.align 2, 0\n"
-"_0802943C:\n"
- "\t.4byte _080294C8\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _08029484\n"
- "\t.4byte _080294C0\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _080294F0\n"
- "\t.4byte _0802951C\n"
- "\t.4byte _0802951C\n"
-"_08029484:\n"
- "\tldr r0, _080294B4\n"
- "\tldr r3, _080294B8\n"
- "\tmovs r2, 0\n"
- "\tstr r2, [sp]\n"
- "\tmovs r1, 0x4\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tstr r2, [sp, 0x8]\n"
- "\tldr r1, _080294BC\n"
- "\tldr r1, [r1]\n"
- "\tmovs r2, 0x84\n"
- "\tlsls r2, 3\n"
- "\tadds r1, r2\n"
- "\tstr r1, [sp, 0xC]\n"
- "\tmovs r1, 0xC\n"
- "\tstr r1, [sp, 0x10]\n"
- "\tmovs r1, 0\n"
- "\tmovs r2, 0x8\n"
- "\tbl sub_8014248\n"
- "\tmovs r0, 0x28\n"
- "\tbl sub_8028B04\n"
- "\tb _0802951C\n"
- "\t.align 2, 0\n"
-"_080294B4: .4byte gWonderMailPasswordIncorrectText\n"
-"_080294B8: .4byte gUnknown_80DDA48\n"
-"_080294BC: .4byte gUnknown_203B2C0\n"
-"_080294C0:\n"
- "\tldr r0, _080294C4\n"
- "\tb _080294CA\n"
- "\t.align 2, 0\n"
-"_080294C4: .4byte gWonderMailSOSPasswordIncorrectText\n"
-"_080294C8:\n"
- "\tldr r0, _080294E4\n"
-"_080294CA:\n"
- "\tldr r1, _080294E8\n"
- "\tldr r2, [r1]\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 3\n"
- "\tadds r2, r1\n"
- "\tldr r3, _080294EC\n"
- "\tmovs r1, 0\n"
- "\tbl sub_80141B4\n"
- "\tmovs r0, 0x7\n"
- "\tbl sub_8028B04\n"
- "\tb _0802951C\n"
- "\t.align 2, 0\n"
-"_080294E4: .4byte gWonderMailDuplicateText\n"
-"_080294E8: .4byte gUnknown_203B2C0\n"
-"_080294EC: .4byte 0x0000010d\n"
-"_080294F0:\n"
- "\tldr r0, [sp, 0x24]\n"
- "\tbl sub_8095274\n"
- "\tadd r1, sp, 0x14\n"
- "\tmovs r0, 0x2\n"
- "\tstrb r0, [r1]\n"
- "\tadds r0, r1, 0\n"
- "\tbl sub_80951BC\n"
- "\tldr r0, _08029524\n"
- "\tldr r1, _08029528\n"
- "\tldr r2, [r1]\n"
- "\tmovs r1, 0x84\n"
- "\tlsls r1, 3\n"
- "\tadds r2, r1\n"
- "\tldr r3, _0802952C\n"
- "\tmovs r1, 0\n"
- "\tbl sub_80141B4\n"
- "\tmovs r0, 0x23\n"
- "\tbl sub_8028B04\n"
-"_0802951C:\n"
- "\tbl sub_80155F0\n"
- "\tb _08029550\n"
- "\t.align 2, 0\n"
-"_08029524: .4byte gWonderMailAOKMailReceivedText\n"
-"_08029528: .4byte gUnknown_203B2C0\n"
-"_0802952C: .4byte 0x00000101\n"
-"_08029530:\n"
- "\tbl sub_80155F0\n"
- "\tbl ResetUnusedInputStruct\n"
- "\tldr r0, _08029558\n"
- "\tldr r0, [r0]\n"
- "\tmovs r2, 0xEF\n"
- "\tlsls r2, 2\n"
- "\tadds r0, r2\n"
- "\tmovs r1, 0x1\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_800641C\n"
- "\tmovs r0, 0x1\n"
- "\tbl sub_8028B04\n"
-"_08029550:\n"
- "\tadd sp, 0x44\n"
- "\tpop {r4}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
-"_08029558: .4byte gUnknown_203B2C0\n");
-#endif
}
void sub_802955C(void)
@@ -1436,3 +1382,252 @@ void sub_8029B34(void)
}
sub_8028B04(3);
}
+
+u32 sub_8029B50(void)
+{
+ char *monName;
+ struct OpenedFile *faceFile;
+ s32 uVar2;
+ int counter;
+ struct unkStruct_8095228 *temp;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ gUnknown_203B2C4 = MemoryAlloc(0x564, 8);
+ MemoryFill8((u8 *)gUnknown_203B2C4, 0, 0x564);
+
+ sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gAvailablePokemonNames, monName);
+ faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER);
+
+ gUnknown_203B2C4->faceFile = faceFile;
+ gUnknown_203B2C4->faceData = faceFile->data;
+ gUnknown_203B2C4->unk42C = 0;
+ gUnknown_203B2C4->unk42D = 0;
+ gUnknown_203B2C4->unk42E = 0;
+ gUnknown_203B2C4->unk428 = 2;
+ gUnknown_203B2C4->unk42A = 8;
+
+ for(counter = 0; counter < 0x36; counter++){
+ gUnknown_203B2C4->unk8[counter] = 0;
+ }
+
+ gUnknown_203B2C4->unk534 = 3;
+ gUnknown_203B2C4->unk538 = 1;
+
+ uVar2 = sub_80953D4(6);
+ if (uVar2 != -1) {
+ temp = sub_8095228(uVar2);
+ gUnknown_203B2C4->unk41C = temp->unk20;
+ gUnknown_203B2C4->unk218 = uVar2;
+ gUnknown_203B2C4->unk430 = temp->unk10;
+ sub_802B2BC(5);
+ }
+ else {
+ gUnknown_203B2C4->unk41C = gUnknown_80DED44;
+ gUnknown_203B2C4->unk218 = -1;
+ sub_802B2BC(0);
+ }
+ gUnknown_203B2C4->unk4 = 0x2b;
+ return 1;
+}
+
+u32 sub_8029C98(void)
+{
+
+ switch(gUnknown_203B2C4->unk0) {
+ case 5:
+ sub_802AB7C();
+ break;
+ case 0x1e:
+ sub_8029F98();
+ break;
+ case 0x1f:
+ sub_8029EA8();
+ break;
+ case 0xe:
+ sub_802A090();
+ break;
+ case 0xf:
+ sub_802A158();
+ break;
+ case 0x11:
+ sub_802A174();
+ break;
+ case 0x12:
+ sub_802A230();
+ break;
+ case 0x10:
+ sub_802A0C8();
+ break;
+ case 0x13:
+ sub_802A28C();
+ break;
+ case 0x14:
+ sub_802A39C();
+ break;
+ case 0x15:
+ sub_802A33C();
+ break;
+ case 0x1c:
+ sub_802A458();
+ break;
+ case 0x1b:
+ sub_802A4AC();
+ break;
+ case 0x19:
+ sub_802A4D4();
+ break;
+ case 0x1a:
+ sub_802A050();
+ break;
+ case 0x28:
+ sub_802A9FC();
+ break;
+ case 0x26:
+ sub_802A4F0();
+ break;
+ case 0x27:
+ sub_802A50C();
+ break;
+ case 0x25:
+ sub_802A6B4();
+ break;
+ case 0x24:
+ sub_802A718();
+ break;
+ case 0x21:
+ sub_802AB60();
+ break;
+ case 0x22:
+ sub_802AB98();
+ break;
+ case 0x16:
+ sub_802A740();
+ break;
+ case 0x18:
+ sub_802A68C();
+ break;
+ case 0x17:
+ sub_802A6F0();
+ break;
+ case 0x1d:
+ sub_802A75C();
+ break;
+ case 0x20:
+ sub_802A490();
+ break;
+ case 0xd:
+ sub_802A474();
+ break;
+ case 0xc:
+ sub_802A798();
+ break;
+ case 0x29:
+ sub_802A828();
+ break;
+ case 0x2a:
+ sub_802A850();
+ break;
+ case 0xb:
+ sub_802A8A0();
+ break;
+ case 10:
+ sub_802A8BC();
+ break;
+ case 9:
+ sub_802A910();
+ break;
+ case 7:
+ sub_802A98C();
+ break;
+ case 8:
+ sub_802A9A8();
+ break;
+ case 6:
+ sub_802AA28();
+ break;
+ case 4:
+ sub_802AAAC();
+ break;
+ case 0:
+ case 1:
+ sub_802AAE4();
+ break;
+ case 2:
+ sub_802AAC8();
+ break;
+ case 3:
+ return 3;
+ }
+ return 0;
+}
+
+void sub_8029E60(void)
+{
+ if(gUnknown_203B2C4 != NULL)
+ {
+ CloseFile(gUnknown_203B2C4->faceFile);
+ MemoryFree(gUnknown_203B2C4);
+ gUnknown_203B2C4 = NULL;
+ sub_8030DE4();
+ sub_801B450();
+ sub_803084C();
+ sub_801CBB8();
+ sub_80155F0();
+ sub_8031E10();
+ sub_802F2C0();
+ }
+}
+
+void sub_8029EA8(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(1);
+ }
+}
+
+void sub_8029EC4(u32 param_1)
+{
+ switch(param_1) {
+ case 3:
+ sub_80141B4(&gUnknown_80DEF28, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 4:
+ sub_80141B4(&gUnknown_80DEF80, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 6:
+ sub_80141B4(&gUnknown_80DEFDC, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 7:
+ sub_80141B4(&gUnknown_80DF044, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 9:
+ sub_80141B4(&gUnknown_80DF0A0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 11:
+ sub_80141B4(&gUnknown_80DF0A0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 13:
+ sub_80141B4(&gUnknown_80DF0E0, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 1:
+ case 2:
+ case 5:
+ case 14:
+ sub_80141B4(&gUnknown_80DEF04, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 15:
+ sub_80141B4(&gUnknown_80DF138,0,(u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 0:
+ case 8:
+ case 10:
+ case 12:
+ default:
+ return;
+ }
+}
diff --git a/src/wonder_mail_1.c b/src/wonder_mail_1.c
index e8ca386..20f901c 100644
--- a/src/wonder_mail_1.c
+++ b/src/wonder_mail_1.c
@@ -2,8 +2,7 @@
extern void sub_80338C4(u32);
extern u32 *gUnknown_203B33C;
-
-u32 sub_80144A4(s32 *);
+extern s32 sub_80144A4(s32 *);
void sub_8035374(void)
{
@@ -45,3 +44,30 @@ void sub_80353BC(void)
break;
}
}
+
+void sub_8035404(u32 param_1)
+{
+ s32 iVar1;
+
+ if(sub_80144A4(&iVar1) == 0){
+ sub_80338C4(param_1);
+ }
+}
+
+void sub_8035424(void)
+{
+ sub_80338C4(6);
+}
+
+void sub_8035430(void)
+{
+ sub_80338C4(0x4F);
+}
+
+void nullsub_50(void)
+{
+}
+
+void nullsub_51(void)
+{
+}
diff --git a/src/wonder_mail_mid.c b/src/wonder_mail_mid.c
new file mode 100644
index 0000000..93b2f5e
--- /dev/null
+++ b/src/wonder_mail_mid.c
@@ -0,0 +1,399 @@
+#include "global.h"
+#include "file_system.h"
+
+struct unkStruct_203B2C4
+{
+ // size: 0x564
+ u8 unk0;
+ u8 padding[3];
+ u32 unk4; // wonder mail link status??
+ u8 unk8[0x36];
+ u8 unk3E;
+ u32 unk40;
+ u32 unk44; // another link status
+ u8 filler48[0x218 - 0x48];
+ s8 unk218;
+ u32 unk21C;
+ u8 filler220[0x30C - 0x220];
+ u32 unk30C;
+ u8 filler310[0x35C - 0x310];
+ u32 unk35C;
+ u8 filler360[0x3BC - 0x360];
+ u32 unk3BC;
+ u8 filler3C0[0x41C - 0x3C0];
+ u8 unk41C[4]; // TODO: unify this with wonder_mail.c
+ struct OpenedFile *faceFile;
+ u8 *faceData;
+ u16 unk428;
+ u16 unk42A;
+ u8 unk42C;
+ u8 unk42D;
+ u8 unk42E;
+ u32 unk430;
+ u8 filler434[0x534 - 0x434];
+ s32 unk534;
+ u32 unk538;
+};
+extern struct unkStruct_203B2C4 *gUnknown_203B2C4;
+
+
+extern u16 gUnknown_80E5990[];
+extern struct unkStruct_203B340 *gUnknown_203B340;
+extern s32 sub_8001658(u32, u32);
+extern u32 gUnknown_80E4A40[];
+extern u8 sub_8099B94();
+
+extern void sub_8099A5C(u32, u32, u32*);
+extern void sub_8099AFC(u32, u32, u32*);
+extern void sub_800641C(void *, u32, u32);
+extern void ResetUnusedInputStruct();
+extern void sub_8099690(u32);
+extern void sub_80141B4(u32 *r0, u32, u32 *r1, u32);
+
+
+extern void MemoryFill8(u8 *dest, u8 value, s32 size);
+extern u32 gUnknown_80DF194;
+extern void sub_8029EC4(u32 param_1);
+
+extern void sub_802B2BC(u32);
+extern u32 sub_80144A4(s32 *r0);
+extern u32 sub_8031DCC(void);
+extern void sub_8031E00(void);
+extern void sub_8031E10(void);
+extern void sub_8030D40(u8, u32);
+extern u32 sub_8030768(u32);
+extern void sub_803084C(void);
+extern s8 sub_80307EC(void);
+extern void sub_8006518(u32 *);
+extern u8 sub_8012FD8(u32 *r0);
+extern void sub_8013114(u32 *, s32 *);
+extern void sub_8035CC0(u32 *, u32);
+extern void sub_8030810(u32);
+extern u32 sub_8030DA0();
+extern void sub_8030DE4();
+extern void sub_803092C();
+extern void sub_8035CF4(u32 *, u32, u32);
+extern u32 sub_801CA08(u32);
+extern void sub_801CBB8();
+extern void sub_801B3C0(u8 *);
+extern u8 sub_801CB24();
+extern void sub_801B450();
+extern u32 sub_801B410();
+extern void sub_801CB5C(u32);
+extern void sub_801CCD8();
+extern void sub_8011C28(u32);
+extern void sub_8012574(u32);
+
+void sub_8029F98(void)
+{
+ s32 auStack20;
+
+ if (sub_80144A4(&auStack20) != 0) {
+ return;
+ }
+ MemoryFill8(gUnknown_203B2C4->unk41C, 0, 4);
+ gUnknown_203B2C4->unk41C[2] = 0;
+ gUnknown_203B2C4->unk41C[1] = 1;
+ gUnknown_203B2C4->unk41C[0] = 0;
+ if (gUnknown_203B2C4->unk44 == 0) {
+ switch(gUnknown_203B2C4->unk40)
+ {
+ case 6:
+ switch(gUnknown_203B2C4->unk534)
+ {
+ case 3:
+ case 5:
+ case 6:
+ sub_80141B4(&gUnknown_80DF194, 0, (u32 *)&gUnknown_203B2C4->faceFile, 0x10d);
+ break;
+ case 4:
+ default:
+ break;
+ }
+ sub_802B2BC(0xD);
+ return;
+ case 7:
+ sub_802B2BC(0x21);
+ return;
+ default:
+ return;
+ }
+ }
+ else
+ {
+ sub_8029EC4(gUnknown_203B2C4->unk44);
+ sub_802B2BC(0x1F);
+ }
+}
+
+void sub_802A050(void)
+{
+ switch(sub_8031DCC())
+ {
+
+ case 3:
+ case 2:
+ sub_8031E10();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B2C4->unk3BC, 1, 1);
+ sub_802B2BC(0x1B);
+ break;
+ case 1:
+ sub_8031E00();
+ break;
+ default:
+ return;
+ }
+}
+
+void sub_802A090(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ switch(temp)
+ {
+ case 7:
+ sub_802B2BC(6);
+ break;
+ case 8:
+ case 0:
+ sub_802B2BC(1);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void sub_802A0C8(void)
+{
+ switch(sub_8030768(1))
+ {
+ case 2:
+ sub_803084C();
+ sub_802B2BC(1);
+ break;
+ case 3:
+ gUnknown_203B2C4->unk218 = sub_80307EC();
+ sub_802B2BC(0x11);
+ break;
+ case 4:
+ gUnknown_203B2C4->unk4 = 0x10;
+ gUnknown_203B2C4->unk218 = sub_80307EC();
+ sub_8006518(&gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_8030D40(gUnknown_203B2C4->unk218,0);
+ sub_802B2BC(0x12);
+ }
+}
+
+void sub_802A158(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x10);
+ }
+}
+
+void sub_802A174(void)
+{
+ s32 temp;
+
+ temp = -1;
+ sub_8030768(0);
+ if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) {
+ sub_8013114(&gUnknown_203B2C4->unk30C, &temp);
+ }
+
+ switch(temp)
+ {
+ case 0xB:
+ sub_803084C();
+ sub_802B2BC(0xe);
+ break;
+ case 0xC:
+ gUnknown_203B2C4->unk4 = 0x2b;
+ sub_8006518(&gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_8030D40(gUnknown_203B2C4->unk218,0);
+ sub_802B2BC(0x12);
+ break;
+ case 0:
+ case 0xD:
+ sub_8035CC0(&gUnknown_203B2C4->unk35C,2);
+ sub_8030810(1);
+ sub_802B2BC(0x10);
+ default:
+ break;
+ }
+}
+
+void sub_802A230(void)
+{
+ switch(sub_8030DA0())
+ {
+ case 2:
+ case 3:
+ sub_8030DE4();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B2C4->unk3BC, 1, 1);
+ sub_803092C();
+ if (gUnknown_203B2C4->unk4 == 0x2b) {
+ sub_8035CF4(&gUnknown_203B2C4->unk21C, 3, 1);
+ sub_802B2BC(0x11);
+ }
+ else {
+ sub_802B2BC(gUnknown_203B2C4->unk4);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void sub_802A28C(void)
+{
+
+ gUnknown_203B2C4->unk41C[2] = 0;
+ gUnknown_203B2C4->unk41C[1] = 1;
+ gUnknown_203B2C4->unk41C[0] = 0;
+
+ switch(sub_801CA08(1))
+ {
+ case 2:
+ sub_801CBB8();
+ sub_802B2BC(1);
+ break;
+ case 3:
+ gUnknown_203B2C4->unk41C[2] = sub_801CB24();
+ sub_802B2BC(0x14);
+ break;
+ case 4:
+ gUnknown_203B2C4->unk4 = 0x13;
+ gUnknown_203B2C4->unk41C[2] = sub_801CB24();
+ sub_8006518(&gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_801B3C0(gUnknown_203B2C4->unk41C);
+ sub_802B2BC(0x15);
+ break;
+ }
+}
+
+void sub_802A33C(void)
+{
+ switch(sub_801B410())
+ {
+ case 2:
+ case 3:
+ sub_801B450();
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B2C4->unk3BC,1,1);
+ sub_801CB5C(1);
+ if (gUnknown_203B2C4->unk4 == 0x2b) {
+ sub_8035CF4(&gUnknown_203B2C4->unk21C,3,1);
+ sub_802B2BC(0x14);
+ }
+ else {
+ sub_802B2BC(gUnknown_203B2C4->unk4);
+ }
+ break;
+ case 1:
+ default:
+ break;
+ }
+}
+
+void sub_802A39C(void)
+{
+ s32 temp;
+
+ temp = -1;
+ sub_801CA08(0);
+ if (sub_8012FD8(&gUnknown_203B2C4->unk30C) == 0) {
+ sub_8013114(&gUnknown_203B2C4->unk30C, &temp);
+ }
+
+ switch(temp)
+ {
+ case 0xB:
+ sub_801CBB8();
+ sub_802B2BC(0xC);
+ break;
+ case 0xC:
+ gUnknown_203B2C4->unk4 = 0x2b;
+ sub_8006518(&gUnknown_203B2C4->unk3BC);
+ ResetUnusedInputStruct();
+ sub_800641C(0,1,1);
+ sub_801B3C0(gUnknown_203B2C4->unk41C);
+ sub_802B2BC(0x15);
+ break;
+ case 0:
+ case 0xD:
+ sub_8035CC0(&gUnknown_203B2C4->unk35C, 3);
+ sub_801CCD8();
+ sub_802B2BC(0x13);
+ default:
+ break;
+ }
+}
+
+void sub_802A458(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0xD);
+ }
+}
+
+void sub_802A474(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x3);
+ }
+}
+
+void sub_802A490(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x3);
+ }
+}
+
+void sub_802A4AC(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x18);
+ sub_8011C28(1);
+ sub_8012574(0);
+ }
+}
+
+void sub_802A4D4(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x1A);
+ }
+}
+
+void sub_802A4F0(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) == 0)
+ {
+ sub_802B2BC(0x27);
+ }
+}