summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/code_2.c2
-rw-r--r--src/code_800558C.c4
-rw-r--r--src/code_8009804.c58
-rw-r--r--src/code_800C9CC.c36
-rw-r--r--src/code_800D090.c8
-rw-r--r--src/code_80118A4.c6
-rw-r--r--src/code_801D760.c30
-rw-r--r--src/code_8041AD0.c18
-rw-r--r--src/code_80521D0_1.c98
-rw-r--r--src/code_8057824_1.c1145
-rw-r--r--src/code_808DAB4.c4
-rw-r--r--src/cpu.c8
-rw-r--r--src/data/pelipper_help_guide_dialogue.h187
-rw-r--r--src/debug_menu.c75
-rw-r--r--src/debug_menu_mid.c18
-rw-r--r--src/event_flag.c2
-rw-r--r--src/felicity_bank.c144
-rw-r--r--src/felicity_bank_1.c149
-rw-r--r--src/file_system.c7
-rw-r--r--src/friend_area.c20
-rw-r--r--src/friend_area_1.c4
-rw-r--r--src/friend_rescue.c5
-rw-r--r--src/friend_rescue_1.c5
-rw-r--r--src/items.c310
-rw-r--r--src/kangaskhan_storage.c176
-rw-r--r--src/kangaskhan_storage_1.c32
-rw-r--r--src/kecleon_items.c193
-rw-r--r--src/kecleon_items_1.c222
-rw-r--r--src/load_screen.c720
-rw-r--r--src/m4a.c200
-rw-r--r--src/main.c8
-rw-r--r--src/main_menu.c257
-rw-r--r--src/main_menu_1.c103
-rw-r--r--src/main_menu_mid.c208
-rw-r--r--src/makuhita_dojo.c184
-rw-r--r--src/more_input.c22
-rw-r--r--src/music_pre.c69
-rw-r--r--src/other_menus.c104
-rw-r--r--src/personality_test.c4
-rw-r--r--src/pokemon.c8
-rw-r--r--src/pokemon_1.c14
-rw-r--r--src/pokemon_mid.c94
-rw-r--r--src/post_office_guide.c568
-rw-r--r--src/save.c245
-rw-r--r--src/text.c27
-rw-r--r--src/text_util.c2
-rw-r--r--src/trade_items_menu.c106
-rw-r--r--src/unk_menu_203B360.c8
-rw-r--r--src/unk_menu_203B364.c26
-rw-r--r--src/wonder_mail.c16
-rw-r--r--src/wonder_mail_2.c98
-rw-r--r--src/wonder_mail_pre.c4
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));
}
diff --git a/src/cpu.c b/src/cpu.c
index a948d66..7a50801 100644
--- a/src/cpu.c
+++ b/src/cpu.c
@@ -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;
}
diff --git a/src/m4a.c b/src/m4a.c
index 2144c8b..3c96c88 100644
--- a/src/m4a.c
+++ b/src/m4a.c
@@ -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++;
}
diff --git a/src/main.c b/src/main.c
index da984c6..ee657d6 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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(&param_1[param_3],param_5,0,0,param_7,param_3);
+ }
+ else {
+ sub_8012E04(&param_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);
+}
diff --git a/src/save.c b/src/save.c
index 36eca52..bfeee9b 100644
--- a/src/save.c
+++ b/src/save.c
@@ -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;
diff --git a/src/text.c b/src/text.c
index 6ef7f5e..2c74e53 100644
--- a/src/text.c
+++ b/src/text.c
@@ -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);