summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/code_2.c20
-rw-r--r--src/code_80118A4.c23
-rw-r--r--src/code_801D760.c55
-rw-r--r--src/code_808EAB0.c104
-rw-r--r--src/code_809017C.c284
-rw-r--r--src/code_8094F88.c24
-rw-r--r--src/code_809747C.c6
-rw-r--r--src/code_8097F40.c64
-rw-r--r--src/code_80983D8.c20
-rw-r--r--src/debug_menu.c135
-rw-r--r--src/debug_menu_1.c85
-rw-r--r--src/event_flag.c25
-rw-r--r--src/exclusive_pokemon.c80
-rw-r--r--src/friend_area_1.c55
-rw-r--r--src/friend_rescue.c508
-rw-r--r--src/friend_rescue_1.c141
-rw-r--r--src/main_menu.c240
-rw-r--r--src/main_menu_mid.c80
-rw-r--r--src/music_pre.c2
-rw-r--r--src/personality_test_pre.c69
-rw-r--r--src/save.c12
-rw-r--r--src/wonder_mail.c27
-rw-r--r--src/wonder_mail_1.c73
-rw-r--r--src/wonder_mail_main_menu.c44
24 files changed, 1757 insertions, 419 deletions
diff --git a/src/code_2.c b/src/code_2.c
index 6b0b46b..2b42b58 100644
--- a/src/code_2.c
+++ b/src/code_2.c
@@ -17,8 +17,8 @@ extern void LoadMonsterParameters(void);
extern void sub_8097670(void);
extern void sub_8094980(void);
extern void sub_8094C14(void);
-extern void sub_8097F5C(void);
-extern void sub_8090998(void);
+extern void LoadExclusivePokemon(void);
+extern void LoadItemParameters(void);
extern void sub_809207C(void);
extern void LoadWazaParameters(void);
extern void sub_80950BC(void);
@@ -81,7 +81,7 @@ void GameLoop(void)
{
u32 tmp;
u8 tmp3 = 1;
- u32 tmp4;
+ u32 nextMenu;
u32 flag;
InitHeap();
@@ -94,9 +94,9 @@ void GameLoop(void)
InitializePlayTime();
sub_8094980();
sub_8094C14();
- sub_8097F5C();
+ LoadExclusivePokemon();
LoadFriendAreas();
- sub_8090998();
+ LoadItemParameters();
sub_809207C();
LoadWazaParameters();
sub_80950BC();
@@ -164,11 +164,11 @@ void GameLoop(void)
}
SetUpMenu();
xxx_update_stuff(0);
- tmp4 = UpdateMenu();
+ nextMenu = UpdateMenu();
CleanUpMenu();
- if (tmp4 == 2) break;
- if (tmp4 == 4) break;
- if (tmp4 == 3) break;
+ if (nextMenu == 2) break;
+ if (nextMenu == 4) break;
+ if (nextMenu == 3) break;
}
DeleteMainMenu();
while (gUnknown_2000A80 > 0) {
@@ -179,7 +179,7 @@ void GameLoop(void)
xxx_update_stuff(0);
}
CloseFile(gTitlePaletteFile);
- switch (tmp4) {
+ switch (nextMenu) {
case 2: {
s32 tmp5 = sub_80953D4(7);
if (tmp5 != -1) {
diff --git a/src/code_80118A4.c b/src/code_80118A4.c
index ef11fd4..e8c4aad 100644
--- a/src/code_80118A4.c
+++ b/src/code_80118A4.c
@@ -12,12 +12,8 @@
void sub_8011924(void);
extern u8 sub_80023E4(u8);
-extern void sub_800BF48(u16 r0);
-extern void sub_800BF80(void);
-extern void sub_800BFD0(u16 r0);
extern void sub_800C3F8(u16 r0, u16 r1);
extern void sub_801199C(u16 r0);
-extern void sub_800C074(u16 r0, u16 r1);
extern void sub_800C298(u16 r0);
extern u8 sub_800C5D0(u16 r0);
@@ -121,9 +117,10 @@ void sub_80117C4(void)
sub_800BFD0(0x1E);
}
+// Some sound effect
void sub_80117D0(void)
{
- sub_800C074(0x97 << 1, 256);
+ sub_800C074(302, 256);
}
// Some sound effect
@@ -199,9 +196,9 @@ void xxx_call_fade_in_new_bgm(u16 songIndex, u16 speed)
FadeInNewBGM(songIndex, speed);
}
-void sub_8011914(u16 r0)
+void sub_8011914(u16 songIndex)
{
- sub_800BF48(r0);
+ sub_800BF48(songIndex);
}
void sub_8011924()
@@ -209,9 +206,9 @@ void sub_8011924()
sub_800BF80();
}
-void sub_8011930(u16 r0)
+void sub_8011930(u16 speed)
{
- sub_800BFD0(r0);
+ sub_800BFD0(speed);
}
u32 IsEqualtoBGTrack(u16 songIndex)
@@ -232,7 +229,7 @@ void sub_8011974(u16 songIndex, u16 r1)
void sub_8011988(u16 songIndex)
{
- sub_800C074(songIndex, 0x80 << 1);
+ sub_800C074(songIndex, 256);
}
void sub_801199C(u16 songIndex)
@@ -250,11 +247,11 @@ u8 sub_80119C0(u16 songIndex)
return sub_800C5D0(songIndex);
}
-void sub_80119D4(u32 r0)
+void PlayMenuSoundEffect(u32 r0)
{
if(gUnknown_202DE20 > 0)
return;
- sub_800C074(gUnknown_80D4144[r0], 0x80 << 1);
+ sub_800C074(gUnknown_80D4144[r0], 256);
gUnknown_202DE20 = 4;
}
@@ -263,7 +260,7 @@ void sub_8011A04(void)
if(gUnknown_202DE22 > 0)
return;
gUnknown_202DE22 = 3;
- sub_800C074(0x131, 0x80 << 1);
+ sub_800C074(0x131, 256);
}
void sub_8011A2C(u32 r0)
diff --git a/src/code_801D760.c b/src/code_801D760.c
index 79c5a4c..28c4071 100644
--- a/src/code_801D760.c
+++ b/src/code_801D760.c
@@ -22,19 +22,70 @@ extern u32 sub_80270A4();
extern u32 sub_802C898(void);
extern void sub_802C8F4(void);
+extern u8 sub_8012FD8(u32 *);
+extern void sub_8013114(u32 *, s32 *);
+
struct unk_203B250
{
u32 unk0;
u16 unk4;
u8 unk6;
u8 unk7;
- u32 padding[3];
+ u8 unk8;
+ u8 unk9;
+ u8 fillA[0x14 - 0xA];
u32 unk14;
- u32 unk18;
+ u32 unk18; // an input struct??
};
struct unk_203B250 *gUnknown_203B250;
+void sub_801D680(void)
+{
+ int local_c;
+
+ local_c = 0;
+ if ((sub_8012FD8(&gUnknown_203B250->unk18) == '\0') && (sub_8013114(&gUnknown_203B250->unk18,&local_c), local_c != 1)) {
+ gUnknown_203B250->unk14 = local_c;
+ }
+ switch(local_c) {
+ case 2:
+ sub_801D208(3);
+ break;
+ case 4:
+ sub_801D208(6);
+ break;
+ case 3:
+ sub_801D208(4);
+ break;
+ case 5:
+ sub_801D208(7);
+ break;
+ case 6:
+ sub_801D208(8);
+ break;
+ case 7:
+ sub_801D208(9);
+ break;
+ case 8:
+ sub_801D208(10);
+ break;
+ case 9:
+ sub_801D208(0xb);
+ break;
+ case 10:
+ gUnknown_203B250->unk9 = 1;
+ sub_801D208(2);
+ break;
+ case 11:
+ sub_801D208(0xc);
+ break;
+ case 1:
+ sub_801D208(2);
+ break;
+ }
+}
+
void sub_801D760()
{
u32 temp;
diff --git a/src/code_808EAB0.c b/src/code_808EAB0.c
index 9fea853..f50d053 100644
--- a/src/code_808EAB0.c
+++ b/src/code_808EAB0.c
@@ -8,6 +8,10 @@ extern u8 gUnknown_810A36B[];
extern s16 gUnknown_810A378[];
extern s32 gUnknown_810A390[];
+extern u32 gUnknown_81076E4[];
+
+extern bool8 sub_808ECD0(u8 *, u32);
+extern void sub_808EC30(u8 *, u32);
u32 sub_808EAB0(u8 r0)
{
@@ -87,3 +91,103 @@ bool8 sub_808EB7C(s32 r0, u8 r1)
return gUnknown_810A390[r1] <= r0;
}
+
+s32 sub_808EBA8(u8 param_1[], s32 param_2)
+{
+ s32 counter_2;
+ s32 counter_1;
+ u8 cast_u8;
+ s32 index;
+
+ index = 0;
+
+ for(counter_1 = 1; counter_1 < 0x18; counter_1++) {
+ cast_u8 = counter_1; // force this cast to be in a reg
+ if (sub_808EB7C(param_2, cast_u8)) {
+ param_1[index] = cast_u8;
+ index++;
+ }
+ }
+
+ counter_2 = index; // set counter to where the first loop ended
+
+ while (counter_2 < 0x18) {
+ param_1[counter_2] = 0;
+ counter_2++;
+ }
+ return index;
+}
+
+void sub_808EBF4(u8 *param_1, u32 param_2)
+{
+ int iVar2; // a mask?
+
+ iVar2 = 1 << (param_2);
+ if (sub_808ECD0(param_1,iVar2)) {
+ param_1[0] = param_1[0] & ~iVar2;
+ param_1[1] = param_1[1] & ~(iVar2 >> 8);
+ param_1[2] = param_1[2] & ~(iVar2 >> 0x10);
+ }
+ else
+ {
+ sub_808EC30(param_1,param_2);
+ }
+}
+
+void sub_808EC30(u8 *param_1, u32 param_2)
+{
+ s32 iVar1;
+ s32 counter;
+ s32 iVar4;
+ s32 iVar5;
+
+ counter = 0;
+ iVar4 = gUnknown_81076E4[param_2];
+ do {
+ if (iVar4 == gUnknown_81076E4[counter]) {
+ iVar1 = 1 << (counter);
+ param_1[0] = param_1[0] & ~iVar1;
+ param_1[1] = param_1[1] & ~(iVar1 >> 8);
+ param_1[2] = param_1[2] & ~(iVar1 >> 0x10);
+ }
+ counter++;
+ } while (counter < 0x18);
+
+ iVar5 = 1 << (param_2);
+ param_1[0] = iVar5 | param_1[0];
+ param_1[1] = (iVar5 >> 8) | param_1[1];
+ param_1[2] = (iVar5 >> 0x10) | param_1[2];
+}
+
+void sub_808EC94(u8 *param_1, u8 param_2)
+{
+
+ param_1[0] = 0;
+ param_1[1] = 0;
+ param_1[2] = 0;
+ sub_808EC30(param_1, 2);
+ sub_808EC30(param_1, 3);
+ sub_808EC30(param_1, 0x16);
+ if (param_2 != 0) {
+ sub_808EC30(param_1, 0x12);
+ }
+}
+
+bool8 sub_808ECD0(u8 *param_1, u32 param_2)
+{
+
+ if ((((param_1[0] & param_2) == 0) &&
+ ((param_1[1] & param_2 >> 8) == 0)) &&
+ ((param_1[2] & param_2 >> 0x10) == 0))
+ {
+ return 0;
+ }
+ else {
+ return 1;
+ }
+}
+
+u32 sub_808ECFC(void)
+{
+ return 0;
+}
diff --git a/src/code_809017C.c b/src/code_809017C.c
index 2d3abcf..c274241 100644
--- a/src/code_809017C.c
+++ b/src/code_809017C.c
@@ -9,6 +9,286 @@ extern u8 gUnknown_810AC6A[];
extern u8 *gAbilityNames[];
extern u8 *AbilityDescriptions[];
+extern u32 gUnknown_810983C[26]; // TODO: verify size later
+
+struct unkStruct_203B464
+{
+ u8 unk0[0xA]; // some string of sorts
+ s32 unkC;
+ u8 unk10;
+};
+extern struct unkStruct_203B464 *gUnknown_203B464;
+extern struct unkStruct_203B464 gUnknown_2038C10;
+
+extern void sub_809485C(u32 *r0, u8 *r1, u32 r2);
+extern void sub_809486C(u32 *r0, u8 *r1, u32 r2);
+extern void sub_809488C(u32 *r0, u8 *r1, u32 r2);
+extern void sub_8094924(u32 *r0, u8 *r1, u32);
+extern void nullsub_102(u32 *r0);
+extern u8 sub_80023E4(u32);
+
+extern const char *gRescueTeamRanks[];
+extern s32 gUnknown_8109810[7];
+extern u8 gUnknown_810982C[0x8]; // Pokemon
+extern u8 gUnknown_810A35B[0x10];
+
+// Forward declaration
+void sub_80922B4(u8 *buffer, u8 *string, s32 size);
+void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size);
+
+bool32 sub_8092040(u8 param_1)
+{
+ s32 index;
+
+ if (param_1 >= 0xF0)
+ return TRUE;
+ else {
+ index = 0;
+ while (gUnknown_810A35B[index] != 0xF0){
+ if (gUnknown_810A35B[index] == param_1)
+ return TRUE;
+ index++;
+ };
+ return FALSE;
+ }
+}
+
+void sub_809207C(void)
+{
+ gUnknown_203B464 = &gUnknown_2038C10;
+}
+
+struct unkStruct_203B464 *sub_809208C(void)
+{
+ return &gUnknown_2038C10;
+}
+
+void sub_8092094(void)
+{
+ BoundedCopyStringtoBuffer(gUnknown_203B464->unk0, gUnknown_810982C, 0xA);
+ gUnknown_203B464->unkC = 0;
+ gUnknown_203B464->unk10 = 0;
+}
+
+void sub_80920B8(u8 *buffer)
+{
+ s32 counter;
+ for(counter = 0; counter < 0xA; counter++)
+ {
+ *buffer++ = gUnknown_203B464->unk0[counter];
+ }
+}
+
+void sub_80920D8(u8 *buffer)
+{
+ sub_80922B4(buffer, gUnknown_203B464->unk0, 0xA);
+}
+
+void sub_80920EC(u8 *r0)
+{
+ s32 counter;
+ for(counter = 0; counter < 0xA; counter++)
+ {
+ gUnknown_203B464->unk0[counter] = *r0++;
+ }
+}
+
+s32 sub_8092110(void)
+{
+ return gUnknown_203B464->unkC;
+}
+
+
+#ifdef NONMATCHING
+s32 sub_809211C(void)
+{
+ u8 uVar1;
+ s32 iVar2;
+
+ uVar1 = sub_8092178();
+ if (uVar1 != 6) {
+ // Goes to R2 instead of R1 but matches aside from that
+ iVar2 = gUnknown_8109810[uVar1] - gUnknown_203B464->unkC;
+ }
+ else
+ {
+ iVar2 = 0;
+ }
+ return iVar2;
+}
+#else
+NAKED
+s32 sub_809211C(void)
+{
+ asm_unified(
+ "\tpush {lr}\n"
+ "\tbl sub_8092178\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x6\n"
+ "\tbeq _08092144\n"
+ "\tldr r1, _0809213C\n"
+ "\tlsls r0, 2\n"
+ "\tadds r0, r1\n"
+ "\tldr r1, _08092140\n"
+ "\tldr r1, [r1]\n"
+ "\tldr r0, [r0]\n"
+ "\tldr r1, [r1, 0xC]\n"
+ "\tsubs r0, r1\n"
+ "\tb _08092146\n"
+ "\t.align 2, 0\n"
+"_0809213C: .4byte gUnknown_8109810\n"
+"_08092140: .4byte gUnknown_203B464\n"
+"_08092144:\n"
+ "\tmovs r0, 0\n"
+"_08092146:\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+
+// Unused
+void sub_809214C(s32 param_1)
+{
+ gUnknown_203B464->unkC = param_1;
+}
+
+void sub_8092158(s32 param_1)
+{
+ gUnknown_203B464->unkC += param_1;
+ if (gUnknown_203B464->unkC > 99999999) {
+ gUnknown_203B464->unkC = 99999999;
+ }
+}
+
+u8 sub_8092178(void)
+{
+ s32 index;
+
+ for(index = 0; index < 7; index++){
+ if (gUnknown_203B464->unkC < gUnknown_8109810[index]) {
+ return index;
+ }
+ }
+ return 6;
+}
+
+const char *GetTeamRankString(u8 index)
+{
+ return gRescueTeamRanks[index];
+}
+
+// Unused
+u8 sub_80921B8(void)
+{
+ return gUnknown_203B464->unk10;
+}
+
+u32 sub_80921C4(u8 *param_1,u32 param_2)
+
+{
+ u32 auStack36[4];
+ u8 neg1;
+ u8 zero;
+ u8 *puVar2;
+
+ neg1 = -1;
+ zero = 0;
+
+ sub_809486C(auStack36, param_1, param_2);
+ sub_809488C(auStack36, gUnknown_203B464->unk0, 0x58);
+ sub_809488C(auStack36, (u8 *)&gUnknown_203B464->unkC, 0x20);
+ gUnknown_203B464->unk10 = sub_80023E4(0);
+
+ if (gUnknown_203B464->unk10 != 0)
+ {
+ puVar2 = &neg1;
+ }
+ else
+ {
+ puVar2 = &zero;
+ }
+ sub_809488C(auStack36,puVar2,1);
+ nullsub_102(auStack36);
+ return auStack36[2];
+}
+
+u32 sub_809222C(u8 *param_1, u32 param_2)
+{
+ u32 auStack32 [4];
+ u8 byteArray[4];
+
+ sub_809485C(auStack32, param_1, param_2);
+ sub_8094924(auStack32, gUnknown_203B464->unk0, 0x58);
+ sub_8094924(auStack32, (u8 *)&gUnknown_203B464->unkC, 0x20);
+ sub_8094924(auStack32, byteArray, 1);
+ gUnknown_203B464->unk10 = byteArray[0] & 1;
+ nullsub_102(auStack32);
+ return auStack32[2];
+}
+
+u32 ReturnIntFromChar(u8 r0)
+{
+ return r0;
+}
+
+u32 ReturnIntFromChar2(u8 r0)
+{
+ return r0;
+}
+
+// Unused
+void sub_8092290(u8 *buffer, u8 *string)
+{
+ while( *string != '\0' ) {
+ *buffer++ = ReturnIntFromChar2(*string++);
+ }
+ *buffer = 0; // append a 0
+}
+
+void sub_80922B4(u8 *buffer, u8 *string, s32 size)
+{
+ while(1)
+ {
+ if(size-- < 1 || *string == '\0')
+ {
+ break;
+ }
+ *buffer++ = ReturnIntFromChar2(*string++);
+ }
+ *buffer = 0; // append a 0
+}
+
+u32 sub_80922E4(u32 r0)
+{
+ return gUnknown_810983C[r0];
+}
+
+void CopyStringtoBuffer(u8 *buffer, u8 *string)
+{
+ while( *string != '\0' ) {
+ *buffer++ = *string++;
+ }
+ *buffer = 0; // append a 0
+}
+
+void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size)
+{
+ while( 1 ) {
+ if (size-- < 1) {
+ break;
+ }
+ if (*string == '\0') {
+ *buffer = 0; // append a 0 and break
+ break;
+ }
+ // NOTE: *buffer++ = *string++ cases register flip
+ *buffer = *string;
+ buffer++;
+ string++;
+ }
+}
u32 GetUnformattedTypeString(u8 type)
{
@@ -30,9 +310,9 @@ u8 sub_8092364(u8 index)
return gUnknown_810AC6A[index];
}
-void sub_8092374(char *r0, u8 index)
+void sub_8092374(char *buffer, u8 index)
{
- strncpy(r0, gAbilityNames[index], 0x50);
+ strncpy(buffer, gAbilityNames[index], 0x50);
}
u8 *GetAbilityDescription(u8 index)
diff --git a/src/code_8094F88.c b/src/code_8094F88.c
index b9d2828..d3ed115 100644
--- a/src/code_8094F88.c
+++ b/src/code_8094F88.c
@@ -14,8 +14,8 @@ extern u32 *gUnknown_203B488;
extern u32 *gUnknown_203B48C;
-extern void sub_809488C(u32 *r0, u32 *r1, u32);
-extern void sub_8094924(u32 *r0, u32 *r1, u32);
+extern void sub_809488C(u8 *r0, u8 *r1, u32);
+extern void sub_8094924(u8 *r0, u8 *r1, u32);
void InitializePlayTime(void)
@@ -87,20 +87,20 @@ void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinut
}
}
-void sub_8095044(u32 *r0)
+void sub_8095044(u8 *r0)
{
- sub_809488C(r0, (u32 *)(&(gPlayTimeRef->frames)), 6);
- sub_809488C(r0, (u32 *)(&(gPlayTimeRef->seconds)), 6);
- sub_809488C(r0, (u32 *)(&(gPlayTimeRef->minutes)), 6);
- sub_809488C(r0, (u32 *)(&(gPlayTimeRef->hours)), 14);
+ sub_809488C(r0, (&(gPlayTimeRef->frames)), 6);
+ sub_809488C(r0, (&(gPlayTimeRef->seconds)), 6);
+ sub_809488C(r0, (&(gPlayTimeRef->minutes)), 6);
+ sub_809488C(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
}
-void sub_8095080(u32 *r0)
+void sub_8095080(u8 *r0)
{
- sub_8094924(r0, (u32 *)(&(gPlayTimeRef->frames)), 6);
- sub_8094924(r0, (u32 *)(&(gPlayTimeRef->seconds)), 6);
- sub_8094924(r0, (u32 *)(&(gPlayTimeRef->minutes)), 6);
- sub_8094924(r0, (u32 *)(&(gPlayTimeRef->hours)), 14);
+ sub_8094924(r0, (&(gPlayTimeRef->frames)), 6);
+ sub_8094924(r0, (&(gPlayTimeRef->seconds)), 6);
+ sub_8094924(r0, (&(gPlayTimeRef->minutes)), 6);
+ sub_8094924(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
}
void sub_80950BC(void)
diff --git a/src/code_809747C.c b/src/code_809747C.c
index 56e057e..39d41a8 100644
--- a/src/code_809747C.c
+++ b/src/code_809747C.c
@@ -15,7 +15,7 @@ const u8 *sub_809747C(s16 r0)
}
else
{
- return GetDungeonName1(sub_80A270C());
+ return GetDungeonName1(sub_80A270C(r0));
}
}
@@ -27,14 +27,14 @@ const u8 *sub_80974A0(s16 r0)
}
else
{
- return GetDungeonName1(sub_80A270C());
+ return GetDungeonName1(sub_80A270C(r0));
}
}
#ifndef NONMATCHING
NAKED
#endif
-u32 *sub_80974C4(s16 r0)
+u32 *GetCurrentMissionText(s16 r0)
{
#ifdef NONMATCHING
// TODO fix regswap memes of r0/r1
diff --git a/src/code_8097F40.c b/src/code_8097F40.c
index 6775965..9a9c193 100644
--- a/src/code_8097F40.c
+++ b/src/code_8097F40.c
@@ -1,72 +1,8 @@
#include "global.h"
-#define NUM_EXCLUSIVE_POKEMON 12
-
-struct ExclusivePokemon
-{
- u16 poke_id;
- bool8 in_rrt; // red rescue team
- bool8 in_brt; // blue rescue team
-};
-extern struct ExclusivePokemon gExclusivePokemon[];
extern u8 gUnknown_810ACC0[];
-extern u8 *gUnknown_203B498;
-extern u8 gUnknown_2039840;
bool8 sub_8097F40(u32 r0)
{
return gUnknown_810ACC0[r0] == 2;
}
-
-void sub_8097F5C(void)
-{
- gUnknown_203B498 = &gUnknown_2039840;
-}
-
-u8 *sub_8097F6C(void)
-{
- return &gUnknown_2039840;
-}
-
-#ifdef NONMATCHING
-void sub_8097F74(void)
-{
- s32 counter;
- memset(gUnknown_203B498, 0, 0x64);
- for(counter = 0; counter < NUM_EXCLUSIVE_POKEMON; counter++)
- {
- // TODO fix switching of addition statements (when it figures out the index)
- gUnknown_203B498[counter + 0x58] = gExclusivePokemon[counter].in_rrt;
- }
-}
-#else
-NAKED
-void sub_8097F74(void)
-{
- asm_unified("\tpush {r4,lr}\n"
- "\tldr r4, _08097FA0\n"
- "\tldr r0, [r4]\n"
- "\tmovs r1, 0\n"
- "\tmovs r2, 0x64\n"
- "\tbl memset\n"
- "\tmovs r2, 0\n"
- "\tldr r3, _08097FA4\n"
-"_08097F86:\n"
- "\tldr r0, [r4]\n"
- "\tadds r0, 0x58\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r3, 0x2]\n"
- "\tstrb r1, [r0]\n"
- "\tadds r3, 0x4\n"
- "\tadds r2, 0x1\n"
- "\tcmp r2, 0xB\n"
- "\tble _08097F86\n"
- "\tpop {r4}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
-"_08097FA0: .4byte gUnknown_203B498\n"
-"_08097FA4: .4byte gExclusivePokemon");
-
-}
-#endif
diff --git a/src/code_80983D8.c b/src/code_80983D8.c
new file mode 100644
index 0000000..ef1e59d
--- /dev/null
+++ b/src/code_80983D8.c
@@ -0,0 +1,20 @@
+#include "global.h"
+
+s32 sub_8098434(short param_1[],short param_2[])
+{
+ s32 diff_index1;
+ s32 diff_index0;
+
+ diff_index0 = param_1[0] - param_2[0];
+ if (diff_index0 < 0) {
+ diff_index0 = -diff_index0;
+ }
+ diff_index1 = param_1[1] - param_2[1];
+ if (diff_index1 < 0) {
+ diff_index1 = -diff_index1;
+ }
+ if (diff_index1 < diff_index0) {
+ diff_index1 = diff_index0;
+ }
+ return diff_index1;
+}
diff --git a/src/debug_menu.c b/src/debug_menu.c
new file mode 100644
index 0000000..19561c2
--- /dev/null
+++ b/src/debug_menu.c
@@ -0,0 +1,135 @@
+#include "global.h"
+#include "debug_menu.h"
+#include "main_menu.h"
+
+struct unkData
+{
+ u8 unk0[24];
+};
+
+
+struct DebugMenu
+{
+ // size: 0x1A4
+ u8 fill0[0x140];
+ /* 0x140 */ struct unkData unk140[4];
+};
+extern struct DebugMenu *gUnknown_203B3EC;
+extern struct unkData gUnknown_80E7D40;
+
+struct MenuItem
+{
+ const char *text;
+ u32 menuAction; // action??
+};
+
+
+
+extern struct MenuItem gDebugMenuItems[8];
+extern u32 gUnknown_80E7D58[6];
+
+extern void *MemoryAlloc(u32, u32);
+extern void MemoryFree(void *);
+extern void MemoryFill8(u8 *, u8, u32);
+extern void sub_800641C(void *, u32, u32);
+
+extern void ResetUnusedInputStruct(void);
+extern u8 sub_8012FD8(struct DebugMenu *);
+extern void sub_8013114(struct DebugMenu *, s32 *);
+extern void sub_80976F8(u8);
+extern void sub_803A3BC(void);
+extern void sub_803A3A0(void);
+
+extern void SetMenuItems(void *menu, void *, u32, u32 *, struct MenuItem *entries, u32, u32, u32);
+extern void sub_8035CF4(struct DebugMenu *, u32, u32);
+extern void sub_8035CC0(struct unkData *, u32);
+
+void CreateDebugMenu(void)
+{
+ int iVar2;
+
+ if (gUnknown_203B3EC == NULL) {
+ gUnknown_203B3EC = MemoryAlloc(0x1a4, 8);
+ MemoryFill8((u8 *)gUnknown_203B3EC, 0, 0x1a4);
+ }
+ for(iVar2 = 0; iVar2 < 4; iVar2++){
+ gUnknown_203B3EC->unk140[iVar2] = gUnknown_80E7D40;
+ }
+ ResetUnusedInputStruct();
+ sub_800641C(&gUnknown_203B3EC->unk140, 1, 1);
+ SetDebugMenuItems();
+}
+
+void DeleteDebugMenu(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(NULL, 1, 1);
+ if(gUnknown_203B3EC != NULL)
+ {
+ MemoryFree(gUnknown_203B3EC);
+ gUnknown_203B3EC = NULL;
+ }
+}
+
+u32 UpdateDebugMenu(void)
+{
+ u32 nextMenu;
+ s32 counter;
+ s32 debugMenuAction;
+
+ nextMenu = MENU_NO_SCREEN_CHANGE;
+ debugMenuAction = 11;
+
+ if (sub_8012FD8(gUnknown_203B3EC) == 0) {
+ sub_8013114(gUnknown_203B3EC, &debugMenuAction);
+ }
+
+ switch(debugMenuAction) {
+ case MENU_DEBUG_MENU_DUNGEONS:
+ nextMenu = MENU_DEBUG_DUNGEON;
+ break;
+ case MENU_DEBUG_MENU_FIELD:
+ nextMenu = MENU_DEBUG_FIELD;
+ break;
+ case MENU_DEBUG_MENU_FIELD_MAP:
+ nextMenu = MENU_DEBUG_FIELD_MAP;
+ break;
+ case MENU_DEBUG_MENU_FIELD_SCRIPT:
+ nextMenu = MENU_DEBUG_FIELD_SCRIPT;
+ break;
+ case MENU_DEBUG_MENU_DEBUG_MENU:
+ nextMenu = MENU_DEBUG_DEBUG_MENU;
+ break;
+ case MENU_DEBUG_MENU_UNKNOWN_1: // No option that correponds to this one
+ nextMenu = MENU_DEBUG_UNKNOWN_1;
+ break;
+ case MENU_DEBUG_MENU_STORAGE:
+ sub_803A3BC();
+ nextMenu = MENU_MAIN_SCREEN;
+ break;
+ case MENU_DEBUG_MENU_H_OPEN:
+ for(counter = 0; counter < 0x20; counter++){
+ sub_80976F8(counter);
+ }
+ nextMenu = MENU_MAIN_SCREEN;
+ break;
+ case 10:
+ sub_803A3A0();
+ nextMenu = MENU_MAIN_SCREEN;
+ break;
+ case 11:
+ nextMenu = MENU_NO_SCREEN_CHANGE;
+ }
+ return nextMenu;
+}
+
+void SetDebugMenuItems(void)
+{
+ SetMenuItems(gUnknown_203B3EC, gUnknown_203B3EC->unk140, 0, gUnknown_80E7D58, gDebugMenuItems, 1, 0xd, 0);
+ sub_8035CF4(gUnknown_203B3EC,0,1);
+}
+
+void sub_803A3A0(void)
+{
+ sub_8035CC0(gUnknown_203B3EC->unk140, 0);
+}
diff --git a/src/debug_menu_1.c b/src/debug_menu_1.c
new file mode 100644
index 0000000..705a23f
--- /dev/null
+++ b/src/debug_menu_1.c
@@ -0,0 +1,85 @@
+#include "global.h"
+
+struct subStruct
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+};
+
+struct unkStruct_203B3F8
+{
+ u8 fill0[8];
+ struct subStruct *unk8;
+ u8 fill4[4];
+ u32 unk10;
+ u8 fill14[0x60 - 0x14];
+ u32 unk60;
+};
+extern struct unkStruct_203B3F8 *gUnknown_203B3F8;
+extern u32 sub_8013BBC(u32 *);
+extern void sub_8023A94(u32);
+extern u8 sub_8012FD8(u32 *);
+extern void sub_803AE58(void);
+extern u32 sub_8016080(void);
+extern void sub_803ACD0(u32);
+extern void sub_80160D8(void);
+extern void sub_8013114(u32 *, s32 *);
+
+void sub_803AF88(void)
+{
+ s32 local_c;
+
+ local_c = 0;
+ sub_8023A94(local_c);
+ if (sub_8012FD8(&gUnknown_203B3F8->unk10) == 0) {
+ sub_8013114(&gUnknown_203B3F8->unk10, &local_c);
+ }
+ switch(local_c)
+ {
+ case 4:
+ sub_803ACD0(5);
+ break;
+ case 5:
+ sub_803ACD0(6);
+ break;
+ case 1:
+ sub_803ACD0(2);
+ break;
+ default:
+ break;
+ }
+}
+
+void sub_803AFE8(void)
+{
+ sub_8023A94(0);
+ sub_8012FD8(&gUnknown_203B3F8->unk10);
+ switch(sub_8013BBC(&gUnknown_203B3F8->unk60))
+ {
+ default:
+ break;
+ case 3:
+ gUnknown_203B3F8->unk8->unk3 = gUnknown_203B3F8->unk60;
+ // Fallthrough is needed to match
+ case 2:
+ sub_803ACD0(2);
+ break;
+ case 1:
+ sub_803AE58();
+ break;
+ }
+}
+
+void sub_803B034(void)
+{
+ switch(sub_8016080())
+ {
+ case 2:
+ case 3:
+ sub_80160D8();
+ sub_803ACD0(2);
+ break;
+ }
+}
diff --git a/src/event_flag.c b/src/event_flag.c
index 10f6b8f..91c5f87 100644
--- a/src/event_flag.c
+++ b/src/event_flag.c
@@ -5,10 +5,33 @@
extern void sub_800226C(u8 r0, u8 r1, u32* r2, u8 u3);
extern void sub_800160C(struct UnkEventStruct *r0, u32 r1, u32 r2);
-extern u8 sub_8002658(s32);
+extern u8 sub_8002658(s16);
+
+struct unkEventStruct
+{
+ s16 unk0;
+ u8 unk2; // Seems like friend area number
+};
+
+struct unkEventStruct gUnknown_80B71E4[100]; // TODO figure out size of this
extern u8 gUnknown_2000A88[0x400];
+s16 sub_8002694(u8 param_1)
+{
+
+ struct unkEventStruct *puVar2 = gUnknown_80B71E4;
+
+ while (puVar2->unk0 != -1) {
+ if (puVar2->unk2 == param_1) {
+ return puVar2->unk0;
+ }
+ puVar2++;
+ }
+
+ return -1;
+}
+
bool8 sub_80026CC(s16 r0)
{
return GetFriendAreaStatus(sub_8002658(r0));
diff --git a/src/exclusive_pokemon.c b/src/exclusive_pokemon.c
new file mode 100644
index 0000000..cf64724
--- /dev/null
+++ b/src/exclusive_pokemon.c
@@ -0,0 +1,80 @@
+#include "global.h"
+#include "constants/species.h"
+#define NUM_EXCLUSIVE_POKEMON 12
+
+#define RED_EXCLUSIVE(species) \
+{ \
+ .poke_id = species, \
+ .in_rrt = TRUE, \
+ .in_brt = FALSE, \
+}
+
+#define BLUE_EXCLUSIVE(species) \
+{ \
+ .poke_id = species, \
+ .in_rrt = FALSE, \
+ .in_brt = TRUE, \
+}
+
+
+struct ExclusivePokemon
+{
+ u16 poke_id;
+ bool8 in_rrt; // red rescue team
+ bool8 in_brt; // blue rescue team
+};
+
+const struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON] = {
+
+ RED_EXCLUSIVE(SPECIES_PORYGON),
+ BLUE_EXCLUSIVE(SPECIES_PORYGON2),
+ BLUE_EXCLUSIVE(SPECIES_MAGIKARP),
+ BLUE_EXCLUSIVE(SPECIES_GYARADOS),
+ RED_EXCLUSIVE(SPECIES_FEEBAS),
+ RED_EXCLUSIVE(SPECIES_MILOTIC),
+ RED_EXCLUSIVE(SPECIES_PLUSLE),
+ BLUE_EXCLUSIVE(SPECIES_MINUN),
+ BLUE_EXCLUSIVE(SPECIES_LAPRAS),
+ RED_EXCLUSIVE(SPECIES_MANTINE),
+ RED_EXCLUSIVE(SPECIES_ROSELIA),
+ BLUE_EXCLUSIVE(SPECIES_AIPOM),
+};
+
+const u8 filler_ex0[8] =
+{
+ 'p', 'k', 's', 'd', 'i', 'r', '0', 0
+};
+const u8 filler_ex1[8] =
+{
+ 'p', 'k', 's', 'd', 'i', 'r', '0', 0
+};
+
+
+struct unkStruct_203B498
+{
+ u8 fill0[0x58];
+ bool8 Exclusives[NUM_EXCLUSIVE_POKEMON];
+};
+extern struct unkStruct_203B498 *gUnknown_203B498;
+extern struct unkStruct_203B498 gUnknown_2039840;
+
+
+void LoadExclusivePokemon(void)
+{
+ gUnknown_203B498 = &gUnknown_2039840;
+}
+
+struct unkStruct_203B498 *GetExclusivePokemon(void)
+{
+ return &gUnknown_2039840;
+}
+
+void InitializeExclusivePokemon(void)
+{
+ s32 counter;
+ memset(gUnknown_203B498, 0, sizeof(struct unkStruct_203B498));
+ for(counter = 0; counter < NUM_EXCLUSIVE_POKEMON; counter++)
+ {
+ gUnknown_203B498->Exclusives[counter] = gExclusivePokemon[counter].in_rrt;
+ }
+}
diff --git a/src/friend_area_1.c b/src/friend_area_1.c
index 9a40e2c..6600231 100644
--- a/src/friend_area_1.c
+++ b/src/friend_area_1.c
@@ -2,14 +2,13 @@
#include "constants/friend_area.h"
extern bool8 *gFriendAreas;
-extern void sub_809485C(u32 *r0, u32 r1, u32 r2);
+extern void sub_809485C(u32 *r0, u8 *r1, u32 r2);
extern void sub_8094924(u32 *r0, u32 *r1, u32);
extern void nullsub_102(u32 *r0);
extern void sub_809488C(u32 *r0, u32 *r1, u32 r2);
-extern void sub_809486C(u32 *r0, u32 r1, u32 r2);
+extern void sub_809486C(u32 *r0, u8 *r1, u32 r2);
-#ifdef NONMATCHING
-u32 sub_80927A8(u32 r0, u32 r1)
+u32 sub_80927A8(u8 *r0, u32 r1)
{
u32 temp[5];
s32 counter;
@@ -17,57 +16,17 @@ u32 sub_80927A8(u32 r0, u32 r1)
sub_809486C(temp, r0, r1);
for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
{
- // TODO fix one line diff of storing into temp[4]
- if(gFriendAreas[counter])
+ if(gFriendAreas[counter] != 0)
temp[4] = -1;
+ else
+ temp[4] = 0;
sub_809488C(temp, &(temp[4]), 1);
}
nullsub_102(temp);
return temp[2];
}
-#else
-NAKED u32 sub_80927A8(u32 r0, u32 r1)
-{
- asm_unified("\tpush {r4,r5,lr}\n"
- "\tsub sp, 0x14\n"
- "\tadds r3, r0, 0\n"
- "\tadds r2, r1, 0\n"
- "\tmov r0, sp\n"
- "\tadds r1, r3, 0\n"
- "\tbl sub_809486C\n"
- "\tmovs r4, 0\n"
- "\tadd r5, sp, 0x10\n"
-"_080927BC:\n"
- "\tldr r0, _080927F0\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, r4\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080927CC\n"
- "\tmovs r0, 0x1\n"
- "\tnegs r0, r0\n"
-"_080927CC:\n"
- "\tstr r0, [sp, 0x10]\n"
- "\tmov r0, sp\n"
- "\tadds r1, r5, 0\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_809488C\n"
- "\tadds r4, 0x1\n"
- "\tcmp r4, 0x39\n"
- "\tble _080927BC\n"
- "\tmov r0, sp\n"
- "\tbl nullsub_102\n"
- "\tldr r0, [sp, 0x8]\n"
- "\tadd sp, 0x14\n"
- "\tpop {r4,r5}\n"
- "\tpop {r1}\n"
- "\tbx r1\n"
- "\t.align 2, 0\n"
-"_080927F0: .4byte gFriendAreas");
-}
-#endif
-u32 sub_80927F4(u32 r0, u32 r1)
+u32 sub_80927F4(u8 *r0, u32 r1)
{
u32 temp[5];
s32 counter;
diff --git a/src/friend_rescue.c b/src/friend_rescue.c
new file mode 100644
index 0000000..d84c793
--- /dev/null
+++ b/src/friend_rescue.c
@@ -0,0 +1,508 @@
+#include "global.h"
+#include "friend_rescue.h"
+#include "constants/species.h"
+
+extern void sub_80338C4(u32);
+extern s32 sub_80144A4(s32 *);
+extern void sub_802F2C0();
+extern void sub_808D8E0(u8 *, u32);
+extern char * GetMonSpecies(u32);
+extern u8 sub_809539C(u32, u32);
+extern void sub_8095240(u8);
+extern u32 sub_802F298();
+
+extern char gUnknown_202E5D8[0x50];
+extern char gAvailablePokemonNames[0x50];
+
+extern struct WonderMailStruct_203B33C *gUnknown_203B33C;
+
+extern u8 sub_8039880(void);
+void MemoryFill8(u8 *dest, u8 value, s32 size);
+void *MemoryAlloc(u32, u32);
+void ResetUnusedInputStruct(void);
+void sub_800641C(void *, u32, u32);
+
+extern void sub_8035300(void);
+extern void sub_8035404(u32);
+extern void nullsub_41(void);
+extern void nullsub_42(void);
+extern void nullsub_43(void);
+extern void nullsub_44(void);
+extern void nullsub_45(void);
+extern void nullsub_46(void);
+extern void nullsub_47(void);
+extern void nullsub_48(void);
+extern void nullsub_49(void);
+extern void nullsub_50(void);
+extern void nullsub_51(void);
+extern void sub_8035374(void);
+extern void sub_80353BC(void);
+extern void sub_8033A2C(void);
+extern void sub_803477C(void);
+extern void sub_80347AC(void);
+extern void sub_80347C8(void);
+extern void sub_80347E4(void);
+extern void sub_8034804(void);
+extern void sub_80344C0(void);
+extern void sub_8034478(void);
+extern void sub_80344A0(void);
+extern void sub_803418C(void);
+extern void sub_8034254(void);
+extern void sub_8034310(void);
+extern void sub_8034378(void);
+extern void sub_80343C4(void);
+extern void sub_8034404(void);
+extern void sub_8034500(void);
+extern void sub_8034590(void);
+extern void sub_803464C(void);
+extern void sub_80346A8(void);
+extern void sub_80346D8(void);
+extern void sub_8034700(void);
+extern void sub_8034720(void);
+extern void sub_803473C(void);
+extern void sub_8033FB4(void);
+extern void sub_8034074(void);
+extern void sub_8034130(void);
+extern void sub_8033FE4(void);
+extern void sub_8033D74(void);
+extern void sub_8033D94(void);
+extern void sub_8033DBC(void);
+extern void sub_8033F64(void);
+extern void sub_8033C54(void);
+extern void sub_8033CAC(void);
+extern void sub_8033D48(void);
+extern void sub_8035424(void);
+extern void sub_8034970(void);
+extern void sub_80351E0(void);
+extern void sub_8034D74(void);
+extern void sub_8034EF0(void);
+extern void sub_8034F38(void);
+extern void sub_80352A4(void);
+extern void sub_8034EC8(void);
+extern void sub_8033B8C(void);
+extern void sub_80339C8(void);
+extern void sub_80348C4(void);
+extern void sub_803482C(void);
+extern void sub_80349B0(void);
+extern void sub_8034A70(void);
+extern void sub_8034B2C(void);
+extern void sub_80349E0(void);
+extern void sub_8034B88(void);
+extern void sub_8034C98(void);
+extern void sub_8034C38(void);
+extern void sub_8034D54(void);
+extern void sub_8034F18(void);
+extern void sub_8034F58(void);
+extern void sub_8034F88(void);
+extern void sub_8035018(void);
+extern void sub_8035038(void);
+extern void sub_8035094(void);
+extern void sub_80350F4(void);
+extern void sub_803517C(void);
+extern void sub_8035210(void);
+extern void sub_8035430(void);
+extern void sub_8034848(void);
+
+extern void MemoryFree(void *);
+extern void sub_803084C(void);
+extern void sub_8031E10(void);
+extern void sub_8023C60(void);
+extern void sub_80155F0(void);
+extern void sub_801CBB8(void);
+extern void sub_802F2C0(void);
+extern void sub_8030DE4(void);
+extern void sub_802453C(void);
+extern void sub_801B450(void);
+
+
+u32 CreateFriendRescueMenu(void)
+{
+ char *monName;
+ int counter;
+
+ ResetUnusedInputStruct();
+ sub_800641C(0, 1, 1);
+ gUnknown_203B33C = MemoryAlloc(sizeof(struct WonderMailStruct_203B33C), 8);
+ MemoryFill8((u8 *) gUnknown_203B33C, 0, sizeof(struct WonderMailStruct_203B33C));
+ gUnknown_203B33C->unk530 = 0;
+ gUnknown_203B33C->unk218 = -1;
+ gUnknown_203B33C->unk538 = -1;
+ sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gAvailablePokemonNames,monName);
+ for(counter = 0; counter < 0x36; counter++){
+ gUnknown_203B33C->unk8[counter] = 0;
+ }
+ gUnknown_203B33C->unk4 = 0x7E;
+ gUnknown_203B33C->unk52C = sub_8039880();
+ gUnknown_203B33C->unk52D = gUnknown_203B33C->unk52C;
+ sub_80338C4(0);
+ return 1;
+}
+
+u32 UpdateFriendRescueMenu(void)
+{
+ switch(gUnknown_203B33C->unk0)
+ {
+ case 0x78:
+ sub_8035300();
+ break;
+ case 0x79:
+ sub_8035404(0x78);
+ break;
+ case 0x7A:
+ sub_8035374();
+ break;
+ case 0x7B:
+ sub_8035404(0x7a);
+ break;
+ case 0x7C:
+ sub_80353BC();
+ break;
+ case 0x7D:
+ sub_8035404(0x7c);
+ break;
+ case 3:
+ case 4:
+ sub_8033A2C();
+ break;
+ case 0x3D:
+ sub_803477C();
+ break;
+ case 0x3E:
+ sub_80347AC();
+ break;
+ case 0x3F:
+ sub_80347C8();
+ break;
+ case 0x40:
+ sub_80347E4();
+ break;
+ case 0x41:
+ sub_8034804();
+ break;
+ case 0x2D:
+ sub_8035404(0x2e);
+ break;
+ case 0x2E:
+ sub_80344C0();
+ break;
+ case 0x2A:
+ sub_8035404(0xd);
+ break;
+ case 0x2C:
+ sub_8034478();
+ break;
+ case 0x2B:
+ sub_80344A0();
+ break;
+ case 0x25:
+ sub_8035404(0x26);
+ break;
+ case 0x26:
+ sub_803418C();
+ break;
+ case 0x27:
+ sub_8034254();
+ break;
+ case 0x28:
+ sub_8034310();
+ break;
+ case 0x24:
+ sub_8034378();
+ break;
+ case 0x29:
+ sub_80343C4();
+ break;
+ case 0x23:
+ sub_8035404(0x21);
+ break;
+ case 0x21:
+ sub_8034404();
+ break;
+ case 0x31:
+ sub_8035404(0x32);
+ break;
+ case 0x32:
+ sub_8034500();
+ break;
+ case 0x33:
+ sub_8034590();
+ break;
+ case 0x34:
+ sub_803464C();
+ break;
+ case 0x35:
+ sub_80346A8();
+ break;
+ case 0x38:
+ sub_80346D8();
+ break;
+ case 0x37:
+ sub_8034700();
+ break;
+ case 0x39:
+ sub_8034720();
+ break;
+ case 0x3A:
+ sub_803473C();
+ break;
+ case 0x20:
+ sub_8033FB4();
+ break;
+ case 0x1C:
+ sub_8035404(0x1d);
+ break;
+ case 0x1E:
+ sub_8034074();
+ break;
+ case 0x1F:
+ sub_8034130();
+ break;
+ case 0x1D:
+ sub_8033FE4();
+ break;
+ case 0x11:
+ sub_8035404(0x12);
+ break;
+ case 0x12:
+ nullsub_42();
+ break;
+ case 0x13:
+ nullsub_43();
+ break;
+ case 0x14:
+ nullsub_44();
+ break;
+ case 0x15:
+ nullsub_45();
+ break;
+ case 0x16:
+ sub_8033D74();
+ break;
+ case 0x17:
+ sub_8033D94();
+ break;
+ case 0x19:
+ case 0x43:
+ sub_8035404(0x1a);
+ break;
+ case 0x1A:
+ sub_8033DBC();
+ break;
+ case 0x1B:
+ sub_8033F64();
+ break;
+ case 5:
+ sub_8033C54();
+ break;
+ case 6:
+ nullsub_41();
+ break;
+ case 7:
+ sub_8033CAC();
+ break;
+ case 8:
+ sub_8033D48();
+ break;
+ case 9:
+ sub_8035424();
+ break;
+ case 10:
+ nullsub_50();
+ break;
+ case 0xB:
+ case 0xC:
+ sub_8035404(6);
+ break;
+ case 0xD:
+ sub_8035404(7);
+ break;
+ case 0xE:
+ sub_8033B8C();
+ break;
+ case 0:
+ case 1:
+ sub_80339C8();
+ break;
+ case 2:
+ return 3;
+ case 0x6A:
+ sub_80348C4();
+ break;
+ case 0x6B:
+ sub_803482C();
+ break;
+ case 0x5A:
+ sub_80349B0();
+ break;
+ case 0x5B:
+ sub_8035404(0x5c);
+ break;
+ case 0x5D:
+ sub_8034A70();
+ break;
+ case 0x5E:
+ sub_8034B2C();
+ break;
+ case 0x5C:
+ sub_80349E0();
+ break;
+ case 0x5F:
+ sub_8034B88();
+ break;
+ case 0x60:
+ sub_8034C98();
+ break;
+ case 0x61:
+ sub_8034C38();
+ break;
+ case 0x68:
+ sub_8034D54();
+ break;
+ case 0x66:
+ sub_8035404(0x67);
+ break;
+ case 0x67:
+ sub_8034970();
+ break;
+ case 0x74:
+ sub_80351E0();
+ break;
+ case 0x72:
+ sub_8035404(0x73);
+ break;
+ case 0x73:
+ sub_8034D74();
+ break;
+ case 0x71:
+ sub_8034EF0();
+ break;
+ case 0x70:
+ sub_8034F38();
+ break;
+ case 0x50:
+ case 0x6D:
+ sub_8035404(0x6e);
+ break;
+ case 0x6E:
+ sub_80352A4();
+ break;
+ case 0x62:
+ sub_8035404(0x6a);
+ break;
+ case 0x65:
+ sub_8034EC8();
+ break;
+ case 0x64:
+ sub_8034F18();
+ break;
+ case 0x63:
+ case 0x6F:
+ sub_8035404(0x62);
+ break;
+ case 0x69:
+ sub_8034F58();
+ break;
+ case 0x58:
+ sub_8034F88();
+ break;
+ case 0x75:
+ sub_8035018();
+ break;
+ case 0x76:
+ sub_8035038();
+ break;
+ case 0x18:
+ case 0x2F:
+ case 0x3B:
+ case 0x42:
+ case 0x59:
+ case 0x6C:
+ case 0x77:
+ sub_8035404(2);
+ break;
+ case 0x57:
+ sub_8035404(0x5f);
+ break;
+ case 0x56:
+ sub_8035094();
+ break;
+ case 0x55:
+ sub_80350F4();
+ break;
+ case 0x53:
+ sub_8035404(0x54);
+ break;
+ case 0x54:
+ sub_803517C();
+ break;
+ case 0x52:
+ sub_8035210();
+ break;
+ case 0x46:
+ sub_8035404(0x47);
+ break;
+ case 0x47:
+ nullsub_46();
+ break;
+ case 0x48:
+ nullsub_47();
+ break;
+ case 0x49:
+ nullsub_48();
+ break;
+ case 0x4A:
+ nullsub_49();
+ break;
+ case 0x4B:
+ sub_8035430();
+ break;
+ case 0x4C:
+ nullsub_51();
+ break;
+ case 0x4D:
+ case 0x4E:
+ sub_8035404(0x4f);
+ break;
+ case 0x4F:
+ sub_8034848();
+ break;
+ case 0xF:
+ case 0x10:
+ case 0x22:
+ case 0x30:
+ case 0x3C:
+ case 0x44:
+ case 0x45:
+ sub_8035404(1);
+ break;
+ case 0x51:
+ sub_8035404(1);
+ break;
+ case 0x36:
+ break;
+ }
+ return 0;
+}
+
+void CleanFriendRescueMenu(void)
+{
+ if (gUnknown_203B33C != NULL) {
+ MemoryFree(gUnknown_203B33C);
+ gUnknown_203B33C = NULL;
+ sub_803084C();
+ sub_8031E10();
+ sub_8023C60();
+ sub_80155F0();
+ sub_801CBB8();
+ sub_802F2C0();
+ sub_8030DE4();
+ sub_802453C();
+ sub_801B450();
+ }
+}
+
+void nullsub_40(void)
+{
+}
diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c
new file mode 100644
index 0000000..7fb2326
--- /dev/null
+++ b/src/friend_rescue_1.c
@@ -0,0 +1,141 @@
+#include "global.h"
+#include "friend_rescue.h"
+#include "constants/species.h"
+
+extern void sub_80338C4(u32);
+extern s32 sub_80144A4(s32 *);
+extern void sub_802F2C0();
+extern void sub_808D8E0(u8 *, u32);
+extern char * GetMonSpecies(u32);
+extern u8 sub_809539C(u32, u32);
+extern void sub_8095240(u8);
+extern u32 sub_802F298();
+
+extern char gUnknown_202E5D8[0x50];
+extern char gAvailablePokemonNames[0x50];
+
+extern struct WonderMailStruct_203B33C *gUnknown_203B33C;
+
+void nullsub_46(void)
+{
+}
+
+void nullsub_47(void)
+{
+}
+
+void nullsub_48(void)
+{
+}
+
+void nullsub_49(void)
+{
+}
+
+void sub_80352A4(void)
+{
+ u8 uVar1;
+ char *monName;
+
+ if ( sub_802F298() == 3) {
+ sub_802F2C0();
+ sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER);
+ monName = GetMonSpecies(SPECIES_PELIPPER);
+ strcpy(gAvailablePokemonNames, monName);
+ uVar1 = sub_809539C(6, gUnknown_203B33C->unk420);
+ sub_8095240(uVar1);
+ sub_80338C4(0x70);
+ }
+}
+
+void sub_8035300(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) != 0)
+ return;
+ switch(temp)
+ {
+ case 0x19:
+ sub_80338C4(1);
+ break;
+ case 0x1B:
+ sub_80338C4(0x7A);
+ break;
+ case 0x1C:
+ sub_80338C4(0x7C);
+ break;
+ case 0x1A:
+ case 0x1D:
+ gUnknown_203B33C->unk564 = temp;
+ sub_80338C4(0x79);
+ break;
+ }
+}
+
+void sub_8035374(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) != 0)
+ return;
+ switch(temp)
+ {
+ case 0x19:
+ sub_80338C4(0x78);
+ break;
+ case 0x1E:
+ case 0x1F:
+ case 0x20:
+ case 0x21:
+ case 0x22:
+ gUnknown_203B33C->unk564 = temp;
+ sub_80338C4(0x7B);
+ break;
+ }
+}
+
+void sub_80353BC(void)
+{
+ s32 temp;
+ if(sub_80144A4(&temp) != 0)
+ return;
+ switch(temp)
+ {
+ case 0x19:
+ sub_80338C4(0x78);
+ break;
+ case 0x23:
+ case 0x24:
+ case 0x25:
+ case 0x26:
+ gUnknown_203B33C->unk564 = temp;
+ sub_80338C4(0x7D);
+ 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/main_menu.c b/src/main_menu.c
index d0a8f36..71db487 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1,26 +1,20 @@
#include "global.h"
+#include "debug_menu.h"
+#include "main_menu.h"
-struct MainMenuSub
-{
- u8 unk2C;
- u8 unk2D;
- u8 unk2E;
-};
+// NOTE: 0x13 and 0x14
+// Communication Screen?
+// Got Communication warning when I wrote them to the struct
+
+// NOTE: 0x29, 0x2A, 0x2B, 0x2C
+// Triggers a save
+
+// NOTE: 0x2D
+// Triggers a save and then goes to 0x13 (comms warning)
+
+// NOTE: 0x2E
+// Deletes the Save
-struct MainMenu
-{
- s32 unk0;
- s32 unk4;
- s32 unk8;
- u8 padding[0x20];
- /* 0x2C */ struct MainMenuSub sub;
- u32 unk30;
- u32 unk34;
- s16 unk38;
- u8 unk3A;
- u8 unk3B;
- s32 unk3C;
-};
extern struct MainMenu *gUnknown_203B348;
extern void* MemoryAlloc(u32 a, u32 b);
@@ -31,44 +25,41 @@ extern void MemoryFree(void *);
extern void sub_8094C14(void);
extern void sub_8099690(u32);
extern void DrawMainMenu(void);
-extern void CreateDebugMenu(void);
-extern void sub_8036400(void);
-extern void sub_8036FDC(void);
+extern void CreateTradeItemsMenu(void);
+extern void sub_8036FDC(s32);
extern void sub_803A1E4(void);
-extern void sub_803225C(void);
+extern void CreateFriendRescueMenu(void);
extern void sub_803A1D8(void);
-extern void sub_80398AC(void);
-extern void sub_80382A0(void);
+extern void CreateWonderMailMenu(void);
+extern void CreateAdventureLogMenu(void);
extern void CreateLoadScreen(u32);
-extern void sub_8035DB4(u32);
-extern void sub_8038900(u32);
+extern s32 sub_8035DB4(u32);
+extern void CreateRescuePasswordMenu(u32);
extern void sub_803850C(u32);
-extern s32 sub_8035EEC(void);
+extern s32 UpdateMainMenu(void);
extern s32 sub_803941C(void);
-extern s32 sub_8036448(void);
-extern s32 sub_8032318(void);
-extern s32 sub_8039928(void);
+extern s32 UpdateTradeItemsMenu(void);
+extern s32 UpdateFriendRescueMenu(void);
+extern s32 UpdateWonderMailMenu(void);
extern s32 sub_803A1DC(void);
extern s32 sub_803A1E8(void);
-extern s32 sub_8038A90(void);
-extern s32 sub_80382C0(void);
+extern s32 UpdateRescuePasswordMenu(void);
+extern s32 UpdateAdventureLogMenu(void);
extern s32 sub_80383D4(void);
extern s32 sub_8038630(void);
-extern s32 sub_803A2A4(void);
extern void CleanMainMenu(void);
extern void CleanLoadScreen(void);
-extern void sub_8036B04(void);
+extern void CleanTradeItemsMenu(void);
extern void sub_80370D4(void);
-extern void sub_80327E4(void);
-extern void sub_80399E4(void);
+extern void CleanFriendRescueMenu(void);
+extern void CleanWonderMailMenu(void);
extern void nullsub_55(void);
extern void sub_803A1EC(void);
-extern void sub_8038A5C(void);
-extern void sub_80382AC(void);
+extern void CleanRescuePasswordMenu(void);
+extern void CleanAdventureLogMenu(void);
extern void sub_80383A8(void);
extern void sub_8038604(void);
-extern void DeleteDebugMenu(void);
void InitMainMenu(void)
{
@@ -76,9 +67,9 @@ void InitMainMenu(void)
gUnknown_203B348 = MemoryAlloc(sizeof(struct MainMenu),8);
MemoryFill8((u8 *)gUnknown_203B348, 0, sizeof(struct MainMenu));
}
- gUnknown_203B348->unk0 = 0xffdc;
- gUnknown_203B348->unk4 = 1;
- gUnknown_203B348->unk8 = 1;
+ gUnknown_203B348->currMenu = 0xffdc;
+ gUnknown_203B348->nextMenu = MENU_MAIN_SCREEN;
+ gUnknown_203B348->lastMenu = MENU_MAIN_SCREEN;
gUnknown_203B348->unk38 = -1;
gUnknown_203B348->unk3C = -1;
gUnknown_203B348->sub.unk2E = 0;
@@ -98,32 +89,31 @@ void DeleteMainMenu(void)
void SetUpMenu(void)
{
- if (gUnknown_203B348->unk0 != gUnknown_203B348->unk4) {
- switch(gUnknown_203B348->unk4) {
- case 1:
+ if (gUnknown_203B348->currMenu != gUnknown_203B348->nextMenu) {
+ switch(gUnknown_203B348->nextMenu) {
+ case MENU_MAIN_SCREEN:
sub_8094C14();
sub_8099690(0);
DrawMainMenu();
break;
case 6:
- case 7:
- case 8:
+ case MENU_CONTINUE:
+ case MENU_DELETE_SAVE_PROMPT:
case 9:
- CreateLoadScreen(gUnknown_203B348->unk4);
+ CreateLoadScreen(gUnknown_203B348->nextMenu);
break;
- case 0xc:
- sub_8036400();
+ case MENU_TRADE_ITEMS:
+ CreateTradeItemsMenu();
break;
- case 0x13:
- case 0x14:
- sub_8035DB4(gUnknown_203B348->unk4);
- sub_8036FDC();
+ case MENU_COMMUNICATION_1:
+ case MENU_COMMUNICATION_2:
+ sub_8036FDC(sub_8035DB4(gUnknown_203B348->nextMenu));
break;
- case 0xb:
- sub_803225C();
+ case MENU_FRIEND_RESCUE:
+ CreateFriendRescueMenu();
break;
- case 0xd:
- sub_80398AC();
+ case MENU_WONDER_MAIL:
+ CreateWonderMailMenu();
break;
case 0xe:
sub_803A1D8();
@@ -131,12 +121,12 @@ void SetUpMenu(void)
case 0xf:
sub_803A1E4();
break;
- case 0x21:
- case 0x22:
- sub_8038900(gUnknown_203B348->unk4);
+ case MENU_DISPLAY_RESCUE_PASSWORD:
+ case MENU_RESCUE_PASSWORD_ENTRY:
+ CreateRescuePasswordMenu(gUnknown_203B348->nextMenu);
break;
- case 0xA:
- sub_80382A0();
+ case MENU_ADVENTURE_LOG:
+ CreateAdventureLogMenu();
break;
case 0x29:
case 0x2a:
@@ -144,80 +134,80 @@ void SetUpMenu(void)
case 0x2c:
case 0x2d:
case 0x2e:
- sub_803850C(gUnknown_203B348->unk4);
+ sub_803850C(gUnknown_203B348->nextMenu);
break;
- case 0x10:
+ case MENU_DEBUG:
CreateDebugMenu();
break;
}
- gUnknown_203B348->unk0 = gUnknown_203B348->unk4;
+ gUnknown_203B348->currMenu = gUnknown_203B348->nextMenu;
}
}
s32 UpdateMenu(void)
{
s32 iVar1;
- s32 iVar2;
+ s32 nextMenu;
- iVar2 = 0xffdc;
- switch(gUnknown_203B348->unk4) {
- case 1:
- iVar2 = sub_8035EEC();
+ nextMenu = MENU_NO_SCREEN_CHANGE;
+ switch(gUnknown_203B348->nextMenu) {
+ case MENU_MAIN_SCREEN:
+ nextMenu = UpdateMainMenu();
break;
case 6:
- case 7:
- case 8:
+ case MENU_CONTINUE:
+ case MENU_DELETE_SAVE_PROMPT:
case 9:
- iVar2 = sub_803941C();
+ nextMenu = sub_803941C();
break;
- case 0xc:
- iVar1 = sub_8036448();
- iVar2 = 1;
+ case MENU_TRADE_ITEMS:
+ iVar1 = UpdateTradeItemsMenu();
+ nextMenu = MENU_MAIN_SCREEN;
if (iVar1 != 3) {
- iVar2 = 0xffdc;
+ nextMenu = MENU_NO_SCREEN_CHANGE;
}
break;
- case 0xb:
- iVar1 = sub_8032318();
- iVar2 = 1;
+ case MENU_FRIEND_RESCUE:
+ iVar1 = UpdateFriendRescueMenu();
+ nextMenu = MENU_MAIN_SCREEN;
if (iVar1 != 3) {
- iVar2 = 0xffdc;
+ nextMenu = MENU_NO_SCREEN_CHANGE;
}
break;
- case 0xd:
- iVar1 = sub_8039928();
- iVar2 = 1;
+ case MENU_WONDER_MAIL:
+ iVar1 = UpdateWonderMailMenu();
+ nextMenu = MENU_MAIN_SCREEN;
if (iVar1 != 3) {
- iVar2 = 0xffdc;
+ nextMenu = MENU_NO_SCREEN_CHANGE;
}
break;
case 0xe:
iVar1 = sub_803A1DC();
- iVar2 = 1;
+ nextMenu = MENU_MAIN_SCREEN;
if (iVar1 != 3) {
- iVar2 = 0xffdc;
+ nextMenu = MENU_NO_SCREEN_CHANGE;
}
break;
case 0xf:
iVar1 = sub_803A1E8();
- iVar2 = 5;
- if ((iVar1 != 3) && (iVar2 = 0xffdc, iVar1 == 2)) {
- iVar2 = 1;
+ nextMenu = 5;
+ if ((iVar1 != 3) && (nextMenu = MENU_NO_SCREEN_CHANGE, iVar1 == 2)) {
+ nextMenu = MENU_MAIN_SCREEN;
}
break;
- case 0x21:
- case 0x22:
- iVar2 = sub_8038A90();
+ case MENU_DISPLAY_RESCUE_PASSWORD:
+ case MENU_RESCUE_PASSWORD_ENTRY:
+ nextMenu = UpdateRescuePasswordMenu();
break;
- case 10:
- iVar2 = sub_80382C0();
+ case MENU_ADVENTURE_LOG:
+ nextMenu = UpdateAdventureLogMenu();
break;
case 0x24:
case 0x25:
case 0x26:
case 0x27:
case 0x28:
- iVar2 = sub_80383D4();
+ nextMenu = sub_80383D4();
break;
case 0x29:
case 0x2a:
@@ -225,43 +215,43 @@ s32 UpdateMenu(void)
case 0x2c:
case 0x2d:
case 0x2e:
- iVar2 = sub_8038630();
+ nextMenu = sub_8038630();
break;
- case 0x10:
- iVar2 = sub_803A2A4();
+ case MENU_DEBUG:
+ nextMenu = UpdateDebugMenu();
break;
}
- if (iVar2 != 0xffdc) {
- gUnknown_203B348->unk4 = iVar2;
+ if (nextMenu != MENU_NO_SCREEN_CHANGE) {
+ gUnknown_203B348->nextMenu = nextMenu;
}
- return iVar2;
+ return nextMenu;
}
void CleanUpMenu(void)
{
- if (gUnknown_203B348->unk8 != gUnknown_203B348->unk4) {
- switch(gUnknown_203B348->unk8) {
- case 1:
+ if (gUnknown_203B348->lastMenu != gUnknown_203B348->nextMenu) {
+ switch(gUnknown_203B348->lastMenu) {
+ case MENU_MAIN_SCREEN:
CleanMainMenu();
break;
case 6:
- case 7:
- case 8:
+ case MENU_CONTINUE:
+ case MENU_DELETE_SAVE_PROMPT:
case 9:
CleanLoadScreen();
break;
- case 0xc:
- sub_8036B04();
+ case MENU_TRADE_ITEMS:
+ CleanTradeItemsMenu();
break;
- case 0x13:
- case 0x14:
+ case MENU_COMMUNICATION_1:
+ case MENU_COMMUNICATION_2:
sub_80370D4();
break;
- case 0xb:
- sub_80327E4();
+ case MENU_FRIEND_RESCUE:
+ CleanFriendRescueMenu();
break;
- case 0xd:
- sub_80399E4();
+ case MENU_WONDER_MAIL:
+ CleanWonderMailMenu();
break;
case 0xe:
nullsub_55();
@@ -269,12 +259,12 @@ void CleanUpMenu(void)
case 0xf:
sub_803A1EC();
break;
- case 0x21:
- case 0x22:
- sub_8038A5C();
+ case MENU_DISPLAY_RESCUE_PASSWORD:
+ case MENU_RESCUE_PASSWORD_ENTRY:
+ CleanRescuePasswordMenu();
break;
- case 10:
- sub_80382AC();
+ case MENU_ADVENTURE_LOG:
+ CleanAdventureLogMenu();
break;
case 0x24:
case 0x25:
@@ -291,11 +281,11 @@ void CleanUpMenu(void)
case 0x2e:
sub_8038604();
break;
- case 0x10:
+ case MENU_DEBUG:
DeleteDebugMenu();
break;
}
- gUnknown_203B348->unk8 = gUnknown_203B348->unk4;
+ gUnknown_203B348->lastMenu = gUnknown_203B348->nextMenu;
}
}
diff --git a/src/main_menu_mid.c b/src/main_menu_mid.c
new file mode 100644
index 0000000..ebe2abb
--- /dev/null
+++ b/src/main_menu_mid.c
@@ -0,0 +1,80 @@
+#include "global.h"
+#include "main_menu.h"
+#include "input.h"
+
+struct unkData
+{
+ u8 unk0[24];
+};
+
+
+extern struct MainMenu *gUnknown_203B348;
+extern struct unkData gUnknown_80E59A8;
+extern void sub_8006518();
+extern void sub_800641C(struct unkData *, u32, u32);
+
+void sub_8035CC0(struct unkData *dataArray, u32 index)
+{
+ sub_8006518();
+ dataArray[index] = gUnknown_80E59A8;
+ ResetUnusedInputStruct();
+ sub_800641C(dataArray, 1, 1);
+}
+
+NAKED
+void sub_8035CF4(void * Menu, u32 index, u8 r2)
+{
+ asm_unified("\tpush {lr}\n"
+ "\tadds r3, r0, 0\n"
+ "\tlsls r0, r1, 2\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 4\n"
+ "\tadds r0, r3\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r1, 0x4C\n"
+ "\tstrb r2, [r1]\n"
+ "\tadds r2, r0, 0\n"
+ "\tadds r2, 0x4D\n"
+ "\tmovs r1, 0x1\n"
+ "\tstrb r1, [r2]\n"
+ "\tsubs r1, 0x2\n"
+ "\tstr r1, [r0, 0x48]\n"
+ "\tbl sub_8012EBC\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+
+void sub_8035D1C(void)
+{
+ gUnknown_203B348->unk38 = -1;
+}
+
+void sub_8035D30(s32 r0)
+{
+ gUnknown_203B348->unk38 = r0;
+}
+
+s16 sub_8035D3C(void)
+{
+ return gUnknown_203B348->unk38;
+}
+
+s32 *sub_8035D4C(void)
+{
+ return &gUnknown_203B348->currMenu;
+}
+
+void sub_8035D58(void)
+{
+ gUnknown_203B348->unk3C = -1;
+}
+
+void sub_8035D68(s32 r0)
+{
+ gUnknown_203B348->unk3C = r0;
+}
+
+s32 sub_8035D74(void)
+{
+ return gUnknown_203B348->unk3C;
+}
diff --git a/src/music_pre.c b/src/music_pre.c
index 53c5688..e7b962e 100644
--- a/src/music_pre.c
+++ b/src/music_pre.c
@@ -600,7 +600,7 @@ u16 GetCurrentBGSong(void)
#ifdef NONMATCHING
// TODO fix reg allocation.. using one too many regs
-void sub_800C074(u16 SongIndex,u16 param_2)
+void sub_800C074(u16 SongIndex, u16 param_2)
{
bool8 interrupt_flag;
u16 msVar;
diff --git a/src/personality_test_pre.c b/src/personality_test_pre.c
index 5c5f85e..f2a4032 100644
--- a/src/personality_test_pre.c
+++ b/src/personality_test_pre.c
@@ -18,6 +18,21 @@ extern void sub_8001044(u32 *);
+struct PersonalityAnswer
+{
+ const char * text;
+ int effect;
+};
+
+struct PersonalityQuestion
+{
+ const char * question;
+ const struct PersonalityAnswer * answers;
+ const u8 (*effects[16]);
+};
+
+extern struct PersonalityQuestion *gPersonalityQuestionPointerTable[NUM_QUIZ_QUESTIONS];
+
struct UnkSaveStruct1
{
/* 0x0 */ u32 unk0;
@@ -51,8 +66,8 @@ extern u32 sub_80144A4(s32 *);
extern void sub_803CE6C(void);
extern char* GetMonSpecies(u32);
-extern void CopyStringtoBuffer(s32 *r0, char *r1);
-extern void sub_801602C(u32, s32 *r0);
+extern void CopyStringtoBuffer(char *r0, char *r1);
+extern void sub_801602C(u32, char *r0);
extern u32 sub_8016080(void);
extern void sub_80160D8(void);
@@ -73,7 +88,7 @@ extern void sub_8013818(u32 *r0, s32, u32, u32);
extern u32 GetKeyPress(struct UnkInputStruct **r0);
extern u8 sub_80138B8(struct UnkInputStruct **r0, u32);
-extern void sub_80119D4(u32);
+extern void PlayMenuSoundEffect(u32);
extern void sub_8013984(struct UnkInputStruct **r0);
@@ -503,13 +518,9 @@ void sub_803CB5C(void)
void sub_803CB7C(void)
{
- char *monName;
- s32 *iVar2;
- iVar2 = &gUnknown_203B400->unk20;
- monName = GetMonSpecies(gUnknown_203B400->PartnerID);
- CopyStringtoBuffer(iVar2, monName);
- sub_801602C(3, &gUnknown_203B400->unk20);
+ CopyStringtoBuffer(gUnknown_203B400->PartnerNick, GetMonSpecies(gUnknown_203B400->PartnerID));
+ sub_801602C(3, gUnknown_203B400->PartnerNick);
gUnknown_203B400->TestState = 13;
}
@@ -531,38 +542,12 @@ void sub_803CBE4(void)
}
}
-NAKED
void PromptNewQuestion(void)
{
- asm_unified(
- "\tpush {lr}\n"
- "\tsub sp, 0x14\n"
- "\tldr r1, _0803CC38\n"
- "\tldr r0, _0803CC3C\n"
- "\tldr r0, [r0]\n"
- "\tldr r0, [r0, 0x3C]\n"
- "\tlsls r0, 2\n"
- "\tadds r0, r1\n"
- "\tldr r1, [r0]\n"
- "\tldr r0, [r1]\n"
- "\tldr r3, [r1, 0x4]\n"
- "\tmovs r2, 0\n"
- "\tstr r2, [sp]\n"
- "\tmovs r1, 0x3\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tstr r2, [sp, 0x8]\n"
- "\tstr r2, [sp, 0xC]\n"
- "\tadds r1, 0xFE\n"
- "\tstr r1, [sp, 0x10]\n"
- "\tmovs r1, 0\n"
- "\tbl sub_8014248\n"
- "\tadd sp, 0x14\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
-"_0803CC38: .4byte gPersonalityQuestionPointerTable\n"
-"_0803CC3C: .4byte gUnknown_203B400"
- );
+ sub_8014248(gPersonalityQuestionPointerTable[gUnknown_203B400->currQuestionIndex]->question,
+ 0, 0,
+ (void *)gPersonalityQuestionPointerTable[gUnknown_203B400->currQuestionIndex]->answers,
+ 0, 3, 0, 0, 0x101);
}
void PrintPersonalityTypeDescription(void)
@@ -724,7 +709,7 @@ u16 HandlePartnerSelectionInput(void)
sVar1 = gUnknown_203B404->currPartnerSelection;
gUnknown_203B404->unk16 = 0;
if (GetKeyPress(&gUnknown_203B404->unk18) == A_BUTTON) {
- sub_80119D4(0);
+ PlayMenuSoundEffect(0);
return gUnknown_203B404->PartnerArray[gUnknown_203B404->currPartnerSelection];
}
else {
@@ -735,10 +720,10 @@ u16 HandlePartnerSelectionInput(void)
PersonalityTest_DisplayPartnerSprite();
}
if (gUnknown_203B404->unk16 != '\0') {
- return 0xfffe;
+ return -2;
}
else {
- return 0xffff;
+ return -1;
}
}
}
diff --git a/src/save.c b/src/save.c
index 977278a..181d9c3 100644
--- a/src/save.c
+++ b/src/save.c
@@ -148,8 +148,8 @@ extern u32 sub_8097680(void);
extern u32 *sub_809769C(void);
extern void sub_80974E8(void);
extern void sub_8097748(void);
-extern u8 *sub_8097F6C(void);
-extern void sub_8097F74(void);
+extern u8 *GetExclusivePokemon(void);
+extern void InitializeExclusivePokemon(void);
extern void sub_80993D8(void);
extern struct PlayTimeStruct *gPlayTimeRef;
@@ -587,7 +587,7 @@ void sub_8012300(void)
sub_8095900();
sub_80974E8();
sub_8094998(1);
- sub_8097F74();
+ InitializeExclusivePokemon();
}
@@ -611,10 +611,10 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
gUnknown_203B490 = r0->unk18;
gUnknown_203B464 = r0->unk1C;
gUnknown_203B494 = r0->unk20;
- gUnknown_203B498 = r0->unk24;
+ gUnknown_203B498 = r0->ExclusivePokemon;
gFriendAreas = r0->BoughtFriendAreas;
gUnknown_203B46C = r0->unk2C;
- gPlayTimeRef = r0->playTime;
+ gPlayTimeRef = r0->playTime;
return;
}
gUnknown_203B460 = sub_80909D0();
@@ -626,7 +626,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
gUnknown_203B490 = sub_80958F8();
gUnknown_203B464 = sub_809208C();
gUnknown_203B494 = sub_8097680();
- gUnknown_203B498 = sub_8097F6C();
+ gUnknown_203B498 = GetExclusivePokemon();
gFriendAreas = GetBoughtFriendAreas();
gUnknown_203B46C = sub_8094990();
gPlayTimeRef = GetPlayTime();
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index e2daaa6..902b67a 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -549,23 +549,16 @@ void sub_8028ED4()
{
return;
}
- if(temp == 8)
- {
- sub_8028B04(11);
- }
- else
- {
- switch(temp){
- case 8:
- sub_8028B04(2);
- break;
- case 9:
- case 10:
- sub_8028B04(2);
- break;
- default:
- break;
- }
+ switch(temp){
+ case 8:
+ sub_8028B04(11);
+ break;
+ case 9:
+ case 10:
+ sub_8028B04(2);
+ break;
+ default:
+ break;
}
}
diff --git a/src/wonder_mail_1.c b/src/wonder_mail_1.c
deleted file mode 100644
index 20f901c..0000000
--- a/src/wonder_mail_1.c
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "global.h"
-
-extern void sub_80338C4(u32);
-extern u32 *gUnknown_203B33C;
-extern s32 sub_80144A4(s32 *);
-
-void sub_8035374(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) != 0)
- return;
- switch(temp)
- {
- case 0x19:
- sub_80338C4(0x78);
- break;
- case 0x1E:
- case 0x1F:
- case 0x20:
- case 0x21:
- case 0x22:
- gUnknown_203B33C[0x159] = temp;
- sub_80338C4(0x7B);
- break;
- }
-}
-
-void sub_80353BC(void)
-{
- s32 temp;
- if(sub_80144A4(&temp) != 0)
- return;
- switch(temp)
- {
- case 0x19:
- sub_80338C4(0x78);
- break;
- case 0x23:
- case 0x24:
- case 0x25:
- case 0x26:
- gUnknown_203B33C[0x159] = temp;
- sub_80338C4(0x7D);
- 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_main_menu.c b/src/wonder_mail_main_menu.c
new file mode 100644
index 0000000..d8207c4
--- /dev/null
+++ b/src/wonder_mail_main_menu.c
@@ -0,0 +1,44 @@
+#include "global.h"
+#include "input.h"
+
+extern u8 *gUnknown_203B3E8;
+extern void sub_800641C(void *, u32, u32);
+extern void nullsub_54();
+extern void sub_8039E18();
+
+void sub_803A1C0(u8 r0)
+{
+ *gUnknown_203B3E8 = r0;
+ nullsub_54();
+ sub_8039E18();
+}
+
+u32 sub_803A1D8(void)
+{
+ return 1;
+}
+
+u32 sub_803A1DC(void)
+{
+ return 0;
+}
+
+void nullsub_55()
+{
+}
+
+u32 sub_803A1E4(void)
+{
+ return 1;
+}
+
+u32 sub_803A1E8(void)
+{
+ return 2;
+}
+
+void sub_803A1EC(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(NULL, 1, 1);
+}