diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_2.c | 20 | ||||
-rw-r--r-- | src/code_80118A4.c | 23 | ||||
-rw-r--r-- | src/code_801D760.c | 55 | ||||
-rw-r--r-- | src/code_808EAB0.c | 104 | ||||
-rw-r--r-- | src/code_809017C.c | 284 | ||||
-rw-r--r-- | src/code_8094F88.c | 24 | ||||
-rw-r--r-- | src/code_809747C.c | 6 | ||||
-rw-r--r-- | src/code_8097F40.c | 64 | ||||
-rw-r--r-- | src/code_80983D8.c | 20 | ||||
-rw-r--r-- | src/debug_menu.c | 135 | ||||
-rw-r--r-- | src/debug_menu_1.c | 85 | ||||
-rw-r--r-- | src/event_flag.c | 25 | ||||
-rw-r--r-- | src/exclusive_pokemon.c | 80 | ||||
-rw-r--r-- | src/friend_area_1.c | 55 | ||||
-rw-r--r-- | src/friend_rescue.c | 508 | ||||
-rw-r--r-- | src/friend_rescue_1.c | 141 | ||||
-rw-r--r-- | src/main_menu.c | 240 | ||||
-rw-r--r-- | src/main_menu_mid.c | 80 | ||||
-rw-r--r-- | src/music_pre.c | 2 | ||||
-rw-r--r-- | src/personality_test_pre.c | 69 | ||||
-rw-r--r-- | src/save.c | 12 | ||||
-rw-r--r-- | src/wonder_mail.c | 27 | ||||
-rw-r--r-- | src/wonder_mail_1.c | 73 | ||||
-rw-r--r-- | src/wonder_mail_main_menu.c | 44 |
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; } } } @@ -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); +} |