diff options
author | Seth Barberee <seth.barberee@gmail.com> | 2021-05-15 16:59:55 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-15 18:59:55 -0500 |
commit | f402e46cd3c8b7236673d6edbae77903a7cc0618 (patch) | |
tree | 37a19f3ab35a73c29d4d6da565741beaf7bb547f /src | |
parent | f65dee5a143bd543c74c010d7252eb76893ee243 (diff) |
Sese's April/May Dump (#37)
* splitting lots of pokemon square and labeling lots of other things
* actually commit this stuff
* more moving data and things
* more screen work
* split out some pokemon dungeon data
* lots of data work
* push more data work
* split kecleon, decomp another kanghaskhan func, and try to doc UpdateBGControl more
* lots of item work
* label more item things
* subtype -> category and doc types/category
Diffstat (limited to 'src')
52 files changed, 4945 insertions, 1116 deletions
diff --git a/src/code_2.c b/src/code_2.c index 94f3632..08db080 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -108,7 +108,7 @@ void GameLoop(void) sub_800DAAC(); SetSavingIconCoords(0); tmp = 0; - if (sub_8011DAC(&tmp)) + if (ReadSaveFromPak(&tmp)) sub_800135C(); xxx_script_related_8001334(14); xxx_script_related_8001334(15); diff --git a/src/code_800558C.c b/src/code_800558C.c index e138454..df3fd38 100644 --- a/src/code_800558C.c +++ b/src/code_800558C.c @@ -8,7 +8,7 @@ extern bool32 gUnknown_2026E50; extern bool32 gUnknown_2026E54; extern u32 gUnknown_2026E58; -extern void sub_800CC44(s32 r0, s32 r1); +extern void SetBldAlphaReg(s32 r0, s32 r1); // Unused void sub_80060A8(void) @@ -25,6 +25,6 @@ void sub_80060EC(void) gUnknown_2026E3C = gUnknown_2026E58; gUnknown_2026E54 = !gUnknown_2026E54; gUnknown_2026E50 = !gUnknown_2026E50; - sub_800CC44((gUnknown_2026E4E & 0x1F00) >> 8, gUnknown_2026E4E & 0x1F); + SetBldAlphaReg((gUnknown_2026E4E & 0x1F00) >> 8, gUnknown_2026E4E & 0x1F); gUnknown_2026E38 = TRUE; } diff --git a/src/code_8009804.c b/src/code_8009804.c index 1f1b054..23407a7 100644 --- a/src/code_8009804.c +++ b/src/code_8009804.c @@ -3,15 +3,21 @@ extern u8 gUnknown_202D238[4]; extern s32 gUnknown_202D23C; +extern u16 gUnknown_202B038[2][32][32]; +extern u8 gUnknown_202B838[0x800]; +extern u8 gUnknown_202C038[0x800]; +extern u8 gUnknown_202C838[0x720]; struct unkStruct_202D240 { u32 *unk0; u32 *unk4; - u32 *unk8; + u32 size; }; extern struct unkStruct_202D240 gUnknown_202D240[8]; +extern void CpuCopy(void* dest, void *src, s32 size); + void vram_related_8009804(void) { u32 counter; @@ -38,17 +44,17 @@ void vram_related_8009804(void) *r1++ = 0; } r1 = (u32 *) PLTT; - for(counter = 0; counter < 0x78; counter++) + for(counter = 0; counter < 120; counter++) { *r1++ = 0; } r1 = (u32 *) OBJ_PLTT; - for(counter = 0; counter < 0x78; counter++) + for(counter = 0; counter < 120; counter++) { *r1++ = 0; } r1 = (u32 *) OAM; - for(counter = 0; counter < 0x100; counter++) + for(counter = 0; counter < 256; counter++) { *r1++ = 0xa000a0; } @@ -63,12 +69,12 @@ void sub_80098A0(void) gUnknown_202D238[3] = 0; } -void sub_80098BC(u32 *r0, u32 *r1, u32 *r2) +void sub_80098BC(u32 *r0, u32 *r1, u32 r2) { if(gUnknown_202D23C < 8){ gUnknown_202D240[gUnknown_202D23C].unk0 = r0; gUnknown_202D240[gUnknown_202D23C].unk4 = r1; - gUnknown_202D240[gUnknown_202D23C].unk8 = r2; + gUnknown_202D240[gUnknown_202D23C].size = r2; gUnknown_202D23C++; } } @@ -77,3 +83,43 @@ void sub_80098F8(u32 r0) { gUnknown_202D238[r0] = 1; } + +void sub_8009908(void) +{ + s32 index; + u32 iVar3; + + index = 0; + if (index < gUnknown_202D23C) { + iVar3 = 0; + do { + CpuCopy(gUnknown_202D240[index].unk0,gUnknown_202D240[index].unk4,gUnknown_202D240[index].size); + iVar3 += sizeof(struct unkStruct_202D240); + index++; + } while (index < gUnknown_202D23C); + } + gUnknown_202D23C = 0; + if (gUnknown_202D238[0] != 0) { + gUnknown_202D238[0] = 0; + CpuCopy(BG_SCREEN_ADDR(12),gUnknown_202B038, BG_SCREEN_SIZE); + } + if (gUnknown_202D238[1] != 0) { + gUnknown_202D238[1] = 0; + CpuCopy(BG_SCREEN_ADDR(13),gUnknown_202B838, BG_SCREEN_SIZE); + } + if (gUnknown_202D238[2] != 0) { + gUnknown_202D238[2] = 0; + CpuCopy(BG_SCREEN_ADDR(14),gUnknown_202C038, BG_SCREEN_SIZE); + } + if (gUnknown_202D238[3] != 0) { + gUnknown_202D238[3] = 0; + CpuCopy(BG_SCREEN_ADDR(15),gUnknown_202C838, BG_SCREEN_SIZE); + } +} + +void sub_80099C0(void) +{ + CpuCopy(BG_SCREEN_ADDR(12),gUnknown_202B038, BG_SCREEN_SIZE); + // TODO shouldn't this be 202B838? It didn't match... might need raw address + CpuCopy(BG_SCREEN_ADDR(13),gUnknown_202B038 + 0x1, BG_SCREEN_SIZE); +} diff --git a/src/code_800C9CC.c b/src/code_800C9CC.c index 2b0c8dd..cbd2ede 100644 --- a/src/code_800C9CC.c +++ b/src/code_800C9CC.c @@ -3,8 +3,8 @@ #include "bg.h" extern u16 gRawKeyInput; -extern u8 gUnknown_202D6B8; -extern u8 gUnknown_202D6B9; +extern u8 gBldAlpha_CoeffA; +extern u8 gBldAlpha_CoeffB; extern u16 gBldAlpha; extern u8 gUnknown_202D7FE; @@ -51,34 +51,30 @@ void ReadKeyInput(struct Inputs *r0) gRawKeyInput = keyInput; } -void sub_800CC44(s32 r0, s32 r1) +void SetBldAlphaReg(s32 lowAlpha, s32 highAlpha) { - if(r0 < 0) + if(lowAlpha < 0) { - r0 = 0; + lowAlpha = 0; } - else + else if(lowAlpha > 16) { - if(r0 > 0x10) - { - r0 = 0x10; - } + lowAlpha = 16; } - if(r1 < 0) + + if(highAlpha < 0) { - r1 = 0; + highAlpha = 0; } - else + else if(highAlpha > 16) { - if(r1 > 0x10) - { - r1 = 0x10; - } + highAlpha = 16; } - gUnknown_202D6B8 = r0; - gUnknown_202D6B9 = r1; - gBldAlpha = BLDALPHA_BLEND1(gUnknown_202D6B8, gUnknown_202D6B9); + gBldAlpha_CoeffA = lowAlpha; + gBldAlpha_CoeffB = highAlpha; + + gBldAlpha = BLDALPHA_BLEND1(gBldAlpha_CoeffA, gBldAlpha_CoeffB); } void SetBG0RegOffsets(s32 xoffset, s32 yoffset) diff --git a/src/code_800D090.c b/src/code_800D090.c index b263d30..fc93392 100644 --- a/src/code_800D090.c +++ b/src/code_800D090.c @@ -31,7 +31,7 @@ void sub_800D098(void) u32 dispcnt_save; u32 ie_store; - while(REG_VCOUNT <= 159) + while(REG_VCOUNT < 160) ; // Save DISPCNT and set to 0 @@ -40,7 +40,7 @@ void sub_800D098(void) *(u16 *)BG_PLTT = 0xefff; - while(REG_KEYINPUT != 0x3ff) // 0011 1111 1111 (all buttons) + while(REG_KEYINPUT != KEYS_MASK) ; @@ -71,9 +71,9 @@ void sub_800D098(void) REG_IME = 1; - while(REG_VCOUNT <= 159){} + while(REG_VCOUNT < 160){} REG_DISPCNT = dispcnt_save; // restore DISPCNT - while(REG_KEYINPUT != 0x3ff){} // All buttons + while(REG_KEYINPUT != KEYS_MASK){} // All buttons } void sub_800D158(u8 *buffer, const char *text, ...) diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 39cc12b..815a737 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -206,7 +206,7 @@ void sub_8011924() sub_800BF80(); } -void sub_8011930(u16 speed) +void xxx_call_fade_out_bgm(u16 speed) { FadeOutBGM(speed); } @@ -227,7 +227,7 @@ void sub_8011974(u16 songIndex, u16 r1) sub_800C074(songIndex, r1); } -void sub_8011988(u16 songIndex) +void PlaySound(u16 songIndex) { sub_800C074(songIndex, 256); } @@ -260,7 +260,7 @@ void sub_8011A04(void) if(gUnknown_202DE22 > 0) return; gUnknown_202DE22 = 3; - sub_800C074(0x131, 256); + sub_800C074(305, 256); } void sub_8011A2C(u32 r0) diff --git a/src/code_801D760.c b/src/code_801D760.c index 5577b86..b0f163a 100644 --- a/src/code_801D760.c +++ b/src/code_801D760.c @@ -1,6 +1,7 @@ #include "global.h" #include "constants/friend_area.h" #include "file_system.h" +#include "gUnknown_203B460.h" extern u32 sub_801BF48(void); extern void sub_801BF98(void); @@ -70,12 +71,6 @@ struct unk_203B250 struct unk_203B250 *gUnknown_203B250; -struct unkStruct_203B460 -{ - u8 padding[0x260]; - /* 0x260 */ u32 teamMoney; -}; - extern struct unkStruct_203B460 *gUnknown_203B460; void sub_801D680(void) @@ -254,10 +249,10 @@ void sub_801D878(void) void sub_801D894(void) { - u8 uVar1; + u8 rank; const char *location; - int iVar3; - s32 size_var; + int location_length; + s32 x_coord; // Stored on stack u32 *preload_string; @@ -272,22 +267,23 @@ void sub_801D894(void) } // TODO this is def a hack xxx_format_string(location, auStack116, &preload_string + 1, 0); - iVar3 = sub_8008ED0(auStack116); - size_var = (0x80 - iVar3) / 2; // have to calculate here + location_length = sub_8008ED0(auStack116); + x_coord = (128 - location_length) / 2; // Centers the location name sub_8008C54(1); sub_80073B8(1); - xxx_call_draw_string(size_var, 4, auStack116, 1, 0); + xxx_call_draw_string(x_coord, 4, auStack116, 1, 0); sub_80073E0(1); sub_8008C54(2); sub_80073B8(2); LoadTeamRankBadge(2, 8, 6); - r5 = &gUnknown_80DBF3C; // Have to load before TeamRank funcs - uVar1 = GetRescueTeamRank(); - sub_800D158(auStack116, r5, GetTeamRankString(uVar1), GetTeamRankPts()); - xxx_call_draw_string(0x20, 4, auStack116, 2, 0); +// Have to load before TeamRank funcs + r5 = &gUnknown_80DBF3C; // %s #C5%d#R Pts. + rank = GetRescueTeamRank(); + sub_800D158(auStack116, r5, GetTeamRankString(rank), GetTeamRankPts()); + xxx_call_draw_string(32, 4, auStack116, 2, 0); sub_800D158(auStack116, &gUnknown_80DBF4C, gUnknown_203B460->teamMoney); - xxx_call_draw_string(0x20, 0x12, auStack116, 2, 0); + xxx_call_draw_string(32, 18, auStack116, 2, 0); sub_80073E0(2); } diff --git a/src/code_8041AD0.c b/src/code_8041AD0.c index 6c9c55c..738b881 100644 --- a/src/code_8041AD0.c +++ b/src/code_8041AD0.c @@ -18,7 +18,7 @@ extern u8 sub_8042768(struct unkDungeon_8041D5C *r0); extern void sub_806CDD4(struct unkDungeon_8041D5C *r0, u8, u32); extern u8 sub_8071858(struct unkDungeon_8041D5C *r0, u8); extern u32 sub_806F62C(u32); -extern void sub_8083E38(u32); +extern void PlaySoundEffect(u32); extern u8 sub_803F428(struct unkDungeon_8041D5C *r0); extern void sub_8041550(struct unkDungeon_8041D5C *r0, u32, u32, u32, u32, u32); @@ -650,32 +650,32 @@ void sub_80421AC(u32 r0, struct unkDungeon_8041D5C * r1) void sub_80421C0(struct unkDungeon_8041D5C *r0, u16 r1) { if(r0 == NULL) - sub_8083E38(r1); + PlaySoundEffect(r1); else if(sub_8042768(r0) != 0) - sub_8083E38(r1); + PlaySoundEffect(r1); } void sub_80421EC(struct unkDungeon_8041D5C *r0, u16 r1) { if(sub_803F428(r0) != 0) - sub_8083E38(r1); + PlaySoundEffect(r1); } void sub_8042208(struct unkDungeon_8041D5C *r0, u8 r1) { if(r1 == 0) - sub_8083E38(0xA9 << 1); + PlaySoundEffect(0x152); else if(r1 == 1) - sub_8083E38(0x151); + PlaySoundEffect(0x151); else - sub_8083E38(0xA8 << 1); + PlaySoundEffect(0x150); } void sub_8042238(u32 r0, struct unkDungeon_8041D5C *r1) { if(r1->unk70->unk6 != 0) - sub_8083E38(0x157); + PlaySoundEffect(0x157); else - sub_8083E38(0xAB << 1); + PlaySoundEffect(0x156); } diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c index d363682..ec29b38 100644 --- a/src/code_80521D0_1.c +++ b/src/code_80521D0_1.c @@ -4,6 +4,7 @@ #include "code_8041D5C.h" #include "friend_area.h" #include "constants/friend_area.h" +#include "pokemon.h" extern struct unkDungeon_8041D5C *sub_8085480(void); extern struct unkDungeon_8041D5C *sub_8085680(u32); @@ -66,7 +67,6 @@ extern void sub_800DC14(u32); extern void sub_808BAA4(); extern void sub_8086A3C(struct unkDungeon_8041D5C *r0); -extern void CopySpeciesNametoBuffer(char *r0, u32 r1); extern void sub_8083E88(u32); extern void sub_80854D4(void); extern void sub_80855E4(void *); @@ -81,9 +81,9 @@ extern void sub_80866C4(u32 *r0); extern void sub_803E708(u32, u32); extern void sub_8086448(void); extern void sub_8086598(void); -extern void sub_808696C(); +extern void SpriteLookAroundEffect(struct unkDungeon_8041D5C *); extern void sub_80862BC(struct unkDungeon_8041D5C *); -extern void sub_8083E38(u32); +extern void PlaySoundEffect(u32); extern void sub_806CDD4(struct unkDungeon_8041D5C *, u32, u32); extern void sub_80869E4(struct unkDungeon_8041D5C *, u32, u32, u32); extern void sub_806CE68(struct unkDungeon_8041D5C *, u32); @@ -122,7 +122,7 @@ void sub_808C5A0(struct unkDungeon_8041D5C *r0); void sub_808C9B0(); void sub_808C8E0(struct unkDungeon_8041D5C *param_1); void sub_808C360(void); -void sub_808C2D4(); +void KyogreScreenFlash(); void sub_808C0CC(); void sub_808BFA0(); @@ -166,7 +166,7 @@ void sub_808BBB8(struct unkDungeon_8041D5C *param_1) sub_80861B8(param_1,0xe,0); iVar1 = 0xa000; iVar2 = 0x200; - sub_8083E38(0x1f8); + PlaySoundEffect(0x1f8); while( 1 ) { iVar1 = iVar1 - iVar2; if (iVar1 < 0x1800) { @@ -183,13 +183,13 @@ void sub_808BC20(struct unkDungeon_8041D5C * param_1) { s32 uVar1; - sub_8083E38(0x298); + PlaySoundEffect(0x298); for(uVar1 = 0; uVar1 < 0x19; uVar1++){ sub_8085918(param_1,uVar1 & 7); sub_803E708(3,0x46); } param_1->unk70->unk15E = 1; - sub_8083E38(0x27f); + PlaySoundEffect(0x27f); sub_80861F8(99,param_1,1); } @@ -200,9 +200,9 @@ void JirachiWishGrantDialogue(struct unkDungeon_8041D5C *param_1) param_1->unk70->unk15D = 1; // Nnnnnnnnnn! sub_8052910(&gUnknown_81058A8); - sub_8083E38(0x375); + PlaySoundEffect(0x375); sub_80861F8(0x67,param_1,1); - sub_8083E38(0x2a8); + PlaySoundEffect(0x2a8); uVar2 = sub_80861F8(0x68,param_1,0); // Taaaaaaaah! sub_8052910(&gUnknown_81058C4); @@ -329,7 +329,7 @@ void LugiaPreFightDialogue(void) sub_8052910(&gUnknown_8105F38); sub_803E708(10,0x46); sub_8052910(&gUnknown_8105F74); - sub_8083E38(0x1f8); + PlaySoundEffect(0x1f8); sub_80861D4(uVar3,0xd,0); sub_803E708(0x2b,0x46); sub_80861B8(uVar3,0,0); @@ -352,7 +352,7 @@ void sub_808BFA0(void) { s32 iVar1; - sub_8083E38(0x1f6); + PlaySoundEffect(0x1f6); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ sub_8085C54(0,0,iVar1,1,1); sub_803E46C(0x46); @@ -375,7 +375,7 @@ void sub_808C02C(void) { s32 iVar1; - sub_8083E38(0x1f6); + PlaySoundEffect(0x1f6); for(iVar1 = 0; iVar1 < 200; iVar1 += 100){ sub_8085C54(iVar1,iVar1,iVar1,1,0); @@ -460,7 +460,7 @@ void KyogrePreFightDialogue(void) sub_8083F14(); if (HasRecruitedMon(SPECIES_KYOGRE)) { sub_8083EA8(0x23,0x3c); - sub_808696C(iVar2); + SpriteLookAroundEffect(iVar2); sub_803E708(10,0x46); sub_8052910(&gUnknown_81062A8); sub_803E708(10,0x46); @@ -480,14 +480,14 @@ void KyogrePreFightDialogue(void) sub_808C360(); // My duels agaisnt $m3 (Groudon) left us both exhausted sub_8052910(&gUnknown_8106140); - sub_808C2D4(); + KyogreScreenFlash(); // I am $m2 (Kyogre)! // The lord of the sea! sub_8052910(&gUnknown_8106214); - sub_808C2D4(); + KyogreScreenFlash(); // Witness the destructive force of my waves! sub_8052910(&gUnknown_8106244); - sub_808C2D4(); + KyogreScreenFlash(); // Marvel at my awesome // power! sub_8052910(&gUnknown_810627C); @@ -502,11 +502,11 @@ void nullsub_99(void) { } -void sub_808C2D4(void) +void KyogreScreenFlash(void) { s32 iVar1; - sub_8083E38(0x1f8); + PlaySoundEffect(0x1f8); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ sub_8085C54(0,0,iVar1,1,1); sub_803E46C(0x46); @@ -532,7 +532,7 @@ void sub_808C360(void) sub_803E9D0(); sub_803E46C(0x46); gUnknown_203B418->unk7 = 0; - sub_808C2D4(); + KyogreScreenFlash(); } void sub_808C3A0(void) @@ -593,7 +593,7 @@ void sub_808C4C4(void) { s32 iVar1; - sub_8083E38(0x2c1); + PlaySoundEffect(0x2c1); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10){ sub_8085C54(iVar1,0,0,1,1); sub_803E46C(0x46); @@ -675,14 +675,14 @@ void CelebiJoinDialogue(void) if ((HasRecruitedMon(SPECIES_CELEBI)) || (sub_806FD18(local_1c) == '\0')) { sub_8068FE0(local_1c,0x21c,0); - sub_808696C(uVar2); + SpriteLookAroundEffect(uVar2); sub_803E708(10,0x46); // ......... sub_8052910(&gUnknown_810663C); } else { - sub_808696C(uVar2); + SpriteLookAroundEffect(uVar2); sub_803E708(10,0x46); sub_80862BC(uVar2); sub_803E708(10,0x46); @@ -695,12 +695,12 @@ void CelebiJoinDialogue(void) sub_8086598(); // The Time-Traveling Pokemon $m2 (Celebi)! sub_8052910(&gUnknown_8106400); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1c7); sub_806CDD4(local_1c,10,0); sub_803E708(0x14,0x46); sub_806CE68(local_1c,0); sub_803E708(4,0x46); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1c7); sub_806CDD4(local_1c,10,0); sub_8052910(&gUnknown_810643C); sub_803E708(10,0x46); @@ -718,17 +718,17 @@ void CelebiJoinDialogue(void) if (menuChoice == 1) { sub_8083F14(); - sub_8083E38(0xcc); + PlaySoundEffect(0xcc); while (sub_8083E74(0xcc) != 0) { sub_803E46C(0x46); } sub_8083E88(0x7f); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1c7); sub_80861D4(local_1c,0xd,0); sub_803E708(0x37,0x46); - sub_8083E38(0x1d5); + PlaySoundEffect(0x1d5); sub_803E708(0x1a,0x46); - sub_8083E38(0x1d5); + PlaySoundEffect(0x1d5); sub_803E708(0x1c,0x46); sub_8052910(&gUnknown_8106468); sub_803E708(10,0x46); @@ -736,12 +736,12 @@ void CelebiJoinDialogue(void) sub_8083E88(0x7f); sub_8052910(&gUnknown_810648C); sub_803E708(10,0x46); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1c7); sub_80861D4(local_1c,0xd,0); sub_803E708(0x37,0x46); - sub_8083E38(0x1d5); + PlaySoundEffect(0x1d5); sub_803E708(0x1a,0x46); - sub_8083E38(0x1d5); + PlaySoundEffect(0x1d5); sub_803E708(0x1b,0x46); sub_8052910(&gUnknown_81064BC); sub_803E708(10,0x46); @@ -815,7 +815,7 @@ void CelebiJoinDialogue(void) "\tmovs r2, 0\n" "\tbl sub_8068FE0\n" "\tadds r0, r7, 0\n" - "\tbl sub_808696C\n" + "\tbl SpriteLookAroundEffect\n" "\tmovs r0, 0xA\n" "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" @@ -826,7 +826,7 @@ void CelebiJoinDialogue(void) "_0808C67C: .4byte gUnknown_810663C\n" "_0808C680:\n" "\tadds r0, r7, 0\n" - "\tbl sub_808696C\n" + "\tbl SpriteLookAroundEffect\n" "\tmovs r0, 0xA\n" "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" @@ -848,7 +848,7 @@ void CelebiJoinDialogue(void) "\tbl sub_8052910\n" "\tldr r4, _0808C724\n" "\tadds r0, r4, 0\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tldr r0, [sp]\n" "\tmovs r1, 0xA\n" "\tmovs r2, 0\n" @@ -863,7 +863,7 @@ void CelebiJoinDialogue(void) "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" "\tadds r0, r4, 0\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tldr r0, [sp]\n" "\tmovs r1, 0xA\n" "\tmovs r2, 0\n" @@ -908,7 +908,7 @@ void CelebiJoinDialogue(void) "\tbne _0808C824\n" "\tbl sub_8083F14\n" "\tmovs r0, 0xCC\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tb _0808C76E\n" "\t.align 2, 0\n" "_0808C75C: .4byte gPtrPurityForestAllowCelebiToJoinText\n" @@ -926,7 +926,7 @@ void CelebiJoinDialogue(void) "\tmovs r0, 0x7F\n" "\tbl sub_8083E88\n" "\tmov r0, r8\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tldr r0, [sp]\n" "\tmovs r1, 0xD\n" "\tmovs r2, 0\n" @@ -935,12 +935,12 @@ void CelebiJoinDialogue(void) "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" "\tadds r0, r6, 0\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tmovs r0, 0x1A\n" "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" "\tadds r0, r6, 0\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tmovs r0, 0x1C\n" "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" @@ -961,7 +961,7 @@ void CelebiJoinDialogue(void) "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" "\tmov r0, r8\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tldr r0, [sp]\n" "\tmovs r1, 0xD\n" "\tmovs r2, 0\n" @@ -970,12 +970,12 @@ void CelebiJoinDialogue(void) "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" "\tadds r0, r6, 0\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tmovs r0, 0x1A\n" "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" "\tadds r0, r6, 0\n" - "\tbl sub_8083E38\n" + "\tbl PlaySoundEffect\n" "\tmovs r0, 0x1B\n" "\tmovs r1, 0x46\n" "\tbl sub_803E708\n" @@ -1073,7 +1073,7 @@ void sub_808C8E0(struct unkDungeon_8041D5C *param_1) { s32 iVar1; - sub_8083E38(0x1a5); + PlaySoundEffect(0x1a5); sub_806CDD4(param_1, 0, 0); for(iVar1 = 0; iVar1 < 16; iVar1++){ param_1->unk70->unk174 = iVar1 << 8; @@ -1149,7 +1149,7 @@ void MedichamResuceDialogue(void) s32 counter; temp = sub_8085680(7); - sub_808696C(); + SpriteLookAroundEffect(temp); sub_803E708(0xA, 0x46); // Oh my I can't seem to find a way out... sub_8052910(&gUnknown_8106778); @@ -1167,12 +1167,12 @@ void MedichamResuceDialogue(void) sub_80869E4(temp, 4, 2, 0); sub_8052910(&gUnknown_81067E0); sub_803E708(0xA, 0x46); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1c7); sub_806CDD4(temp, 0xA, 0); sub_803E708(0x14, 0x46); sub_806CE68(temp, 0); sub_803E708(0x4, 0x46); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1c7); sub_806CDD4(temp, 0xA, 0); sub_803E708(0x14, 0x46); // Yes Yes @@ -1237,7 +1237,7 @@ void SmeargleRescueDialogue(void) s32 counter; temp = sub_8085680(0x1F); - sub_808696C(); + SpriteLookAroundEffect(temp); sub_803E708(0xA, 0x46); // Ohhh... // I've lost my bearings @@ -1259,12 +1259,12 @@ void SmeargleRescueDialogue(void) // Oh! You are? sub_8052910(&gUnknown_8106918); sub_803E708(0xA, 0x46); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1c7); sub_806CDD4(temp, 0xA, 0); sub_803E708(0x14, 0x46); sub_806CE68(temp, 0); sub_803E708(0x4, 0x46); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1c7); sub_806CDD4(temp, 0xA, 0); sub_803E708(0x14, 0x46); // Did you maybe come to rescue me? diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index c11a8c9..4138da4 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -2,6 +2,7 @@ #include "gUnknown_203B418.h" #include "code_8041D5C.h" #include "constants/species.h" +#include "pokemon.h" extern struct unkStruct_203B418 *gUnknown_203B418; @@ -9,6 +10,83 @@ extern u32 gUnknown_202EDC8; extern u8 gUnknown_202E038[0x50]; extern u8 gAvailablePokemonNames[0x58]; +extern s16 gUnknown_80F57CA; +extern s16 gUnknown_80F57D2; +extern s16 gUnknown_80F57D0; +extern s16 gUnknown_80F57CE; + +extern u32 gUnknown_8103D8C; +extern u32 gUnknown_8103D98; +extern u32 gUnknown_8103DD8; +extern u32 gUnknown_8103E28; +extern u32 gUnknown_8103BD8; +extern u32 gUnknown_8103C00; +extern u32 gUnknown_8103C3C; +extern u32 gUnknown_8103C74; +extern u32 gUnknown_8103CC4; +extern u32 gUnknown_8103D0C; +extern u32 gUnknown_8103D50; +extern u32 gUnknown_8103B58; +extern u32 gUnknown_8103904; +extern u32 gUnknown_8103938; +extern u32 gUnknown_8103AA4; +extern u32 gUnknown_8103AE4; +extern u32 gUnknown_8103B30; +extern u32 gUnknown_8103690; +extern u32 gUnknown_8103844; +extern u32 gUnknown_8103874; +extern u32 gUnknown_81038A8; +extern u32 gUnknown_81038F8; +extern u32 gUnknown_8103500; +extern u32 gUnknown_810352C; +extern u32 gUnknown_8103578; +extern u32 gUnknown_81035D4; +extern u32 gUnknown_8103618; +extern u32 gUnknown_810367C; +extern u32 gUnknown_8103690; +extern u32 gUnknown_81036C8; +extern u32 gUnknown_81037A0; +extern u32 gUnknown_81037D4; +extern u32 gUnknown_8103820; +extern u32 gUnknown_8102C30; +extern u32 gUnknown_8102C54; +extern u32 gUnknown_8102C98; +extern u32 gUnknown_8102CB0; +extern u32 gUnknown_8102CF8; +extern u32 gUnknown_8102D34; +extern u32 gUnknown_8102D4C; +extern u32 gUnknown_8102D7C; +extern u32 gUnknown_8102DFC; +extern u32 gUnknown_8102E2C; +extern u32 gUnknown_8102E54; +extern u32 gUnknown_8102BE4; +extern u32 gUnknown_8102BC4; +extern u32 gUnknown_8102B54; +extern u32 gUnknown_8102B1C; +extern u32 gUnknown_8103488; +extern u32 gUnknown_81033A0; +extern u32 gUnknown_81033AC; +extern u32 gUnknown_810343C; +extern u32 gUnknown_810347C; +extern u32 gUnknown_8103188; +extern u32 gUnknown_8103228; +extern u32 gUnknown_8103310; +extern u32 gUnknown_8103340; +extern u32 gUnknown_8102E70; +extern u32 gUnknown_8102EBC; +extern u32 gUnknown_8102EE0; +extern u32 gUnknown_8102EF8; +extern u32 gUnknown_8102F30; +extern u32 gUnknown_8102F64; +extern u32 gUnknown_8102F84; +extern u32 gUnknown_8102FAC; +extern u32 gUnknown_8102FC4; +extern u32 gUnknown_8102FD8; +extern u32 gUnknown_8103054; +extern u32 gUnknown_81030D8; +extern u32 gUnknown_8103110; +extern u32 gUnknown_8103140; +extern u32 gUnknown_8102B10; extern u32 gUnknown_8105244; extern u32 gUnknown_810517C; extern u32 gUnknown_81050B4; @@ -89,11 +167,60 @@ extern u32 gUnknown_8103F0C; extern u32 gUnknown_8103F4C; extern u32 gUnknown_8103FCC; extern u32 gUnknown_8103E34; +extern u32 gUnknown_8102A9C; +extern u32 gUnknown_8102984; +extern u32 gUnknown_81029B4; +extern u32 gUnknown_8102A18; +extern u32 gUnknown_8102A24; +extern u32 gUnknown_8102A74; +extern u32 gUnknown_81028D4; +extern u32 gUnknown_8102918; +extern u32 gUnknown_8102948; +extern u32 gUnknown_8102478; +extern u32 gUnknown_81025B4; +extern u32 gUnknown_81025D4; +extern u32 gUnknown_8102610; +extern u32 gUnknown_81026C4; +extern u32 gUnknown_810270C; +extern u32 gUnknown_810272C; +extern u32 gUnknown_81027BC; +extern u32 gUnknown_8102810; +extern u32 gUnknown_8102840; +extern u32 gUnknown_810286C; +extern u32 gUnknown_81028B8; +extern u32 gUnknown_810232C; +extern u32 gUnknown_8102398; +extern u32 gUnknown_81023C4; +extern u32 gUnknown_8102400; +extern u32 gUnknown_8102454; +extern u32 gUnknown_8100D3C; +extern u32 gUnknown_8102158; +extern u32 gUnknown_8102190; +extern u32 gUnknown_8102200; +extern u32 gUnknown_8102254; +extern u32 gUnknown_81022F8; +extern u32 gUnknown_8101A9C; +extern u32 gUnknown_8101AD4; +extern u32 gUnknown_8101C30; +extern u32 gUnknown_8101CBC; +extern u32 gUnknown_8101D8C; +extern u32 gUnknown_8101DA0; +extern u32 gUnknown_8101E1C; +extern u32 gUnknown_8101EAC; +extern u32 gUnknown_8102070; +extern u32 gUnknown_81020A4; +extern u32 gUnknown_81020D4; +extern u32 gUnknown_8102108; +extern u32 gUnknown_810193C; +extern u32 gUnknown_8101970; +extern u32 gUnknown_8101994; +extern u32 gUnknown_81019E4; +extern u32 gUnknown_8101A04; +extern u32 gUnknown_8101A38; extern struct unkDungeon_8041D5C *sub_8085480(void); extern struct unkDungeon_8041D5C *sub_8085680(u32); extern void sub_808BBA8(struct unkDungeon_8041D5C * ); -extern void CopySpeciesNametoBuffer(char *r0, u32 r1); extern void sub_80855E4(void *); extern void sub_8041888(u32); extern void sub_80861B8(struct unkDungeon_8041D5C *, u32, u32); @@ -105,7 +232,7 @@ extern void sub_808BC20(struct unkDungeon_8041D5C *); extern void sub_80862BC(struct unkDungeon_8041D5C *); extern void sub_8086448(); -extern void sub_808696C(); +extern void SpriteLookAroundEffect(); extern u32 sub_80861F8(u32, struct unkDungeon_8041D5C *, u32); extern void sub_8086A70(struct unkDungeon_8041D5C *, u32, u32); extern void sub_80858AC(u32 *, u32); @@ -121,7 +248,7 @@ extern void sub_8085930(u32); extern void sub_8068FE0(struct unkDungeon_8041D5C *, u32, u32); extern void sub_8085918(struct unkDungeon_8041D5C *, u32); extern void sub_8049ED4(); -extern void sub_8085860(s16 r0, u32 r1); +extern void sub_8085860(s32 r0, u32 r1); extern void sub_806CE68(struct unkDungeon_8041D5C *, u32); extern void sub_8052D44(u8 *, struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *); @@ -134,7 +261,7 @@ extern void sub_808B1CC(u8); extern void sub_8090A8C(u8 *, u32, u32); extern void sub_80464C8(struct unkDungeon_8041D5C *, u32, u8 *); extern void sub_8098044(u32); -extern void sub_8083E38(u32); +extern void PlaySoundEffect(u32); extern void sub_8085C54(u32, u32, u32, u32, u32); extern void sub_803E46C(u32); extern void sub_8085EB0(); @@ -189,79 +316,6 @@ extern void sub_8083F14(); extern u8 sub_80450E0(struct unkDungeon_8041D5C *); extern u8 sub_8086AE4(u32); -extern u32 gUnknown_8103D8C; -extern u32 gUnknown_8103D98; -extern u32 gUnknown_8103DD8; -extern u32 gUnknown_8103E28; -extern u32 gUnknown_8103BD8; -extern u32 gUnknown_8103C00; -extern u32 gUnknown_8103C3C; -extern u32 gUnknown_8103C74; -extern u32 gUnknown_8103CC4; -extern u32 gUnknown_8103D0C; -extern u32 gUnknown_8103D50; -extern u32 gUnknown_8103B58; -extern u32 gUnknown_8103904; -extern u32 gUnknown_8103938; -extern u32 gUnknown_8103AA4; -extern u32 gUnknown_8103AE4; -extern u32 gUnknown_8103B30; -extern u32 gUnknown_8103690; -extern u32 gUnknown_8103844; -extern u32 gUnknown_8103874; -extern u32 gUnknown_81038A8; -extern u32 gUnknown_81038F8; -extern u32 gUnknown_8103500; -extern u32 gUnknown_810352C; -extern u32 gUnknown_8103578; -extern u32 gUnknown_81035D4; -extern u32 gUnknown_8103618; -extern u32 gUnknown_810367C; -extern u32 gUnknown_8103690; -extern u32 gUnknown_81036C8; -extern u32 gUnknown_81037A0; -extern u32 gUnknown_81037D4; -extern u32 gUnknown_8103820; -extern s16 gUnknown_80F57CA; -extern u32 gUnknown_8102C30; -extern u32 gUnknown_8102C54; -extern u32 gUnknown_8102C98; -extern u32 gUnknown_8102CB0; -extern u32 gUnknown_8102CF8; -extern u32 gUnknown_8102D34; -extern u32 gUnknown_8102D4C; -extern u32 gUnknown_8102D7C; -extern u32 gUnknown_8102DFC; -extern u32 gUnknown_8102E2C; -extern u32 gUnknown_8102E54; -extern u32 gUnknown_8102BE4; -extern u32 gUnknown_8102BC4; -extern u32 gUnknown_8102B54; -extern u32 gUnknown_8102B1C; -extern u32 gUnknown_8103488; -extern u32 gUnknown_81033A0; -extern u32 gUnknown_81033AC; -extern u32 gUnknown_810343C; -extern u32 gUnknown_810347C; -extern u32 gUnknown_8103188; -extern u32 gUnknown_8103228; -extern u32 gUnknown_8103310; -extern u32 gUnknown_8103340; -extern u32 gUnknown_8102E70; -extern u32 gUnknown_8102EBC; -extern u32 gUnknown_8102EE0; -extern u32 gUnknown_8102EF8; -extern u32 gUnknown_8102F30; -extern u32 gUnknown_8102F64; -extern u32 gUnknown_8102F84; -extern u32 gUnknown_8102FAC; -extern u32 gUnknown_8102FC4; -extern u32 gUnknown_8102FD8; -extern u32 gUnknown_8103054; -extern u32 gUnknown_81030D8; -extern u32 gUnknown_8103110; -extern u32 gUnknown_8103140; -extern s16 gUnknown_80F57D2; extern void sub_8072008(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, s16, u32, u32); extern struct unkDungeon_8041D5C *sub_808548C(); @@ -274,8 +328,6 @@ extern void sub_8085374(); extern void sub_8086848(u32 ,u32); extern void sub_80856C8(struct unkDungeon_8041D5C *, s32, s32); extern void sub_80861D4(struct unkDungeon_8041D5C *, u32, u32); -void sub_8088C08(struct unkDungeon_8041D5C * param_1); -void sub_8088CA0(void); extern void sub_8086738(); extern void sub_8086A54(struct unkDungeon_8041D5C *); extern void sub_8086764(); @@ -284,6 +336,867 @@ extern u32 sub_803F994(); extern s32 sub_803F9B0(); extern void sub_803F878(u32,s32); +void sub_8088C08(struct unkDungeon_8041D5C * param_1); +void sub_8088CA0(void); +void ArticunoScreenFlash(void); +void sub_8088484(struct unkDungeon_8041D5C *param_1); +void sub_8088574(void); + +void sub_8087D30(struct unkDungeon_8041D5C * param_1); +void sub_8087D80(s32 r0, s32 r1); +void sub_8087DE8(s32 r0, s32 r1); +void sub_8087EB0(void); +void sub_808654C(void); + +extern void sub_8086598(); +extern void sub_80865E8(); + + +extern void sub_8086500(void); +extern void sub_8086690(void); +void sub_8087F24(void); +extern void sub_808663C(void); +void sub_8087704(struct unkDungeon_8041D5C *param_1); +void sub_808775C(int param_1); + +extern u32 gUnknown_81017E4; +extern u32 gUnknown_81015A0; +extern u32 gUnknown_8101898; +extern u32 gUnknown_81018EC; +extern u32 gUnknown_8101918; + + +void ZapdosReFightDialogue(void) +{ + struct unkDungeon_8041D5C *iVar1; + struct unkDungeon_8041D5C *uVar2; + + iVar1 = sub_8085480(); + uVar2 = sub_8085680(8); + sub_8086448(); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_81017E4); + sub_803E708(10,0x46); + PlaySoundEffect(0x1da); + sub_8052910(&gUnknown_81015A0); + sub_803E708(10,0x46); + sub_8087704(uVar2); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_8101898); + sub_808775C(1); + sub_8052910(&gUnknown_81018EC); + sub_808775C(2); + sub_8052910(&gUnknown_8101918); + sub_8086A70(uVar2,300,0xb); + sub_80858AC(&iVar1->unkC,0x10); +} + +void ZapdosPostStoryPreFightDialogue(void) +{ + struct unkDungeon_8041D5C * iVar2; + struct unkDungeon_8041D5C * uVar3; + + iVar2 = sub_8085480(); + uVar3 = sub_8085680(8); + sub_8086448(); + if (sub_8086AE4(SPECIES_ZAPDOS)) { + sub_80866C4(&gUnknown_8101A38); + } + else { + sub_808775C(1); + PlaySoundEffect(0x1da); + sub_8052910(&gUnknown_810193C); + sub_8087704(uVar3); + sub_8052910(&gUnknown_8101970); + sub_808775C(1); + sub_8052910(&gUnknown_8101994); + sub_808775C(2); + sub_8052910(&gUnknown_81019E4); + sub_808775C(2); + sub_8052910(&gUnknown_8101A04); + sub_803E708(10,0x46); + sub_8086A70(uVar3,300,0xb); + sub_80858AC(&iVar2->unkC,0x10); + } +} + + +void sub_8087704(struct unkDungeon_8041D5C *param_1) +{ + int iVar1; + + param_1->unk70->unk15C = 1; + param_1->unk70->unk15E = 0; + param_1->unk70->unk174 = 200; + PlaySoundEffect(0x1ea); + for(iVar1 = 200; iVar1 >= 0; iVar1 -= 5) + { + param_1->unk70->unk174 = iVar1 * 256; + sub_803E46C(0x46); + } + sub_803E708(0x1e,0x46); +} + +void sub_808775C(int param_1) +{ + int iVar1; + int iVar2; + + PlaySoundEffect(0x1f6); + if (2 < param_1) { + for(iVar2 = 250; iVar2 > 199; iVar2 -= 10) + { + sub_8085C54(iVar2,iVar2,iVar2 / 2,1,1); + sub_803E46C(0x46); + } + } + if (1 < param_1) { + for(iVar2 = 250; iVar2 > 199; iVar2 -= 10) + { + sub_8085C54(iVar2,iVar2,iVar2 / 2,1,1); + sub_803E46C(0x46); + } + } + for(iVar2 = 250; iVar2 >= 0; iVar2 -= 10) + { + iVar1 = iVar2; + if (iVar2 < 0) { + iVar1 = iVar2 + 3; + } + sub_8085C54(iVar2,iVar2,iVar1 >> 2,1,1); + sub_803E46C(0x46); + } + sub_8085EB0(); +} + + + +void sub_80877E8(void) +{ + struct unkDungeon_8041D5C * iVar1; + struct unkDungeon_8041D5C * uVar2; + + iVar1 = sub_8085480(); + uVar2 = sub_8085680(9); + sub_8083E88(0x26); + sub_8085374(); + sub_80854D4(); + sub_8085930(6); + sub_80855E4(sub_8086A3C); + sub_8085918(uVar2,0); + sub_8086A3C(uVar2); + sub_8085860(iVar1->unk4 + -3,iVar1->unk6 + -2); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MOLTRES); +} + +void sub_8087848(void) +{ + struct unkDungeon_8041D5C *iVar2; + struct unkDungeon_8041D5C *uVar3; + + u32 uVar4; + s32 iVar3; + + iVar2 = sub_8085480(); + uVar3 = sub_8085680(9); + sub_8083E88(0x26); + sub_80854D4(); + sub_8085930(6); + sub_80855E4(sub_8086A3C); + if (sub_8086AE4(SPECIES_MOLTRES)) { + sub_8068FE0(uVar3,0x21c,0); + } + else { + sub_8072008(uVar3,uVar3,gUnknown_80F57CE,0,0); + sub_8085918(uVar3,0); + sub_8086A3C(uVar3); + } + sub_8085860(iVar2->unk4 - 5, iVar2->unk6); + uVar4 = sub_803F994(); + iVar3 = sub_803F9B0(); + sub_803F878(uVar4,iVar3 + -0x1000); + CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_MOLTRES); +} + + + +void sub_80878F4(char param_1, s32 param_2) +{ + if ((((param_2 * 0x1000000) + 0xF6000000U) >> 0x18 < 3) && (param_1 == 0x9)) { + sub_8097FA8(0x7); + gUnknown_203B418->unk2 = 1; + } +} + +void MoltresPreFightDialogue(void) +{ + struct unkDungeon_8041D5C *iVar1; + struct unkDungeon_8041D5C *uVar2; + struct unkDungeon_8041D5C *uVar3; + + iVar1 = sub_8085480(); + uVar2 = sub_808548C(); + uVar3 = sub_8085680(9); + sub_8087D80(0xc,5); + sub_8086500(); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_8101A9C); + sub_803E708(10,0x46); + sub_80869E4(uVar2,4,1,5); + sub_803E708(4,0x46); + SpriteLookAroundEffect(uVar2); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_8101AD4); + sub_803E708(10,0x46); + sub_8087D80(0xc,5); + sub_8087DE8(9,5); + sub_8052910(&gUnknown_8101C30); + sub_803E708(10,0x46); + sub_80869E4(uVar2,4,1,2); + sub_80869E4(iVar1,4,2,6); + sub_8052910(&gUnknown_8101CBC); + sub_803E708(10,0x46); + sub_80869E4(uVar2,4,2,6); + sub_8086690(); + sub_8052910(&gUnknown_8101D8C); + sub_803E708(10,0x46); + sub_8085930(5); + sub_803E708(4,0x46); + sub_8085930(4); + PlaySoundEffect(0x2f2); + sub_8083F14(); + sub_8087F24(); + sub_8052910(&gUnknown_8101DA0); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_8101E1C); + sub_803E708(10,0x46); + PlaySoundEffect(0x1cf); + sub_80856E0(uVar2,4); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_8101EAC); + sub_803E708(10,0x46); + sub_8087EB0(); + PlaySoundEffect(0x1da); + sub_8052910(&gUnknown_8102070); + sub_803E708(10,0x46); + sub_8087D80(9,5); + sub_8087DE8(0xb,5); + sub_8052910(&gUnknown_81020A4); + sub_803E708(10,0x46); + sub_8087D80(0xc,5); + sub_8087DE8(9,5); + sub_8087D30(uVar3); + sub_808663C(); + sub_8087EB0(); + sub_8052910(&gUnknown_81020D4); + sub_803E708(10,0x46); + sub_8087DE8(0xb,6); + sub_8052910(&gUnknown_8102108); + sub_803E708(10,0x46); + sub_8086A70(uVar3,400,0xb); + sub_80858AC(&iVar1->unkC,0x10); +} + + +void MoltresReFightDialogue(void) +{ + struct unkDungeon_8041D5C *iVar1; + struct unkDungeon_8041D5C *uVar2; + struct unkDungeon_8041D5C *uVar3; + + iVar1 = sub_8085480(); + uVar2 = sub_808548C(); + uVar3 = sub_8085680(9); + sub_8087D80(10,5); + sub_8086500(); + sub_803E708(10,0x46); + SpriteLookAroundEffect(uVar2); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_8102158); + sub_803E708(10,0x46); + sub_80869E4(uVar2,4,1,2); + sub_80869E4(iVar1,4,2,6); + sub_8052910(&gUnknown_8102190); + sub_803E708(10,0x46); + sub_80869E4(uVar2,4,2,6); + sub_80869E4(iVar1,4,2,6); + sub_8086690(); + sub_8087F24(); + sub_803E708(10,0x46); + sub_8085930(5); + sub_803E708(4,0x46); + sub_8085930(4); + sub_8087D30(uVar3); + sub_808663C(); + sub_8087EB0(); + sub_8052910(&gUnknown_8102200); + sub_803E708(10,0x46); + sub_8087DE8(0xb,6); + sub_8052910(&gUnknown_8102254); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_81022F8); + sub_803E708(10,0x46); + sub_8086A70(uVar3,400,0xb); + sub_80858AC(&iVar1->unkC,0x10); +} + +void MoltresPostStoryPreFightDialogue(void) +{ + struct unkDungeon_8041D5C * iVar2; + struct unkDungeon_8041D5C * uVar3; + + iVar2 = sub_8085480(); + uVar3 = sub_8085680(9); + sub_8087D80(0xc,5); + sub_808654C(); + if (sub_8086AE4(SPECIES_MOLTRES)) { + sub_8085930(5); + sub_803E708(4,0x46); + sub_8085930(4); + sub_803E708(4,0x46); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_8100D3C); + sub_803E708(10,0x46); + gUnknown_203B418->unk2 = 1; + } + else { + sub_8052910(&gUnknown_810232C); + sub_8085930(5); + sub_803E708(4,0x46); + sub_8085930(4); + sub_8087D30(uVar3); + sub_8052910(&gUnknown_8102398); + sub_8087D80(0xc,5); + sub_8087DE8(9,5); + sub_8052910(&gUnknown_81023C4); + sub_8087EB0(); + sub_8052910(&gUnknown_8102400); + sub_8087DE8(0xb,6); + sub_8052910(&gUnknown_8102454); + sub_803E708(10,0x46); + sub_8086A70(uVar3,400,0xb); + sub_80858AC(&iVar2->unkC,0x10); + } +} + +void sub_8087D30(struct unkDungeon_8041D5C * param_1) +{ + s32 iVar1; + + param_1->unk70->unk15C = 1; + param_1->unk70->unk15E = 0; + param_1->unk70->unk174 = 0xc800; + PlaySoundEffect(0x1f8); + iVar1 = 200; + for(iVar1 = 200; iVar1 >= 0; iVar1 -= 5) + { + param_1->unk70->unk174 = iVar1 << 8; + sub_803E46C(0x46); + } +} + +NAKED +void sub_8087D80(s32 r0, s32 r1) +{ + asm_unified("\tpush {lr}\n" + "\tsub sp, 0x8\n" + "\tadds r3, r1, 0\n" + "\tlsls r1, r0, 1\n" + "\tadds r1, r0\n" + "\tlsls r1, 11\n" + "\tmovs r2, 0xC0\n" + "\tlsls r2, 4\n" + "\tadds r0, r1, r2\n" + "\tcmp r0, 0\n" + "\tbge _08087D98\n" + "\tadds r0, 0xFF\n" +"_08087D98:\n" + "\tlsls r0, 8\n" + "\tlsrs r0, 16\n" + "\tldr r1, _08087DE0\n" + "\tldr r2, [sp, 0x4]\n" + "\tands r2, r1\n" + "\torrs r2, r0\n" + "\tstr r2, [sp, 0x4]\n" + "\tlsls r0, r3, 1\n" + "\tadds r0, r3\n" + "\tlsls r0, 11\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 5\n" + "\tadds r0, r1\n" + "\tcmp r0, 0\n" + "\tbge _08087DB8\n" + "\tadds r0, 0xFF\n" +"_08087DB8:\n" + "\tlsls r0, 8\n" + "\tlsrs r0, 16\n" + "\tlsls r0, 16\n" + "\tldr r1, _08087DE4\n" + "\tands r2, r1\n" + "\torrs r2, r0\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r0, 0xB9\n" + "\tlsls r0, 1\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r1, 0x10\n" + "\tmovs r2, 0\n" + "\tadd r3, sp, 0x4\n" + "\tbl sub_8085EC8\n" + "\tadd sp, 0x8\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08087DE0: .4byte 0xffff0000\n" +"_08087DE4: .4byte 0x0000ffff"); +} + +NAKED +void sub_8087DE8(s32 r0, s32 r1) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0x8\n" + "\tadds r3, r1, 0\n" + "\tlsls r1, r0, 1\n" + "\tadds r1, r0\n" + "\tlsls r1, 11\n" + "\tmovs r2, 0xC0\n" + "\tlsls r2, 4\n" + "\tadds r0, r1, r2\n" + "\tcmp r0, 0\n" + "\tbge _08087E00\n" + "\tadds r0, 0xFF\n" +"_08087E00:\n" + "\tlsls r0, 8\n" + "\tlsrs r0, 16\n" + "\tldr r1, _08087EA8\n" + "\tldr r2, [sp, 0x4]\n" + "\tands r2, r1\n" + "\torrs r2, r0\n" + "\tstr r2, [sp, 0x4]\n" + "\tlsls r0, r3, 1\n" + "\tadds r0, r3\n" + "\tlsls r0, 11\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 5\n" + "\tadds r0, r1\n" + "\tcmp r0, 0\n" + "\tbge _08087E20\n" + "\tadds r0, 0xFF\n" +"_08087E20:\n" + "\tlsls r0, 8\n" + "\tlsrs r0, 16\n" + "\tlsls r0, 16\n" + "\tldr r1, _08087EAC\n" + "\tands r2, r1\n" + "\torrs r2, r0\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r0, 0xB9\n" + "\tlsls r0, 1\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r1, 0x16\n" + "\tmovs r2, 0\n" + "\tadd r3, sp, 0x4\n" + "\tbl sub_8085EC8\n" + "\tadds r6, r0, 0\n" + "\tmovs r0, 0xF6\n" + "\tlsls r0, 1\n" + "\tbl PlaySoundEffect\n" + "\tmovs r4, 0xFA\n" + "\tmovs r5, 0x1\n" +"_08087E4E:\n" + "\tstr r5, [sp]\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x1\n" + "\tbl sub_8085C54\n" + "\tmovs r0, 0x46\n" + "\tbl sub_803E46C\n" + "\tsubs r4, 0xA\n" + "\tcmp r4, 0x13\n" + "\tbgt _08087E4E\n" + "\tmovs r0, 0xA\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tmovs r4, 0xFA\n" + "\tmovs r5, 0x1\n" +"_08087E74:\n" + "\tstr r5, [sp]\n" + "\tadds r0, r4, 0\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x1\n" + "\tbl sub_8085C54\n" + "\tmovs r0, 0x46\n" + "\tbl sub_803E46C\n" + "\tsubs r4, 0xA\n" + "\tcmp r4, 0\n" + "\tbge _08087E74\n" + "\tmovs r0, 0xA\n" + "\tmovs r1, 0x46\n" + "\tbl sub_803E708\n" + "\tbl sub_8085EB0\n" + "\tadds r0, r6, 0\n" + "\tbl sub_8085F44\n" + "\tadd sp, 0x8\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_08087EA8: .4byte 0xffff0000\n" +"_08087EAC: .4byte 0x0000ffff"); +} + +void sub_8087EB0(void) +{ + int iVar1; + + PlaySoundEffect(0x1ed); + iVar1 = 0xfa; + for(iVar1 = 250; iVar1 > 9; iVar1 -= 10) + { + sub_8085C54(iVar1,iVar1,iVar1 / 2,1,1); + sub_803E46C(0x46); + } + sub_803E708(0x1e,0x46); + PlaySoundEffect(0x1ed); + for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) + { + sub_8085C54(iVar1,iVar1,iVar1 / 2,1,1); + sub_803E46C(0x46); + } + sub_803E708(0x1e,0x46); + sub_8085EB0(); +} + +void sub_8087F24(void) +{ + s32 iVar1; + + for(iVar1 = 0; iVar1 >= -80; iVar1 -= 8) + { + sub_8085C54(iVar1,iVar1,iVar1,0,0); + sub_803E46C(0x46); + } +} + + +void sub_8087F54(void) +{ + struct unkDungeon_8041D5C *iVar2; + struct unkDungeon_8041D5C *uVar3; + + iVar2 = sub_8085480(); + uVar3 = sub_8085680(0xd); + sub_8083E88(0x72); + sub_8085374(); + sub_80854D4(); + sub_8085930(4); + sub_80855E4(sub_8086A3C); + sub_8085918(uVar3, 0); + sub_8086A3C(uVar3); + sub_8085860(iVar2->unk4,iVar2->unk6 + -3); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ARTICUNO); +} + +void sub_8087FB4(void) +{ + struct unkDungeon_8041D5C *iVar2; + + iVar2 = sub_8085680(0xd); + sub_8083E88(0x72); + sub_8085374(); + sub_80854D4(); + sub_8085930(4); + sub_8085918(iVar2, 0); + sub_806CDD4(iVar2, 0xF, 0); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ARTICUNO); +} + +void sub_8087FF8(void) +{ + struct unkDungeon_8041D5C *iVar2; + struct unkDungeon_8041D5C *uVar3; + + iVar2 = sub_8085480(); + uVar3 = sub_8085680(0xd); + sub_8085374(); + sub_80854D4(); + sub_8085930(4); + sub_80855E4(sub_8086A3C); + if (sub_8086AE4(SPECIES_ARTICUNO)) { + sub_8068FE0(uVar3,0x21c,0); + } + else { + sub_8072008(uVar3,uVar3,gUnknown_80F57D0,0,0); + sub_8085918(uVar3,0); + sub_8086A3C(uVar3); + } + sub_8085860(iVar2->unk4,iVar2->unk6 + -3); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ARTICUNO); +} + + + +void sub_8088088(char param_1, s32 param_2) +{ + if ((((param_2 * 0x1000000) + 0xF3000000U) >> 0x18 < 3) && (param_1 == 0xD)) { + sub_8097FA8(0x9); + gUnknown_203B418->unk2 = 1; + } +} + +void ArticunoPreFightDialogue(void) +{ + struct unkDungeon_8041D5C *iVar1; + struct unkDungeon_8041D5C *uVar2; + struct unkDungeon_8041D5C *uVar3; + + iVar1 = sub_8085480(); + uVar2 = sub_808548C(); + uVar3 = sub_8085680(0xd); + sub_8086448(); + SpriteLookAroundEffect(uVar2); + sub_8052910(&gUnknown_8102478); + sub_803E708(10,0x46); + sub_8086598(); + sub_8083F14(); + sub_8052910(&gUnknown_81025B4); + sub_803E708(10,0x46); + sub_80869E4(uVar2,4,1,2); + sub_80869E4(iVar1,4,2,6); + sub_8052910(&gUnknown_81025D4); + sub_803E708(10,0x46); + sub_8085918(iVar1,6); + sub_803E708(4,0x46); + sub_8085918(iVar1,5); + sub_803E708(4,0x46); + sub_8085918(iVar1,6); + sub_803E708(4,0x46); + sub_8085918(iVar1,7); + sub_803E708(4,0x46); + sub_8085918(iVar1,6); + sub_803E708(4,0x46); + sub_8085918(iVar1,5); + sub_803E708(4,0x46); + sub_8085918(iVar1,6); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_8102610); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_81026C4); + sub_803E708(10,0x46); + sub_80869E4(iVar1,4,1,4); + sub_80869E4(uVar2,4,2,4); + PlaySoundEffect(0x1d5); + SpriteLookAroundEffect(uVar2); + PlaySoundEffect(0x1d5); + SpriteLookAroundEffect(iVar1); + sub_8052910(&gUnknown_810270C); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_810272C); + sub_803E708(10,0x46); + PlaySoundEffect(0); // snow flurry + gUnknown_203B418->unkE265 = 7; + sub_807EAA0(0,1); + PlaySoundEffect(0x1ee); // flash effect? + sub_8088574(); + sub_8052910(&gUnknown_81027BC); + sub_803E708(10,0x46); + ArticunoScreenFlash(); + sub_8086738(); + PlaySoundEffect(0x1da); + sub_8052910(&gUnknown_8102810); + sub_803E708(10,0x46); + PlaySoundEffect(0x1ea); + sub_8088484(uVar3); + sub_80865E8(); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_8102840); + sub_806CDD4(uVar3,0xf,0); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_810286C); + sub_806CDD4(uVar3,0x10,0); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_81028B8); + sub_806CDD4(uVar3,0xf,0); + sub_803E708(0x10,0x46); + sub_8086A70(uVar3,0x1c2,0xb); + sub_80858AC(&iVar1->unkC,0x10); +} + +void ArticunoReFightDialogue(void) +{ + struct unkDungeon_8041D5C *iVar1; + struct unkDungeon_8041D5C *uVar2; + + iVar1 = sub_8085480(); + uVar2 = sub_8085680(0xd); + gUnknown_203B418->unkE265 = 7; + sub_807EAA0(0,1); + sub_803E708(10,0x46); + sub_8052910(&gUnknown_81028D4); + sub_806CDD4(uVar2,0x10,0); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_8102918); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_8102948); + sub_806CDD4(uVar2,0xf,0); + sub_803E708(0x28,0x46); + sub_8086A70(uVar2,0x1c2,0xb); + sub_80858AC(&iVar1->unkC,0x10); +} + +void ArticunoPostStoryPreFightDialogue(void) +{ + struct unkDungeon_8041D5C *iVar2; + struct unkDungeon_8041D5C *uVar3; + + iVar2 = sub_8085480(); + uVar3 = sub_8085680(0xd); + sub_8086448(); + if (sub_8086AE4(SPECIES_ARTICUNO)) { + sub_80866C4(&gUnknown_8102A9C); + } + else { + gUnknown_203B418->unkE265 = 7; + sub_807EAA0(0,1); + ArticunoScreenFlash(); + sub_8086738(); + PlaySoundEffect(0x1da); + sub_8052910(&gUnknown_8102984); + sub_803E708(10,0x46); + sub_8088484(uVar3); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_81029B4); + sub_806CDD4(uVar3,0xf,0); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_8102A18); + sub_806CDD4(uVar3,0x10,0); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_8102A24); + ArticunoScreenFlash(); + sub_8052910(&gUnknown_8102A74); + sub_806CDD4(uVar3,0xf,0); + sub_803E708(0x28,0x46); + sub_8086A70(uVar3,0x1c2,0xb); + sub_80858AC(&iVar2->unkC,0x10); + } +} + +void sub_8088484(struct unkDungeon_8041D5C *param_1) +{ + int iVar1; + + param_1->unk70->unk15C = 1; + param_1->unk70->unk15E = 0; + PlaySoundEffect(0x1ea); + for(iVar1 = 250; iVar1 >= 0; iVar1 -= 5) + { + param_1->unk70->unk174 = iVar1 * 256; + sub_8085C54(iVar1,iVar1,iVar1 / 2,1,0); + sub_803E46C(0x46); + } +} + +void ArticunoScreenFlash(void) +{ + int iVar1; + + PlaySoundEffect(0x2ad); + for(iVar1 = 250; iVar1 > 0x95; iVar1 -= 10) + { + sub_8085C54(iVar1 / 2,iVar1,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(4,0x46); + for(iVar1 = 250; iVar1 > 199; iVar1 -= 10) + { + sub_8085C54(0,iVar1,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(4,0x46); + for(iVar1 = 250; iVar1 >= 0; iVar1 -= 10) + { + sub_8085C54(iVar1 / 2,iVar1,iVar1,1,1); + sub_803E46C(0x46); + } + sub_803E708(4,0x46); + sub_8085EB0(); +} + +void sub_8088574(void) +{ + int iVar1; + + for(iVar1 = 0; iVar1 <= 80; iVar1 += 8) + { + sub_8085C54(iVar1,iVar1,iVar1,0,0); + sub_803E46C(0x46); + } +} + +void sub_80885A0(void) +{ + sub_8083ED8(0x3c); + sub_803E708(0x3c,0x46); + sub_8083F14(); + gUnknown_203B418->unk7 = 1; +} + +void sub_80885C4(void) +{ + struct unkDungeon_8041D5C * iVar1; + + iVar1 = sub_8085480(); + sub_8083ED8(0x3c); + sub_803E708(0x3c,0x46); + sub_8083F14(); + sub_80854D4(); + sub_8085930(4); + sub_80855E4(sub_8086A3C); + sub_8085860(iVar1->unk4,iVar1->unk6 - 3); +} + +void sub_8088608(void) +{ + gUnknown_203B418->unk2 = 1; +} + +void sub_8088618(void) +{ + sub_8086448(); + // The mountain's summit... + // But there is no one here + // It's time to go back + sub_80866C4(&gUnknown_8102B10); +} + +void sub_808862C(void) +{ + struct unkDungeon_8041D5C * iVar1; + struct unkDungeon_8041D5C * uVar2; + struct unkDungeon_8041D5C * uVar3; + + iVar1 = sub_8085480(); + uVar2 = sub_8085680(10); + uVar3 = sub_8085680(0xe); + sub_8083E88(0x72); + sub_80867F4(); + sub_8085374(); + sub_80854D4(); + sub_8085930(4); + sub_80855E4(sub_8086A3C); + sub_8085918(uVar2,4); + sub_80861D4(uVar2,0xd,4); + sub_8085918(uVar3,0); + sub_8086A3C(uVar3); + sub_8085860(iVar1->unk4,iVar1->unk6 -3); + CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON); + CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM); +} + void sub_80886C4(void) { struct unkDungeon_8041D5C * iVar1; @@ -296,7 +1209,7 @@ void sub_80886C4(void) iVar1 = sub_8085480(); uVar2 = sub_8085680(10); uVar3 = sub_8085680(0xe); - sub_8083E38(0x3e5); + PlaySoundEffect(0x3e5); sub_80867F4(); sub_8085374(); sub_80854D4(); @@ -326,7 +1239,7 @@ void sub_808875C(void) sub_8085930(4); sub_80855E4(sub_8086A3C); sub_8068FE0(uVar3,0x21c,0); - if (sub_8086AE4(0x19b) != '\0') { + if (sub_8086AE4(0x19b)) { sub_8068FE0(uVar4,0x21c,0); } else { @@ -386,14 +1299,14 @@ void GroudonPreFightDialogue(void) sub_803E708(10,0x46); sub_8052910(&gUnknown_8102F64); sub_803E708(10,0x46); - sub_8083E38(0x1d5); - sub_808696C(uVar2); + PlaySoundEffect(0x1d5); + SpriteLookAroundEffect(uVar2); sub_8052910(&gUnknown_8102F84); sub_803E708(10,0x46); sub_808682C(); sub_803E708(0x3c,0x46); sub_80861B8(uVar3,6,4); - sub_8083E38(0x205); + PlaySoundEffect(0x205); sub_8086738(); sub_8068FE0(uVar3,0x21c,0); sub_8052910(&gUnknown_8102FAC); @@ -403,8 +1316,8 @@ void GroudonPreFightDialogue(void) sub_8085930(4); sub_8086764(); sub_803E708(0x28,0x46); - sub_8083E38(0x1d5); - sub_808696C(uVar2); + PlaySoundEffect(0x1d5); + SpriteLookAroundEffect(uVar2); sub_8052910(&gUnknown_8102FD8); sub_803E708(10,0x46); sub_8086838(1,1,1); @@ -422,7 +1335,7 @@ void GroudonPreFightDialogue(void) sub_803E708(0x1e,0x46); sub_808682C(); sub_803E708(0x3c,0x46); - sub_8083E38(0x1fa); + PlaySoundEffect(0x1fa); sub_8086738(); sub_8085930(4); sub_8052910(&gUnknown_8103140); @@ -455,7 +1368,7 @@ void GroudonReFightDialogue(void) sub_808682C(); sub_803E708(0x3c,0x46); sub_8083F14(); - sub_8083E38(0x1fa); + PlaySoundEffect(0x1fa); sub_8086738(); sub_8052910(&gUnknown_8103340); sub_803E708(10,0x46); @@ -483,10 +1396,10 @@ void GroudonPostStoryPreFightDialogue(void) sub_8088C08(uVar3); sub_8088C08(uVar3); sub_8052910(&gUnknown_81033AC); - sub_8083E38(0x1f6); + PlaySoundEffect(0x1f6); sub_8088CA0(); sub_8052910(&gUnknown_810343C); - sub_8083E38(0x1f6); + PlaySoundEffect(0x1f6); sub_8088CA0(); sub_8052910(&gUnknown_810347C); sub_803E708(10,0x46); @@ -504,7 +1417,7 @@ void sub_8088C08(struct unkDungeon_8041D5C * param_1) for(iVar1 = 0; iVar1 < 0x2C; iVar1++) { if ((iVar1 == 10) || (iVar1 == 0x20)) { - sub_8083E38(0x1f9); + PlaySoundEffect(0x1f9); sub_8086838(0,1,0); sub_808680C(); } @@ -642,7 +1555,7 @@ void MagmaCavernMidDialogue(void) iVar4 = sub_8085680(0xc); sub_8052D44(auStack36,uVar1,uVar2); sub_8086448(); - sub_808696C(uVar2); + SpriteLookAroundEffect(uVar2); // Let's see.. // I wonder where we are? sub_8052910(&gUnknown_8102B1C); @@ -659,7 +1572,7 @@ void MagmaCavernMidDialogue(void) sub_8083F14(); sub_80855E4(sub_80868F4); sub_808680C(); - sub_8083E38(0x1c5); + PlaySoundEffect(0x1c5); sub_803E708(0x28,0x46); // Waaah! // Qu-quake! @@ -678,9 +1591,9 @@ void MagmaCavernMidDialogue(void) // It's over. sub_8052910(&gUnknown_8102BE4); sub_803E708(10,0x46); - sub_8083E38(0x1d5); - sub_808696C(uVar2); - sub_8083E38(0x1c7); + PlaySoundEffect(0x1d5); + SpriteLookAroundEffect(uVar2); + PlaySoundEffect(0x1c7); sub_80856E0(uVar2,4); // Hey! $m0! // Over there! @@ -721,8 +1634,8 @@ void MagmaCavernMidDialogue(void) // We... It crushed us sub_8052910(&gUnknown_8102D4C); sub_803E708(10,0x46); - sub_8083E38(0x1d5); - sub_808696C(uVar2); + PlaySoundEffect(0x1d5); + SpriteLookAroundEffect(uVar2); // That's right... // What happened to $m3? // Where is $m3? @@ -755,7 +1668,7 @@ void sub_8089168(void) iVar1 = sub_8085480(); sub_8086448(); sub_803E708(10,0x46); - sub_808696C(iVar1); + SpriteLookAroundEffect(iVar1); sub_803E708(10,0x46); sub_80858AC(&iVar1->unkC,0x10); } @@ -908,7 +1821,7 @@ void RayquazaPreFightDialogue(void) RayquazaScreenFlash(); sub_8052910(&gUnknown_810352C); sub_80856E0(uVar2,4); - sub_808696C(uVar2); + SpriteLookAroundEffect(uVar2); sub_803E708(10,0x46); sub_80869E4(uVar2,4,1,2); sub_80869E4(iVar1,4,2,6); @@ -921,7 +1834,7 @@ void RayquazaPreFightDialogue(void) sub_803E708(10,0x46); sub_8052910(&gUnknown_810367C); RayquazaScreenFlash(); - sub_8083E38(0x1da); // Rayquaza Cry + PlaySoundEffect(0x1da); // Rayquaza Cry sub_8052910(&gUnknown_8103690); sub_8089620(uVar3); sub_8052910(&gUnknown_81036C8); @@ -944,7 +1857,7 @@ void RayquazaReFightDialogue(void) uVar2 = sub_8085680(0xf); sub_8086448(); RayquazaScreenFlash(); - sub_8083E38(0x1da); // Rayquaza Cry + PlaySoundEffect(0x1da); // Rayquaza Cry sub_8052910(&gUnknown_8103690); sub_803E708(10,0x46); sub_8089620(uVar2); @@ -971,7 +1884,7 @@ void RayquazaPostStoryPreFightDialogue(void) sub_80866C4(&gUnknown_8103B58); } else { - sub_8083E38(0x1da); // Rayquaza Cry + PlaySoundEffect(0x1da); // Rayquaza Cry sub_8052910(&gUnknown_8103904); sub_8089620(uVar3); sub_8052910(&gUnknown_8103938); @@ -994,7 +1907,7 @@ void sub_8089620(struct unkDungeon_8041D5C *param_1) param_1->unk70->unk15E = 0; iVar2 = 51200; iVar1 = 0x600; - sub_8083E38(0x1f8); + PlaySoundEffect(0x1f8); while( 1 ) { iVar2 = iVar2 - iVar1; iVar1 = iVar1 -= 0x18; @@ -1012,7 +1925,7 @@ void RayquazaScreenFlash(void) { s32 iVar1; - sub_8083E38(0x1f6); + PlaySoundEffect(0x1f6); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { sub_8085C54(iVar1 / 2, iVar1, iVar1 / 2, 1, 1); @@ -1267,7 +2180,7 @@ void sub_8089B64(struct unkDungeon_8041D5C *param_1) param_1->unk70->unk15E = 0; iVar2 = 51200; iVar1 = 0x400; - sub_8083E38(0x1f8); + PlaySoundEffect(0x1f8); while( 1 ) { iVar2 = iVar2 - iVar1; iVar1 = iVar1 -= 11; @@ -1285,7 +2198,7 @@ void MewtwoScreenFlash(void) { int iVar1; - sub_8083E38(0x1f6); + PlaySoundEffect(0x1f6); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { sub_8085C54(iVar1,iVar1,iVar1,1,1); @@ -1416,7 +2329,7 @@ void EnteiScreenFlash(void) { s32 iVar1; - sub_8083E38(0x1ed); + PlaySoundEffect(0x1ed); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { sub_8085C54(iVar1, iVar1 / 2, iVar1 / 2, 1, 1); @@ -1572,7 +2485,7 @@ void RaikouScreenFlash(void) { s32 iVar1; - sub_8083E38(0x1f6); + PlaySoundEffect(0x1f6); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { sub_8085C54(iVar1,iVar1,iVar1,1,1); @@ -1729,7 +2642,7 @@ void sub_808A528(struct unkDungeon_8041D5C * param_1) param_1->unk70->unk15E = 0; iVar2 = 51200; iVar1 = 3072; - sub_8083E38(0x1f8); + PlaySoundEffect(0x1f8); while( 1 ) { iVar2 = iVar2 - iVar1; iVar1 -= 96; @@ -1747,7 +2660,7 @@ void SuicuneScreenFlash(void) { s32 iVar1; - sub_8083E38(0x1ee); + PlaySoundEffect(0x1ee); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { sub_8085C54(iVar1,iVar1,iVar1,1,1); @@ -1843,7 +2756,7 @@ void HoOhPreFightDialogue(void) sub_803E708(10,70); sub_80855E4(sub_80868F4); sub_808680C(); - sub_8083E38(0x1c5); + PlaySoundEffect(0x1c5); sub_803E708(0xfa,70); sub_808A904(uVar2); sub_8083E58(0x1c5); @@ -1908,7 +2821,7 @@ void sub_808A904(struct unkDungeon_8041D5C * param_1) param_1->unk70->unk15E = 0; iVar2 = 51200; iVar1 = 3072; - sub_8083E38(0x1f8); + PlaySoundEffect(0x1f8); while( 1 ) { iVar2 = iVar2 - iVar1; iVar1 -= 96; @@ -1926,7 +2839,7 @@ void HoOhScreenFlash(void) { s32 iVar1; - sub_8083E38(0x1ed); + PlaySoundEffect(0x1ed); for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { sub_8085C54(iVar1,iVar1,iVar1,1,1); @@ -2065,7 +2978,7 @@ void LatiosScreenFlash(void) { s32 iVar1; - sub_8083E38(0x1ee); + PlaySoundEffect(0x1ee); gUnknown_202EDC8 = 0x1f; for(iVar1 = 250; iVar1 > 149; iVar1 -= 10) { @@ -2616,7 +3529,7 @@ void JirachiPreFightDialogue(void) sub_803E708(0x40,70); sub_8052910(&gUnknown_8105438); sub_803E708(10,70); - sub_808696C(iVar1); + SpriteLookAroundEffect(iVar1); sub_803E708(10,70); sub_8052910(&gUnknown_81054A0); sub_80861F8(0x37,uVar2,1); diff --git a/src/code_808DAB4.c b/src/code_808DAB4.c index 1762397..f606355 100644 --- a/src/code_808DAB4.c +++ b/src/code_808DAB4.c @@ -10,12 +10,12 @@ struct unkStruct_203B45C u8 array[0x53]; }; -extern struct unkStruct_203B45C *gUnknown_203B45C; +extern struct unkStruct_203B45C *gRecruitedPokemonRef; extern void sub_808DE50(void* r0, struct unkStruct_203B45C *r1, u32 r2, u32 r3); void sub_808DE30(void* r0, u32 r1) { - sub_808DE50(r0, &gUnknown_203B45C[r1], r1, r1 * sizeof(struct unkStruct_203B45C)); + sub_808DE50(r0, &gRecruitedPokemonRef[r1], r1, r1 * sizeof(struct unkStruct_203B45C)); } @@ -32,9 +32,9 @@ u32 sub_800CDE0(void) return 1; } -void CpuCopy(void* src, void *dest, s32 size) +void CpuCopy(void* dest, void *src, s32 size) { - CpuCopy32(dest, src, size); + CpuCopy32(src, dest, size); } void CpuClear(void* dest, s32 size) @@ -42,9 +42,9 @@ void CpuClear(void* dest, s32 size) CpuFill32(NULL, dest, size); } -void CpuFill(void* src, void *dest, s32 size) +void CpuFill(void* dest, void *value, s32 size) { - CpuFill32(dest, src, size); + CpuFill32(value, dest, size); } #ifdef NONMATCHING diff --git a/src/data/pelipper_help_guide_dialogue.h b/src/data/pelipper_help_guide_dialogue.h new file mode 100644 index 0000000..678be4f --- /dev/null +++ b/src/data/pelipper_help_guide_dialogue.h @@ -0,0 +1,187 @@ +ALIGNED(4) const char gWhatdYouWantToKnow[] = + _(" So~2c what~27d you want to\n" + "know?"); + +ALIGNED(4) const char gGettingHelpExplaination[] = + _(" If you need to call for\n" + "help~2c first send your friend\n" + "an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " Once you send that mail~2c\n" + "wait until your friend sends you back\n" + "an {COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " When you get that\n" + "{COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1} back~2c your team\n" + "can continue from where it went down.{EXTRA_MSG}" + " Make sure you send your\n" + "friend a {COLOR_1 LIGHT_BLUE_2}Thank-You Mail{END_COLOR_TEXT_1}.\n" + "That~27s if you get revived~2c of course."); + +ALIGNED(4) const char gSendSOSMailExplaination[] = + _(" If your team gets defeated\n" + "in a dungeon~2c you can send an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}\n" + "to a friend willing to help.{EXTRA_MSG}" + " But I have to warn you.\n" + "You can~27t get anyone to rescue you\n" + "in certain places.{EXTRA_MSG}" + " If you need to send\n" + "an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}~2c you send it from the\n" + "{COLOR_1 LIGHT_BLUE_2}main menu{END_COLOR_TEXT_1}."); + +ALIGNED(4) const char gReceiveAOKMailExplaination[] = + _(" If your friend manages to\n" + "rescue your team~2c you need to receive\n" + "an {COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1} from your friend.{EXTRA_MSG}" + " See~2c once you get that\n" + "{COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1}~2c your team can continue from\n" + "where it went down in the dungeon.{EXTRA_MSG}" + " And~2c if you use\n" + "a {COLOR_1 LIGHT_BLUE_2}Game Link cable{END_COLOR_TEXT_1}~2c your friend can\n" + "even send you a {COLOR_1 LIGHT_BLUE_2}helper Pokémon{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " There~27s just one thing.\n" + "A {COLOR_1 LIGHT_BLUE_2}helper Pokémon{END_COLOR_TEXT_1} can~27t bring\n" + "any item it happens to be holding.{EXTRA_MSG}" + " You can receive that\n" + "team-saving {COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1} on the {COLOR_1 LIGHT_BLUE_2}main menu{END_COLOR_TEXT_1}~2c\n" + "all right?"); + +ALIGNED(4) const char gSendThankYouMailExplaination[] = + _(" If your team gets rescued~2c\n" + "be sure to send your friend\n" + "a {COLOR_1 LIGHT_BLUE_2}Thank-You Mail{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " You do that by going to\n" + "the {COLOR_1 LIGHT_BLUE_2}right counter{END_COLOR_TEXT_1}~2c or\n" + "by selecting it from the {COLOR_1 LIGHT_BLUE_2}main menu{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " You can attach an item in\n" + "storage to your {COLOR_1 LIGHT_BLUE_2}Thank-You Mail{END_COLOR_TEXT_1}\n" + "as a {COLOR_1 LIGHT_BLUE_2}reward item{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " You don~27t want to ever\n" + "forget to express your thanks."); + +ALIGNED(4) const char gRescueProceduresExplaination[] = + _(" If you want to go and\n" + "rescue your friend~27s KO~27d team~2c\n" + "you need to receive an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " When you get that mail~2c\n" + "you can rescue your friend at\n" + "the {COLOR_1 LIGHT_BLUE_2}left counter{END_COLOR_TEXT_1} over there.{EXTRA_MSG}" + " If you do manage to rescue\n" + "the team~2c you send your friend\n" + "an {COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " After you do that~2c your\n" + "friend can send back to you\n" + "a {COLOR_1 LIGHT_BLUE_2}Thank-You Mail{END_COLOR_TEXT_1}."); + +ALIGNED(4) const char gReceiveSOSMailExplaination[] = + _(" To go off on a rescue~2c\n" + "you first need to receive your friend~27s\n" + "{COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " You do that at\n" + "the {COLOR_1 LIGHT_BLUE_2}left counter{END_COLOR_TEXT_1} over there~2c\n" + "or by selecting it from the {COLOR_1 LIGHT_BLUE_2}main menu{END_COLOR_TEXT_1}."); + +ALIGNED(4) const char gSendAOKMailExplaination[] = + _(" If you succeed in rescuing\n" + "that team~2c you send your friend an\n" + "{COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " You do that by going to\n" + "the {COLOR_1 LIGHT_BLUE_2}left counter{END_COLOR_TEXT_1}~2c\n" + "or from the {COLOR_1 LIGHT_BLUE_2}main menu{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " You can send your friend\n" + "a Pokémon as a helper from your Friend\n" + "Areas using a {COLOR_1 LIGHT_BLUE_2}Game Link cable{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " This Pokémon won~27t\n" + "disappear from its Friend Area~2c so\n" + "don~27t you worry any."); + +ALIGNED(4) const char gLeaveForRescueExplaination[] = + _(" If you get an {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}~2c\n" + "you head off on the rescue from\n" + "the {COLOR_1 LIGHT_BLUE_2}left counter{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " But~2c I have to warn you.\n" + "You can~27t go off to rescue in a dungeon\n" + "if you can~27t get into it.{EXTRA_MSG}" + " You~27ll be able to get\n" + "there when you go farther in your\n" + "adventure~2c so it won~27t do to fret."); + +ALIGNED(4) const char gGetThankYouMailExplaination[] = + _(" If you send your friend\n" + "an {COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1}~2c you can look forward\n" + "to getting a {COLOR_1 LIGHT_BLUE_2}Thank-You Mail{END_COLOR_TEXT_1} back.{EXTRA_MSG}" + " You can receive it at\n" + "the {COLOR_1 LIGHT_BLUE_2}right counter{END_COLOR_TEXT_1}\n" + "or on the {COLOR_1 LIGHT_BLUE_2}main menu{END_COLOR_TEXT_1}.{EXTRA_MSG}" + " But you need to {COLOR_1 RED}be careful{END_COLOR_TEXT_1}.\n" + "You {COLOR_1 RED}must not delete the A-OK Mail{END_COLOR_TEXT_1}\n" + "before you get the {COLOR_1 LIGHT_BLUE_2}Thank-You Mail{END_COLOR_TEXT_1} back."); + +ALIGNED(4) const char gImYourGuide[] = + _(" I~27m your guide to what you\n" + "can expect at the Pelipper Post Office.\n" + "If you have any questions~2c just ask away!"); + +ALIGNED(4) const char gAnythingElse[] = + _(" Did you want to ask about\n" + "anything else?"); + +ALIGNED(4) const char gPostOfficeExplaination[] = + _(" {COLOR_1 LIGHT_BLUE_2}The Pelipper Post Office{END_COLOR_TEXT_1}\n" + "keeps track of information from\n" + "around the world.{EXTRA_MSG}" + " We inform folks\n" + "about everything from gossip to calls\n" + "for help from fellow Pokémon.{EXTRA_MSG}" + " For the latest news~2c check\n" + "{COLOR_1 LIGHT_BLUE_2}your Mailbox{END_COLOR_TEXT_1} or the {COLOR_1 LIGHT_BLUE_2}Bulletin Board{END_COLOR_TEXT_1}\n" + "outside~2c all right?{EXTRA_MSG}" + " Oh~2c that~27s not all.\n" + "You can arrange for {COLOR_1 LIGHT_BLUE_2}Friend Rescue{END_COLOR_TEXT_1}\n" + "missions at that counter there.{EXTRA_MSG}" + " The {COLOR_1 LIGHT_BLUE_2}left counter{END_COLOR_TEXT_1} is\n" + "for rescues~2c and the {COLOR_1 LIGHT_BLUE_2}right counter{END_COLOR_TEXT_1}\n" + "is for Thank-You Mail."); + +ALIGNED(4) const char gBulletinBoardExplaination[] = + _(" The {COLOR_1 LIGHT_BLUE_2}Bulletin Board{END_COLOR_TEXT_1} outside\n" + "here lists rescue requests.{EXTRA_MSG}" + " Take on rescue jobs from\n" + "the Bulletin Board. Be a hero and handle\n" + "the jobs for fellow Pokémon in need!"); + +ALIGNED(4) const char gDeliveryExplaination[] = + _(" If your rescue team\n" + "becomes famous for doing lots of rescues~2c\n" + "expect to get rescue requests directly.{EXTRA_MSG}" + " Our delivery $m0\n" + "will take those jobs straight to your\n" + "{COLOR_1 LIGHT_BLUE_2}Mailbox{END_COLOR_TEXT_1}."); + +ALIGNED(4) const char gFriendRescueExplaination[] = + _(" Friend Rescue is what we\n" + "call rescue missions between friends using\n" + "a {COLOR_1 LIGHT_BLUE_2}Game Link cable{END_COLOR_TEXT_1}~2c {COLOR_1 LIGHT_BLUE_2}passwords{END_COLOR_TEXT_1}~2c etc.{EXTRA_MSG}" + " For instance~2c you can send\n" + "out for help saying your team wiped out\n" + "in a dungeon at such and such a place.{EXTRA_MSG}" + " Your friend could play\n" + "the hero and come to your team~27s rescue.\n" + "Or it can be the other way around~2c too.{EXTRA_MSG}" + " If you use {COLOR_1 LIGHT_BLUE_2}passwords{END_COLOR_TEXT_1}~2c\n" + "you can do rescues with friends in\n" + "far-away places.{EXTRA_MSG}" + " You can apply for Friend\n" + "Rescue jobs at the {COLOR_1 LIGHT_BLUE_2}left counter{END_COLOR_TEXT_1} of\n" + "that counter there."); + +ALIGNED(4) const char gDeletingMailExplaination[] = + _(" Deleting mail just means\n" + "getting rid of old mail that you don~27t\n" + "need anymore.{EXTRA_MSG}" + " If you do lots of Friend\n" + "Rescues~2c you~27ll find {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1} and\n" + "{COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1} piling up.{EXTRA_MSG}" + " Once you get {COLOR_1 LIGHT_BLUE_2}30 pieces{END_COLOR_TEXT_1}~2c\n" + "you won~27t be able to receive more mail.\n" + "That~27s why you~27ll need to delete old mail.{EXTRA_MSG}" + " You can look through old\n" + "mail at the {COLOR_1 LIGHT_BLUE_2}left counter{END_COLOR_TEXT_1} over there."); diff --git a/src/debug_menu.c b/src/debug_menu.c index 19561c2..3fa662c 100644 --- a/src/debug_menu.c +++ b/src/debug_menu.c @@ -1,37 +1,72 @@ #include "global.h" #include "debug_menu.h" #include "main_menu.h" +#include "menu.h" -struct unkData +extern struct DebugMenu *gUnknown_203B3EC; + +const struct unkData gUnknown_80E7D40 = { - u8 unk0[24]; + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 }; - -struct DebugMenu +const struct unkData gUnknown_80E7D58 = { - // size: 0x1A4 - u8 fill0[0x140]; - /* 0x140 */ struct unkData unk140[4]; + 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x00, + 0x09, 0x00, 0x0b, 0x00, + 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 }; -extern struct DebugMenu *gUnknown_203B3EC; -extern struct unkData gUnknown_80E7D40; -struct MenuItem +extern const char dungeons_string[]; +extern const char field_string[]; +extern const char field_map_string[]; +extern const char field_script_string[]; +extern const char debug_menu_string[]; +extern const char storage_string[]; +extern const char h_open_string[]; + + +const struct MenuItem gDebugMenuItems[8] = { - const char *text; - u32 menuAction; // action?? + {dungeons_string, MENU_DEBUG_MENU_DUNGEONS}, + {field_string, MENU_DEBUG_MENU_FIELD}, + {field_map_string, MENU_DEBUG_MENU_FIELD_MAP}, + {field_script_string, MENU_DEBUG_MENU_FIELD_SCRIPT}, + {debug_menu_string, MENU_DEBUG_MENU_DEBUG_MENU}, + {storage_string, MENU_DEBUG_MENU_STORAGE}, + {h_open_string, MENU_DEBUG_MENU_H_OPEN}, + {NULL, 10}, }; +ALIGNED(4) const char h_open_string[] = _("h-open"); +ALIGNED(4) const char storage_string[] = _("Storage"); +ALIGNED(4) const char debug_menu_string[] = _("Debug Menu"); +ALIGNED(4) const char field_script_string[] = _("Field Script"); +ALIGNED(4) const char field_map_string[] = _("Field Map"); +ALIGNED(4) const char field_string[] = _("Field"); +ALIGNED(4) const char dungeons_string[] = _("Dungeons"); +ALIGNED(4) const char debug_fill0[] = _("pksdir0"); +ALIGNED(4) const char debug_fill1[] = _("pksdir0"); +ALIGNED(4) const char debug_fill2[] = _("pksdir0"); +ALIGNED(4) const char debug_fill3[] = _("pksdir0"); +ALIGNED(4) const char debug_fill4[] = _("pksdir0"); +ALIGNED(4) const char debug_fill5[] = _("pksdir0"); +ALIGNED(4) const char debug_fill6[] = _("pksdir0"); -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 sub_800641C(struct unkData *, u32, u32); extern void ResetUnusedInputStruct(void); extern u8 sub_8012FD8(struct DebugMenu *); @@ -40,7 +75,7 @@ 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 SetMenuItems(void *menu, struct unkData *, u32, const struct unkData *, const struct MenuItem *entries, u32, u32, u32); extern void sub_8035CF4(struct DebugMenu *, u32, u32); extern void sub_8035CC0(struct unkData *, u32); @@ -49,14 +84,14 @@ void CreateDebugMenu(void) int iVar2; if (gUnknown_203B3EC == NULL) { - gUnknown_203B3EC = MemoryAlloc(0x1a4, 8); - MemoryFill8((u8 *)gUnknown_203B3EC, 0, 0x1a4); + gUnknown_203B3EC = MemoryAlloc(sizeof(struct DebugMenu), 8); + MemoryFill8((u8 *)gUnknown_203B3EC, 0, sizeof(struct DebugMenu)); } for(iVar2 = 0; iVar2 < 4; iVar2++){ gUnknown_203B3EC->unk140[iVar2] = gUnknown_80E7D40; } ResetUnusedInputStruct(); - sub_800641C(&gUnknown_203B3EC->unk140, 1, 1); + sub_800641C(gUnknown_203B3EC->unk140, 1, 1); SetDebugMenuItems(); } @@ -125,7 +160,7 @@ u32 UpdateDebugMenu(void) void SetDebugMenuItems(void) { - SetMenuItems(gUnknown_203B3EC, gUnknown_203B3EC->unk140, 0, gUnknown_80E7D58, gDebugMenuItems, 1, 0xd, 0); + SetMenuItems(gUnknown_203B3EC, gUnknown_203B3EC->unk140, 0, &gUnknown_80E7D58, gDebugMenuItems, 1, 0xd, 0); sub_8035CF4(gUnknown_203B3EC,0,1); } diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c index 7bd3d74..8ca2cbd 100644 --- a/src/debug_menu_mid.c +++ b/src/debug_menu_mid.c @@ -1,15 +1,13 @@ #include "global.h" #include "input.h" +#include "gUnknown_203B460.h" struct unkData { - u8 unk0[14]; - u16 unkD; - u16 unk10; - u16 unk12; - u8 *unk14; + u8 unk0[24]; }; + struct unkStruct_203B3F0 { // size: 0x138 @@ -63,12 +61,7 @@ struct unkStruct_203B3F4 extern struct unkStruct_203B3F4 *gUnknown_203B3F4; -struct unkStruct_203B460 -{ - u8 unk0[0x50]; - u16 unk50[10]; -}; -extern struct unkStruct_203B460 *gUnknown_203B460; // TODO unify this +extern struct unkStruct_203B460 *gUnknown_203B460; extern void sub_801B3C0(u8 *); extern void sub_8090A8C(u8 *, u8, u32); extern void sub_8013AA0(u32 *); @@ -80,7 +73,6 @@ extern struct unkData gUnknown_80E7EA4; extern struct unkData gUnknown_80E7E8C; extern u32 gDebug_NumberText; -extern u32 gDebug_NumberText; extern u32 gUnknown_80D4970; @@ -357,7 +349,7 @@ u32 sub_803A888(void) { ResetUnusedInputStruct(); sub_800641C(0, 1, 1); - gUnknown_203B3F4 = MemoryAlloc(0xFC, 8); + gUnknown_203B3F4 = MemoryAlloc(sizeof(struct unkStruct_203B3F4), 8); sub_803A924(0); return 1; } diff --git a/src/event_flag.c b/src/event_flag.c index 91c5f87..97a01d0 100644 --- a/src/event_flag.c +++ b/src/event_flag.c @@ -13,7 +13,7 @@ struct unkEventStruct u8 unk2; // Seems like friend area number }; -struct unkEventStruct gUnknown_80B71E4[100]; // TODO figure out size of this +extern struct unkEventStruct gUnknown_80B71E4[100]; // TODO figure out size of this extern u8 gUnknown_2000A88[0x400]; diff --git a/src/felicity_bank.c b/src/felicity_bank.c new file mode 100644 index 0000000..3bd3620 --- /dev/null +++ b/src/felicity_bank.c @@ -0,0 +1,144 @@ +#include "global.h" +#include "pokemon.h" +#include "file_system.h" +#include "input.h" +#include "constants/species.h" +#include "felicity_bank.h" + +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; + +extern struct unkStruct_203B204 *gUnknown_203B204; +extern struct unkData gUnknown_80DB6DC; +extern struct unkData gUnknown_80DB6F4; +extern struct unkData gUnknown_80DB70C; + +extern void *MemoryAlloc(u32, u32); +extern void MemoryFree(void *); +extern void sub_800641C(struct unkData *, u32, u32); +extern void sub_8006518(struct unkData *); +extern void sub_8016B24(); +extern void sub_80169BC(); +extern void Felicity_DepositMoney(); +extern void Felicity_WithdrawMoney(); +extern void sub_8016B00(); +extern void sub_801645C(); +extern void UpdateFelicityBankDialogue(); + +void UpdateFelicityBankState(u32); + +u32 CreateFelicityBank(s32 param_1) +{ + char *monName; + struct OpenedFile * faceFile; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B204 = MemoryAlloc(sizeof(struct unkStruct_203B204),8); + gUnknown_203B204->unk10 = 0; + gUnknown_203B204->unk0 = param_1; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PERSIAN); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_PERSIAN); + monName = GetMonSpecies(SPECIES_PERSIAN); + strcpy(gUnknown_202E1C8 - 0x50, monName); + if (gUnknown_203B204->unk0 == 1) { + gUnknown_203B204->unkA4 = NULL; + } + else { + gUnknown_203B204->unkA4 = &gUnknown_203B204->faceFile; + } + faceFile = GetDialogueSpriteDataPtr(SPECIES_PERSIAN); + gUnknown_203B204->faceFile = faceFile; + gUnknown_203B204->faceData = faceFile->data; + gUnknown_203B204->unkA0 = 0; + gUnknown_203B204->unkA1 = 0; + gUnknown_203B204->unkA2 = 0; + gUnknown_203B204->unk9C = 2; + gUnknown_203B204->unk9E = 8; + UpdateFelicityBankState(0); + return 1; +} + +u32 sub_80163A0(void) +{ + switch(gUnknown_203B204->currState) { + case 1: + sub_8016B24(); + break; + case 2: + sub_80169BC(); + break; + case 8: + Felicity_DepositMoney(); + break; + case 11: + Felicity_WithdrawMoney(); + break; + case 6: + return 3; + case 0: + case 3: + case 4: + case 5: + case 7: + case 9: + case 10: + case 12: + default: + sub_8016B00(); + break; + } + return 0; +} + +void CleanFelicityBank(void) +{ + if(gUnknown_203B204 != NULL) + { + CloseFile(gUnknown_203B204->faceFile); + MemoryFree(gUnknown_203B204); + gUnknown_203B204 = NULL; + } +} + +void UpdateFelicityBankState(u32 newState) +{ + gUnknown_203B204->currState = newState; + sub_801645C(); + UpdateFelicityBankDialogue(); +} + +void sub_801645C(void) +{ + s32 uVar3; + + sub_8006518(gUnknown_203B204->unkA8); + switch(gUnknown_203B204->currState) + { + case 2: + gUnknown_203B204->unkA8[0].unk0[0] = 0x80; + gUnknown_203B204->unkA8[1].unk0[0] = 0x80; + gUnknown_203B204->unkA8[2].unk0[0] = 0x80; + gUnknown_203B204->unkA8[3] = gUnknown_80DB6F4; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B204->unkA8, 1, 0); + break; + case 8: + case 11: + gUnknown_203B204->unkA8[0].unk0[0] = 0x80; + gUnknown_203B204->unkA8[1].unk0[0] = 0x80; + gUnknown_203B204->unkA8[3] = gUnknown_80DB6F4; + gUnknown_203B204->unkA8[2] = gUnknown_80DB70C; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B204->unkA8, 1, 0); + break; + default: + for(uVar3 = 0; uVar3 < 4; uVar3++) + { + gUnknown_203B204->unkA8[uVar3] = gUnknown_80DB6DC; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B204->unkA8, 1, 1); + break; + } +} diff --git a/src/felicity_bank_1.c b/src/felicity_bank_1.c new file mode 100644 index 0000000..171397b --- /dev/null +++ b/src/felicity_bank_1.c @@ -0,0 +1,149 @@ +#include "global.h" +#include "gUnknown_203B460.h" +#include "felicity_bank.h" + +extern struct unkStruct_203B460 *gUnknown_203B460; +extern struct unkStruct_203B204 *gUnknown_203B204; + +extern u8 gUnknown_80DB738; +extern u8 gFelicityMoney[]; +extern u8 gFelicitySavings[]; +extern u8 *gFelicityWithdraw; +extern u8 *gFelicityDeposit; + +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void xxx_call_draw_string(s32 x, u32 y, u8 *, u32 , u32); +extern void sub_8012BC4(u32 x, u32 y, u32, u32, u32, u32); +extern void sub_80073E0(u32); +extern void sub_8013C68(u32 *); +extern s32 sub_80144A4(s32 *); +extern void UpdateFelicityBankState(u32); +extern void PlaySound(u32); + +extern u32 sub_8013BBC(u32 *); +void sub_8016B48(u8 action); + +#define FELICITY_BANK_ACTION_WITHDRAW 0 +#define FELICITY_BANK_ACTION_DEPOSIT 1 + +void sub_80169BC(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + gUnknown_203B204->unk10 = temp; + switch(temp) + { + case 2: + UpdateFelicityBankState(7); + break; + case 3: + UpdateFelicityBankState(10); + break; + case 4: + UpdateFelicityBankState(3); + break; + case 1: + UpdateFelicityBankState(4); + break; + } + } +} + +void Felicity_DepositMoney(void) +{ + switch(sub_8013BBC(&gUnknown_203B204->unk64)) + { + case 1: + sub_8016B48(FELICITY_BANK_ACTION_DEPOSIT); + break; + case 3: + gUnknown_203B204->chosenAmount = gUnknown_203B204->unk64; + gUnknown_203B460->teamSavings += gUnknown_203B204->chosenAmount; + gUnknown_203B460->teamMoney -= gUnknown_203B204->chosenAmount; + PlaySound(0x14c); + UpdateFelicityBankState(9); + break; + case 2: + UpdateFelicityBankState(5); + break; + case 0: + break; + } +} + +void Felicity_WithdrawMoney(void) +{ + switch(sub_8013BBC(&gUnknown_203B204->unk64)) + { + case 1: + sub_8016B48(FELICITY_BANK_ACTION_WITHDRAW); + break; + case 3: + gUnknown_203B204->chosenAmount = gUnknown_203B204->unk64; + gUnknown_203B460->teamMoney += gUnknown_203B204->chosenAmount; + gUnknown_203B460->teamSavings -= gUnknown_203B204->chosenAmount; + PlaySound(0x14c); + UpdateFelicityBankState(0xc); + break; + case 2: + UpdateFelicityBankState(5); + break; + case 0: + break; + } +} + +void sub_8016B00(void) +{ + s32 auStack8; + + if (sub_80144A4(&auStack8) == 0) { + UpdateFelicityBankState(gUnknown_203B204->unk8); + } +} + +void sub_8016B24(void) +{ + s32 auStack8; + + if (sub_80144A4(&auStack8) == 4) { + UpdateFelicityBankState(gUnknown_203B204->unk8); + } +} + +void sub_8016B48(u8 action) +{ + + sub_8008C54(gUnknown_203B204->unk78); + sub_80073B8(gUnknown_203B204->unk78); + if (action != FELICITY_BANK_ACTION_WITHDRAW) { + xxx_call_draw_string(12,0,gFelicityDeposit,gUnknown_203B204->unk78,0); + } + else { + xxx_call_draw_string(12,0,gFelicityWithdraw,gUnknown_203B204->unk78,0); + } + sub_8013C68(&gUnknown_203B204->unk64); + sub_80073E0(gUnknown_203B204->unk78); +} + +void CreateFelicityMoneySavingsHeader(u32 param_1) +{ + sub_8008C54(param_1); + sub_80073B8(param_1); + xxx_call_draw_string(16, 4, gFelicityMoney, param_1, 0); + sub_8012BC4(96, 4, gUnknown_203B460->teamMoney, 5, 5, param_1); + xxx_call_draw_string(112, 4, gFelicitySavings, param_1, 0); + sub_8012BC4(200,4,gUnknown_203B460->teamSavings,7,5,param_1); + sub_80073E0(param_1); +} + +void sub_8016C40(u32 param_1) +{ + sub_8008C54(param_1); + sub_80073B8(param_1); + xxx_call_draw_string(6, 0, &gUnknown_80DB738,param_1, 0); // Money + sub_8012BC4(42, 12, gUnknown_203B460->teamMoney, 5, 5, param_1); + sub_80073E0(param_1); +} diff --git a/src/file_system.c b/src/file_system.c index 4c295fc..e2b78d4 100644 --- a/src/file_system.c +++ b/src/file_system.c @@ -1091,3 +1091,10 @@ bool32 sub_800B2D4(char *arg0, char *arg1, int length) { } return FALSE; } + +// Has to be down here to match (rodata ordering) +ALIGNED(4) const char file_filler[] = _("pksdir0"); +const u32 gByteShiftLookup[4] = {0, 8, 16, 24}; +ALIGNED(4) const char file_filler1[] = _("pksdir0"); +ALIGNED(4) const char file_filler2[] = _("pksdir0"); + diff --git a/src/friend_area.c b/src/friend_area.c index 5180eba..27eddee 100644 --- a/src/friend_area.c +++ b/src/friend_area.c @@ -16,7 +16,7 @@ struct unkStruct_203B45C u8 unk29[0x2f]; }; -extern struct unkStruct_203B45C gUnknown_203B45C[]; +extern struct unkStruct_203B45C gRecruitedPokemonRef[]; extern bool8 *gFriendAreas; @@ -365,11 +365,11 @@ void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3) r6 = 0; for(counter = 0; counter <= 412; counter++) { - if((u8)(gUnknown_203B45C[counter].unk0) & 1) + if((u8)(gRecruitedPokemonRef[counter].unk0) & 1) { - if(((u8)gUnknown_203B45C[counter].unk2 == 0) || r2) + if(((u8)gRecruitedPokemonRef[counter].unk2 == 0) || r2) { - flag = (u8)gUnknown_203B45C[counter].unk4[0] == 65; + flag = (u8)gRecruitedPokemonRef[counter].unk4[0] == 65; if(!flag || r3) { if(sub_80923D4(counter) == r0) @@ -466,7 +466,7 @@ NAKED void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3) "\tpop {r0}\n" "\tbx r0\n" "\t.align 2, 0\n" -"_08092494: .4byte gUnknown_203B45C\n" +"_08092494: .4byte gRecruitedPokemonRef\n" "_08092498: .4byte 0x0000ffff"); } #endif @@ -483,14 +483,14 @@ void sub_809249C(u8 index, u8 clear) return; for(counter = 0; counter <= 412; counter++) { - if((u8)(gUnknown_203B45C[counter].unk0) & 1) + if((u8)(gRecruitedPokemonRef[counter].unk0) & 1) { if(sub_80923D4(counter) == index) { - flag = (u8)gUnknown_203B45C[counter].unk4[0] == 65; + flag = (u8)gRecruitedPokemonRef[counter].unk4[0] == 65; if(!flag) { - temp8 = (u8)gUnknown_203B45C[counter].unk2; + temp8 = (u8)gRecruitedPokemonRef[counter].unk2; neg8 = -temp8; neg8 |= temp8; // still tries to left shift before the right shift.. @@ -501,7 +501,7 @@ void sub_809249C(u8 index, u8 clear) } else { - gUnknown_203B45C[counter].unk0 = neg8; + gRecruitedPokemonRef[counter].unk0 = neg8; } } } @@ -564,7 +564,7 @@ NAKED void sub_809249C(u8 index, u8 clear) "\tb _08092502\n" "\t.align 2, 0\n" "_080924F8: .4byte gFriendAreas\n" -"_080924FC: .4byte gUnknown_203B45C\n" +"_080924FC: .4byte gRecruitedPokemonRef\n" "_08092500:\n" "\tstrh r0, [r4]\n" "_08092502:\n" diff --git a/src/friend_area_1.c b/src/friend_area_1.c index 6600231..c3dd57f 100644 --- a/src/friend_area_1.c +++ b/src/friend_area_1.c @@ -8,7 +8,7 @@ extern void nullsub_102(u32 *r0); extern void sub_809488C(u32 *r0, u32 *r1, u32 r2); extern void sub_809486C(u32 *r0, u8 *r1, u32 r2); -u32 sub_80927A8(u8 *r0, u32 r1) +u32 SaveFriendAreas(u8 *r0, u32 r1) { u32 temp[5]; s32 counter; @@ -26,7 +26,7 @@ u32 sub_80927A8(u8 *r0, u32 r1) return temp[2]; } -u32 sub_80927F4(u8 *r0, u32 r1) +u32 ReadSavedFriendAreas(u8 *r0, u32 r1) { u32 temp[5]; s32 counter; diff --git a/src/friend_rescue.c b/src/friend_rescue.c index d84c793..d89f5ea 100644 --- a/src/friend_rescue.c +++ b/src/friend_rescue.c @@ -1,12 +1,11 @@ #include "global.h" #include "friend_rescue.h" +#include "pokemon.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(); @@ -127,7 +126,7 @@ u32 CreateFriendRescueMenu(void) gUnknown_203B33C->unk530 = 0; gUnknown_203B33C->unk218 = -1; gUnknown_203B33C->unk538 = -1; - sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); monName = GetMonSpecies(SPECIES_PELIPPER); strcpy(gAvailablePokemonNames,monName); for(counter = 0; counter < 0x36; counter++){ diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c index 7fb2326..94baab3 100644 --- a/src/friend_rescue_1.c +++ b/src/friend_rescue_1.c @@ -1,12 +1,11 @@ #include "global.h" #include "friend_rescue.h" +#include "pokemon.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(); @@ -39,7 +38,7 @@ void sub_80352A4(void) if ( sub_802F298() == 3) { sub_802F2C0(); - sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); monName = GetMonSpecies(SPECIES_PELIPPER); strcpy(gAvailablePokemonNames, monName); uVar1 = sub_809539C(6, gUnknown_203B33C->unk420); diff --git a/src/items.c b/src/items.c new file mode 100644 index 0000000..238bc06 --- /dev/null +++ b/src/items.c @@ -0,0 +1,310 @@ +#include "global.h" +#include "file_system.h" +#include "gUnknown_203B460.h" +#include "random.h" +#include "item.h" + +extern struct unkStruct_203B460 *gUnknown_203B460; +extern struct unkStruct_203B460 gUnknown_20389A8; +extern struct FileArchive gSystemFileArchive; +extern const char gUnknown_8109764; +extern struct OpenedFile *gItemParametersFile; +extern struct Item *gItemParametersData; + +extern void sub_8091840(u8); +extern u8 GetItemType(u8); +extern u32 GetItemUnkThrow(u8, u32); +extern s32 sub_80915D4(struct ItemStruct_203B460 *); +extern u8 sub_80914E4(u8); +extern void sub_8090F58(u32, u8 *, struct ItemStruct_203B460 *, u32); + +void LoadItemParameters(void) +{ + gUnknown_203B460 = &gUnknown_20389A8; + gItemParametersFile = OpenFileAndGetFileDataPtr(&gUnknown_8109764,&gSystemFileArchive); + gItemParametersData = (struct Item *) gItemParametersFile->data; +} + +struct unkStruct_203B460 *GetMoneyItemsInfo(void) +{ + return &gUnknown_20389A8; +} + +void InitializeMoneyItems(void) +{ + s32 iVar1; + + for(iVar1 = 0; iVar1 < 0x14; iVar1++) + { + gUnknown_203B460->fill0[iVar1].unk0 = 0; + } + + for(iVar1 = 0; iVar1 < 0xF0; iVar1++) + { + gUnknown_203B460->unk50[iVar1] = 0; + } + + for(iVar1 = 0; iVar1 < 8; iVar1++) + { + sub_8091840(iVar1); + } + gUnknown_203B460->teamMoney = 0; + gUnknown_203B460->teamSavings = 0; +} + +u32 sub_8090A34(void) +{ + s32 iVar2; + u32 iVar3; + + iVar3 = 0; + for(iVar2 = 0; iVar2 < 0x14; iVar2++) + { + if ((gUnknown_203B460->fill0[iVar2].unk0 & 1) != 0) { + iVar3++; + } + } + return iVar3; +} + +bool8 sub_8090A60(u8 itemIndex) +{ + if ((GetItemType(itemIndex) != ITEM_TYPE_THROWABLE) && (GetItemType(itemIndex) != ITEM_TYPE_ROCK)) { + return FALSE; + } + else { + return TRUE; + } +} + +void sub_8090A8C(struct ItemStruct_203B460 *param_1,u8 itemIndex,u8 param_3) +{ + u32 uVar3; + u32 uVar4; + + if (itemIndex != 0) { + param_1->unk0 = 1; + param_1->itemIndex = itemIndex; + if (sub_8090A60(itemIndex)) { + uVar3 = GetItemUnkThrow(itemIndex,0); + uVar4 = GetItemUnkThrow(itemIndex,1); + param_1->numItems = RandomRange(uVar3,uVar4); + } + else { + if (GetItemType(itemIndex) == ITEM_TYPE_MONEY) { + param_1->numItems = 1; + } + else { + param_1->numItems = 0; + } + } + if (param_3 != 0) { + param_1->unk0 |= 8; + } + } + else { + param_1->unk0 = 0; + param_1->itemIndex = 0; + param_1->numItems = 0; + } +} + +// TODO is this a struct one too? +void sub_8090B08(struct ItemStruct_203B460 *param_1,u8 itemIndex) +{ + u32 uVar2; + u32 uVar3; + + if (itemIndex != 0) { + param_1->unk0 = itemIndex; + if (sub_8090A60(itemIndex)) { + uVar2 = GetItemUnkThrow(itemIndex,0); + uVar3 = GetItemUnkThrow(itemIndex,1); + param_1->numItems = RandomRange(uVar2,uVar3); + } else { + if (GetItemType(itemIndex) == ITEM_TYPE_MONEY) { + param_1->numItems = 1; + } + else { + param_1->numItems = 0; + } + } + } + else { + param_1->unk0 = 0; + param_1->numItems = 0; + } +} + +NAKED +void sub_8090B64(u32 r0, u32 r1) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tadds r4, r0, 0\n" + "\tadds r5, r1, 0\n" + "\tldrb r1, [r5]\n" + "\tadds r0, r1, 0\n" + "\tcmp r0, 0\n" + "\tbeq _08090BA4\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r4]\n" + "\tstrb r1, [r4, 0x2]\n" + "\tldrb r0, [r4, 0x2]\n" + "\tbl sub_8090A60\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tcmp r6, 0\n" + "\tbne _08090B9A\n" + "\tldrb r0, [r4, 0x2]\n" + "\tbl GetItemType\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x6\n" + "\tbeq _08090B9A\n" + "\tldrb r0, [r4, 0x2]\n" + "\tcmp r0, 0x7C\n" + "\tbne _08090BA0\n" +"_08090B9A:\n" + "\tldrb r0, [r5, 0x1]\n" + "\tstrb r0, [r4, 0x1]\n" + "\tb _08090BAA\n" +"_08090BA0:\n" + "\tstrb r6, [r4, 0x1]\n" + "\tb _08090BAA\n" +"_08090BA4:\n" + "\tstrb r0, [r4, 0x2]\n" + "\tstrb r0, [r4, 0x1]\n" + "\tstrb r0, [r4]\n" +"_08090BAA:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0"); +} + +void sub_8090BB0(struct ItemStruct_203B460 *param_1,struct ItemStruct_203B460 *param_2) +{ + if ((param_2->unk0 & 1) != 0) { + param_1->unk0 = param_2->itemIndex; + param_1->numItems = param_2->numItems; + } + else { + param_1->unk0 = 0; + } +} + +u8 GetItemType(u8 index) +{ + return gItemParametersData[index].type; +} + +s32 sub_8090BE4(struct ItemStruct_203B460 *param_1) +{ + if (param_1->itemIndex == 0x69) { + return sub_80915D4(param_1); + } + else { + if (sub_8090A60(param_1->itemIndex)) { + return gItemParametersData[param_1->itemIndex].buyPrice * param_1->numItems; + } + else { + return gItemParametersData[param_1->itemIndex].buyPrice; + } + } +} + +s32 sub_8090C30(struct ItemStruct_203B460 *param_1) +{ + if (param_1->itemIndex == 0x69) { + return sub_80915D4(param_1); + } + else { + if (sub_8090A60(param_1->itemIndex)) { + return gItemParametersData[param_1->itemIndex].sellPrice * param_1->numItems; + } + else { + return gItemParametersData[param_1->itemIndex].sellPrice; + } + } +} + +s32 sub_8090C7C(struct ItemStruct_203B460 *param_1) +{ + if (sub_80914E4(param_1->itemIndex) == 0) { + return 0; + } + else { + if (sub_8090A60(param_1->itemIndex)) { + return gItemParametersData[param_1->itemIndex].buyPrice * param_1->numItems; + } + else { + return gItemParametersData[param_1->itemIndex].buyPrice; + } + } +} + +s32 sub_8090CCC(struct ItemStruct_203B460 *param_1) +{ + if (sub_80914E4(param_1->itemIndex) == 0) { + return 0; + } + else { + if (sub_8090A60(param_1->itemIndex)) { + return gItemParametersData[param_1->itemIndex].sellPrice * param_1->numItems; + } + else { + return gItemParametersData[param_1->itemIndex].sellPrice; + } + } +} + +s32 GetItemBuyPrice(u8 itemIndex) +{ + return gItemParametersData[itemIndex].buyPrice; +} + +s32 GetItemSellPrice(u8 itemIndex) +{ + return gItemParametersData[itemIndex].sellPrice; +} + +u8 GetItemOrder(u8 itemIndex) +{ + return gItemParametersData[itemIndex].order; +} + +u8 GetItemPalette(u8 itemIndex) +{ + return gItemParametersData[itemIndex].palette; +} + +u8 GetItemCategory(u8 itemIndex) +{ + return gItemParametersData[itemIndex].category; +} + +u32 GetItemUnkThrow(u8 itemIndex, u32 r1) +{ + return gItemParametersData[itemIndex].unkThrow1B[r1]; +} + +u8 *GetItemDescription(u8 itemIndex) +{ + return gItemParametersData[itemIndex].descriptionPointer; +} + +u32 GetItemUnkFood(u8 itemIndex, u32 r1) +{ + return gItemParametersData[itemIndex].unkFood1[r1]; +} + +void sub_8090DC4(u32 param_1,u8 itemIndex,u32 param_3) +{ + char acStack104 [80]; + struct ItemStruct_203B460 unkItem; + + strncpy(acStack104,gItemParametersData[itemIndex].namePointer,0x50); + sub_8090A8C(&unkItem,itemIndex,0); + unkItem.numItems = 1; + sub_8090F58(param_1,acStack104,&unkItem,param_3); +} + diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c new file mode 100644 index 0000000..c695aec --- /dev/null +++ b/src/kangaskhan_storage.c @@ -0,0 +1,176 @@ +#include "global.h" +#include "file_system.h" +#include "pokemon.h" +#include "input.h" +#include "constants/species.h" +#include "kangaskhan_storage.h" + +extern struct unkStruct_203B208 *gUnknown_203B208; +extern struct unkData gUnknown_80DB748; +extern struct unkData gUnknown_80DB778; +extern struct unkData gUnknown_80DB790; +extern struct unkData gUnknown_80DB760; + +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; +extern void *MemoryAlloc(u32, u32); +extern void MemoryFree(void *); +extern void sub_800641C(struct unkData *, u32, u32); +extern void sub_8006518(struct unkData *); +void UpdateKangaskhanStorageState(u32); + +extern void sub_8017828(); +extern void sub_8017AF8(); +extern void sub_8017C7C(); +extern void sub_8017DC0(); +extern void sub_80178D0(); +extern void sub_80179A8(); +extern void sub_8017B88(); +extern void sub_8017C28(); +extern void sub_8017D24(); +extern void sub_8017DDC(); +extern void sub_8017928(); +extern void sub_8017A1C(); +extern void sub_8017DF8(); +void sub_8016E80(); +extern void sub_8016FF8(); + + +u32 DisplayKangaskhanDialogueSprite(s32 param_1) +{ + char *monName; + struct OpenedFile * faceFile; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B208 = MemoryAlloc(0x14c,8); + gUnknown_203B208->unk18 = 0; + gUnknown_203B208->unk1C = 0; + gUnknown_203B208->unk20 = 0; + gUnknown_203B208->unk0 = param_1; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KANGASKHAN); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KANGASKHAN); + monName = GetMonSpecies(SPECIES_KANGASKHAN); + strcpy(gUnknown_202E1C8 - 0x50, monName); + if (gUnknown_203B208->unk0 == 1) { + gUnknown_203B208->unkE8 = 0; + } + else { + gUnknown_203B208->unkE8 = &gUnknown_203B208->faceFile; + } + faceFile = GetDialogueSpriteDataPtr(SPECIES_KANGASKHAN); + gUnknown_203B208->faceFile = faceFile; + gUnknown_203B208->faceData = faceFile->data; + gUnknown_203B208->unkE4 = 0; + gUnknown_203B208->unkE5 = 0; + gUnknown_203B208->unkE6 = 0; + gUnknown_203B208->unkE0 = 2; + gUnknown_203B208->unkE2 = 8; + UpdateKangaskhanStorageState(0); + return 1; +} + +u32 sub_8016D54(void) +{ + switch(gUnknown_203B208->currState) { + case 0: + case 1: + sub_8017828(); + break; + case 0xd: + case 0xe: + sub_8017AF8(); + break; + case 0xf: + sub_8017C7C(); + break; + case 0x10: + sub_8017DC0(); + break; + case 0x11: + sub_80178D0(); + break; + case 0x12: + sub_80179A8(); + break; + case 0x16: + case 0x17: + sub_8017B88(); + break; + case 0x18: + sub_8017C28(); + break; + case 0x19: + sub_8017D24(); + break; + case 0x1a: + sub_8017DDC(); + break; + case 0x1b: + sub_8017928(); + break; + case 0x1c: + sub_8017A1C(); + break; + case 4: + return 3; + default: + sub_8017DF8(); + break; + } + return 0; +} + +void sub_8016E40(void) +{ + if(gUnknown_203B208 != NULL) + { + CloseFile(gUnknown_203B208->faceFile); + MemoryFree(gUnknown_203B208); + gUnknown_203B208 = NULL; + } +} + +void UpdateKangaskhanStorageState(u32 newState) +{ + gUnknown_203B208->currState = newState; + sub_8016E80(); + sub_8016FF8(); +} + +void sub_8016E80(void) +{ + s32 iVar3; + + sub_8006518(gUnknown_203B208->unkEC); + switch(gUnknown_203B208->currState) + { + case 0xD: + case 0xE: + gUnknown_203B208->unkEC[0] = gUnknown_80DB748; + gUnknown_203B208->unkEC[1] = gUnknown_80DB748; + gUnknown_203B208->unkEC[2] = gUnknown_80DB748; + gUnknown_203B208->unkEC[0] = gUnknown_80DB748; + break; + case 0x16: + case 0x17: + gUnknown_203B208->unkEC[0] = gUnknown_80DB748; + gUnknown_203B208->unkEC[1] = gUnknown_80DB748; + gUnknown_203B208->unkEC[2] = gUnknown_80DB748; + gUnknown_203B208->unkEC[0] = gUnknown_80DB778; + break; + case 0x18: + gUnknown_203B208->unkEC[1] = gUnknown_80DB790; + break; + case 0xF: + case 0x19: + gUnknown_203B208->unkEC[2] = gUnknown_80DB760; + break; + default: + for(iVar3 = 0; iVar3 < 4; iVar3++) + gUnknown_203B208->unkEC[iVar3] = gUnknown_80DB748; + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B208->unkEC, 1, 1); +} diff --git a/src/kangaskhan_storage_1.c b/src/kangaskhan_storage_1.c new file mode 100644 index 0000000..25cc2a6 --- /dev/null +++ b/src/kangaskhan_storage_1.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "file_system.h" +#include "pokemon.h" +#include "input.h" +#include "constants/species.h" +#include "kangaskhan_storage.h" + +extern struct unkStruct_203B208 *gUnknown_203B208; + +extern u8 gUnknown_80DB7A8; + +extern void xxx_call_draw_string(u32 x, u32 y, u8 *, u32, u32); +extern void sub_801CCD8(); +extern void sub_801AD34(u32); +extern void sub_8012EA4(u32 *, u32); +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_8013C68(u32 *); +extern void sub_80073E0(u32); + +void sub_8017598(void) +{ + + sub_8008C54(gUnknown_203B208->unkBC); + sub_80073B8(gUnknown_203B208->unkBC); + xxx_call_draw_string(4,0,&gUnknown_80DB7A8,gUnknown_203B208->unkBC,0); // Number? + sub_8013C68(&gUnknown_203B208->unkA8); + sub_80073E0(gUnknown_203B208->unkBC); + sub_801CCD8(); + sub_801AD34(0); + sub_8012EA4(&gUnknown_203B208->unk58,0); +} diff --git a/src/kecleon_items.c b/src/kecleon_items.c new file mode 100644 index 0000000..a3d0fd0 --- /dev/null +++ b/src/kecleon_items.c @@ -0,0 +1,193 @@ +#include "global.h" +#include "file_system.h" +#include "pokemon.h" +#include "constants/species.h" +#include "input.h" +#include "kecleon_items.h" + +extern struct unkStruct_203B210 *gUnknown_203B210; +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; +extern struct unkData gUnknown_80DB840; +extern struct unkData gUnknown_80DB870; +extern struct unkData gUnknown_80DB888; +extern struct unkData gUnknown_80DB858; + +extern void *MemoryAlloc(u32, u32); +extern void MemoryFree(void *); +void UpdateKecleonStoreState(u32); + +extern void sub_8019730(); +extern void sub_80199CC(); +extern void sub_8019B08(); +extern void sub_8019BBC(); +extern void sub_8019C78(); +extern void sub_8019850(); +extern void sub_80198E8(); +extern void sub_8019944(); +extern void sub_8019D30(); +extern void sub_8019D4C(); +extern void sub_8019D68(); +extern void sub_8018D30(); +extern void sub_8018E88(); +extern void sub_8006518(struct unkData *); +extern void sub_800641C(struct unkData *, u32, u32); + +u32 DisplayKeckleonDialogueSprite(u32 param_1) +{ + char *monName; + struct OpenedFile *faceFile; + + gUnknown_203B210 = MemoryAlloc(0x148,8); + gUnknown_203B210->unk28 = 0; + gUnknown_203B210->unk2C = 0; + gUnknown_203B210->unk30 = 0; + gUnknown_203B210->unk0 = param_1; + switch(param_1) + { + case 0: + gUnknown_203B210->unk4 = 1; + gUnknown_203B210->unkE4 = &gUnknown_203B210->unkD4; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); + monName = GetMonSpecies( SPECIES_KECLEON); + strcpy(gUnknown_202E1C8 - 0x50, monName); + break; + case 1: + gUnknown_203B210->unk4 = 1; + gUnknown_203B210->unkE4 = 0; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); + monName = GetMonSpecies( SPECIES_KECLEON); + strcpy(gUnknown_202E1C8 - 0x50, monName); + break; + case 2: + gUnknown_203B210->unk4 = 0; + gUnknown_203B210->unkE4 = &gUnknown_203B210->unkD4; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); + monName = GetMonSpecies( SPECIES_KECLEON); + strcpy(gUnknown_202E1C8 - 0x50, monName); + break; + case 3: + gUnknown_203B210->unk4 = 0; + gUnknown_203B210->unkE4 = 0; + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON); + monName = GetMonSpecies( SPECIES_KECLEON); + strcpy(gUnknown_202E1C8 - 0x50, monName); + break; + default: + break; + } + faceFile = GetDialogueSpriteDataPtr(SPECIES_KECLEON); + gUnknown_203B210->unkD4 = faceFile; + gUnknown_203B210->unkD8 = faceFile->data; + gUnknown_203B210->unkE0 = 0; + gUnknown_203B210->unkE1 = 0; + gUnknown_203B210->unkE2 = 0; + gUnknown_203B210->unkDC = 2; + gUnknown_203B210->unkDE = 8; + UpdateKecleonStoreState(0); + return 1; +} + +u32 sub_8018C04(void) +{ + switch(gUnknown_203B210->currState) { + case 0: + case 1: + sub_8019730(); + break; + case 0x12: + case 0x13: + sub_80199CC(); + break; + case 0x1a: + case 0x1b: + sub_8019B08(); + break; + case 0x14: + sub_8019BBC(); + break; + case 0x1c: + sub_8019C78(); + break; + case 0x16: + sub_8019850(); + break; + case 0x1e: + sub_80198E8(); + break; + case 0x1f: + sub_8019944(); + break; + case 0x15: + sub_8019D30(); + break; + case 0x1d: + sub_8019D4C(); + break; + case 4: + return 3; + default: + sub_8019D68(); + break; + } + return 0; +} + +void sub_8018CF0(void) +{ + if(gUnknown_203B210 != NULL) + { + CloseFile(gUnknown_203B210->unkD4); + MemoryFree(gUnknown_203B210); + gUnknown_203B210 = NULL; + } +} + +void UpdateKecleonStoreState(u32 newState) +{ + gUnknown_203B210->currState = newState; + sub_8018D30(); + sub_8018E88(); +} + +void sub_8018D30(void) +{ + s32 iVar3; + sub_8006518(gUnknown_203B210->unkE8); + switch(gUnknown_203B210->currState) + { + case 0x12: + case 0x13: + gUnknown_203B210->unkE8[0] = gUnknown_80DB840; + gUnknown_203B210->unkE8[2] = gUnknown_80DB840; + gUnknown_203B210->unkE8[0] = gUnknown_80DB870; + gUnknown_203B210->unkE8[1] = gUnknown_80DB888; + break; + case 0x1A: + case 0x1B: + gUnknown_203B210->unkE8[0] = gUnknown_80DB840; + gUnknown_203B210->unkE8[1] = gUnknown_80DB840; + gUnknown_203B210->unkE8[2] = gUnknown_80DB840; + gUnknown_203B210->unkE8[1] = gUnknown_80DB888; + break; + case 0x14: + case 0x1C: + gUnknown_203B210->unkE8[2] = gUnknown_80DB858; + break; + default: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + for(iVar3 = 0; iVar3 < 4; iVar3++) + gUnknown_203B210->unkE8[iVar3] = gUnknown_80DB840; + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B210->unkE8, 1, 1); +} diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c new file mode 100644 index 0000000..f305c6f --- /dev/null +++ b/src/kecleon_items_1.c @@ -0,0 +1,222 @@ +#include "global.h" +#include "file_system.h" +#include "pokemon.h" +#include "constants/species.h" +#include "input.h" +#include "kecleon_items.h" +#include "gUnknown_203B460.h" + +extern struct unkStruct_203B210 *gUnknown_203B210; +extern struct unkStruct_203B460 *gUnknown_203B460; + +extern u32 sub_8090CCC(struct ItemStruct_203B460 *); +extern u8 sub_80914E4(u8); +extern u32 sub_8091814(void); +extern u32 sub_8091A48(void); +extern s32 sub_80144A4(s32 *); +void UpdateKecleonStoreState(u32); +extern u32 sub_801B410(void); +extern void sub_801B450(void); + +extern void sub_8099690(u32); +extern u8 sub_8012FD8(u32 *); +extern void sub_8013114(u32 *, u32 *); +extern void sub_8019EDC(u32); +extern void sub_801A2A8(u32); +extern s32 sub_801A8AC(void); +extern u32 sub_801A6E8(u32); +extern void sub_801A928(void); +extern void sub_8016C40(u32); + +void sub_8019B08(void) +{ + switch(sub_801A6E8(1)) + { + case 0: + break; + case 3: + gUnknown_203B210->unk24 = sub_801A8AC(); + gUnknown_203B210->unk1C = gUnknown_203B460->fill0[gUnknown_203B210->unk24]; + gUnknown_203B210->unk10 = sub_8090CCC(&gUnknown_203B210->unk1C); + UpdateKecleonStoreState(0x1c); + break; + case 4: + gUnknown_203B210->unk24 = sub_801A8AC(); + gUnknown_203B210->unk1C = gUnknown_203B460->fill0[gUnknown_203B210->unk24]; + gUnknown_203B210->unk10 = sub_8090CCC(&gUnknown_203B210->unk1C); + sub_8099690(0); + UpdateKecleonStoreState(0x1d); + break; + case 2: + sub_801A928(); + UpdateKecleonStoreState(1); + break; + case 1: + default: + sub_8016C40(1); + break; + } +} + +void sub_8019BBC(void) +{ + int local_c; + + local_c = 0; + if (gUnknown_203B210->unk4 != 0) { + sub_8019EDC(0); + } + else { + sub_801A2A8(0); + } + if ((sub_8012FD8(&gUnknown_203B210->unk84) == 0) && (sub_8013114(&gUnknown_203B210->unk84,&local_c), local_c != 1)) { + gUnknown_203B210->unk30 = local_c; + } + switch(local_c){ + case 2: + if (gUnknown_203B460->teamMoney == 0) { + UpdateKecleonStoreState(0x6); + } + else { + if (gUnknown_203B210->unk10 > gUnknown_203B460->teamMoney) { + UpdateKecleonStoreState(0xC); + } + else { + UpdateKecleonStoreState(0x16); + } + } + break; + case 7: + UpdateKecleonStoreState(0x15); + break; + case 1: + UpdateKecleonStoreState(0x13); + break; + } +} + +void sub_8019C78(void) +{ + int local_c; + + local_c = 0; + sub_801A6E8(0); + if ((sub_8012FD8(&gUnknown_203B210->unk84) == '\0') && (sub_8013114(&gUnknown_203B210->unk84,&local_c), local_c != 1)) { + gUnknown_203B210->unk2C = local_c; + } + switch(local_c){ + case 3: + sub_8099690(0); + if (sub_80914E4(gUnknown_203B210->unk1C.itemIndex) == '\0') { + UpdateKecleonStoreState(0xd); + } + else { + if (gUnknown_203B210->unk10 + gUnknown_203B460->teamMoney > 99999) { + UpdateKecleonStoreState(0xe); + + } + else { + UpdateKecleonStoreState(0x1e); + } + } + break; + case 7: + sub_8099690(0); + UpdateKecleonStoreState(0x1d); + break; + case 1: + UpdateKecleonStoreState(0x1b); + break; + } +} + +void sub_8019D30(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + UpdateKecleonStoreState(0x13); + break; + case 0: + case 1: + break; + } +} + +void sub_8019D4C(void) +{ + switch(sub_801B410()) + { + case 2: + case 3: + sub_801B450(); + UpdateKecleonStoreState(0x1B); + break; + case 0: + case 1: + break; + } +} + + +void sub_8019D68(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateKecleonStoreState(gUnknown_203B210->unkC); + } +} + +u32 sub_8019D8C(void) +{ + if(gUnknown_203B210->unk4 != 0) + { + return sub_8091814(); + } + else + { + return sub_8091A48(); + } +} + +void sub_8019DAC(void) +{ + s32 iVar3; + struct ItemStruct_203B460 *pbVar4; + s32 iVar5; + + gUnknown_203B210->unk14 = 0; + gUnknown_203B210->unk18 = 0; + iVar5 = 0; + do { + pbVar4 = &gUnknown_203B460->fill0[iVar5]; + if (((pbVar4->unk0 & 1) != 0) && (sub_80914E4(pbVar4->itemIndex) != 0)) { + iVar3 = sub_8090CCC(pbVar4); + gUnknown_203B210->unk18 += iVar3; + gUnknown_203B210->unk14++; + } + iVar5 = iVar5 + 1; + } while (iVar5 < 0x14); +} + +void sub_8019E04(int param_1) +{ + + if (gUnknown_203B210->unk4 != 0) { + if (param_1 == 1) + gUnknown_203B210->unkE0 = 1; + else + gUnknown_203B210->unkE0 = 0; + } + else + { + if (param_1 == 1) + gUnknown_203B210->unkE0 = 7; + else + gUnknown_203B210->unkE0 = 6; + } +} + diff --git a/src/load_screen.c b/src/load_screen.c index d79a420..e49d5a9 100644 --- a/src/load_screen.c +++ b/src/load_screen.c @@ -1,22 +1,724 @@ #include "global.h" +#include "input.h" +#include "main_menu.h" +#include "play_time.h" +#include "file_system.h" -s32 sub_8011FA8(void); -s32 sub_8095324(u32); -s32 sub_8011C1C(void); +extern struct PlayTimeStruct *gPlayTimeRef; +extern struct PlayTimeStruct gPlayTime; -bool8 sub_8039844(void) +extern const struct FileArchive gTitleMenuFileArchive; + +struct unkStruct_808D33C +{ + u8 fill0[0x4C]; + u8 unk4C; +}; + +struct unkStruct_203B484 +{ + u8 fill0[0xC]; + s16 unkC; + u8 fillE[0x50 - 0xE]; + u32 unk50; +}; + +struct unkData +{ + u8 unk0[24]; +}; + +struct unkStruct_203B374 +{ + // size: 0x27c + u32 currMenu; + u32 unk4; + u8 fill8[0x54 - 8]; + u32 unk54; + u8 fill58[0xA4 - 0x58]; + u32 unkA4; + u8 fillA8[0x144 - 0xA8]; + struct unkData unk144[4]; + /* 0x1A4 */ u8 formattedTeamName[0x24]; + /* 0x1C8 */ u8 formattedPlayerName[0x24]; + /* 0x1EC */ u8 formattedLocation[0x24]; + /* 0x210 */ u8 formattedPlayTime[0x24]; + /* 0x234 */ u8 formattedAdventures[0x24]; + /* 0x258 */ u8 formattedHelperInfo[0x24]; +}; + +extern struct unkStruct_203B374 *gUnknown_203B374; +extern u32 gUnknown_203B378; +extern u32 gUnknown_203B3B8[]; +extern u32 gUnknown_203B388[]; +extern struct unkStruct_203B484 *gUnknown_203B484; + +extern struct unkData gUnknown_80E75F8; +extern struct unkData gUnknown_80E7610; +extern struct unkData gUnknown_80E762C; +extern u32 gUnknown_80E7644; +extern u32 gUnknown_80E7684; +extern u32 gUnknown_80E76B8; +extern u32 gUnknown_80E76E8; +extern u32 gUnknown_80E7730; +extern struct unkData gUnknown_80E7784; +extern u32 gUnknown_80E779C; +extern u8 gUnknown_80E77BC; +extern u8 gUnknown_80E77C4; +extern u8 gUnknown_80E77CC; +extern u8 gUnknown_80E77D8; +extern u8 gUnknown_80E77E4; +extern u8 gUnknown_80E77F0; +extern u8 gUnknown_80E77F8; +extern u8 gUnknown_80E7804; +extern u8 gUnknown_80E7808; +extern u8 gUnknown_80E780C; +extern u8 gUnknown_80E7824; +extern u8 gUnknown_80E7838; +extern u8 gUnknown_80E7848; +extern u8 gUnknown_80E784C; +extern u8 gUnknown_80E7854; +extern const char gUnknown_80E785C[]; // clmkpat + + +extern void *MemoryAlloc(u32, u32); +extern void MemoryFill8(u8 *, u32, u32); +extern void MemoryFree(void *); +u8 IsQuickSave(void); +void DrawLoadScreenText(void); +extern void sub_8035CF4(u32 *, u32, u32); +extern void sub_800641C(struct unkData *, u32, u32); +extern void SetMenuItems(u32 *, struct unkData *, u32, struct unkData *, u32 *, u32, u32, u32); +extern u8 sub_8012FD8(u32 *); +extern void sub_8013114(u32 *, u32 *); +extern void sub_8095240(u32); +extern void sub_80122A8(void); + +extern void sub_80920D8(u8 *); +extern struct unkStruct_808D33C *sub_808D33C(void); +extern u8 sub_80023E4(u32); +extern u8 *sub_8098FB4(); +extern void sub_800D158(u8 *buffer, u8 *text, ...); +extern s32 sub_8011C1C(void); +extern u8 *sub_809769C(void); +extern u32 sub_8097778(void); +extern void xxx_call_draw_string(u32 x, u32 y, u8 *, u32, u32); +extern void sub_8090228(u8 *, u8 *); +extern void sub_80922B4(u8 *, u8 *, u32); +extern s32 sub_8095324(u32); +extern u32 sub_8001658(u32, u32); +void sub_80397B4(void); +extern void sub_80073E0(u32); +extern s32 sub_8011FA8(void); + +extern void sub_8008C54(u32); +extern void sub_80073B8(u32); +extern void sub_808D930(u8 *, s16); +extern void xxx_format_string(u8 *, u8 *, u8 *, u32); + +extern void SetBGPaletteBufferColorArray(s32, s32); +extern void sub_8007E20(s32, s32, s32, u32, u32, s32, u32); + + +void CreateLoadScreen(u32 currMenu) +{ + int iVar8; + + if (gUnknown_203B374 == NULL) { + gUnknown_203B374 = MemoryAlloc(sizeof(struct unkStruct_203B374),8); + MemoryFill8((u8 *)gUnknown_203B374,0,sizeof(struct unkStruct_203B374)); + } + gUnknown_203B374->currMenu = currMenu; + for(iVar8 = 0; iVar8 < 4; iVar8++){ + gUnknown_203B374->unk144[iVar8] = gUnknown_80E75F8; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B374->unk144,1,1); + SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,0,&gUnknown_80E7610,&gUnknown_203B378,0,6,0); + switch(gUnknown_203B374->currMenu){ + case MENU_CONTINUE: + if (IsQuickSave()) + SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C,&gUnknown_80E7644,0,6,0); + else + SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C,&gUnknown_80E7684,0,6,0); + break; + case MENU_AWAITING_RESCUE: + SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C,&gUnknown_80E76B8,0,6,0); + break; + case MENU_DELETE_SAVE_PROMPT: + SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C,&gUnknown_80E76E8,0,6,0); + break; + case MENU_DELETE_SAVE_CONFIRM: + SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,1,&gUnknown_80E762C, &gUnknown_80E7730,0,6,0); + break; + } + SetMenuItems(&gUnknown_203B374->unk4,gUnknown_203B374->unk144,2,&gUnknown_80E7784,&gUnknown_80E779C,1,2,0); + sub_8035CF4(&gUnknown_203B374->unk4,0,0); + sub_8035CF4(&gUnknown_203B374->unk4,1,0); + sub_8035CF4(&gUnknown_203B374->unk4,2,1); + DrawLoadScreenText(); +} + +void CleanLoadScreen(void) +{ + ResetUnusedInputStruct(); + sub_800641C(NULL, 1, 1); + if(gUnknown_203B374 != NULL) + { + MemoryFree(gUnknown_203B374); + gUnknown_203B374 = NULL; + } +} + +u32 UpdateLoadScreenMenu(void) +{ + u32 nextMenu; + u32 menuAction; + + nextMenu = MENU_NO_SCREEN_CHANGE; + menuAction = 4; + sub_8012FD8(&gUnknown_203B374->unk54); + if (sub_8012FD8(&gUnknown_203B374->unkA4) == '\0') { + sub_8013114(&gUnknown_203B374->unkA4,&menuAction); + } + + switch(menuAction) + { + case 3: + case 2: + nextMenu = MENU_MAIN_SCREEN; + break; + case 1: + switch(gUnknown_203B374->currMenu) + { + case MENU_CONTINUE: + nextMenu = 2; // MENU_??? + break; + case MENU_AWAITING_RESCUE: + sub_8095240(0); + nextMenu = 4; // MENU_??? + break; + case MENU_DELETE_SAVE_PROMPT: + nextMenu = MENU_DELETE_SAVE_CONFIRM; + break; + case MENU_DELETE_SAVE_CONFIRM: + sub_80122A8(); + nextMenu = MENU_DELETE_SAVE; + break; + } + break; + case 5: + default: + break; + } + return nextMenu; +} + +#ifdef NONMATCHING +void DrawLoadScreenText(void) +{ + int iVar2; + u32 numAdventures; + u8 auStack356 [100]; + u8 teamNameBuffer [40]; + u8 playerName [80]; + u8 nameHelper [80]; + u8 speciesHelper [20]; + u32 hours; + u32 minutes; + u32 seconds; + struct unkStruct_808D33C *playerInfo; + + iVar2 = sub_8011FA8(); + sub_8008C54(0); + sub_80073B8(0); + xxx_call_draw_string(8,0, &gUnknown_80E77BC,0,0); // Team: + xxx_call_draw_string(8,12,&gUnknown_80E77C4,0,0); // Name: + xxx_call_draw_string(8,24,&gUnknown_80E77CC,0,0); // Location: + xxx_call_draw_string(8,36,&gUnknown_80E77D8,0,0); // Play time: + xxx_call_draw_string(8,48,&gUnknown_80E77E4,0,0); // Adventures: + xxx_call_draw_string(8,60,&gUnknown_80E77F0,0,0); // Helper: + + // Draw Team Name + if (sub_80023E4(0) != '\0') { + sub_80920D8(teamNameBuffer); + } + else { + strcpy(teamNameBuffer,&gUnknown_80E77F8); + } + sub_800D158(gUnknown_203B374->formattedTeamName,&gUnknown_80E7804,teamNameBuffer); + xxx_call_draw_string(64,0,gUnknown_203B374->formattedTeamName,0,0); + + // Draw Player Name + playerInfo = sub_808D33C(); + if (playerInfo == NULL) { + sub_80922B4(playerName,&gUnknown_80E7808,10); + } + else { + sub_80922B4(playerName,&playerInfo->unk4C,10); + } + sub_800D158(gUnknown_203B374->formattedPlayerName,&gUnknown_80E7804,playerName); + xxx_call_draw_string(64,12,gUnknown_203B374->formattedPlayerName,0,0); + + // Draw Location Info + // TODO: fix these branches.. correct logic but branching isn't right + if ((sub_8095324(1) != 0) || (sub_8095324(7) != 0)) { + if (iVar2 == 0xf1207) { + sub_8090228(gUnknown_203B374->formattedLocation,sub_809769C()); + } + else { + sub_800D158(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted + } + } + else { + switch(sub_8011C1C()) + { + default: + sub_800D158(gUnknown_203B374->formattedLocation,&gUnknown_80E7824); // Location unknown + break; + case 1: + switch(sub_8001658(0,24)) + { + default: + sub_800D158(auStack356,&gUnknown_80E7804,sub_8098FB4()); + xxx_format_string(auStack356,gUnknown_203B374->formattedLocation,gUnknown_203B374->formattedPlayTime,0); + break; + case 0x7: + case 0xB: + sub_800D158(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted + break; + } + break; + case 2: + if (iVar2 == 0xf1207) + { + sub_8090228(gUnknown_203B374->formattedLocation,sub_809769C()); + } else { + sub_800D158(gUnknown_203B374->formattedLocation,&gUnknown_80E780C); // Quicksave data deleted + } + break; + } + } + xxx_call_draw_string(64,24,gUnknown_203B374->formattedLocation,0,0); + + // Draw Play Time + DeconstructPlayTime(gPlayTimeRef,&hours,&minutes,&seconds); + sub_800D158(gUnknown_203B374->formattedPlayTime,&gUnknown_80E7838,hours,minutes,seconds); + xxx_call_draw_string(64,36,gUnknown_203B374->formattedPlayTime,0,0); + + // Draw Adventures Info + numAdventures = sub_8097778(); + sub_800D158(gUnknown_203B374->formattedAdventures,&gUnknown_80E7848,numAdventures); // %d + xxx_call_draw_string(64,48,gUnknown_203B374->formattedAdventures,0,0); + + // Draw Helper Info + if ((iVar2 == 0xf1207) && (gUnknown_203B484->unkC != 0)) { + sub_808D930(speciesHelper,gUnknown_203B484->unkC); + // TODO very hacky match here + sub_80922B4(nameHelper,(u8 *)(&gUnknown_203B484 + 0x14),10); + sub_800D158(gUnknown_203B374->formattedHelperInfo,&gUnknown_80E784C,nameHelper,speciesHelper); // %s (%s) + } + else { + sub_800D158(gUnknown_203B374->formattedHelperInfo,&gUnknown_80E7854); // ----- + } + xxx_call_draw_string(64,60,gUnknown_203B374->formattedHelperInfo,0,0); + + sub_80397B4(); // Draw event icons?? + sub_80073E0(0); +} +#else +NAKED +void DrawLoadScreenText(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x150\n" + "\tbl sub_8011FA8\n" + "\tmov r8, r0\n" + "\tmovs r0, 0\n" + "\tbl sub_8008C54\n" + "\tmovs r0, 0\n" + "\tbl sub_80073B8\n" + "\tldr r2, _0803952C\n" + "\tmovs r4, 0\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x8\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tldr r2, _08039530\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x8\n" + "\tmovs r1, 0xC\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tldr r2, _08039534\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x8\n" + "\tmovs r1, 0x18\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tldr r2, _08039538\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x8\n" + "\tmovs r1, 0x24\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tldr r2, _0803953C\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x8\n" + "\tmovs r1, 0x30\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tldr r2, _08039540\n" + "\tstr r4, [sp]\n" + "\tmovs r0, 0x8\n" + "\tmovs r1, 0x3C\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tmovs r0, 0\n" + "\tbl sub_80023E4\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _08039544\n" + "\tadd r4, sp, 0x68\n" + "\tadds r0, r4, 0\n" + "\tbl sub_80920D8\n" + "\tadds r2, r4, 0\n" + "\tb _0803954E\n" + "\t.align 2, 0\n" +"_0803952C: .4byte gUnknown_80E77BC\n" +"_08039530: .4byte gUnknown_80E77C4\n" +"_08039534: .4byte gUnknown_80E77CC\n" +"_08039538: .4byte gUnknown_80E77D8\n" +"_0803953C: .4byte gUnknown_80E77E4\n" +"_08039540: .4byte gUnknown_80E77F0\n" +"_08039544:\n" + "\tldr r1, _08039588\n" + "\tadd r0, sp, 0x68\n" + "\tbl strcpy\n" + "\tadd r2, sp, 0x68\n" +"_0803954E:\n" + "\tldr r5, _0803958C\n" + "\tldr r0, [r5]\n" + "\tmovs r4, 0xD2\n" + "\tlsls r4, 1\n" + "\tadds r0, r4\n" + "\tldr r1, _08039590\n" + "\tbl sub_800D158\n" + "\tldr r2, [r5]\n" + "\tadds r2, r4\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tmovs r0, 0x40\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tbl sub_808D33C\n" + "\tcmp r0, 0\n" + "\tbne _08039598\n" + "\tadd r4, sp, 0x90\n" + "\tldr r1, _08039594\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0xA\n" + "\tbl sub_80922B4\n" + "\tb _080395A6\n" + "\t.align 2, 0\n" +"_08039588: .4byte gUnknown_80E77F8\n" +"_0803958C: .4byte gUnknown_203B374\n" +"_08039590: .4byte gUnknown_80E7804\n" +"_08039594: .4byte gUnknown_80E7808\n" +"_08039598:\n" + "\tadd r4, sp, 0x90\n" + "\tadds r1, r0, 0\n" + "\tadds r1, 0x4C\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0xA\n" + "\tbl sub_80922B4\n" +"_080395A6:\n" + "\tadds r2, r4, 0\n" + "\tldr r5, _080395F0\n" + "\tldr r0, [r5]\n" + "\tmovs r4, 0xE4\n" + "\tlsls r4, 1\n" + "\tadds r0, r4\n" + "\tldr r6, _080395F4\n" + "\tadds r1, r6, 0\n" + "\tbl sub_800D158\n" + "\tldr r2, [r5]\n" + "\tadds r2, r4\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tmovs r0, 0x40\n" + "\tmovs r1, 0xC\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tmovs r0, 0x1\n" + "\tbl sub_8095324\n" + "\tcmp r0, 0\n" + "\tbne _080395E0\n" + "\tmovs r0, 0x7\n" + "\tbl sub_8095324\n" + "\tcmp r0, 0\n" + "\tbeq _08039606\n" +"_080395E0:\n" + "\tldr r0, _080395F8\n" + "\tcmp r8, r0\n" + "\tbne _080395FC\n" + "\tldr r4, [r5]\n" + "\tmovs r0, 0xF6\n" + "\tlsls r0, 1\n" + "\tadds r4, r0\n" + "\tb _08039676\n" + "\t.align 2, 0\n" +"_080395F0: .4byte gUnknown_203B374\n" +"_080395F4: .4byte gUnknown_80E7804\n" +"_080395F8: .4byte 0x000f1207\n" +"_080395FC:\n" + "\tldr r0, [r5]\n" + "\tmovs r1, 0xF6\n" + "\tlsls r1, 1\n" + "\tadds r0, r1\n" + "\tb _08039690\n" +"_08039606:\n" + "\tbl sub_8011C1C\n" + "\tcmp r0, 0x1\n" + "\tbeq _08039624\n" + "\tcmp r0, 0x2\n" + "\tbeq _08039668\n" + "\tldr r0, [r5]\n" + "\tmovs r2, 0xF6\n" + "\tlsls r2, 1\n" + "\tadds r0, r2\n" + "\tldr r1, _08039620\n" + "\tb _08039692\n" + "\t.align 2, 0\n" +"_08039620: .4byte gUnknown_80E7824\n" +"_08039624:\n" + "\tmovs r0, 0\n" + "\tmovs r1, 0x18\n" + "\tbl sub_8001658\n" + "\tcmp r0, 0x7\n" + "\tbeq _08039658\n" + "\tcmp r0, 0xB\n" + "\tbeq _08039658\n" + "\tbl sub_8098FB4\n" + "\tadds r2, r0, 0\n" + "\tadd r0, sp, 0x4\n" + "\tadds r1, r6, 0\n" + "\tbl sub_800D158\n" + "\tldr r0, [r5]\n" + "\tmovs r3, 0xF6\n" + "\tlsls r3, 1\n" + "\tadds r1, r0, r3\n" + "\tadds r3, 0x24\n" + "\tadds r2, r0, r3\n" + "\tadd r0, sp, 0x4\n" + "\tmovs r3, 0\n" + "\tbl xxx_format_string\n" + "\tb _08039696\n" +"_08039658:\n" + "\tldr r0, _08039664\n" + "\tldr r0, [r0]\n" + "\tmovs r1, 0xF6\n" + "\tlsls r1, 1\n" + "\tadds r0, r1\n" + "\tb _08039690\n" + "\t.align 2, 0\n" +"_08039664: .4byte gUnknown_203B374\n" +"_08039668:\n" + "\tldr r0, _08039684\n" + "\tcmp r8, r0\n" + "\tbne _08039688\n" + "\tldr r4, [r5]\n" + "\tmovs r2, 0xF6\n" + "\tlsls r2, 1\n" + "\tadds r4, r2\n" +"_08039676:\n" + "\tbl sub_809769C\n" + "\tadds r1, r0, 0\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8090228\n" + "\tb _08039696\n" + "\t.align 2, 0\n" +"_08039684: .4byte 0x000f1207\n" +"_08039688:\n" + "\tldr r0, [r5]\n" + "\tmovs r3, 0xF6\n" + "\tlsls r3, 1\n" + "\tadds r0, r3\n" +"_08039690:\n" + "\tldr r1, _0803974C\n" +"_08039692:\n" + "\tbl sub_800D158\n" +"_08039696:\n" + "\tldr r7, _08039750\n" + "\tldr r2, [r7]\n" + "\tmovs r0, 0xF6\n" + "\tlsls r0, 1\n" + "\tadds r2, r0\n" + "\tmovs r6, 0\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x40\n" + "\tmovs r1, 0x18\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tldr r0, _08039754\n" + "\tldr r0, [r0]\n" + "\tadd r1, sp, 0x144\n" + "\tadd r2, sp, 0x148\n" + "\tadd r3, sp, 0x14C\n" + "\tbl DeconstructPlayTime\n" + "\tldr r0, [r7]\n" + "\tmovs r5, 0x84\n" + "\tlsls r5, 2\n" + "\tadds r0, r5\n" + "\tldr r1, _08039758\n" + "\tadd r2, sp, 0x144\n" + "\tldr r2, [r2]\n" + "\tadd r3, sp, 0x148\n" + "\tldr r3, [r3]\n" + "\tadd r4, sp, 0x14C\n" + "\tldr r4, [r4]\n" + "\tstr r4, [sp]\n" + "\tbl sub_800D158\n" + "\tldr r2, [r7]\n" + "\tadds r2, r5\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x40\n" + "\tmovs r1, 0x24\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tbl sub_8097778\n" + "\tadds r2, r0, 0\n" + "\tldr r0, [r7]\n" + "\tmovs r4, 0x8D\n" + "\tlsls r4, 2\n" + "\tadds r0, r4\n" + "\tldr r1, _0803975C\n" + "\tbl sub_800D158\n" + "\tldr r2, [r7]\n" + "\tadds r2, r4\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x40\n" + "\tmovs r1, 0x30\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tldr r0, _08039760\n" + "\tcmp r8, r0\n" + "\tbne _0803976C\n" + "\tldr r0, _08039764\n" + "\tldr r6, [r0]\n" + "\tmovs r1, 0xC\n" + "\tldrsh r0, [r6, r1]\n" + "\tcmp r0, 0\n" + "\tbeq _0803976C\n" + "\tadd r5, sp, 0x130\n" + "\tadds r1, r0, 0\n" + "\tadds r0, r5, 0\n" + "\tbl sub_808D930\n" + "\tadd r4, sp, 0xE0\n" + "\tadds r1, r6, 0\n" + "\tadds r1, 0x50\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0xA\n" + "\tbl sub_80922B4\n" + "\tldr r0, [r7]\n" + "\tmovs r3, 0x96\n" + "\tlsls r3, 2\n" + "\tadds r0, r3\n" + "\tldr r1, _08039768\n" + "\tadds r2, r4, 0\n" + "\tadds r3, r5, 0\n" + "\tbl sub_800D158\n" + "\tb _0803977C\n" + "\t.align 2, 0\n" +"_0803974C: .4byte gUnknown_80E780C\n" +"_08039750: .4byte gUnknown_203B374\n" +"_08039754: .4byte gPlayTimeRef\n" +"_08039758: .4byte gUnknown_80E7838\n" +"_0803975C: .4byte gUnknown_80E7848\n" +"_08039760: .4byte 0x000f1207\n" +"_08039764: .4byte gUnknown_203B484\n" +"_08039768: .4byte gUnknown_80E784C\n" +"_0803976C:\n" + "\tldr r0, _080397AC\n" + "\tldr r0, [r0]\n" + "\tmovs r1, 0x96\n" + "\tlsls r1, 2\n" + "\tadds r0, r1\n" + "\tldr r1, _080397B0\n" + "\tbl sub_800D158\n" +"_0803977C:\n" + "\tldr r0, _080397AC\n" + "\tldr r2, [r0]\n" + "\tmovs r3, 0x96\n" + "\tlsls r3, 2\n" + "\tadds r2, r3\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp]\n" + "\tmovs r0, 0x40\n" + "\tmovs r1, 0x3C\n" + "\tmovs r3, 0\n" + "\tbl xxx_call_draw_string\n" + "\tbl sub_80397B4\n" + "\tmovs r0, 0\n" + "\tbl sub_80073E0\n" + "\tadd sp, 0x150\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_080397AC: .4byte gUnknown_203B374\n" +"_080397B0: .4byte gUnknown_80E7854"); +} +#endif + +// Think structure of clmkFile is like Team Rank Badges except each pic has a diff pallete +// TODO clean up but it matches so yea +void sub_80397B4(void) +{ + struct OpenedFile *clmkFile; + int iVar3; + int iVar4; + s32 other_arg; + + clmkFile = OpenFileAndGetFileDataPtr(gUnknown_80E785C,&gTitleMenuFileArchive); // clmkpat + + for(iVar3 = 0; iVar3 < 64; iVar3++) + { + SetBGPaletteBufferColorArray(iVar3 + 176,*(int *)((clmkFile->data) + 4) + iVar3 * 4); + } + + iVar4 = 8; + other_arg = 0x49; + for(iVar3 = 0; iVar3 < 12; iVar3++) + { + if (sub_80023E4(gUnknown_203B3B8[iVar3]) != 0) { + sub_8007E20(0,iVar4,other_arg,0x10,0x10,*(int *)(clmkFile->data) + iVar3 * 0x80, + gUnknown_203B388[iVar3]); + iVar4 += 16; + } + } + CloseFile(clmkFile); +} + +bool8 IsQuickSave(void) { int iVar1; - bool8 return_var; + bool8 isQuicksave; iVar1 = sub_8011FA8(); - return_var = 0; + isQuicksave = FALSE; if (sub_8095324(1) != 0 || sub_8095324(7) != 0) { if (iVar1 == 0xf1207) - return_var = 1; + isQuicksave = TRUE; } else if (sub_8011C1C() == 2 && iVar1 == 0xf1207) - return_var = 1; - return return_var; + isQuicksave = TRUE; + return isQuicksave; } @@ -273,13 +273,13 @@ void MPlayExtender(struct CgbChannel *cgbChans) CpuFill32(0, cgbChans, sizeof(struct CgbChannel) * 4); - cgbChans[0].ty = 1; + cgbChans[0].type = 1; cgbChans[0].panMask = 0x11; - cgbChans[1].ty = 2; + cgbChans[1].type = 2; cgbChans[1].panMask = 0x22; - cgbChans[2].ty = 3; + cgbChans[2].type = 3; cgbChans[2].panMask = 0x44; - cgbChans[3].ty = 4; + cgbChans[3].type = 4; cgbChans[3].panMask = 0x88; soundInfo->ident = ident; @@ -334,15 +334,15 @@ void SoundInit(struct SoundInfo *soundInfo) soundInfo->maxChans = 8; soundInfo->masterVolume = 15; - soundInfo->plynote = (u32)ply_note; + soundInfo->plynote = ply_note; soundInfo->CgbSound = DummyFunc; - soundInfo->CgbOscOff = (void (*)(u8))DummyFunc; - soundInfo->MidiKeyToCgbFreq = (u32 (*)(u8, u8, u8))DummyFunc; - soundInfo->ExtVolPit = (u32)DummyFunc; + soundInfo->CgbOscOff = (CgbOscOffFunc)DummyFunc; + soundInfo->MidiKeyToCgbFreq = (MidiKeyToCgbFreqFunc)DummyFunc; + soundInfo->ExtVolPit = (ExtVolPitFunc)DummyFunc; MPlayJumpTableCopy(gMPlayJumpTable); - soundInfo->MPlayJumpTable = (u32)gMPlayJumpTable; + soundInfo->MPlayJumpTable = gMPlayJumpTable; SampleFreqSet(SOUND_MODE_FREQ_13379); @@ -409,7 +409,7 @@ void m4aSoundMode(u32 mode) while (temp != 0) { - chan->status = 0; + chan->statusFlags = 0; temp--; chan++; } @@ -455,7 +455,7 @@ void SoundClear(void) while (i > 0) { - ((struct SoundChannel *)chan)->status = 0; + ((struct SoundChannel *)chan)->statusFlags = 0; i--; chan = (void *)((s32)chan + sizeof(struct SoundChannel)); } @@ -469,7 +469,7 @@ void SoundClear(void) while (i <= 4) { soundInfo->CgbOscOff(i); - ((struct CgbChannel *)chan)->sf = 0; + ((struct CgbChannel *)chan)->statusFlags = 0; i++; chan = (void *)((s32)chan + sizeof(struct CgbChannel)); } @@ -544,15 +544,19 @@ void MPlayOpen(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track tracks++; } - if (soundInfo->func != 0) + // append music player and MPlayMain to linked list + + if (soundInfo->MPlayMainHead != 0) { - mplayInfo->func = soundInfo->func; - mplayInfo->intp = soundInfo->intp; - soundInfo->func = 0; + mplayInfo->MPlayMainNext = soundInfo->MPlayMainHead; + mplayInfo->musicPlayerNext = soundInfo->musicPlayerHead; + // NULL assignment semantically useless, but required for match + soundInfo->MPlayMainHead = NULL; + } - soundInfo->intp = (u32)mplayInfo; - soundInfo->func = (u32)MPlayMain; + soundInfo->musicPlayerHead = mplayInfo; + soundInfo->MPlayMainHead = MPlayMain; soundInfo->ident = ID_NUMBER; mplayInfo->ident = ID_NUMBER; } @@ -842,17 +846,17 @@ void CgbModVol(struct CgbChannel *chan) if (!CgbPan(chan)) { chan->pan = 0xFF; - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) / 16; + chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) / 16; } else { - chan->eg = (u32)(chan->rightVolume + chan->leftVolume) / 16; - if (chan->eg > 15) - chan->eg = 15; + chan->envelopeGoal = (u32)(chan->rightVolume + chan->leftVolume) / 16; + if (chan->envelopeGoal > 15) + chan->envelopeGoal = 15; } - chan->sg = (chan->eg * chan->su + 15) >> 4; + chan->sustainGoal = (chan->envelopeGoal * chan->sustain + 15) >> 4; chan->pan &= chan->panMask; } @@ -879,7 +883,7 @@ void CgbSound(void) for (ch = 1, channels = soundInfo->cgbChans; ch <= 4; ch++, channels++) { - if (!(channels->sf & 0xc7)) + if (!(channels->statusFlags & 0xc7)) continue; switch (ch) @@ -917,53 +921,53 @@ void CgbSound(void) prevC15 = soundInfo->c15; evAdd = *nrx2ptr; - if (channels->sf & 0x80) + if (channels->statusFlags & 0x80) { - if (!(channels->sf & 0x40)) + if (!(channels->statusFlags & 0x40)) { - channels->sf = 3; - channels->mo = 3; + channels->statusFlags = 3; + channels->modify = 3; CgbModVol(channels); switch (ch) { case 1: - *nrx0ptr = channels->sw; + *nrx0ptr = channels->sweep; // fallthrough case 2: - *nrx1ptr = ((u32)channels->wp << 6) + channels->le; + *nrx1ptr = ((u32)channels->wavePointer << 6) + channels->length; goto loc_82E0E30; case 3: - if ((u32)channels->wp != channels->cp) + if (channels->wavePointer != channels->currentPointer) { *nrx0ptr = 0x40; - REG_WAVE_RAM0 = channels->wp[0]; - REG_WAVE_RAM1 = channels->wp[1]; - REG_WAVE_RAM2 = channels->wp[2]; - REG_WAVE_RAM3 = channels->wp[3]; - channels->cp = (u32)channels->wp; + REG_WAVE_RAM0 = channels->wavePointer[0]; + REG_WAVE_RAM1 = channels->wavePointer[1]; + REG_WAVE_RAM2 = channels->wavePointer[2]; + REG_WAVE_RAM3 = channels->wavePointer[3]; + channels->currentPointer = channels->wavePointer; } *nrx0ptr = 0; - *nrx1ptr = channels->le; - if (channels->le) + *nrx1ptr = channels->length; + if (channels->length) channels->n4 = -64; else channels->n4 = -128; break; default: - *nrx1ptr = channels->le; - *nrx3ptr = (u32)channels->wp << 3; + *nrx1ptr = channels->length; + *nrx3ptr = (u32)channels->wavePointer << 3; loc_82E0E30: - evAdd = channels->at + 8; - if (channels->le) + evAdd = channels->attack + 8; + if (channels->length) channels->n4 = 64; else channels->n4 = 0; break; } - channels->ec = channels->at; - if ((s8)(channels->at & mask)) + channels->envelopeCounter = channels->attack; + if ((s8)(channels->attack & mask)) { - channels->ev = 0; + channels->envelopeVolume = 0; goto EC_MINUS; } else @@ -976,28 +980,28 @@ void CgbSound(void) goto loc_82E0E82; } } - else if (channels->sf & 0x04) + else if (channels->statusFlags & 0x04) { channels->echoLength--; if ((s8)(channels->echoLength & mask) <= 0) { loc_82E0E82: CgbOscOff(ch); - channels->sf = 0; + channels->statusFlags = 0; goto LAST_LABEL; } goto loc_82E0FD6; } - else if ((channels->sf & 0x40) && (channels->sf & 0x03)) + else if ((channels->statusFlags & 0x40) && (channels->statusFlags & 0x03)) { - channels->sf &= 0xfc; - channels->ec = channels->re; - if ((s8)(channels->re & mask)) + channels->statusFlags &= 0xfc; + channels->envelopeCounter = channels->release; + if ((s8)(channels->release & mask)) { - channels->mo |= 1; + channels->modify |= 1; if (ch != 3) { - evAdd = channels->re; + evAdd = channels->release; } goto EC_MINUS; } @@ -1009,24 +1013,24 @@ void CgbSound(void) else { loc_82E0ED0: - if (channels->ec == 0) + if (channels->envelopeCounter == 0) { if (ch == 3) { - channels->mo |= 1; + channels->modify |= 1; } CgbModVol(channels); - if ((channels->sf & 0x3) == 0) + if ((channels->statusFlags & 0x3) == 0) { - channels->ev--; - if ((s8)(channels->ev & mask) <= 0) + channels->envelopeVolume--; + if ((s8)(channels->envelopeVolume & mask) <= 0) { loc_82E0F02: - channels->ev = ((channels->eg * channels->echoVolume) + 0xFF) >> 8; - if (channels->ev) + channels->envelopeVolume = ((channels->envelopeGoal * channels->echoVolume) + 0xFF) >> 8; + if (channels->envelopeVolume) { - channels->sf |= 0x4; - channels->mo |= 1; + channels->statusFlags |= 0x4; + channels->modify |= 1; if (ch != 3) { evAdd = 8; @@ -1040,34 +1044,34 @@ void CgbSound(void) } else { - channels->ec = channels->re; + channels->envelopeCounter = channels->release; } } - else if ((channels->sf & 0x3) == 1) + else if ((channels->statusFlags & 0x3) == 1) { loc_82E0F3A: - channels->ev = channels->sg; - channels->ec = 7; + channels->envelopeVolume = channels->sustainGoal; + channels->envelopeCounter = 7; } - else if ((channels->sf & 0x3) == 2) + else if ((channels->statusFlags & 0x3) == 2) { int ev, sg; - channels->ev--; - ev = (s8)(channels->ev & mask); - sg = (s8)(channels->sg); + channels->envelopeVolume--; + ev = (s8)(channels->envelopeVolume & mask); + sg = (s8)(channels->sustainGoal); if (ev <= sg) { loc_82E0F5A: - if (channels->su == 0) + if (channels->sustain == 0) { - channels->sf &= 0xfc; + channels->statusFlags &= 0xfc; goto loc_82E0F02; } else { - channels->sf--; - channels->mo |= 1; + channels->statusFlags--; + channels->modify |= 1; if (ch != 3) { evAdd = 8; @@ -1077,24 +1081,24 @@ void CgbSound(void) } else { - channels->ec = channels->de; + channels->envelopeCounter = channels->decay; } } else { - channels->ev++; - if ((u8)(channels->ev & mask) >= channels->eg) + channels->envelopeVolume++; + if ((u8)(channels->envelopeVolume & mask) >= channels->envelopeGoal) { loc_82E0F96: - channels->sf--; - channels->ec = channels->de; - if ((u8)(channels->ec & mask)) + channels->statusFlags--; + channels->envelopeCounter = channels->decay; + if ((u8)(channels->envelopeCounter & mask)) { - channels->mo |= 1; - channels->ev = channels->eg; + channels->modify |= 1; + channels->envelopeVolume = channels->envelopeGoal; if (ch != 3) { - evAdd = channels->de; + evAdd = channels->decay; } } else @@ -1104,14 +1108,14 @@ void CgbSound(void) } else { - channels->ec = channels->at; + channels->envelopeCounter = channels->attack; } } } } EC_MINUS: - channels->ec--; + channels->envelopeCounter--; if (prevC15 == 0) { prevC15--; @@ -1119,39 +1123,39 @@ void CgbSound(void) } loc_82E0FD6: - if (channels->mo & 0x2) + if (channels->modify & 0x2) { - if (ch < 4 && (channels->ty & 0x08)) + if (ch < 4 && (channels->type & 0x08)) { int biasH = REG_SOUNDBIAS_H; if (biasH < 64) { - channels->fr = (channels->fr + 2) & 0x7fc; + channels->frequency = (channels->frequency + 2) & 0x7fc; } else if (biasH < 128) { - channels->fr = (channels->fr + 1) & 0x7fe; + channels->frequency = (channels->frequency + 1) & 0x7fe; } } if (ch != 4) { - *nrx3ptr = channels->fr; + *nrx3ptr = channels->frequency; } else { - *nrx3ptr = (*nrx3ptr & 0x08) | channels->fr; + *nrx3ptr = (*nrx3ptr & 0x08) | channels->frequency; } - channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->fr) + 1)); + channels->n4 = (channels->n4 & 0xC0) + (*((u8*)(&channels->frequency) + 1)); *nrx4ptr = (s8)(channels->n4 & mask); } - if (channels->mo & 1) + if (channels->modify & 1) { REG_NR51 = (REG_NR51 & ~channels->panMask) | channels->pan; if (ch == 3) { - *nrx2ptr = gCgb3Vol[channels->ev]; + *nrx2ptr = gCgb3Vol[channels->envelopeVolume]; if (channels->n4 & 0x80) { *nrx0ptr = 0x80; @@ -1162,7 +1166,7 @@ void CgbSound(void) else { evAdd &= 0xf; - *nrx2ptr = (channels->ev << 4) + evAdd; + *nrx2ptr = (channels->envelopeVolume << 4) + evAdd; *nrx4ptr = channels->n4 | 0x80; if (ch == 1 && !(*nrx0ptr & 0x08)) { @@ -1172,7 +1176,7 @@ void CgbSound(void) } LAST_LABEL: - channels->mo = 0; + channels->modify = 0; } } @@ -1532,13 +1536,13 @@ void ply_xrele(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track void ply_xiecv(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - track->echoVolume = *track->cmdPtr; + track->pseudoEchoVolume = *track->cmdPtr; track->cmdPtr++; } void ply_xiecl(struct MusicPlayerInfo *mplayInfo, struct MusicPlayerTrack *track) { - track->echoLength = *track->cmdPtr; + track->pseudoEchoLength = *track->cmdPtr; track->cmdPtr++; } @@ -53,7 +53,7 @@ extern void Hang(void); extern void VBlank_CB(void); extern void nullsub_17(void); -extern void sub_800BD08(void); // music initializer +extern void InitMusic(void); // music initializer extern void sub_800D6AC(void); extern void sub_800D7D0(void); @@ -135,9 +135,9 @@ void sub_800B540(void) } nullsub_17(); - sub_800BD08(); // initialize music and stop DMAs + InitMusic(); // initialize music and stop DMAs - while(REG_VCOUNT <= 159){} + while(REG_VCOUNT < 160){} REG_IE ^= INTR_FLAG_TIMER3 | INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT; // 0x45 @@ -156,7 +156,7 @@ void sub_800B540(void) gInterruptsEnabled = 1; EnableInterrupts(); - while(REG_VCOUNT <= 159){} + while(REG_VCOUNT < 160){} } bool8 EnableInterrupts(void) diff --git a/src/main_menu.c b/src/main_menu.c index e590334..62dc4d9 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -2,6 +2,8 @@ #include "debug_menu.h" #include "main_menu.h" #include "adventure_log.h" +#include "input.h" +#include "menu.h" // NOTE: 0x13 and 0x14 // Communication Screen? @@ -35,9 +37,9 @@ extern void CreateWonderMailMenu(void); extern void CreateLoadScreen(u32); extern s32 sub_8035DB4(u32); extern void CreateRescuePasswordMenu(u32); -extern void sub_803850C(u32); +extern void CreateSaveMenu(u32); extern s32 UpdateMainMenu(void); -extern s32 sub_803941C(void); +extern s32 UpdateLoadScreenMenu(void); extern s32 UpdateTradeItemsMenu(void); extern s32 UpdateFriendRescueMenu(void); extern s32 UpdateWonderMailMenu(void); @@ -45,7 +47,7 @@ extern s32 UpdateDualSlotMenu(void); extern s32 UpdateWirelessCommsMenu(void); extern s32 UpdateRescuePasswordMenu(void); extern s32 sub_80383D4(void); -extern s32 sub_8038630(void); +extern s32 UpdateSaveMenu(void); extern void CleanMainMenu(void); extern void CleanLoadScreen(void); @@ -57,7 +59,49 @@ extern void CleanDualSlotMenu(void); extern void CleanWirelessCommsMenu(void); extern void CleanRescuePasswordMenu(void); extern void sub_80383A8(void); -extern void sub_8038604(void); +extern void CleanSaveMenu(void); + +struct unkSubStruct +{ + u32 unk0; + u32 unk4; +}; + +struct unkStruct_203B34C +{ + // size: 0x1A8 + u32 unk0; + u32 unk4; + struct unkSubStruct *unk8; // Array of menu choices?? + u8 fillC[0x30 - 0xC]; + s16 unk30; + u8 fill32[0x144 - 0x32]; + struct unkData unk144[4]; + /* 0x1A4 */ u32 currMenuChoice; +}; + +extern struct unkStruct_203B34C *gUnknown_203B34C; + +extern struct MainMenu *gMainMenu; +extern struct unkData gUnknown_80E59A8; +extern struct unkData gUnknown_80E59C8; +extern void sub_8006518(struct unkData *); +extern void sub_800641C(struct unkData *, u32, u32); + +extern bool8 SetMainMenuText(); +extern void SetMainMenuItems(); + +struct unkStruct_Menu +{ + // size 0x50; + u8 fil0[0x4C]; + u8 unk4C; + u8 fill4D[0x50 - 0x4D]; +}; + +extern void sub_8012D60(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); +extern void sub_8012E04(struct unkStruct_Menu *, const struct MenuItem *, u32, u32, u32, u32); + void InitMainMenu(void) { @@ -65,7 +109,7 @@ void InitMainMenu(void) gMainMenu = MemoryAlloc(sizeof(struct MainMenu),8); MemoryFill8((u8 *)gMainMenu, 0, sizeof(struct MainMenu)); } - gMainMenu->currMenu = 0xffdc; + gMainMenu->currMenu = MENU_NO_SCREEN_CHANGE; gMainMenu->nextMenu = MENU_MAIN_SCREEN; gMainMenu->lastMenu = MENU_MAIN_SCREEN; gMainMenu->unk38 = -1; @@ -97,7 +141,7 @@ void SetUpMenu(void) case MENU_AWAITING_RESCUE: case MENU_CONTINUE: case MENU_DELETE_SAVE_PROMPT: - case 9: + case MENU_DELETE_SAVE_CONFIRM: CreateLoadScreen(gMainMenu->nextMenu); break; case MENU_TRADE_ITEMS: @@ -131,8 +175,8 @@ void SetUpMenu(void) case 0x2b: case 0x2c: case 0x2d: - case 0x2e: - sub_803850C(gMainMenu->nextMenu); + case MENU_DELETE_SAVE: + CreateSaveMenu(gMainMenu->nextMenu); break; case MENU_DEBUG: CreateDebugMenu(); @@ -155,8 +199,8 @@ s32 UpdateMenu(void) case MENU_AWAITING_RESCUE: case MENU_CONTINUE: case MENU_DELETE_SAVE_PROMPT: - case 9: - nextMenu = sub_803941C(); + case MENU_DELETE_SAVE_CONFIRM: + nextMenu = UpdateLoadScreenMenu(); break; case MENU_TRADE_ITEMS: iVar1 = UpdateTradeItemsMenu(); @@ -212,8 +256,8 @@ s32 UpdateMenu(void) case 0x2b: case 0x2c: case 0x2d: - case 0x2e: - nextMenu = sub_8038630(); + case MENU_DELETE_SAVE: + nextMenu = UpdateSaveMenu(); break; case MENU_DEBUG: nextMenu = UpdateDebugMenu(); @@ -235,7 +279,7 @@ void CleanUpMenu(void) case MENU_AWAITING_RESCUE: case MENU_CONTINUE: case MENU_DELETE_SAVE_PROMPT: - case 9: + case MENU_DELETE_SAVE_CONFIRM: CleanLoadScreen(); break; case MENU_TRADE_ITEMS: @@ -276,8 +320,8 @@ void CleanUpMenu(void) case 0x2b: case 0x2c: case 0x2d: - case 0x2e: - sub_8038604(); + case MENU_DELETE_SAVE: + CleanSaveMenu(); break; case MENU_DEBUG: DeleteDebugMenu(); @@ -305,3 +349,186 @@ void sub_8035C1C(void) gMainMenu->sub.unk2C = 1; gMainMenu->sub.unk2D = 0; } + +void +SetMenuItems(struct unkStruct_Menu *param_1, struct unkData *unkData, int param_3, const struct unkData *param_4, const struct MenuItem *param_5, char param_6 ,u32 param_7, u32 unused_8) +{ + unkData[param_3] = *param_4; + ResetUnusedInputStruct(); + sub_800641C(unkData,1,1); + if (param_6 != '\0') { + sub_8012D60(¶m_1[param_3],param_5,0,0,param_7,param_3); + } + else { + sub_8012E04(¶m_1[param_3],param_5,0,0,0,param_3); + } + param_1[param_3].unk4C = 1; +} + +void sub_8035CC0(struct unkData *dataArray, u32 index) +{ + sub_8006518(dataArray); + 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) +{ + gMainMenu->unk38 = -1; +} + +void sub_8035D30(s32 r0) +{ + gMainMenu->unk38 = r0; +} + +s16 sub_8035D3C(void) +{ + return gMainMenu->unk38; +} + +struct MainMenu *GetMainMenu(void) +{ + return gMainMenu; +} + +void sub_8035D58(void) +{ + gMainMenu->unk3C = -1; +} + +void sub_8035D68(s32 r0) +{ + gMainMenu->unk3C = r0; +} + +s32 sub_8035D74(void) +{ + return gMainMenu->unk3C; +} + + +// Unused +NAKED +void sub_8035D80(void *r0) +{ + asm_unified( + "\tldr r1, _08035D90\n" + "\tldr r2, [r1]\n" + "\tldr r1, [r0, 0x4]\n" + "\tldr r0, [r0]\n" + "\tstr r0, [r2, 0x30]\n" + "\tstr r1, [r2, 0x34]\n" + "\tbx lr\n" + "\t.align 2, 0\n" +"_08035D90: .4byte gMainMenu"); +} + +u8 *sub_8035D94(void) +{ + return &gMainMenu->unk30; +} + + +void sub_8035DA0(void) +{ + gMainMenu->unk30 = 0; + gMainMenu->unk34 = 0; +} + +s32 sub_8035DB4(u32 currMenu) +{ + s32 returnVar = 8; + switch(currMenu) + { + case MENU_COMMUNICATION_1: + returnVar = 0; + break; + case MENU_COMMUNICATION_2: + returnVar = 1; + break; + case 0x15: + returnVar = 2; + break; + case 0x16: + returnVar = 3; + break; + case 0x17: + returnVar = 4; + break; + case 0x18: + returnVar = 5; + break; + case 0x19: + returnVar = 6; + break; + case 0x1a: + returnVar = 7; + } + return returnVar; +} + +void DrawMainMenu(void) +{ + s32 iVar3; + + if(gUnknown_203B34C == NULL) + { + gUnknown_203B34C = MemoryAlloc(sizeof(struct unkStruct_203B34C), 8); + MemoryFill8((u8 *)gUnknown_203B34C, 0, sizeof(struct unkStruct_203B34C)); + } + + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B34C->unk144[iVar3] = gUnknown_80E59C8; + } + + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B34C->unk144, 1, 1); + SetMainMenuItems(); + gUnknown_203B34C->currMenuChoice = -1; + + if(SetMainMenuText()) + { + sub_8035CF4(&gUnknown_203B34C->unk4,2,0); + } + + sub_8035CF4(&gUnknown_203B34C->unk4,0,1); + gUnknown_203B34C->unk0 = 1; +} + +void CleanMainMenu(void) +{ + ResetUnusedInputStruct(); + sub_800641C(NULL, 1, 1); + if(gUnknown_203B34C != NULL) + { + MemoryFree(gUnknown_203B34C); + gUnknown_203B34C = NULL; + } +} + diff --git a/src/main_menu_1.c b/src/main_menu_1.c index 6715af4..1879db4 100644 --- a/src/main_menu_1.c +++ b/src/main_menu_1.c @@ -1,23 +1,18 @@ #include "global.h" #include "main_menu.h" +#include "menu.h" struct unkData { u8 unk0[24]; }; -struct unkSubStruct -{ - u32 unk0; - u32 unk4; -}; - struct unkStruct_203B34C { // size: 0x1A8 u32 unk0; u32 unk4; - struct unkSubStruct *unk8; // Array of menu choices?? + struct MenuItem *unk8; // Array of menu choices?? u8 fillC[0x30 - 0xC]; s16 unk30; u8 fill32[0x144 - 0x32]; @@ -26,54 +21,54 @@ struct unkStruct_203B34C }; extern struct unkStruct_203B34C *gUnknown_203B34C; +extern u32 gUnknown_203B350; extern u32 gUnknown_80E59E0; -extern u32 gUnknown_203B350; -extern u32 gUnknown_80E59F8; extern u32 gUnknown_80E5A78; extern u32 gUnknown_80E5B34; -extern u32 gUnknown_80E5A90; -extern u32 gUnknown_80E5A60; -extern u32 gUnknown_80E5AFC; -extern u32 gUnknown_80E5B8C; -extern u32 gUnknown_80E5B4C; extern u32 gUnknown_80E5BC4; -extern u32 gUnknown_80E5BDC; -extern u32 gUnknown_80E5C18; - extern u32 gUnknown_80E5CB4; -extern u32 gUnknown_80E5D48; -extern u32 gUnknown_80E5CCC; -extern u32 gUnknown_80E5F1C; -extern u32 gUnknown_80E5DA0; -extern u32 gUnknown_80E5DF0; -extern u32 gUnknown_80E5D0C; -extern u32 gUnknown_80E6030; -extern u32 gUnknown_80E5FCC; -extern u32 gUnknown_80E5F80; -extern u32 gUnknown_80E5EBC; -extern u32 gUnknown_80E5E5C; +extern u32 gUnknown_80E5A60; + +extern const struct MenuItem gUnknown_80E59F8[]; +extern const struct MenuItem gUnknown_80E5A90[]; +extern const struct MenuItem gUnknown_80E5AFC[]; +extern const struct MenuItem gUnknown_80E5B4C[]; +extern const struct MenuItem gUnknown_80E5B8C[]; +extern const struct MenuItem gUnknown_80E5BDC[]; +extern const struct MenuItem gUnknown_80E5C18[]; +extern const struct MenuItem gUnknown_80E5CCC[]; +extern const struct MenuItem gUnknown_80E5D0C[]; +extern const struct MenuItem gUnknown_80E5D48[]; +extern const struct MenuItem gUnknown_80E5DA0[]; +extern const struct MenuItem gUnknown_80E5DF0[]; +extern const struct MenuItem gUnknown_80E5E5C[]; +extern const struct MenuItem gUnknown_80E5EBC[]; +extern const struct MenuItem gUnknown_80E5F1C[]; +extern const struct MenuItem gUnknown_80E5F80[]; +extern const struct MenuItem gUnknown_80E5FCC[]; +extern const struct MenuItem gUnknown_80E6030[]; extern u8 sub_803D0D8(); extern s32 sub_8011C34(); extern s32 sub_8095324(u32); -extern void SetMenuItems(u32 *, struct unkData *, u32, u32 *, u32 *, u32, u32, u32); +extern void SetMenuItems(u32 *, struct unkData *, u32, u32 *, const struct MenuItem *, u32, u32, u32); void SetMainMenuItems(void); -extern u8 SetMainMenuText(); +extern bool8 SetMainMenuText(); extern void sub_8035CF4(u32 *, u32, u32); extern void sub_8035CC0(struct unkData *, u32); -u8 SetMainMenuText(void) +bool8 SetMainMenuText(void) { u32 menuChoice; - struct unkSubStruct *preload; + struct MenuItem *preload; // Have to load the pointer before the index preload = gUnknown_203B34C->unk8; - menuChoice = preload[gUnknown_203B34C->unk30].unk4; // chosen menu action? + menuChoice = preload[gUnknown_203B34C->unk30].menuAction; // chosen menu action? if (gUnknown_203B34C->currMenuChoice == menuChoice) { - return 0; + return FALSE; } gUnknown_203B34C->currMenuChoice = menuChoice; @@ -82,55 +77,55 @@ u8 SetMainMenuText(void) switch(menuChoice) { case MENU_WIRELESS_COMMS: // Using wireless communications, you can go on an adventure to unknown worlds. - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E6030,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E6030,0,0,0); break; case MENU_WONDER_MAIL: // Using passwords, you can receive Wonder Mail - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5F80,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F80,0,0,0); break; case MENU_AWAITING_RESCUE: // You are awaiting resuce by a friend // You can give up waiting for rescue - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5F1C,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5F1C,0,0,0); break; case MENU_NEW_GAME: // Start an entirely new adventure - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5CCC,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5CCC,0,0,0); break; case MENU_CONTINUE: // Resume your adventure from where you last saved - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5DA0,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DA0,0,0,0); break; case MENU_DELETE_SAVE_PROMPT: // This will delete your saved game data. // Beware! This will delete it forever - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5DF0,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5DF0,0,0,0); break; case MENU_ADVENTURE_LOG: // Check your career as an adventurer - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5D0C,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D0C,0,0,0); break; case MENU_FRIEND_RESCUE: // Using a Game Link cable or passwords, friends may rescue each other - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5E5C,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5E5C,0,0,0); break; case MENU_TRADE_ITEMS: // Using a Game Link cable you can trade stored items with a friend - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5EBC,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5EBC,0,0,0); break; case MENU_DUAL_SLOT: // Using Dual Slot function, you can receive teams from your friends - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5FCC,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5FCC,0,0,0); break; case MENU_DEBUG: // This is the Debug Mode. // It won't be in the release version - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,&gUnknown_80E5D48,0,0,0); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,2,&gUnknown_80E5CB4,gUnknown_80E5D48,0,0,0); break; default: break; } - return 1; + return TRUE; } void sub_803623C(void) @@ -138,7 +133,7 @@ void sub_803623C(void) sub_8035CC0(gUnknown_203B34C->unk144,1); SetMainMenuItems(); gUnknown_203B34C->currMenuChoice = -1; - if (SetMainMenuText() != 0) { + if (SetMainMenuText()) { sub_8035CF4(&gUnknown_203B34C->unk4,2,0); } sub_8035CF4(&gUnknown_203B34C->unk4,0,1); @@ -156,7 +151,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5C18,1,gUnknown_203B350,1); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5C18,1,gUnknown_203B350,1); } else { // Revive Team @@ -164,7 +159,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,&gUnknown_80E5BDC,1,gUnknown_203B350,1); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5BC4,gUnknown_80E5BDC,1,gUnknown_203B350,1); } } else { @@ -175,7 +170,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5AFC,1,gUnknown_203B350,1); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5AFC,1,gUnknown_203B350,1); } else { // Continue @@ -183,7 +178,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,&gUnknown_80E5A90,1,gUnknown_203B350,1); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A60,gUnknown_80E5A90,1,gUnknown_203B350,1); } } } @@ -195,7 +190,7 @@ void SetMainMenuItems(void) // Friend Rescue // Trade Items // Wonder Mail - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,&gUnknown_80E5B8C,1,gUnknown_203B350,1); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5A78,gUnknown_80E5B8C,1,gUnknown_203B350,1); } else { // Awaiting Rescue @@ -203,7 +198,7 @@ void SetMainMenuItems(void) // Adventure Log // Friend Rescue // Trade Items - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,&gUnknown_80E5B4C,1,gUnknown_203B350,1); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E5B34,gUnknown_80E5B4C,1,gUnknown_203B350,1); } } } @@ -211,7 +206,7 @@ void SetMainMenuItems(void) { // New Game // Adventure Log - SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,&gUnknown_80E59F8,1,gUnknown_203B350,1); + SetMenuItems(&gUnknown_203B34C->unk4,gUnknown_203B34C->unk144,0,&gUnknown_80E59E0,gUnknown_80E59F8,1,gUnknown_203B350,1); } } diff --git a/src/main_menu_mid.c b/src/main_menu_mid.c deleted file mode 100644 index e6e0868..0000000 --- a/src/main_menu_mid.c +++ /dev/null @@ -1,208 +0,0 @@ -#include "global.h" -#include "main_menu.h" -#include "input.h" - -struct unkData -{ - u8 unk0[24]; -}; - -struct unkSubStruct -{ - u32 unk0; - u32 unk4; -}; - -struct unkStruct_203B34C -{ - // size: 0x1A8 - u32 unk0; - u32 unk4; - struct unkSubStruct *unk8; // Array of menu choices?? - u8 fillC[0x30 - 0xC]; - s16 unk30; - u8 fill32[0x144 - 0x32]; - struct unkData unk144[4]; - /* 0x1A4 */ u32 currMenuChoice; -}; - -extern struct unkStruct_203B34C *gUnknown_203B34C; - - - -extern struct MainMenu *gMainMenu; -extern struct unkData gUnknown_80E59A8; -extern struct unkData gUnknown_80E59C8; -extern void sub_8006518(struct unkData *); -extern void sub_800641C(struct unkData *, u32, u32); -extern void *MemoryAlloc(u32, u32); -extern void MemoryFill8(u8*, u8, s32); -extern void MemoryFree(void *); - -extern u8 SetMainMenuText(); -extern void SetMainMenuItems(); - -void sub_8035CC0(struct unkData *dataArray, u32 index) -{ - sub_8006518(dataArray); - 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) -{ - gMainMenu->unk38 = -1; -} - -void sub_8035D30(s32 r0) -{ - gMainMenu->unk38 = r0; -} - -s16 sub_8035D3C(void) -{ - return gMainMenu->unk38; -} - -struct MainMenu *GetMainMenu(void) -{ - return gMainMenu; -} - -void sub_8035D58(void) -{ - gMainMenu->unk3C = -1; -} - -void sub_8035D68(s32 r0) -{ - gMainMenu->unk3C = r0; -} - -s32 sub_8035D74(void) -{ - return gMainMenu->unk3C; -} - -NAKED -void sub_8035D80(void *r0) -{ - asm_unified( - "\tldr r1, _08035D90\n" - "\tldr r2, [r1]\n" - "\tldr r1, [r0, 0x4]\n" - "\tldr r0, [r0]\n" - "\tstr r0, [r2, 0x30]\n" - "\tstr r1, [r2, 0x34]\n" - "\tbx lr\n" - "\t.align 2, 0\n" -"_08035D90: .4byte gMainMenu"); -} - -u8 *sub_8035D94(void) -{ - return &gMainMenu->unk30; -} - - -void sub_8035DA0(void) -{ - gMainMenu->unk30 = 0; - gMainMenu->unk34 = 0; -} - -u32 sub_8035DB4(u32 r0) -{ - u32 returnVar = 8; - switch(r0) - { - case MENU_COMMUNICATION_1: - returnVar = 0; - break; - case MENU_COMMUNICATION_2: - returnVar = 1; - break; - case 0x15: - returnVar = 2; - break; - case 0x16: - returnVar = 3; - break; - case 0x17: - returnVar = 4; - break; - case 0x18: - returnVar = 5; - break; - case 0x19: - returnVar = 6; - break; - case 0x1a: - returnVar = 7; - } - return returnVar; -} - -void DrawMainMenu(void) -{ - s32 iVar3; - - if(gUnknown_203B34C == NULL) - { - gUnknown_203B34C = MemoryAlloc(0x1A8, 8); - MemoryFill8((u8 *)gUnknown_203B34C, 0, 0x1A8); - } - - for(iVar3 = 0; iVar3 < 4; iVar3++) - { - gUnknown_203B34C->unk144[iVar3] = gUnknown_80E59C8; - } - - ResetUnusedInputStruct(); - sub_800641C(gUnknown_203B34C->unk144, 1, 1); - SetMainMenuItems(); - gUnknown_203B34C->currMenuChoice = -1; - - if(SetMainMenuText() != 0) - { - sub_8035CF4(&gUnknown_203B34C->unk4,2,0); - } - - sub_8035CF4(&gUnknown_203B34C->unk4,0,1); - gUnknown_203B34C->unk0 = 1; -} - -void CleanMainMenu(void) -{ - ResetUnusedInputStruct(); - sub_800641C(NULL, 1, 1); - if(gUnknown_203B34C != NULL) - { - MemoryFree(gUnknown_203B34C); - gUnknown_203B34C = NULL; - } -} diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c new file mode 100644 index 0000000..6061531 --- /dev/null +++ b/src/makuhita_dojo.c @@ -0,0 +1,184 @@ +#include "global.h" +#include "file_system.h" +#include "pokemon.h" +#include "input.h" +#include "constants/species.h" + +struct unkData +{ + u8 unk0[24]; +}; + +struct unkStruct_203B318 +{ + // size: 0xcc + u32 unk0; + u32 unk4; + s32 unk8; + u8 fillC[0x10 - 0xC]; + s16 unk10; + u8 fill[0x58 - 0x12]; + struct OpenedFile *faceFile; + u8 *faceData; + u16 unk60; + u16 unk62; + u8 unk64; + u8 unk65; + u8 unk66; + u8 unk67; + struct OpenedFile** unk68; + struct unkData unk6C[4]; +}; + +extern u8 gUnknown_202E5D8[]; +extern u8 gUnknown_202E1C8[]; +extern struct unkStruct_203B318 *gUnknown_203B318; +extern struct unkData gUnknown_80E0760; + +extern void sub_800641C(struct unkData *, u32, u32); +extern void sub_8006518(struct unkData *); +extern void *MemoryAlloc(u32, u32); +extern void MemoryFree(void *); + +extern void sub_8030208(); +extern void sub_8030258(); +extern void sub_80302A8(); +extern void sub_80302C4(); +extern void UpdateMakuhitaDialogue(); + +void sub_802FF04(s32); +void sub_802FF1C(); + +u32 CreateMakuhitaShop(u32 param_1) +{ + char *monName; + struct OpenedFile *faceFile; + u32 initialState; + + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gUnknown_203B318 = MemoryAlloc(0xcc,8); + gUnknown_203B318->unk10 = -1; + gUnknown_203B318->unk0 = param_1; + switch(param_1) { + case 0: + initialState = 0; + gUnknown_203B318->unk4 = 0; + break; + case 1: + initialState = 7; + gUnknown_203B318->unk4 = 0; + break; + case 2: + initialState = 6; + gUnknown_203B318->unk4 = 0; + break; + case 3: + initialState = 8; + gUnknown_203B318->unk4 = 0; + break; + case 4: + initialState = 0; + gUnknown_203B318->unk4 = 1; + break; + case 5: + initialState = 7; + gUnknown_203B318->unk4 = 1; + break; + case 6: + initialState = 6; + gUnknown_203B318->unk4 = 1; + break; + case 7: + default: + initialState = 8; + gUnknown_203B318->unk4 = 1; + break; + } + if (gUnknown_203B318->unk4 == 1) { + gUnknown_203B318->unk68 = NULL; + } + else { + gUnknown_203B318->unk68 = &gUnknown_203B318->faceFile; + } + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8,SPECIES_MAKUHITA); + CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8,SPECIES_MAKUHITA); + monName = GetMonSpecies(SPECIES_MAKUHITA); + strcpy(gUnknown_202E1C8 - 0x50, monName); + faceFile = GetDialogueSpriteDataPtr(SPECIES_MAKUHITA); + gUnknown_203B318->faceFile = faceFile; + gUnknown_203B318->faceData = faceFile->data; + gUnknown_203B318->unk64 = 0; + gUnknown_203B318->unk65 = 0; + gUnknown_203B318->unk66 = 0; + gUnknown_203B318->unk60 = 2; + gUnknown_203B318->unk62 = 8; + sub_802FF04(initialState); + return 1; +} + +u32 sub_802FE58(void) +{ + + switch(gUnknown_203B318->unk8) { + case 0: + case 1: + sub_8030208(); + break; + case 4: + sub_8030258(); + break; + case 11: + sub_80302A8(); + break; + case 13: + return 3; + default: + sub_80302C4(); + break; + } + return 0; +} + +s16 sub_802FED0(void) +{ + return gUnknown_203B318->unk10; +} + +void sub_802FEE0(void) +{ + if(gUnknown_203B318 != NULL) + { + CloseFile(gUnknown_203B318->faceFile); + MemoryFree(gUnknown_203B318); + gUnknown_203B318 = NULL; + } +} + +void sub_802FF04(s32 newState) +{ + gUnknown_203B318->unk8 = newState; + sub_802FF1C(); + UpdateMakuhitaDialogue(); +} + +void sub_802FF1C(void) +{ + s32 iVar3; + sub_8006518(gUnknown_203B318->unk6C); + switch(gUnknown_203B318->unk8) + { + case 0: + case 4: + case 13: + for(iVar3 = 0; iVar3 < 4; iVar3++) + { + gUnknown_203B318->unk6C[iVar3] = gUnknown_80E0760; + } + break; + default: + break; + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B318->unk6C, 1, 1); +} diff --git a/src/more_input.c b/src/more_input.c index 9ab4c97..d3c030c 100644 --- a/src/more_input.c +++ b/src/more_input.c @@ -1,28 +1,6 @@ #include "global.h" #include "input.h" -struct UnkInputStruct -{ - /* 0x0 */ u8 unk0; - /* 0x1 */ u8 unk1; - /* 0x2 */ u8 unk2; - /* 0x3 */ u8 unk3; - /* 0x4 */ u8 unk4; - /* 0x5 */ u32 unk5; - /* 0x9 */ u32 unk9; - /* 0xD */ u32 unkD; - /* 0x12 */ u32 unk11; - /* 0x16 */ u32 unk15; - /* 0x1A */ u32 unk19; - /* 0x1E */ u32 unk1D; - /* 0x24 */ u32 unk24; - /* 0x28 */ u8 unk28; - /* 0x29 */ u8 a_button; - /* 0x2A */ u8 b_button; - /* 0x2B */ u8 dpad_right; - /* 0x2C */ u8 dpad_left; -}; - extern void nullsub_34(struct UnkInputStruct *r0); extern struct Inputs gRealInputs; diff --git a/src/music_pre.c b/src/music_pre.c index b357b97..410c923 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -67,6 +67,15 @@ extern struct BGControlStruct gBG1Control; extern struct BGControlStruct gBG2Control; extern struct BGControlStruct gBG3Control; +enum +{ + BG0, + BG1, + BG2, + BG3, + NUM_BGS +}; + extern void SoundVSync(); extern void BlinkSavingIcon(); @@ -312,21 +321,21 @@ void sub_800BB44(void) u16 dispcnt_store; bool8 interrupt_flag; - while(REG_KEYINPUT != 0x3ff){} + while(REG_KEYINPUT != KEYS_MASK){} interrupt_flag = DisableInterrupts(); - while(REG_VCOUNT <= 159){} + while(REG_VCOUNT < 160){} dispcnt_store = REG_DISPCNT; - REG_DISPCNT = 0x80; + REG_DISPCNT = DISPCNT_FORCED_BLANK; - *(vu16 *)BG_PLTT = 0x7fff; + *(vu16 *)BG_PLTT = RGB_WHITE; ie_store = REG_IE; REG_IE = INTR_FLAG_KEYPAD | INTR_FLAG_GAMEPAK; - REG_KEYCNT = 0x8304; + REG_KEYCNT = KEY_AND_INTR | R_BUTTON | L_BUTTON | SELECT_BUTTON; // 0x8304 REG_IME = 1; SoundBiasReset(); @@ -337,11 +346,11 @@ void sub_800BB44(void) REG_IE = ie_store; REG_KEYCNT = 0; REG_DISPCNT = dispcnt_store; - *(vu16 *)BG_PLTT = 0; + *(vu16 *)BG_PLTT = RGB_BLACK; if(interrupt_flag) EnableInterrupts(); - while(REG_KEYINPUT != 0x3ff){} + while(REG_KEYINPUT != KEYS_MASK){} } void nullsub_17(void) @@ -350,21 +359,21 @@ void nullsub_17(void) void UpdateBGControlRegisters(void) { - u32 BG[4]; + u32 BGCNT_Priority[NUM_BGS]; if(gUnknown_202D7FE == 1) { - BG[0] = 1; - BG[1] = 2; - BG[2] = 0; - BG[3] = 3; + BGCNT_Priority[BG0] = BGCNT_PRIORITY(1); + BGCNT_Priority[BG1] = BGCNT_PRIORITY(2); + BGCNT_Priority[BG2] = BGCNT_PRIORITY(0); + BGCNT_Priority[BG3] = BGCNT_PRIORITY(3); } else { - BG[0] = 0; - BG[1] = 1; - BG[2] = 2; - BG[3] = 3; + BGCNT_Priority[BG0] = BGCNT_PRIORITY(0); + BGCNT_Priority[BG1] = BGCNT_PRIORITY(1); + BGCNT_Priority[BG2] = BGCNT_PRIORITY(2); + BGCNT_Priority[BG3] = BGCNT_PRIORITY(3); } REG_BG0HOFS = gBG0Control.hofs; @@ -376,23 +385,17 @@ void UpdateBGControlRegisters(void) REG_BG3HOFS = gBG3Control.hofs; REG_BG3VOFS = gBG3Control.vofs; - REG_BG0CNT = BG[0] | 0xB0 << 6; - REG_BG1CNT = BG[1] | 0xB4 << 6; - if(gBG2Control.unk2 == 0x80 << 8) - { - REG_BG2CNT = BG[2] | 0x2e08; - } + REG_BG0CNT = BGCNT_Priority[BG0] | BGCNT_SCREENBASE(12) | BGCNT_CHARBASE(0) | BGCNT_WRAP; // 0x2C00 + REG_BG1CNT = BGCNT_Priority[BG1] | BGCNT_SCREENBASE(13) | BGCNT_CHARBASE(0) | BGCNT_WRAP; // 0x2D00 + if(gBG2Control.unk2 == 0x8000) + REG_BG2CNT = BGCNT_Priority[BG2] | BGCNT_SCREENBASE(14) | BGCNT_CHARBASE(2) | BGCNT_WRAP; // 0x2E08 else - { - REG_BG2CNT = BG[2] | 0xB8 << 6; - } - - REG_BG3CNT = BG[3] | 0x2f08; + REG_BG2CNT = BGCNT_Priority[BG2] | BGCNT_SCREENBASE(14) | BGCNT_CHARBASE(0) | BGCNT_WRAP; // 0x2E00 + REG_BG3CNT = BGCNT_Priority[BG3] | BGCNT_SCREENBASE(15) | BGCNT_CHARBASE(2) | BGCNT_WRAP; REG_BLDCNT = gBldCnt; } -// Some kind of initializer for music? -void sub_800BD08(void) +void InitMusic(void) { s32 counter; u16 zero; @@ -477,7 +480,6 @@ void StartNewBGM(u16 songIndex) void FadeInNewBGM(u16 SongIndex, u16 speed) { bool8 interrupt_flag; - u16 temp_store; if(!IsBGSong(SongIndex)) return; @@ -485,8 +487,7 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) return; if(SongIndex == gCurrentBGSong) { - temp_store = gBGMusicPlayerState - 1; - if((temp_store) <= 1) + if((u16)(gBGMusicPlayerState - 1) <= 1) return; } @@ -608,8 +609,8 @@ void sub_800C074(u16 SongIndex, u16 param_2) if (SongIndex == 0x3e5) return; - if (0x100 < param_2) - param_2 = 0x100; + if (256 < param_2) + param_2 = 256; if (sub_800CACC(SongIndex)) { diff --git a/src/other_menus.c b/src/other_menus.c index f64c976..86a90fc 100644 --- a/src/other_menus.c +++ b/src/other_menus.c @@ -1,6 +1,8 @@ #include "global.h" #include "input.h" #include "main_menu.h" +#include "gUnknown_203B460.h" +#include "menu.h" struct unkData { @@ -29,34 +31,34 @@ extern struct unkStruct_203B35C *gUnknown_203B35C; extern struct unkData gUnknown_80E653C; -extern u32 gUnknown_80E66BC; -extern u32 gUnknown_80E66D4; -extern u32 gUnknown_80E6748; -extern u32 gUnknown_80E6760; -extern u32 gUnknown_80E67D4; -extern u32 gUnknown_80E67EC; -extern u32 gUnknown_80E689C; -extern u32 gUnknown_80E68B4; -extern u32 gUnknown_80E6938; -extern u32 gUnknown_80E6950; -extern u32 gUnknown_80E69B0; -extern u32 gUnknown_80E69C8; -extern u32 gUnknown_80E6A10; -extern u32 gUnknown_80E6A28; -extern u32 gUnknown_80E6A74; -extern u32 gUnknown_80E6A8C; -extern u32 gUnknown_80E6B78; -extern u32 gUnknown_80E6B90; -extern u32 gUnknown_80E6BF4; -extern u32 gUnknown_80E6C0C; -extern u32 gUnknown_80E6C50; -extern u32 gUnknown_80E6C68; -extern u32 gUnknown_80E6CD0; -extern u32 gUnknown_80E6CE8; -extern u32 gUnknown_80E6DDC; -extern u32 gUnknown_80E6DF4; -extern u32 gUnknown_80E6D54; -extern u32 gUnknown_80E6D6C; +extern struct unkData gUnknown_80E66BC; +extern struct MenuItem gUnknown_80E66D4[]; +extern struct unkData gUnknown_80E6748; +extern struct MenuItem gUnknown_80E6760[]; +extern struct unkData gUnknown_80E67D4; +extern struct MenuItem gUnknown_80E67EC[]; +extern struct unkData gUnknown_80E689C; +extern struct MenuItem gUnknown_80E68B4[]; +extern struct unkData gUnknown_80E6938; +extern struct MenuItem gUnknown_80E6950[]; +extern struct unkData gUnknown_80E69B0; +extern struct MenuItem gUnknown_80E69C8[]; +extern struct unkData gUnknown_80E6A10; +extern struct MenuItem gUnknown_80E6A28[]; +extern struct unkData gUnknown_80E6A74; +extern struct MenuItem gUnknown_80E6A8C[]; +extern struct unkData gUnknown_80E6B78; +extern struct MenuItem gUnknown_80E6B90[]; +extern struct unkData gUnknown_80E6BF4; +extern struct MenuItem gUnknown_80E6C0C[]; +extern struct unkData gUnknown_80E6C50; +extern struct MenuItem gUnknown_80E6C68[]; +extern struct unkData gUnknown_80E6CD0; +extern struct MenuItem gUnknown_80E6CE8[]; +extern struct unkData gUnknown_80E6DDC; +extern struct MenuItem gUnknown_80E6DF4[]; +extern struct unkData gUnknown_80E6D54; +extern struct MenuItem gUnknown_80E6D6C[]; struct unkStruct_8035D94 { @@ -67,12 +69,7 @@ struct unkStruct_8035D94 extern struct unkStruct_8035D94 *sub_8035D94(); -struct unkStruct_203B460 -{ - u8 unk0[0x50]; - u16 unk50[10]; -}; -extern struct unkStruct_203B460 *gUnknown_203B460; // TODO unify this +extern struct unkStruct_203B460 *gUnknown_203B460; extern void sub_8037400(void); extern void sub_800641C(void *, u32, u32); @@ -92,7 +89,7 @@ extern void sub_80371B8(void); extern void sub_8037900(void); extern void PlayMenuSoundEffect(u32); extern u32 sub_8037798(void); -extern void SetMenuItems(void *, void *, u32, u32 *, u32 *, u32, u32, u32); +extern void SetMenuItems(void *, void *, u32, struct unkData *, struct MenuItem *, u32, u32, u32); extern void sub_8005838(u32, u32); extern void sub_80060EC(); extern void sub_800CB20(); @@ -131,7 +128,7 @@ void sub_8036FDC(s32 param_1) } ResetUnusedInputStruct(); sub_800641C(gUnknown_203B35C->unk15C,1,1); - SetMenuItems(&gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,&gUnknown_80E6CE8,0, + SetMenuItems(&gUnknown_203B35C->unk1C,gUnknown_203B35C->unk15C,0,&gUnknown_80E6CD0,gUnknown_80E6CE8,0, 6,0); sub_8035CF4(&gUnknown_203B35C->unk1C,0,1); sub_80376CC(); @@ -313,11 +310,11 @@ u32 sub_80370F0(void) void sub_80371B8(void) { struct unkStruct_8035D94 *pbVar2; - u32 *ppuVar4; - u32 *puVar5; + struct MenuItem *MenuItems; + struct unkData *puVar5; puVar5 = NULL; - ppuVar4 = NULL; + MenuItems = NULL; sub_8037400(); if ((gUnknown_203B35C->unk0 < 2) &&(gUnknown_203B35C->unk4 == 0)) { if (sub_8037C10(0) != 0) { @@ -326,8 +323,7 @@ void sub_80371B8(void) // Success! // The item exchange with your friend // went through successfully - SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, &gUnknown_80E6C50, - &gUnknown_80E6C68, 0, 6, 0); + SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, &gUnknown_80E6C50, gUnknown_80E6C68, 0, 6, 0); sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1); } } @@ -337,57 +333,57 @@ void sub_80371B8(void) switch(gUnknown_203B35C->unk4) { case 0: puVar5 = &gUnknown_80E66BC; - ppuVar4 = &gUnknown_80E66D4; + MenuItems = gUnknown_80E66D4; break; case 3: puVar5 = &gUnknown_80E6D54; - ppuVar4 = &gUnknown_80E6D6C; + MenuItems = gUnknown_80E6D6C; break; case 2: puVar5 = &gUnknown_80E6DDC; - ppuVar4 = &gUnknown_80E6DF4; + MenuItems = gUnknown_80E6DF4; break; case 4: puVar5 = &gUnknown_80E67D4; - ppuVar4 = &gUnknown_80E67EC; + MenuItems = gUnknown_80E67EC; break; case 1: case 5: puVar5 = &gUnknown_80E6748; - ppuVar4 = &gUnknown_80E6760; + MenuItems = gUnknown_80E6760; break; case 6: puVar5 = &gUnknown_80E689C; - ppuVar4 = &gUnknown_80E68B4; + MenuItems = gUnknown_80E68B4; break; case 7: puVar5 = &gUnknown_80E6938; - ppuVar4 = &gUnknown_80E6950; + MenuItems = gUnknown_80E6950; break; case 9: puVar5 = &gUnknown_80E69B0; - ppuVar4 = &gUnknown_80E69C8; + MenuItems = gUnknown_80E69C8; break; case 0xb: puVar5 = &gUnknown_80E6A10; - ppuVar4 = &gUnknown_80E6A28; + MenuItems = gUnknown_80E6A28; break; case 0xd: puVar5 = &gUnknown_80E6A74; - ppuVar4 = &gUnknown_80E6A8C; + MenuItems = gUnknown_80E6A8C; break; case 0xe: puVar5 = &gUnknown_80E6B78; // Error, there was a problem on your friend's end - ppuVar4 = &gUnknown_80E6B90; + MenuItems = gUnknown_80E6B90; break; case 0xf: puVar5 = &gUnknown_80E6BF4; // Error, your friend is not responding - ppuVar4 = &gUnknown_80E6C0C; + MenuItems = gUnknown_80E6C0C; break; } - SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, puVar5, ppuVar4, 0, 6, 0); + SetMenuItems(&gUnknown_203B35C->unk1C, gUnknown_203B35C->unk15C, 0, puVar5, MenuItems, 0, 6, 0); sub_8035CF4(&gUnknown_203B35C->unk1C, 0, 1); // TODO clean this if statement up... if ((((gUnknown_203B35C->unk4 != 0) &&(gUnknown_203B35C->unk0 == 0)) && diff --git a/src/personality_test.c b/src/personality_test.c index 974ca03..8d28ef3 100644 --- a/src/personality_test.c +++ b/src/personality_test.c @@ -22,14 +22,12 @@ extern void sub_8014248(const char *text, u32, u32, u32 *r0, u32, u32, u32, u32, extern u32 sub_80144A4(s32 *); -extern char* GetMonSpecies(u32); extern void CopyStringtoBuffer(char *r0, char *r1); extern void sub_801602C(u32, char *r0); extern u32 sub_8016080(void); extern void sub_80160D8(void); extern void sub_8099690(u32); -extern void CopySpeciesNametoBuffer(char *r0, u32); extern void sub_8006518(void *); extern void sub_800641C(void *, u32, u32); @@ -94,7 +92,7 @@ extern u32 gGenderMenu; extern const char gUnknown_80F42C0; extern u8 gNatureQuestionTable[NUM_QUIZ_QUESTIONS]; -extern char gAvailablePokemonNames[0x50]; +extern u8 gAvailablePokemonNames[0x50]; extern const char gHardyDescription[]; extern const char gDocileDescription[]; diff --git a/src/pokemon.c b/src/pokemon.c index 75d7577..90a0c00 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2,8 +2,8 @@ #include "pokemon.h" #include "file_system.h" -extern u32 *gUnknown_203B45C; -extern u32 gUnknown_202F400; +extern u32 *gRecruitedPokemonRef; +extern u32 gRecruitedPokemon; extern struct FileArchive gSystemFileArchive; extern const char gUnknown_81075F4; extern struct OpenedFile *gMonsterParametersFile; @@ -12,7 +12,7 @@ extern struct gPokemon *gMonsterParameters; void LoadMonsterParameters(void) { - gUnknown_203B45C = &gUnknown_202F400; + gRecruitedPokemonRef = &gRecruitedPokemon; gMonsterParametersFile = OpenFileAndGetFileDataPtr(&gUnknown_81075F4, &gSystemFileArchive); gMonsterParameters = (struct gPokemon *)gMonsterParametersFile->data; gLevelCurrentPokeId = 0; @@ -20,6 +20,6 @@ void LoadMonsterParameters(void) u32 *sub_808CE00(void) { - return &gUnknown_202F400; + return &gRecruitedPokemon; } diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 440265b..a6aff55 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -104,9 +104,9 @@ u8 GetPokemonAbility(s16 index, u32 abilityIndex) return gMonsterParameters[index].abilities[abilityIndex]; } -s16 sub_808DCA0(s16 index, u32 r1) +s16 GetDexInternalNo(s16 index, u32 r1) { - return gMonsterParameters[index].unk3C[r1]; + return gMonsterParameters[index].dexInternal[r1]; } s16 GetBaseRecruit(s16 index) @@ -114,15 +114,15 @@ s16 GetBaseRecruit(s16 index) return gMonsterParameters[index].base_recruit; } -s16 sub_808DCDC(s16 index, s32 r1) +s16 GetAlphabetParentNo(s16 index, s32 r1) { - return gMonsterParameters[index].unk42[r1]; + return gMonsterParameters[index].alphabetParent[r1]; } -s16 sub_808DCFC(s16 index) +s16 GetInternalNo(s16 index) { - return gMonsterParameters[index].unk3C[1]; + return gMonsterParameters[index].dexInternal[1]; } #ifdef NONMATCHING @@ -159,7 +159,7 @@ u32 CalculateEXPGain(s16 index, s32 level) } #endif -s16 sub_808DD48(s16 index, struct unkEvolve *r1) +s16 GetPokemonEvolveConditions(s16 index, struct unkEvolve *r1) { struct EvolveStruct1 temp2; struct EvolveNeeds temp1; diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c new file mode 100644 index 0000000..e8405c8 --- /dev/null +++ b/src/pokemon_mid.c @@ -0,0 +1,94 @@ +#include "global.h" +#include "pokemon.h" +#include "constants/species.h" + +extern struct gPokemon *gMonsterParameters; +extern const char gUnknown_8107600[]; +extern const char gUnknown_8107608[]; +extern const char gUnownLetters[]; +extern const char gUnknown_8107630[]; +extern const char gUnknown_8107638[]; +extern const char gUnknown_810763C[]; + +extern void sub_800D158(u8 *buffer, const char *r2, ...); +extern s16 sub_808E770(u32); +extern s32 GetUnownIndex(s32); +extern void sub_80922B4(u8 *, u8 *, s32); + +extern void sub_800D158(u8 *buffer, const char *r2, ...); + +void CopySpeciesNametoBuffer(u8 * buffer, s16 index) +{ + strncpy(buffer, gMonsterParameters[index].species, 0x14); +} + +void CopyYellowSpeciesNametoBuffer(u8 *buffer, s16 index) +{ + s32 new_index = index; + sub_800D158(buffer, gUnknown_8107600, gMonsterParameters[new_index].species); // #c6%s#r +} + +void CopyCyanSpeciesNametoBuffer(u8 *buffer, s16 index) +{ + s32 new_index = index; + sub_800D158(buffer, gUnknown_8107608, gMonsterParameters[new_index].species); // #c5%s#r +} + +void sub_808D930(u8 *buffer, s16 index) +{ + char *unownString; + s32 newIndex; + s32 unownIndex; + const char *preload; + + newIndex = index; + if (sub_808E770(newIndex) == SPECIES_UNOWN) { + preload = gUnknown_8107630; // %s%c + unownString = GetMonSpecies(SPECIES_UNOWN); + unownIndex = GetUnownIndex(newIndex); + sub_800D158(buffer,preload,unownString,gUnownLetters[unownIndex]); // ABCDEFGHIJKLMNOPQRSTUVWXYZ!? + } + else { + sub_800D158(buffer,gUnknown_8107638, gMonsterParameters[newIndex].species); // %s + } +} + +char * GetMonSpecies(s16 index) +{ + return gMonsterParameters[index].species; +} + +void sub_808D9AC(u8 *param_1, u8 *param_2, s32 param_3) +{ + u8 auStack32 [20]; + + sub_80922B4(auStack32, param_2 + 0x4c, 10); + if (param_3 == 0) { + param_3 = 5; + } + sub_800D158(param_1,gUnknown_810763C,param_3,auStack32); // #c%c%s#r +} + +void sub_808D9DC(u8 *param_1, u8 *param_2, s32 param_3) +{ + u8 auStack32 [20]; + + sub_80922B4(auStack32, param_2 + 0x58, 10); + if (param_3 == 0) { + param_3 = 6; + } + sub_800D158(param_1,gUnknown_810763C,param_3,auStack32); // #c%c%s#r +} + +void sub_808DA0C(u8 *param_1, u8 *param_2) +{ + u8 auStack32 [20]; + + sub_80922B4(auStack32, param_2 + 0x58, 10); + sub_800D158(param_1,gUnknown_8107638,auStack32); // %s +} + +void sub_808DA34(u8 *param_1, u8 *param_2) +{ + sub_80922B4(param_1, param_2 + 0x4c, 10); +} diff --git a/src/post_office_guide.c b/src/post_office_guide.c new file mode 100644 index 0000000..42a8acb --- /dev/null +++ b/src/post_office_guide.c @@ -0,0 +1,568 @@ +#include "global.h" +#include "pokemon.h" +#include "file_system.h" +#include "input.h" +#include "constants/species.h" +#include "menu.h" + +struct PostOfficeHelper +{ + // size: 0x18 + u8 state; + s32 currMenuChoice; + struct OpenedFile *faceFile; + u8 *faceData; + u16 unk10; + u16 unk12; + u8 unk14; + u8 unk15; + u8 unk16; +}; + +extern struct PostOfficeHelper *gPostOfficeHelper; + + +struct unkData +{ + u8 unk0[20]; + const u8 *unk20; +}; + +struct unkStruct_203B330 +{ + struct UnkInputStruct *unk0; + u8 fill4[0x8]; + u8 unkC; + u8 unkD; + u8 fillE[2]; + u32 unk10; + struct unkData *unk14; + struct unkData unk18[3]; +}; +extern struct unkStruct_203B330 *gUnknown_203B330; + + +extern const char DeletingMailInfo_Text[]; +extern const char GetHelp_Text[]; +extern const char GoRescue_Text[]; +extern const char FriendRescueInfo_Text[]; + +extern const char SendThankYouMail_Text[]; +extern const char ReceiveAOKMail_Text[]; +extern const char SendSOSMail_Text[]; +extern const char GettingHelp_Text[]; +extern const char GetThankYouMail_Text[]; +extern const char SendAOKMail_Text[]; +extern const char LeaveForRescue_Text[]; +extern const char ReceiveSOSMail_Text[]; +extern const char RescueProcedures_Text[]; +extern const char Exit_80EA0EC[]; + + +extern const char Cancel_80E0A78[]; +extern const char FriendRescue_80E0A80[]; +extern const char Delivery_Text[]; +extern const char BulletinBoard_Text[]; +extern const char PostOffice_Text[]; + +const struct MenuItem gPostOfficeHelpStartMenu[] = +{ + {PostOffice_Text, 0x0}, + {BulletinBoard_Text, 0x1}, + {Delivery_Text, 0x2}, + {FriendRescue_80E0A80,0x3}, + {Cancel_80E0A78,0x4}, + {NULL,0x5} +}; + +ALIGNED(4) const char Cancel_80E0A78[] = _("Cancel"); +ALIGNED(4) const char FriendRescue_80E0A80[] = _("{COLOR_1 YELLOW}Friend Rescue{END_COLOR_TEXT_1} "); +ALIGNED(4) const char Delivery_Text[] = _("Delivery"); +ALIGNED(4) const char BulletinBoard_Text[] = _("Bulletin Board"); +ALIGNED(4) const char PostOffice_Text[] = _("Post Office"); + +const struct MenuItem gPostOfficeHelpFriendRescueMenu[] = +{ + {FriendRescueInfo_Text, 0x6}, + {GoRescue_Text, 0x7}, + {GetHelp_Text, 0x8}, + {DeletingMailInfo_Text,0x9}, + {Exit_80EA0EC,0x5}, + {NULL,0x5} +}; + +ALIGNED(4) const char Exit_80EA0EC[] = _("Exit"); +ALIGNED(4) const char DeletingMailInfo_Text[] = _("Deleting Mail Info"); +ALIGNED(4) const char GetHelp_Text[] = _("{COLOR_1 YELLOW}Get help{END_COLOR_TEXT_1} "); +ALIGNED(4) const char GoRescue_Text[] = _("{COLOR_1 YELLOW}Go rescue{END_COLOR_TEXT_1} "); +ALIGNED(4) const char FriendRescueInfo_Text[] = _("Friend Rescue Info"); + + +const struct MenuItem gPostOfficeHelpGoRescueMenu[] = +{ + {RescueProcedures_Text, 0xA}, + {ReceiveSOSMail_Text, 0xB}, + {LeaveForRescue_Text, 0xC}, + {SendAOKMail_Text, 0xD}, + {GetThankYouMail_Text,0xE}, + {Exit_80EA0EC,0x5}, + {NULL,0x5} +}; + +ALIGNED(4) const char GetThankYouMail_Text[] = _("Get Thank-You Mail"); +ALIGNED(4) const char SendAOKMail_Text[] = _("Send A-OK Mail"); +ALIGNED(4) const char LeaveForRescue_Text[] = _("Leave for Rescue"); +ALIGNED(4) const char ReceiveSOSMail_Text[] = _("Receive SOS Mail"); +ALIGNED(4) const char RescueProcedures_Text[] = _("Rescue Procedures"); + + +const struct MenuItem gPostOfficeHelpGetHelpMenu[] = +{ + {GettingHelp_Text, 0xF}, + {SendSOSMail_Text, 0x10}, + {ReceiveAOKMail_Text, 0x11}, + {SendThankYouMail_Text,0x12}, + {Exit_80EA0EC,0x5}, + {NULL,0x5} +}; + +ALIGNED(4) const char SendThankYouMail_Text[] = _("Send Thank-You Mail"); +ALIGNED(4) const char ReceiveAOKMail_Text[] = _("Receive A-OK Mail"); +ALIGNED(4) const char SendSOSMail_Text[] = _("Send SOS Mail"); +ALIGNED(4) const char GettingHelp_Text[] = _("Getting Help"); + +#include "data/pelipper_help_guide_dialogue.h" + +ALIGNED(4) const u8 wonder_mail_fill[] = _("pksdir0"); + +const struct unkData gUnknown_80E1EFC = +{ + 0, 0, 0, 0, + 3, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + NULL +}; + +const u8 gUnkData_80E1F14[] = {1, 0, 8, 0}; + +const struct unkData gUnknown_80E1F18 = +{ + 0, 0, 0, 0, + 6, 0, 0, 0, + 2, 0, 2, 0, + 0x14, 0, 4, 0, + 4, 0, 0, 0, + gUnkData_80E1F14 +}; + +extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32); +extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, struct OpenedFile **r5, u32); +extern u32 sub_8012A64(struct UnkInputStruct**, u32); +extern void PlayMenuSoundEffect(u32); +extern void sub_8031A84(); +extern void sub_8031AE8(); + +extern u8 gUnknown_202E5D8[]; +extern u8 gAvailablePokemonNames[]; +extern void *MemoryAlloc(u32, u32); +extern void MemoryFree(void *); +extern void sub_800641C(struct unkData *, u32, u32); +extern void sub_8006518(struct unkData *); +extern void sub_8031A2C(void); +extern void sub_801317C(void *); + +void UpdateHelperPelipperState(u8); +void HandlePostOfficeHelpStartMenuSelection(); +void sub_8031848(); +extern void HandlePostOfficeHelpFriendRescueMenuSelection(); +extern void sub_80318D0(); +extern void HandlePostOfficeHelpGoRescueMenuSelection(); +extern void sub_803192C(); +extern void HandlePostOfficeHelpGetHelpMenuSelection(); +extern void sub_8031988(); +extern s32 sub_80144A4(s32 *); +extern s32 sub_80969D0(u8); +extern void sub_8012D08(struct unkData *, s32); + + +u32 CreateHelperPelipperMenu(s16 speciesID) +{ + char *monName; + struct OpenedFile *faceFile; + int species_32; + + species_32 = speciesID; + ResetUnusedInputStruct(); + sub_800641C(0,1,1); + gPostOfficeHelper = MemoryAlloc(sizeof(struct PostOfficeHelper), 8); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, speciesID); + monName = GetMonSpecies(speciesID); + strcpy(gAvailablePokemonNames, monName); + gPostOfficeHelper->faceFile = NULL; + gPostOfficeHelper->faceData = NULL; + if (speciesID != SPECIES_NONE) { + faceFile = GetDialogueSpriteDataPtr(species_32); + gPostOfficeHelper->faceFile = faceFile; + gPostOfficeHelper->unk14 = 0; + gPostOfficeHelper->unk15 = 0; + gPostOfficeHelper->unk16 = 0; + gPostOfficeHelper->unk10 = 2; + gPostOfficeHelper->unk12 = 8; + if (gPostOfficeHelper->faceFile != NULL) { + gPostOfficeHelper->faceData = gPostOfficeHelper->faceFile->data; + } + } + gPostOfficeHelper->currMenuChoice = 0; + UpdateHelperPelipperState(1); + return 1; +} + + +u32 sub_8031540(void) +{ + switch(gPostOfficeHelper->state) { + case 1: + case 2: + HandlePostOfficeHelpStartMenuSelection(); + break; + case 3: + sub_8031848(); + break; + case 4: + HandlePostOfficeHelpFriendRescueMenuSelection(); + break; + case 5: + sub_80318D0(); + break; + case 6: + HandlePostOfficeHelpGoRescueMenuSelection(); + break; + case 7: + sub_803192C(); + break; + case 0: + return 3; + case 8: + HandlePostOfficeHelpGetHelpMenuSelection(); + break; + case 9: + sub_8031988(); + break; + } + return 0; +} + +void CleanHelperPelipper(void) +{ + if(gPostOfficeHelper != NULL) + { + if(gPostOfficeHelper->faceFile != NULL) + CloseFile(gPostOfficeHelper->faceFile); + MemoryFree(gPostOfficeHelper); + gPostOfficeHelper = NULL; + } +} + +void nullsub_39(void) +{ +} + +void UpdateHelperPelipperText(void) +{ + struct OpenedFile **faceFile; + faceFile = NULL; + if(gPostOfficeHelper->faceFile != NULL) + faceFile = &gPostOfficeHelper->faceFile; + + switch(gPostOfficeHelper->state) + { + case 8: + sub_8014248(gWhatdYouWantToKnow, 0, gPostOfficeHelper->currMenuChoice, gPostOfficeHelpGetHelpMenu, 0, 4, 0, faceFile, 0xC); + break; + case 9: + switch(gPostOfficeHelper->currMenuChoice) + { + case 15: + sub_80141B4(gGettingHelpExplaination, 0, faceFile, 0x10d); + break; + case 16: + sub_80141B4(gSendSOSMailExplaination, 0, faceFile, 0x10d); + break; + case 17: + sub_80141B4(gReceiveAOKMailExplaination, 0, faceFile, 0x10d); + break; + case 18: + sub_80141B4(gSendThankYouMailExplaination, 0, faceFile, 0x10d); + break; + default: + break; + } + break; + case 6: + sub_8014248(gWhatdYouWantToKnow, 0, gPostOfficeHelper->currMenuChoice, gPostOfficeHelpGoRescueMenu, 0, 4, 0, faceFile, 0xC); + break; + case 7: + switch(gPostOfficeHelper->currMenuChoice) + { + case 10: + sub_80141B4(gRescueProceduresExplaination, 0, faceFile, 0x10d); + break; + case 11: + sub_80141B4(gReceiveSOSMailExplaination, 0, faceFile, 0x10d); + break; + case 13: + sub_80141B4(gSendAOKMailExplaination, 0, faceFile, 0x10d); + break; + case 12: + sub_80141B4(gLeaveForRescueExplaination, 0, faceFile, 0x10d); + break; + case 14: + sub_80141B4(gGetThankYouMailExplaination, 0, faceFile, 0x10d); + break; + default: + break; + } + break; + case 1: + sub_8014248(gImYourGuide, 0, gPostOfficeHelper->currMenuChoice, gPostOfficeHelpStartMenu, 0, 4, 0, faceFile, 0xC); + break; + case 2: + sub_8014248(gAnythingElse, 0, gPostOfficeHelper->currMenuChoice, gPostOfficeHelpStartMenu, 0, 4, 0, faceFile, 0xC); + break; + case 3: + switch(gPostOfficeHelper->currMenuChoice) + { + case 0: + sub_80141B4(gPostOfficeExplaination, 0, faceFile, 0x10d); + break; + case 1: + sub_80141B4(gBulletinBoardExplaination, 0, faceFile, 0x10d); + break; + case 2: + sub_80141B4(gDeliveryExplaination, 0, faceFile, 0x10d); + break; + default: + break; + } + break; + case 4: + sub_8014248(gWhatdYouWantToKnow, 0, gPostOfficeHelper->currMenuChoice, gPostOfficeHelpFriendRescueMenu, 0, 4, 0, faceFile, 0xC); + break; + case 5: + switch(gPostOfficeHelper->currMenuChoice) + { + case 6: + sub_80141B4(gFriendRescueExplaination, 0, faceFile, 0x10d); + break; + case 9: + sub_80141B4(gDeletingMailExplaination, 0, faceFile, 0x10d); + break; + default: + break; + } + break; + default: + break; + } +} + +void UpdateHelperPelipperState(u8 newState) +{ + gPostOfficeHelper->state = newState; + nullsub_39(); + UpdateHelperPelipperText(); +} + +void HandlePostOfficeHelpStartMenuSelection(void) +{ + s32 chosenAction; + if(sub_80144A4(&chosenAction) == 0) + { + switch(chosenAction) + { + case 4: + case 5: + UpdateHelperPelipperState(0); + break; + case 3: + gPostOfficeHelper->currMenuChoice = chosenAction; + UpdateHelperPelipperState(4); + break; + case 0: + case 1: + case 2: + gPostOfficeHelper->currMenuChoice = chosenAction; + UpdateHelperPelipperState(3); + break; + } + } +} + +void sub_8031848(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateHelperPelipperState(2); + } +} + +void HandlePostOfficeHelpFriendRescueMenuSelection(void) +{ + s32 chosenAction; + if(sub_80144A4(&chosenAction) == 0) + { + switch(chosenAction) + { + case 5: + UpdateHelperPelipperState(2); + break; + case 7: + UpdateHelperPelipperState(6); + break; + case 8: + UpdateHelperPelipperState(8); + break; + case 6: + case 9: + gPostOfficeHelper->currMenuChoice = chosenAction; + UpdateHelperPelipperState(5); + break; + } + } +} + +void sub_80318D0(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateHelperPelipperState(4); + } +} + +void HandlePostOfficeHelpGoRescueMenuSelection(void) +{ + s32 chosenAction; + if(sub_80144A4(&chosenAction) == 0) + { + switch(chosenAction) + { + case 5: + UpdateHelperPelipperState(4); + break; + case 10: + case 11: + case 12: + case 13: + case 14: + gPostOfficeHelper->currMenuChoice = chosenAction; + UpdateHelperPelipperState(7); + break; + } + } +} + +void sub_803192C(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateHelperPelipperState(6); + } +} + +void HandlePostOfficeHelpGetHelpMenuSelection(void) +{ + s32 chosenAction; + if(sub_80144A4(&chosenAction) == 0) + { + switch(chosenAction) + { + case 5: + UpdateHelperPelipperState(4); + break; + case 15: + case 16: + case 17: + case 18: + gPostOfficeHelper->currMenuChoice = chosenAction; + UpdateHelperPelipperState(9); + break; + } + } +} + +void sub_8031988(void) +{ + s32 temp; + if(sub_80144A4(&temp) == 0) + { + UpdateHelperPelipperState(8); + } +} + +u32 sub_80319A4(u8 param_1,u8 param_2,int param_3) +{ + + gUnknown_203B330 = MemoryAlloc(0x78,8); + gUnknown_203B330->unkC = param_1; + gUnknown_203B330->unkD = param_2; + sub_801317C(gUnknown_203B330); + gUnknown_203B330->unk10 = param_3; + gUnknown_203B330->unk14 = &gUnknown_203B330->unk18[param_3]; + sub_8031A2C(); + return 1; +} + +u32 sub_80319F8(void) +{ + switch(sub_8012A64(&gUnknown_203B330->unk0, gUnknown_203B330->unk10)) + { + case 2: + PlayMenuSoundEffect(1); + return 2; + case 1: + PlayMenuSoundEffect(0); + return 3; + default: + return 0; + } +} + +void sub_8031A2C(void) +{ + sub_8031A84(); + sub_8031AE8(); +} + +void sub_8031A3C(void) +{ + if(gUnknown_203B330 != NULL) + { + gUnknown_203B330->unk18[gUnknown_203B330->unk10] = gUnknown_80E1EFC; + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B330->unk18, 1, 1); + MemoryFree(gUnknown_203B330); + gUnknown_203B330 = NULL; + } +} + +void sub_8031A84(void) +{ + s32 iVar1; + + sub_8006518(gUnknown_203B330->unk18); + gUnknown_203B330->unk18[gUnknown_203B330->unk10] = gUnknown_80E1F18; + if (gUnknown_203B330->unkC == 2) { + iVar1 = sub_80969D0(gUnknown_203B330->unkD); + if (iVar1 == 0) { + iVar1 = 1; + } + sub_8012D08(gUnknown_203B330->unk14,iVar1); + } + ResetUnusedInputStruct(); + sub_800641C(gUnknown_203B330->unk18,1,1); +} @@ -23,8 +23,8 @@ struct unk_struct struct unk_203B188 { - u32 unk0; - u32 unk4; + u32 state; + u32 readStatus; }; @@ -32,9 +32,9 @@ extern struct unk_203B188 *gUnknown_203B188; struct unkStruct_203B18C { - u32 unk0; + u32 state; s32 unk4; - u32 unk8; + u32 saveStatus; struct OpenedFile *faceFile; u8 *faceData; u16 unk14; @@ -50,7 +50,7 @@ extern struct unkStruct_203B18C *gUnknown_203B18C; struct unkStruct_203B190 { - s32 unk0; + s32 state; u8 *unk4; u32 unk8; u8 unkC; @@ -59,20 +59,20 @@ extern struct unkStruct_203B190 *gUnknown_203B190; struct unkStruct_203B194 { - s32 unk0; + s32 state; u8 *unk4; u32 unk8; u8 unkC; u8 padding[0x10 - 0xD]; - u32 unk10; + u32 quickSaveStatus; }; extern struct unkStruct_203B194 *gUnknown_203B194; extern s32 gUnknown_202DE28; extern u32 gUnknown_203B17C; -extern u32 gUnknown_203B180; -extern u32 *gUnknown_203B45C; +extern char *gUnknown_203B180; +extern u32 *gRecruitedPokemonRef; extern u32 *gUnknown_203B460; extern struct RescueTeamData *gRescueTeamInfoRef; extern u8 *gFriendAreas; @@ -116,8 +116,8 @@ extern u32 sub_808F2B0(void* a, s32 b); extern u32 sub_8091C68(u8 *, u32); extern u32 sub_8091D14(void* a, s32 b); extern u32 sub_80921C4(u8 *, u32); -extern u32 sub_80927A8(u8 *, u32); -extern u32 sub_80927F4(void* a, s32 b); +extern u32 SaveFriendAreas(u8 *, u32); +extern u32 ReadSavedFriendAreas(void* a, s32 b); extern u8 *sub_8095100(void); extern u32 *sub_8095108(void); extern u32 *sub_8095110(void); @@ -133,8 +133,8 @@ extern void sub_80993E4(); extern void sub_800135C(void); extern u32 *sub_808CE00(void); extern void sub_808CE08(void); -extern u32 *sub_80909D0(void); -extern void sub_80909D8(void); +extern u32 *GetMoneyItemsInfo(void); +extern void InitializeMoneyItems(void); extern u32 sub_8094990(void); extern void sub_8094998(u8 r0); extern u8 *sub_80950F8(void); @@ -177,7 +177,7 @@ void sub_8011C40(s32 in) gUnknown_202DE28 = in; } -u32 sub_8011C4C(void) +char *sub_8011C4C(void) { return gUnknown_203B180; } @@ -287,7 +287,7 @@ bool8 sub_8011DA8(void) return TRUE; } -u32 sub_8011DAC(u32 *a) +u32 ReadSaveFromPak(u32 *a) { struct UnkStruct_sub_8011DAC *r5 = MemoryAlloc(sizeof(struct UnkStruct_sub_8011DAC), 5); u8 *r4 = (u8*)r5->unk448; @@ -353,8 +353,8 @@ u32 sub_8011DAC(u32 *a) r7 = 3; } r4 += 0x10; - r1 = sub_80927F4(r4, 0x8); - if (r1 != r5->unk438) { + r1 = ReadSavedFriendAreas(r4, 0x8); + if (r1 != r5->savedFriendAreas) { r7 = 3; } r4 += 0x8; @@ -406,27 +406,25 @@ u32 sub_8011FA8(void) return temp3; } -bool8 sub_8011FF8(void) +bool8 IsSaveCorrupted(void) { - u32 temp2; u32 temp; - bool8 r6; + bool8 isCorrupted; struct unk_struct *r5 = MemoryAlloc(sizeof(struct unk_struct), 5); temp = 0x1F; - r6 = FALSE; - temp2 = ReadSaveSector(&temp, (u8 *)r5, sizeof(struct unk_struct)); - if(temp2 == 0) + isCorrupted = FALSE; + if(ReadSaveSector(&temp, (u8 *)r5, sizeof(struct unk_struct)) == 0) { if(r5->unk14 == 0x5071412) { - r6 = TRUE; + isCorrupted = TRUE; } } MemoryFree(r5); - return r6; + return isCorrupted; } -u32 sub_801203C(s32 *param_1,u32 param_2) +u32 WriteSavetoPak(s32 *param_1,u32 param_2) { struct UnkStruct_sub_8011DAC *iVar1; char *__src; @@ -447,7 +445,7 @@ u32 sub_801203C(s32 *param_1,u32 param_2) iVar1->unk420 = gUnknown_203B184->unk058; } iVar1->unk414 = 0x5071412; - __src = (char *)sub_8011C4C(); + __src = sub_8011C4C(); strncpy(iVar1->unk404,__src,16); if (gUnknown_203B184 == NULL) { sub_8002700(&iVar1->unk004); @@ -464,7 +462,7 @@ u32 sub_801203C(s32 *param_1,u32 param_2) array_ptr += 0x1D8; iVar1->unk434 = sub_80921C4(array_ptr,0x10); array_ptr += 0x10; - iVar1->unk438 = sub_80927A8(array_ptr,8); + iVar1->savedFriendAreas = SaveFriendAreas(array_ptr,8); array_ptr += 8; iVar1->unk43C = sub_8097D60(array_ptr,0x100); array_ptr += 0x100; @@ -480,7 +478,8 @@ u32 sub_801203C(s32 *param_1,u32 param_2) return r5; if (r4 != 0) return r4; - return r5; + + return 0; // Success } @@ -492,7 +491,7 @@ s32 sub_80121D4(s32 *a, u8 *src, s32 size) u32 sub_80121E0(u32 r0) { u32 temp; - u32 *temp2; + char *temp2; u32 temp3; struct unk_struct *r4 = MemoryAlloc(sizeof(struct unk_struct), 5); temp = 0x1F; @@ -501,8 +500,8 @@ u32 sub_80121E0(u32 r0) r4->unk1C = *sub_809769C(); r4->unk14 = 0x5071412; - temp2 = (u32 *)sub_8011C4C(); - strncpy((u8 *)r4 + 4, (u8*)temp2, 16); + temp2 = sub_8011C4C(); + strncpy((u8 *)r4 + 4, temp2, 16); sub_80958E4((u8 *)r4 + 32, 0); temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct)); MemoryFree(r4); @@ -543,7 +542,6 @@ void sub_80122A8(void) sub_80122F4(); sub_8012300(); sub_8012240(); - } void nullsub_33(void) @@ -572,7 +570,7 @@ void sub_8012300(void) { InitializeFriendAreas(); sub_808CE08(); - sub_80909D8(); + InitializeMoneyItems(); InitializeResuceTeamInfo(); sub_80972F4(); sub_8095118(); @@ -595,7 +593,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0) if(r0 != NULL) { gUnknown_203B460 = r0->unk0; - gUnknown_203B45C = r0->unk4; + gRecruitedPokemonRef = r0->unk4; gUnknown_203B480 = r0->unk8; gUnknown_203B484 = r0->unkC; gUnknown_203B488 = r0->unk10; @@ -609,8 +607,8 @@ void sub_8012334(struct UnkStruct_203B184 *r0) gPlayTimeRef = r0->playTime; return; } - gUnknown_203B460 = sub_80909D0(); - gUnknown_203B45C = sub_808CE00(); + gUnknown_203B460 = GetMoneyItemsInfo(); + gRecruitedPokemonRef = sub_808CE00(); gUnknown_203B480 = sub_80950F8(); gUnknown_203B484 = sub_8095100(); gUnknown_203B488 = sub_8095108(); @@ -628,7 +626,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0) void sub_8012468(void) { gUnknown_203B188 = MemoryAlloc(sizeof(struct unk_203B188), 5); - gUnknown_203B188->unk0 = 1; + gUnknown_203B188->state = 1; } @@ -636,41 +634,41 @@ u8 sub_8012484(void) { u32 temp; u32 temp2; - switch(gUnknown_203B188->unk0) + switch(gUnknown_203B188->state) { case 0: - gUnknown_203B188->unk0 = 1; + gUnknown_203B188->state = 1; break; case 1: temp = 0; - gUnknown_203B188->unk4 = sub_8011DAC(&temp); - gUnknown_203B188->unk0 = 2; + gUnknown_203B188->readStatus = ReadSaveFromPak(&temp); + gUnknown_203B188->state = 2; break; case 2: - if(gUnknown_203B188->unk4 != 0) + if(gUnknown_203B188->readStatus != 0) { - if(sub_8011FF8()) + if(IsSaveCorrupted()) { sub_80141B4(&gSaveCorrupted, 0, 0, 0x301); - gUnknown_203B188->unk0 = 3; + gUnknown_203B188->state = 3; } else { - gUnknown_203B188->unk0 = 4; + gUnknown_203B188->state = 4; } } else { - gUnknown_203B188->unk0 = 6; + gUnknown_203B188->state = 6; } break; case 3: if(sub_80144A4(&temp2) == 0) - gUnknown_203B188->unk0 = 4; + gUnknown_203B188->state = 4; break; case 4: sub_8012298(); - gUnknown_203B188->unk0 = 6; + gUnknown_203B188->state = 6; case 5: break; case 6: @@ -688,11 +686,11 @@ void sub_8012558(void) } } -#ifdef NONMATCHING void sub_8012574(s16 PokemonID) { struct OpenedFile *file; s32 id_s32; + u8 *preload_face; id_s32 = PokemonID; // had to cast for asr shift @@ -702,7 +700,7 @@ void sub_8012574(s16 PokemonID) gUnknown_203B18C->faceFile = NULL; gUnknown_203B18C->faceData = NULL; if (PokemonID != 0) { - file = GetDialogueSpriteDataPtr(id_s32); + file = GetDialogueSpriteDataPtr(PokemonID); gUnknown_203B18C->faceFile = file; gUnknown_203B18C->faceData = file->data; gUnknown_203B18C->unk18 = 0; @@ -712,85 +710,14 @@ void sub_8012574(s16 PokemonID) gUnknown_203B18C->unk16 = 8; } if (gUnknown_203B18C->faceFile != 0) { - // LDR r0 and R2 statements get flipped... basically matches - sub_80141B4(&gSavingAdventure,0,(u8 *)&gUnknown_203B18C->faceFile,0x20); + preload_face = (u8 *)&gUnknown_203B18C->faceFile; + sub_80141B4(&gSavingAdventure,0,preload_face,0x20); } else { sub_80141B4(&gSavingAdventure,0,0,0x20); } - gUnknown_203B18C->unk0 = 3; + gUnknown_203B18C->state = 3; } -#else -NAKED -void sub_8012574(s16 PokemonID) -{ - asm_unified("\tpush {r4-r6,lr}\n" - "\tlsls r0, 16\n" - "\tasrs r4, r0, 16\n" - "\tbl sub_80993D8\n" - "\tldr r5, _080125D4\n" - "\tmovs r0, 0x20\n" - "\tmovs r1, 0x5\n" - "\tbl MemoryAlloc\n" - "\tstr r0, [r5]\n" - "\tmovs r6, 0\n" - "\tmovs r1, 0\n" - "\tstrh r4, [r0, 0x1C]\n" - "\tstr r1, [r0, 0xC]\n" - "\tstr r1, [r0, 0x10]\n" - "\tcmp r4, 0\n" - "\tbeq _080125BA\n" - "\tadds r0, r4, 0\n" - "\tbl GetDialogueSpriteDataPtr\n" - "\tldr r1, [r5]\n" - "\tstr r0, [r1, 0xC]\n" - "\tldr r0, [r0, 0x4]\n" - "\tstr r0, [r1, 0x10]\n" - "\tstrb r6, [r1, 0x18]\n" - "\tldr r0, [r5]\n" - "\tstrb r6, [r0, 0x19]\n" - "\tldr r0, [r5]\n" - "\tstrb r6, [r0, 0x1A]\n" - "\tldr r1, [r5]\n" - "\tmovs r0, 0x2\n" - "\tstrh r0, [r1, 0x14]\n" - "\tmovs r0, 0x8\n" - "\tstrh r0, [r1, 0x16]\n" -"_080125BA:\n" - "\tldr r1, [r5]\n" - "\tldr r0, [r1, 0xC]\n" - "\tcmp r0, 0\n" - "\tbeq _080125DC\n" - "\tadds r2, r1, 0\n" - "\tadds r2, 0xC\n" - "\tldr r0, _080125D8\n" - "\tmovs r1, 0\n" - "\tmovs r3, 0x20\n" - "\tbl sub_80141B4\n" - "\tb _080125E8\n" - "\t.align 2, 0\n" -"_080125D4: .4byte gUnknown_203B18C\n" -"_080125D8: .4byte gSavingAdventure\n" -"_080125DC:\n" - "\tldr r0, _080125F8\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x20\n" - "\tbl sub_80141B4\n" -"_080125E8:\n" - "\tldr r0, _080125FC\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x3\n" - "\tstr r0, [r1]\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" -"_080125F8: .4byte gSavingAdventure\n" -"_080125FC: .4byte gUnknown_203B18C"); - -} -#endif bool8 sub_8012600(void) { @@ -802,53 +729,53 @@ bool8 sub_8012600(void) if (gUnknown_203B18C->faceFile != 0) { faceFile = &gUnknown_203B18C->faceFile; } - switch(gUnknown_203B18C->unk0) + switch(gUnknown_203B18C->state) { case 0: - gUnknown_203B18C->unk0 = 7; + gUnknown_203B18C->state = 7; break; case 1: gUnknown_203B18C->unk4++; if (8 < gUnknown_203B18C->unk4) { sub_80141B4(&gWriteGamePak, 0, 0, 0x20); - gUnknown_203B18C->unk0 = 3; + gUnknown_203B18C->state = 3; } break; case 2: break; case 3: - gUnknown_203B18C->unk0 = 4; + gUnknown_203B18C->state = 4; break; case 4: local_14 = 0; sub_80140DC(); - gUnknown_203B18C->unk8 = sub_801203C(&local_14, sub_8011C1C()); - switch(gUnknown_203B18C->unk8) + gUnknown_203B18C->saveStatus = WriteSavetoPak(&local_14, sub_8011C1C()); + switch(gUnknown_203B18C->saveStatus) { - case 0: + case SAVE_COMPLETED: if(gUnknown_203B18C->faceFile != NULL) sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101); else sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101); - gUnknown_203B18C->unk0 = 5; + gUnknown_203B18C->state = 5; break; - case 1: + case SAVE_NOT_WRTTEN: sub_80141B4(&gSaveNotWritten, 0, 0, 0); - gUnknown_203B18C->unk0 = 6; + gUnknown_203B18C->state = 6; break; default: if(gUnknown_203B18C->faceFile != NULL) sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101); else sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101); - gUnknown_203B18C->unk0 = 5; + gUnknown_203B18C->state = 5; break; } sub_8014114(); break; case 5: if (sub_80144A4(&other_stack) == 0) - gUnknown_203B18C->unk0 = 7; + gUnknown_203B18C->state = 7; break; case 6: break; @@ -860,7 +787,7 @@ bool8 sub_8012600(void) u32 sub_8012744(void) { - return gUnknown_203B18C->unk8; + return gUnknown_203B18C->saveStatus; } void sub_8012750(void) @@ -881,7 +808,7 @@ void sub_801277C(u8 *r0, u32 r1) gUnknown_203B190->unk4 = r0; gUnknown_203B190->unk8 = r1; gUnknown_203B190->unkC = 0; - gUnknown_203B190->unk0 = 1; + gUnknown_203B190->state = 1; } u32 sub_80127A8(void) @@ -889,27 +816,27 @@ u32 sub_80127A8(void) u32 stack_1; u32 stack_2; - switch(gUnknown_203B190->unk0) + switch(gUnknown_203B190->state) { case 0: - gUnknown_203B190->unk0 = 1; + gUnknown_203B190->state = 1; break; case 1: stack_1 = 16; if(sub_8011F9C(&stack_1, gUnknown_203B190->unk4, gUnknown_203B190->unk8) == 0) { gUnknown_203B190->unkC = 1; - gUnknown_203B190->unk0 = 3; + gUnknown_203B190->state = 3; } else { sub_80141B4(&gUnknown_80D44C8, 0, 0, 0x301); - gUnknown_203B190->unk0 = 2; + gUnknown_203B190->state = 2; } break; case 2: if(sub_80144A4(&stack_2) == 0) - gUnknown_203B190->unk0 = 3; + gUnknown_203B190->state = 3; break; case 3: return 0; @@ -938,7 +865,7 @@ void sub_8012850(u8 *r0, u32 r1, u8 r2) gUnknown_203B194->unk4 = r0; gUnknown_203B194->unk8 = r1; gUnknown_203B194->unkC = r2; - gUnknown_203B194->unk0 = 0; + gUnknown_203B194->state = 0; if(gUnknown_203B194->unkC != 0) sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20); else @@ -949,51 +876,51 @@ u32 sub_80128B0(void) { u32 stack_1; u32 stack_2; - switch(gUnknown_203B194->unk0) + switch(gUnknown_203B194->state) { case 0: - gUnknown_203B194->unk0 = 1; + gUnknown_203B194->state = 1; break; case 1: sub_80140DC(); stack_1 = 16; - gUnknown_203B194->unk10 = sub_80121D4(&stack_1, gUnknown_203B194->unk4, gUnknown_203B194->unk8); - gUnknown_203B194->unk0 = 2; + gUnknown_203B194->quickSaveStatus = sub_80121D4(&stack_1, gUnknown_203B194->unk4, gUnknown_203B194->unk8); + gUnknown_203B194->state = 2; return 1; case 2: stack_1 = 0; - if(gUnknown_203B194->unk10 == 0) - gUnknown_203B194->unk10 = sub_801203C(&stack_1, 2); - switch(gUnknown_203B194->unk10) + if(gUnknown_203B194->quickSaveStatus == 0) + gUnknown_203B194->quickSaveStatus = WriteSavetoPak(&stack_1, 2); + switch(gUnknown_203B194->quickSaveStatus) { - case 0: + case SAVE_COMPLETED: sub_80121E0(0xf1207); if(gUnknown_203B194->unkC != 0) sub_80141B4(&gUnknown_80D45F4, 0, 0, 0x301); else sub_80141B4(&gUnknown_80D4668, 0, 0, 0x301); - gUnknown_203B194->unk0 = 3; + gUnknown_203B194->state = 3; break; - case 1: + case SAVE_NOT_WRTTEN: sub_80141B4(&gSaveNotWritten2, 0, 0, 0); - gUnknown_203B194->unk0 = 4; + gUnknown_203B194->state = 4; break; default: sub_80121E0(0xf1209); sub_80141B4(&gSaveFailed2, 0, 0, 0x301); - gUnknown_203B194->unk0 = 3; + gUnknown_203B194->state = 3; break; } sub_8014114(); break; case 3: if(sub_80144A4(&stack_2) == 0) - gUnknown_203B194->unk0 = 5; + gUnknown_203B194->state = 5; break; case 4: break; case 5: - if(gUnknown_203B194->unk10 == 0) + if(gUnknown_203B194->quickSaveStatus == SAVE_COMPLETED) return 2; else return 3; @@ -2,23 +2,7 @@ #include "file_system.h" #include "code_800558C.h" #include "code_800B540.h" - -struct UnkTextStruct1 { - u8 fill00[4]; - u16 unk04; - u8 fill06[2]; - u16 unk08; - u8 fill04[0x3c]; - u8 unk46; -}; - -struct UnkTextStruct2 { - u8 fill00[0x0c]; - s16 unk0c; - u8 fill0e[2]; - s16 unk10; - u8 fill12[0x06]; -}; +#include "text.h" extern char gUnknown_3000E94[]; @@ -38,13 +22,6 @@ EWRAM_DATA u32 gUnknown_202B030; EWRAM_DATA u8 gUnknown_202B034; EWRAM_DATA u16 gUnknown_202B038[2][32][32]; -u32 xxx_update_some_bg_tiles(u32 a0); -void sub_8006438(const struct UnkTextStruct2 *a0, u8 a1, u8 a2, u32 *a3); -void sub_8006554(void *a0, void *a1, void *a2, void *a3, u32 a4, const struct UnkTextStruct2 *a5, u8 a6, u32 a7, u32 *a8, u32 a9); -void sub_800898C(void); -void sub_80089AC(const struct UnkTextStruct2 *a0, void *a1); -void sub_8009388(void); - extern const struct UnkTextStruct2 gUnknown_80B857C[4]; extern const char gKanjiA_file_string[]; extern const char gKanjiB_file_string[]; @@ -158,7 +135,7 @@ void sub_80063D8(int a0) gUnknown_202B030 = retval; } -void sub_800641C(void *a0, u8 a1, u8 a2) +void sub_800641C(struct UnkTextStruct2 *a0, u8 a1, u8 a2) { u32 r3 = 0; sub_8006438(a0, a1, a2, &r3); diff --git a/src/text_util.c b/src/text_util.c index 1de233c..1c3042c 100644 --- a/src/text_util.c +++ b/src/text_util.c @@ -179,7 +179,7 @@ u8 sub_8092364(u8 index) return gUnknown_810AC6A[index]; } -void sub_8092374(char *buffer, u8 index) +void CopyAbilityNametoBuffer(char *buffer, u8 index) { strncpy(buffer, gAbilityNames[index], 0x50); } diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c index 2582931..5ca115a 100644 --- a/src/trade_items_menu.c +++ b/src/trade_items_menu.c @@ -1,17 +1,11 @@ #include "global.h" #include "input.h" #include "trade_items_menu.h" +#include "gUnknown_203B460.h" extern struct TradeItemsMenu *gTradeItemsMenu; -struct unkStruct_203B460 -{ - u8 unk0[0x50]; - u16 unk50[10]; -}; - - -extern struct unkStruct_203B460 *gUnknown_203B460; // TODO unify this +extern struct unkStruct_203B460 *gUnknown_203B460; extern u32 gUnknown_202DE30; extern u32 gUnknown_202DE58; extern struct unkData gUnknown_80E6174; @@ -63,7 +57,7 @@ extern void sub_801CB5C(u32); extern void sub_8035CF4(u32 *, u32, u32); extern u32 sub_8013BBC(u32 *); void sub_8036F30(); -extern void sub_80369D0(); +extern void TradeItem_AddItem(); extern void sub_8012574(u32); extern void sub_80141B4(u32 *, u32, u32, u32); @@ -86,13 +80,13 @@ extern void sub_801C8C4(u32, u32, s32 *, u32); void SetTradeItemMenu(u32); void PrintTradeItemsLinkError(u32); -void sub_803652C(); +void TradeItem_MainMenu(); void sub_8036590(); void sub_80365AC(); void sub_8036674(); void sub_8036788(); void sub_8036728(); -extern void sub_8036830(); +void TradeItem_SendItemConfirm(); void sub_803689C(); void sub_80368D4(); void sub_8036934(); @@ -147,7 +141,7 @@ u32 UpdateTradeItemsMenu(void) switch(gTradeItemsMenu->currMenu) { case TRADE_ITEMS_MAIN_MENU: - sub_803652C(); + TradeItem_MainMenu(); break; case TRADE_ITEMS_SEND_ITEM: sub_8036590(); @@ -165,7 +159,7 @@ u32 UpdateTradeItemsMenu(void) sub_8036788(); break; case TRADE_ITEMS_SEND_ITEM_CONFIRM: - sub_8036830(); + TradeItem_SendItemConfirm(); break; case TRADE_ITEMS_RECEIVE_ITEM: sub_803689C(); @@ -206,7 +200,7 @@ u32 UpdateTradeItemsMenu(void) return 0; } -void sub_803652C(void) +void TradeItem_MainMenu(void) { s32 menuAction; @@ -243,8 +237,8 @@ void sub_8036590(void) void sub_80365AC(void) { - gTradeItemsMenu->unk25E = 0; - gTradeItemsMenu->unk25D = 1; + gTradeItemsMenu->chosenItem = 0; + gTradeItemsMenu->chosenNum = 1; gTradeItemsMenu->unk25C = 0; switch(sub_801CA08(1)){ case 2: @@ -254,14 +248,14 @@ void sub_80365AC(void) break; case 3: // Pop up menu with Confirm, Info, Cancel - gTradeItemsMenu->unk25E = sub_801CB24(); - gTradeItemsMenu->unk25D = 1; + gTradeItemsMenu->chosenItem = sub_801CB24(); + gTradeItemsMenu->chosenNum = 1; SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_POPUP_MENU); break; case 4: gTradeItemsMenu->unk4 = 2; - gTradeItemsMenu->unk25E = sub_801CB24(); - gTradeItemsMenu->unk25D = 1; + gTradeItemsMenu->chosenItem = sub_801CB24(); + gTradeItemsMenu->chosenNum = 1; sub_8006518(&gTradeItemsMenu->unk1E4); ResetUnusedInputStruct(); sub_800641C(0,1,1); @@ -329,7 +323,7 @@ void sub_8036788(void) { sub_8012FD8(&gTradeItemsMenu->unk134); sub_801CA08(0); - switch(sub_8013BBC(&gTradeItemsMenu->unk14)){ + switch(sub_8013BBC(&gTradeItemsMenu->numItemsToSend)){ case 1: // When you change the # sub_801CCD8(); @@ -345,9 +339,9 @@ void sub_8036788(void) break; case 3: // Confirm # of item - gTradeItemsMenu->unk25D = gTradeItemsMenu->unk14; - gTradeItemsMenu->unk254.unk0 = gTradeItemsMenu->unk25E; - gTradeItemsMenu->unk254.unk4 = gTradeItemsMenu->unk14; + gTradeItemsMenu->chosenNum = gTradeItemsMenu->numItemsToSend; + gTradeItemsMenu->unk254.itemIndex = gTradeItemsMenu->chosenItem; + gTradeItemsMenu->unk254.numItems = gTradeItemsMenu->numItemsToSend; sub_801CBB8(); SetTradeItemMenu(TRADE_ITEMS_SEND_ITEM_CONFIRM); break; @@ -356,7 +350,7 @@ void sub_8036788(void) } } -void sub_8036830(void) +void TradeItem_SendItemConfirm(void) { int menuAction; u16 load; @@ -367,9 +361,9 @@ void sub_8036830(void) case 5: sub_801CBB8(); // Used temp var to get correct statements - load = gUnknown_203B460->unk50[gTradeItemsMenu->unk25E]; - load -= gTradeItemsMenu->unk14; - gUnknown_203B460->unk50[gTradeItemsMenu->unk25E] = load; + load = gUnknown_203B460->unk50[gTradeItemsMenu->chosenItem]; + load -= gTradeItemsMenu->numItemsToSend; + gUnknown_203B460->unk50[gTradeItemsMenu->chosenItem] = load; SetTradeItemMenu(TRADE_ITEMS_PREPARE_TRADE_SAVING); sub_8012574(0); break; @@ -409,9 +403,9 @@ void sub_80368D4(void) break; case 7: case 0: - if ((gTradeItemsMenu->unk254.unk0 != 0) && (gTradeItemsMenu->unk254.unk4 != 0)) + if ((gTradeItemsMenu->unk254.itemIndex != 0) && (gTradeItemsMenu->unk254.numItems != 0)) { - sub_80369D0(); + TradeItem_AddItem(); SetTradeItemMenu(0x11); sub_8012574(0); } @@ -447,10 +441,10 @@ void sub_8036950(void) } } else { - if (((gTradeItemsMenu->itemMode == TRADE_ITEMS_SEND_ITEM_MODE) && (gTradeItemsMenu->unk254.unk0 != 0)) - && (gTradeItemsMenu->unk254.unk4 != 0)) { + if (((gTradeItemsMenu->itemMode == TRADE_ITEMS_SEND_ITEM_MODE) && (gTradeItemsMenu->unk254.itemIndex != 0)) + && (gTradeItemsMenu->unk254.numItems != 0)) { // Link Failure - sub_80369D0(); // Add back the item + TradeItem_AddItem(); // Add back the item SetTradeItemMenu(0xb); sub_8012574(0); } @@ -462,13 +456,13 @@ void sub_8036950(void) } } -void sub_80369D0(void) +void TradeItem_AddItem(void) { // Use temp var to get correct statements u16 load; - load = gUnknown_203B460->unk50[gTradeItemsMenu->unk254.unk0]; - load += gTradeItemsMenu->unk254.unk4; - gUnknown_203B460->unk50[gTradeItemsMenu->unk254.unk0] = load; + load = gUnknown_203B460->unk50[gTradeItemsMenu->unk254.itemIndex]; + load += gTradeItemsMenu->unk254.numItems; + gUnknown_203B460->unk50[gTradeItemsMenu->unk254.itemIndex] = load; } void sub_80369FC(void) @@ -609,8 +603,8 @@ void sub_8036B28(void) sub_8036F74(); break; case 6: - gUnknown_202DE30 = gTradeItemsMenu->unk14; - sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->unk25E,0); + gUnknown_202DE30 = gTradeItemsMenu->numItemsToSend; + sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->chosenItem,0); sub_8014248(&gUnknown_80E61E4,0,5, &gUnknown_80E6154,0,4,0,0,0x101); break; case 7: @@ -630,13 +624,13 @@ void sub_8036B28(void) // Needs a mov r2, 0 // and mov r3, 0 temp = &gTradeItemsMenu->unk244; - temp->unk0 = 0; - temp->unk4 = 0; + temp->itemIndex = 0; + temp->numItems = 0; temp += 1; // move to unk24C - temp->unk0 = 0; - temp->unk4 = 0; + temp->itemIndex = 0; + temp->numItems = 0; // Regs are fixed back up after sub_8011830(); @@ -648,9 +642,9 @@ void sub_8036B28(void) case TRADE_ITEMS_SEND_ITEM_MODE: temp = &gTradeItemsMenu->unk244; temp2 = &gTradeItemsMenu->unk254; - load_2 = temp2->unk4; - temp->unk0 = temp2->unk0; - temp->unk4 = load_2; + load_2 = temp2->numItems; + temp->itemIndex = temp2->itemIndex; + temp->numItems = load_2; case TRADE_ITEMS_RECEIVE_ITEM_MODE: gTradeItemsMenu->linkStatus = sub_8037D64(gTradeItemsMenu->itemMode,&gTradeItemsMenu->unk244,&gTradeItemsMenu->unk24C); default: @@ -664,21 +658,21 @@ void sub_8036B28(void) xxx_call_start_bg_music(); break; case 0xe: - if (gTradeItemsMenu->unk24C.unk4 == 0) { - gUnknown_202DE30 = gTradeItemsMenu->unk244.unk4; + if (gTradeItemsMenu->unk24C.numItems == 0) { + gUnknown_202DE30 = gTradeItemsMenu->unk244.numItems; // Cast is needed - sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk244.unk0,0); + sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk244.itemIndex,0); } else { - gUnknown_202DE30 = gTradeItemsMenu->unk24C.unk4; + gUnknown_202DE30 = gTradeItemsMenu->unk24C.numItems; // Cast is needed - sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk24C.unk0,0); + sub_8090DC4(&gUnknown_202DE58,(u8)gTradeItemsMenu->unk24C.itemIndex,0); } sub_80141B4(&gUnknown_80E6314,0,0,0x101); break; case 0xd: - gUnknown_202DE30 = gTradeItemsMenu->unk14; - sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->unk25E,0); + gUnknown_202DE30 = gTradeItemsMenu->numItemsToSend; + sub_8090DC4(&gUnknown_202DE58,gTradeItemsMenu->chosenItem,0); sub_80141B4(&gUnknown_80E6358,0,0,0x101); break; case 0xB: @@ -1084,7 +1078,7 @@ void sub_8036ECC(u32 index, u32 r1) gTradeItemsMenu->unk34 = 0x12; gTradeItemsMenu->unk28 = index; gTradeItemsMenu->unk2C = &gTradeItemsMenu->unk184[index]; - sub_8013AA0(&gTradeItemsMenu->unk14); + sub_8013AA0(&gTradeItemsMenu->numItemsToSend); gTradeItemsMenu->unk184[index] = gUnknown_80E6174; ResetUnusedInputStruct(); sub_800641C((u32 *)&gTradeItemsMenu->unk184, 1, 1); @@ -1099,14 +1093,14 @@ void sub_8036F30(void) sub_80073B8(uVar1); // Draw "How many?" xxx_call_draw_string(2, 0, &gTradeItemsHowManyText, uVar1, 0); - sub_8013C68(&gTradeItemsMenu->unk14); + sub_8013C68(&gTradeItemsMenu->numItemsToSend); sub_80073E0(uVar1); } void sub_8036F74(void) { sub_8006518((u32 *)&gTradeItemsMenu->unk184); - sub_8036ECC(2, gUnknown_203B460->unk50[gTradeItemsMenu->unk25E]); + sub_8036ECC(2, gUnknown_203B460->unk50[gTradeItemsMenu->chosenItem]); sub_801CCD8(); sub_8035CF4(&gTradeItemsMenu->unk44, 3, 0); sub_8036F30(); diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c index 220b737..811ce38 100644 --- a/src/unk_menu_203B360.c +++ b/src/unk_menu_203B360.c @@ -26,8 +26,8 @@ struct unkStruct_203B360 extern struct unkStruct_203B360 *gUnknown_203B360; extern struct unkData gUnknown_80E6E7C; -extern u32 gUnknown_80E6E94; -extern u32 gUnknown_80E6EAC; +extern struct unkData gUnknown_80E6E94; +extern struct MenuItem gUnknown_80E6EAC[]; extern void *MemoryAlloc(u32, u32); extern void MemoryFill8(u8 *, u8, u32); @@ -35,7 +35,7 @@ extern void MemoryFree(void *); extern void sub_8038440(); extern void sub_8035CF4(u32 *, u32, u32); extern void sub_800641C(void *, u32, u32); -extern void SetMenuItems(void *, void *, u32, u32 *, u32 *, u32, u32, u32); +extern void SetMenuItems(void *, struct unkData *, u32, struct unkData *, struct MenuItem *, u32, u32, u32); extern u8 sub_80130A8(u32 *); extern void sub_8013114(u32 *, u32 *); extern void sub_80384D0(); @@ -57,7 +57,7 @@ void sub_80382E4(s32 param_1) // Caution! // The storage space is empty! // Please check again. - SetMenuItems(&gUnknown_203B360->unk8,gUnknown_203B360->unk148,0,&gUnknown_80E6E94,&gUnknown_80E6EAC, + SetMenuItems(&gUnknown_203B360->unk8,gUnknown_203B360->unk148,0,&gUnknown_80E6E94,gUnknown_80E6EAC, 0,4,0); } sub_8035CF4(&gUnknown_203B360->unk8,0,1); diff --git a/src/unk_menu_203B364.c b/src/unk_menu_203B364.c index f6f6766..baba184 100644 --- a/src/unk_menu_203B364.c +++ b/src/unk_menu_203B364.c @@ -1,5 +1,7 @@ #include "global.h" #include "input.h" +#include "menu.h" +#include "main_menu.h" struct unkData { @@ -27,9 +29,9 @@ struct unkStruct_203B360 extern struct unkStruct_203B360 *gUnknown_203B364; extern struct unkData gUnknown_80E6F20; -extern u32 gUnknown_80E6F38; -extern u32 gUnknown_80E7090; -extern u32 gUnknown_80E6F50; +extern struct unkData gUnknown_80E6F38; +extern struct MenuItem gUnknown_80E7090[]; +extern struct MenuItem gUnknown_80E6F50[]; extern void *MemoryAlloc(u32, u32); extern void MemoryFill8(u8 *, u8, u32); @@ -37,13 +39,13 @@ extern void MemoryFree(void *); extern void sub_8038440(); extern void sub_8035CF4(u32 *, u32, u32); extern void sub_800641C(void *, u32, u32); -extern void SetMenuItems(void *, void *, u32, u32 *, u32 *, u32, u32, u32); +extern void SetMenuItems(void *, struct unkData *, u32, struct unkData *, struct MenuItem *, u32, u32, u32); extern u8 sub_80130A8(u32 *); extern void sub_8013114(u32 *, u32 *); extern void sub_80384D0(); extern void sub_8038830(); -void sub_803850C(s32 param_1) +void CreateSaveMenu(s32 currMenu) { s32 iVar4; @@ -57,29 +59,29 @@ void sub_803850C(s32 param_1) ResetUnusedInputStruct(); sub_800641C(gUnknown_203B364->unk148,1,1); - if (param_1 == 0x2e) { + if (currMenu == MENU_DELETE_SAVE) { // Beware, Deleting your Adventure - SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,&gUnknown_80E7090, + SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gUnknown_80E7090, 0,6,0); } else { // Saving your Adventure - SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,&gUnknown_80E6F50, + SetMenuItems(&gUnknown_203B364->unk8,gUnknown_203B364->unk148,0,&gUnknown_80E6F38,gUnknown_80E6F50, 0,6,0); } sub_8035CF4(&gUnknown_203B364->unk8,0,1); gUnknown_203B364->unk4 = 0; - gUnknown_203B364->currMenu = param_1; + gUnknown_203B364->currMenu = currMenu; sub_8038830(); } -void sub_8038604(void) +void CleanSaveMenu(void) { ResetUnusedInputStruct(); sub_800641C(0,1,1); - if (gUnknown_203B364 != 0) { + if (gUnknown_203B364 != NULL) { MemoryFree(gUnknown_203B364); - gUnknown_203B364 = 0; + gUnknown_203B364 = NULL; } } diff --git a/src/wonder_mail.c b/src/wonder_mail.c index 0947f24..6f93048 100644 --- a/src/wonder_mail.c +++ b/src/wonder_mail.c @@ -110,8 +110,6 @@ extern u8 sub_8024108(u32); extern u32 sub_8031DCC(); extern void sub_8031E10(); extern void sub_8031E00(); -void sub_808D8E0(u8 *, u32); -extern char* GetMonSpecies(u32); extern s32 sub_80953D4(u32); extern void sub_802B2BC(u32); @@ -856,16 +854,16 @@ void sub_8029374(void) void sub_802939C(void) { s32 temp; - u32 return_var; + u32 saveStatus; if(sub_80144A4(&temp) != 0) { return; } if(!sub_8012600()) { - return_var = sub_8012744(); + saveStatus = sub_8012744(); sub_8012750(); - if(return_var == 0) + if(saveStatus == SAVE_COMPLETED) { sub_8028B04(0x25); } @@ -1353,7 +1351,7 @@ u32 sub_8029B50(void) gUnknown_203B2C4 = MemoryAlloc(sizeof(struct WonderMailStruct_203B2C4), 8); MemoryFill8((u8 *)gUnknown_203B2C4, 0, sizeof(struct WonderMailStruct_203B2C4)); - sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); monName = GetMonSpecies(SPECIES_PELIPPER); strcpy(gAvailablePokemonNames, monName); faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER); @@ -1981,14 +1979,14 @@ void sub_802A68C(void) void sub_802A6B4(void) { - int iVar2; + int saveStatus; u32 temp; if (sub_80144A4(&temp) == 0) { if (sub_8012600() == 0) { - iVar2 = sub_8012744(); + saveStatus = sub_8012744(); sub_8012750(); - if (iVar2 == 0) { + if (saveStatus == SAVE_COMPLETED) { sub_802B2BC(0x20); } else { diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c index 12654e3..911df42 100644 --- a/src/wonder_mail_2.c +++ b/src/wonder_mail_2.c @@ -7,7 +7,7 @@ struct unkStruct_203B2C8 { // size: 0x140 - u8 unk0; + u8 currState; u8 unk1; u16 unk2; /* 0x4 */ struct OpenedFile *faceFile; @@ -68,7 +68,6 @@ extern void sub_8097790(); extern struct unkStruct_8095228 *sub_8095228(u8); extern char gUnknown_202E5D8[0x50]; extern char gAvailablePokemonNames[0x50]; -void sub_808D8E0(u8 *, u32); extern u32 sub_802F298(); extern void sub_802F2C0(); extern u32 sub_8011C34(); @@ -101,7 +100,6 @@ extern const char gUnknown_80DFB14[]; extern const char gUnknown_80DF9F0[]; extern const char gUnknown_80DF9F8[]; extern u8 sub_80023E4(u32); -extern char * GetMonSpecies(u32); u32 sub_802B2D4(void) { @@ -113,7 +111,7 @@ u32 sub_802B2D4(void) gUnknown_203B2C8 = MemoryAlloc(0x140,8); MemoryFill8((u8 *)gUnknown_203B2C8,0,0x140); gUnknown_203B2C8->unk1 = -1; - sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER); gUnknown_203B2C8->faceFile = faceFile; gUnknown_203B2C8->faceData = faceFile->data; @@ -133,7 +131,7 @@ u32 sub_802B2D4(void) u32 sub_802B358(void) { - switch(gUnknown_203B2C8->unk0) { + switch(gUnknown_203B2C8->currState) { case 0: sub_802B560(); break; @@ -175,55 +173,55 @@ void sub_802B3E0(void) char *monName; char teamNameBuffer[40]; - switch(gUnknown_203B2C8->unk0) { - case 0: - if (sub_80023E4(0) != '\0') { - // Copy Team Name to buffer - sub_80920D8(teamNameBuffer); - } - else { - // Copy "????" to buffer - strcpy(teamNameBuffer,gUnknown_80DF9F0); - } - // Print and expand placeholders? - sub_800D158(gUnknown_203B2C8->unk14,gUnknown_80DF9F8,teamNameBuffer); - // Display to screen with Pelliper face - sub_80141B4(gUnknown_203B2C8->unk14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d); - break; - case 1: - monName = GetMonSpecies(SPECIES_PELIPPER); - strcpy(gUnknown_203B2C8->unk114, monName); - gUnknown_203B2C8->unk128 = 0x130; - gUnknown_203B2C8->unk12A = 2; - gUnknown_203B2C8->unk12C = 0; - sub_8097790(); - iVar3 = sub_8095228(gUnknown_203B2C8->unk1); - sub_803C37C(&iVar3->unk4, 0, &gUnknown_203B2C8->unk130); - gUnknown_203B2C8->unk138 = sub_803C200(&iVar3->unk4, 0); - gUnknown_203B2C8->unk131 = 0; - gUnknown_203B2C8->unk132 = 0; - gUnknown_203B2C8->unk133 = 10; - gUnknown_203B2C8->unk134 = 0; - sub_802F204(gUnknown_203B2C8->unk114, 0); - break; - case 2: - // I hope you will keep on rescuing your friends - // I must save your adventure - sub_80141B4(gUnknown_80DFAA8, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d); - break; - case 4: - // Oh yes, that's right. Please don't forget to send an A-OK Mail - // to the friend you just rescued - sub_80141B4(gUnknown_80DFB14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d); - case 3: - case 5: - break; + switch(gUnknown_203B2C8->currState) { + case 0: + if (sub_80023E4(0) != '\0') { + // Copy Team Name to buffer + sub_80920D8(teamNameBuffer); + } + else { + // Copy "????" to buffer + strcpy(teamNameBuffer,gUnknown_80DF9F0); + } + // Print and expand placeholders? + sub_800D158(gUnknown_203B2C8->unk14,gUnknown_80DF9F8,teamNameBuffer); + // Display to screen with Pelliper face + sub_80141B4(gUnknown_203B2C8->unk14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d); + break; + case 1: + monName = GetMonSpecies(SPECIES_PELIPPER); + strcpy(gUnknown_203B2C8->unk114, monName); + gUnknown_203B2C8->unk128 = 0x130; + gUnknown_203B2C8->unk12A = 2; + gUnknown_203B2C8->unk12C = 0; + sub_8097790(); + iVar3 = sub_8095228(gUnknown_203B2C8->unk1); + sub_803C37C(&iVar3->unk4, 0, &gUnknown_203B2C8->unk130); + gUnknown_203B2C8->unk138 = sub_803C200(&iVar3->unk4, 0); + gUnknown_203B2C8->unk131 = 0; + gUnknown_203B2C8->unk132 = 0; + gUnknown_203B2C8->unk133 = 10; + gUnknown_203B2C8->unk134 = 0; + sub_802F204(gUnknown_203B2C8->unk114, 0); + break; + case 2: + // I hope you will keep on rescuing your friends + // I must save your adventure + sub_80141B4(gUnknown_80DFAA8, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d); + break; + case 4: + // Oh yes, that's right. Please don't forget to send an A-OK Mail + // to the friend you just rescued + sub_80141B4(gUnknown_80DFB14, 0, (u32 *)&gUnknown_203B2C8->faceFile, 0x10d); + case 3: + case 5: + break; } } void sub_802B548(u32 newState) { - gUnknown_203B2C8->unk0 = newState; + gUnknown_203B2C8->currState = newState; nullsub_132(); sub_802B3E0(); } @@ -243,7 +241,7 @@ void sub_802B57C(void) if (sub_802F298() == 3) { sub_802F2C0(); - sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); monName = GetMonSpecies(SPECIES_PELIPPER); strcpy(gAvailablePokemonNames, monName); sub_802B548(2); diff --git a/src/wonder_mail_pre.c b/src/wonder_mail_pre.c index e6c2ecb..a187a9c 100644 --- a/src/wonder_mail_pre.c +++ b/src/wonder_mail_pre.c @@ -8,9 +8,7 @@ extern void* MemoryAlloc(u32 a, u32 b); extern void MemoryFill8(u8 *dest, u8 value, s32 size); -extern char* GetMonSpecies(u32); extern void sub_800641C(void *r0, u8, u8); -void sub_808D8E0(u8 *, u32); extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0; extern char gUnknown_202E5D8[0x50]; @@ -81,7 +79,7 @@ u32 sub_8027F88(void) gUnknown_203B2C0->unk53C = 0; gUnknown_203B2C0->unk218 = -1; gUnknown_203B2C0->unk544 = -1; - sub_808D8E0(gUnknown_202E5D8, SPECIES_PELIPPER); + CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER); monName = GetMonSpecies(SPECIES_PELIPPER); strcpy(gAvailablePokemonNames, monName); faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER); |