summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2022-03-25 09:39:44 -0700
committerGitHub <noreply@github.com>2022-03-25 09:39:44 -0700
commit9f98e08fb99112eedd56873b5557c5e4e757dbba (patch)
tree439b1bce980e4452fcc92999eb62df354ef9b790 /src
parenta0264b99956cc67dd13704b758dc1f2f4c1480ca (diff)
parent57f540b320ae8439fe4b42c6149641b877c7ea73 (diff)
Merge pull request #100 from SethBarberee/save_workHEADmaster
Save work
Diffstat (limited to 'src')
-rw-r--r--src/adventure_log.c38
-rw-r--r--src/code_8090208.c34
-rw-r--r--src/code_8094F88.c31
-rw-r--r--src/code_8095824.c165
-rw-r--r--src/code_80972F4.c200
-rw-r--r--src/code_8097670.c59
-rw-r--r--src/code_8097DD0.c90
-rw-r--r--src/code_80A26CC.c2
-rw-r--r--src/dungeon_2.c83
-rw-r--r--src/friend_area_action_menu_1.c132
-rw-r--r--src/friend_list_menu.c14
-rw-r--r--src/friend_rescue_1.c25
-rw-r--r--src/items.c4
-rw-r--r--src/kangaskhan_storage_3.c6
-rw-r--r--src/kecleon_items_1.c220
-rw-r--r--src/load_screen.c15
-rw-r--r--src/luminous_cave.c1
-rw-r--r--src/music_pre.c349
-rw-r--r--src/pokemon_3.c24
-rw-r--r--src/pokemon_mid.c4
-rw-r--r--src/post_office_guide.c129
-rw-r--r--src/rescue_password_menu.c2
-rw-r--r--src/save.c4
-rw-r--r--src/thank_you_wonder_mail.c8
-rw-r--r--src/wonder_mail.c12
-rw-r--r--src/wonder_mail_2.c6
-rw-r--r--src/wonder_mail_3.c4
-rw-r--r--src/wonder_mail_802DF88.c41
28 files changed, 1210 insertions, 492 deletions
diff --git a/src/adventure_log.c b/src/adventure_log.c
index cb20682..bf0424b 100644
--- a/src/adventure_log.c
+++ b/src/adventure_log.c
@@ -54,7 +54,7 @@ extern bool8 sub_8013938(void *);
extern void sub_8013660(void *);
extern void PlayMenuSoundEffect(u32);
extern u32 GetKeyPress(void *);
-extern u8 sub_8097710(u8);
+extern bool8 sub_8097710(u8);
extern s16 sub_80978B8();
extern s16 sub_8097880();
@@ -202,30 +202,31 @@ void sub_8032084(void)
}
#endif
-// Uses 1 too many regs
+// Mostly matches except around the switch
#ifdef NONMATCHING
void DisplayAdventureLog(void)
{
s32 counter;
- s32 iVar5;
- u32 uVar6;
+ s32 r4; // r4
+ s32 r6; // r6
u8 temp;
sub_8008C54(gAdventureLog->unk34);
sub_80073B8(gAdventureLog->unk34);
- iVar5 = gAdventureLog->currPage * 8;
- iVar5 += 10;
+ r4 = gAdventureLog->currPage * 8;
+ r6 = r4;
+ r6 += 10;
// Draw Header
- xxx_call_draw_string(iVar5, 0, gAdventureLogHeaderText, gAdventureLog->unk34, 0);
- iVar5 += 4;
- iVar5 += gAdventureLog->unk9E * 8;
+ xxx_call_draw_string(r6, 0, gAdventureLogHeaderText, gAdventureLog->unk34, 0);
+ r4 += 4;
+ r6 = r4 + gAdventureLog->unk9E * 8;
// Draw Page #
- sub_8012BC4(iVar5, 0, gAdventureLog->currPage + 1, 1, 7, gAdventureLog->unk34);
- counter = 0;
- do {
- uVar6 = gAdventureLog->currPage * gAdventureLog->unk1C + counter;
- temp = uVar6; // Having another var in middle gets close (does a u8 cast)
- if(sub_8097710(temp) != 0){
+ sub_8012BC4(r6, 0, gAdventureLog->currPage + 1, 1, 7, gAdventureLog->unk34);
+
+ for(counter = 0; counter < gAdventureLog->unk1A; counter++)
+ {
+ temp = gAdventureLog->currPage * gAdventureLog->unk1C + counter;
+ if(sub_8097710(temp)){
switch(temp) {
case 0xc:
gUnknown_202DE30 = sub_80978B8();
@@ -248,16 +249,15 @@ void DisplayAdventureLog(void)
default:
break;
}
- xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(uVar6), gAdventureLog->unk34, 0);
+ xxx_format_and_draw(8, sub_8013800(gAdventureLog, counter), GetAdventureLogLine(temp), gAdventureLog->unk34, 0);
}
else
{
// Draw the ?????????? across the row
xxx_call_draw_string(8, sub_8013800(gAdventureLog, counter), gUnknown_80E2030, gAdventureLog->unk34, 0);
}
- counter++;
- } while(counter < gAdventureLog->unk1A);
- sub_80073E0(gAdventureLog->unk34);
+ }
+ sub_80073E0(gAdventureLog->unk34);
}
#else
NAKED
diff --git a/src/code_8090208.c b/src/code_8090208.c
deleted file mode 100644
index 8322ffc..0000000
--- a/src/code_8090208.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "global.h"
-#include "dungeon.h"
-#include "code_800D090.h"
-
-extern const char gUnknown_8108F10[];
-extern const char gUnknown_8108F18[];
-extern const char gUnknown_8108F2C[];
-
-struct unkDungeonStruct
-{
- u8 index;
- u8 floor;
-};
-
-void sub_8090208(u8 *buffer, struct unkDungeonStruct *dungeonLocation)
-{
- sprintf_2(buffer, gUnknown_8108F10, gDungeonNames[dungeonLocation->index].name1); // {COLOR_2 YELLOW_4}%s{END_COLOR_TEXT_2} (normal floor print (no B)
-}
-
-void PrintDungeonLocationtoBuffer(u8 *buffer, struct unkDungeonStruct *dungeonLocation)
-{
- if(gDungeons[dungeonLocation->index].stairDirection != 0){
- sprintf_2(buffer, gUnknown_8108F18, gDungeonNames[dungeonLocation->index].name1, dungeonLocation->floor); //_F
- }
- else
- {
- sprintf_2(buffer, gUnknown_8108F2C, gDungeonNames[dungeonLocation->index].name1, dungeonLocation->floor); // B _F
- }
-}
-
-void CopyDungeonName1toBuffer(u8 *buffer, struct unkDungeonStruct *dungeonLocation)
-{
- strncpy(buffer, gDungeonNames[dungeonLocation->index].name1, 0x50);
-}
diff --git a/src/code_8094F88.c b/src/code_8094F88.c
index 5bd3a29..0ca6de9 100644
--- a/src/code_8094F88.c
+++ b/src/code_8094F88.c
@@ -1,33 +1,18 @@
#include "global.h"
+#include "pokemon.h"
+#include "code_8094F88.h"
#include "memory.h"
-struct unkStruct_203B480
-{
- //size of 48
- u8 unk0;
- u8 fill1[0x22 - 1];
- u8 unk22;
- u8 fill23[0x2D - 0x23];
- u8 unk2D;
-};
-
-struct unkStruct_203B48C
-{
- s32 unk0;
- s32 unk4[0x20];
-};
-
extern struct unkStruct_203B480 gUnknown_2038C88;
-extern u8 gUnknown_2039288;
-extern u32 gUnknown_20392E8;
+extern struct unkStruct_203B480 *gUnknown_203B480;
+extern struct unkStruct_203B484 gUnknown_2039288;
+extern struct unkStruct_203B484 *gUnknown_203B484;
extern struct unkStruct_203B48C gUnknown_20393C0;
-extern u8 *gUnknown_203B484;
+extern struct unkStruct_203B48C *gUnknown_203B48C;
extern u32 *gUnknown_203B488;
+extern u32 gUnknown_20392E8;
-extern struct unkStruct_203B480 *gUnknown_203B480;
-
-extern struct unkStruct_203B48C *gUnknown_203B48C; // def a pointer
void sub_80950BC(void)
@@ -43,7 +28,7 @@ struct unkStruct_203B480 *sub_80950F8(void)
return &gUnknown_2038C88;
}
-u8 *sub_8095100(void)
+struct unkStruct_203B484 *sub_8095100(void)
{
return &gUnknown_2039288;
}
diff --git a/src/code_8095824.c b/src/code_8095824.c
new file mode 100644
index 0000000..938b47f
--- /dev/null
+++ b/src/code_8095824.c
@@ -0,0 +1,165 @@
+#include "global.h"
+#include "pokemon.h"
+#include "code_8094F88.h"
+
+extern struct unkStruct_203B484 *gUnknown_203B484;
+extern struct unkStruct_203B480 *gUnknown_203B480;
+extern struct unkStruct_203B48C *gUnknown_203B48C;
+
+extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
+extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
+extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC);
+extern void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
+extern void SavePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet);
+extern void RestorePokemonMoves(struct unkStruct_8094924 *r0, struct PokemonMove *moveSet);
+
+void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b);
+void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b);
+extern u32 sub_8095324(u32);
+
+u32 sub_80954B4(void)
+{
+ if(sub_8095324(3) != 0)
+ return 1;
+ else
+ return 0;
+}
+
+u32 sub_80954CC(u8 *a, u32 b)
+{
+ struct unkStruct_8094924 backup;
+ struct PokemonStruct *temp;
+ s32 index;
+
+ xxx_init_struct_8094924_restore_809485C(&backup, a, b);
+ for(index = 0; index < 0x20; index++)
+ {
+ sub_8095774(&backup, &gUnknown_203B480[index]);
+ }
+ RestoreIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20);
+ temp = &gUnknown_203B484->unk4;
+ memset(temp, 0, sizeof(struct PokemonStruct));
+ RestoreIntegerBits(&backup, &temp->unk0, 2);
+ RestoreIntegerBits(&backup, &temp->isLeader, 1);
+ RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7);
+ RestoreDungeonLocation(&backup, &temp->unk4);
+ RestoreIntegerBits(&backup, &temp->speciesNum, 9);
+ xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]);
+ xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[1]);
+ RestoreIntegerBits(&backup, &temp->IQ, 0xA);
+ RestoreIntegerBits(&backup, &temp->pokeHP, 0xA);
+ RestoreIntegerBits(&backup, &temp->offense.att[0], 8);
+ RestoreIntegerBits(&backup, &temp->offense.att[1], 8);
+ RestoreIntegerBits(&backup, &temp->offense.def[0], 8);
+ RestoreIntegerBits(&backup, &temp->offense.def[1], 8);
+ RestoreIntegerBits(&backup, &temp->unk1C, 0x18);
+ RestoreIntegerBits(&backup, &temp->IQSkills, 0x18);
+ RestoreIntegerBits(&backup, &temp->unk24, 4);
+ RestoreHeldItem(&backup, &temp->heldItem);
+ RestorePokemonMoves(&backup, temp->moves);
+ RestoreIntegerBits(&backup, temp->name, 0x50);
+
+ RestoreIntegerBits(&backup, &gUnknown_203B48C->unk0, 0x20);
+ for(index = 0; index < 0x20; index++)
+ {
+ RestoreIntegerBits(&backup, &gUnknown_203B48C->unk4[index], 0x20);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+u32 sub_8095624(u8 *a, u32 b)
+{
+ struct unkStruct_8094924 backup;
+ struct PokemonStruct *temp;
+ s32 index;
+
+ xxx_init_struct_8094924_save_809486C(&backup, a, b);
+ for(index = 0; index < 0x20; index++)
+ {
+ sub_8095824(&backup, &gUnknown_203B480[index]);
+ }
+ SaveIntegerBits(&backup, &gUnknown_203B484->unk0, 0x20);
+ temp = &gUnknown_203B484->unk4;
+ SaveIntegerBits(&backup, &temp->unk0, 2);
+ SaveIntegerBits(&backup, &temp->isLeader, 1);
+ SaveIntegerBits(&backup, &temp->unkHasNextStage, 7);
+ SaveDungeonLocation(&backup, &temp->unk4);
+ SaveIntegerBits(&backup, &temp->speciesNum, 9);
+ xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]);
+ xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[1]);
+ SaveIntegerBits(&backup, &temp->IQ, 0xA);
+ SaveIntegerBits(&backup, &temp->pokeHP, 0xA);
+ SaveIntegerBits(&backup, &temp->offense.att[0], 8);
+ SaveIntegerBits(&backup, &temp->offense.att[1], 8);
+ SaveIntegerBits(&backup, &temp->offense.def[0], 8);
+ SaveIntegerBits(&backup, &temp->offense.def[1], 8);
+ SaveIntegerBits(&backup, &temp->unk1C, 0x18);
+ SaveIntegerBits(&backup, &temp->IQSkills, 0x18);
+ SaveIntegerBits(&backup, &temp->unk24, 4);
+ SaveHeldItem(&backup, &temp->heldItem);
+ SavePokemonMoves(&backup, temp->moves);
+ SaveIntegerBits(&backup, temp->name, 0x50);
+
+ SaveIntegerBits(&backup, &gUnknown_203B48C->unk0, 0x20);
+ for(index = 0; index < 0x20; index++)
+ {
+ SaveIntegerBits(&backup, &gUnknown_203B48C->unk4[index], 0x20);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
+{
+ u8 temp;
+
+ RestoreIntegerBits(a, &b->unk0, 4);
+ RestoreDungeonLocation(a, &b->unk4);
+ RestoreIntegerBits(a, &b->unk8, 0x18);
+ RestoreIntegerBits(a, &b->unkC, 0x9);
+ RestoreIntegerBits(a, &b->unk10, 0x20);
+ RestoreIntegerBits(a, &b->unk14, 0x50);
+ RestoreIntegerBits(a, &b->unk20, 0x8);
+ RestoreIntegerBits(a, &b->unk21, 0x8);
+ RestoreIntegerBits(a, &b->unk22, 0x8);
+ RestoreIntegerBits(a, &b->unk24, 0x20);
+ RestoreIntegerBits(a, &b->unk28, 0x20);
+ RestoreIntegerBits(a, &b->unk2C, 0x8);
+
+ RestoreIntegerBits(a, &temp, 1);
+ b->unk2D = temp & 1;
+}
+
+void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
+{
+ u8 neg1;
+ u8 zero;
+ u8 *puVar2;
+ neg1 = -1;
+ zero = 0;
+
+ SaveIntegerBits(a, &b->unk0, 4);
+ SaveDungeonLocation(a, &b->unk4);
+ SaveIntegerBits(a, &b->unk8, 0x18);
+ SaveIntegerBits(a, &b->unkC, 0x9);
+ SaveIntegerBits(a, &b->unk10, 0x20);
+ SaveIntegerBits(a, &b->unk14, 0x50);
+ SaveIntegerBits(a, &b->unk20, 0x8);
+ SaveIntegerBits(a, &b->unk21, 0x8);
+ SaveIntegerBits(a, &b->unk22, 0x8);
+ SaveIntegerBits(a, &b->unk24, 0x20);
+ SaveIntegerBits(a, &b->unk28, 0x20);
+ SaveIntegerBits(a, &b->unk2C, 0x8);
+
+ if(b->unk2D != 0)
+ puVar2 = &neg1;
+ else
+ puVar2 = &zero;
+ SaveIntegerBits(a, puVar2, 1);
+}
+
+void sub_80958E4(u32 *a, u32 b)
+{
+ *a = b;
+}
diff --git a/src/code_80972F4.c b/src/code_80972F4.c
new file mode 100644
index 0000000..1c7e125
--- /dev/null
+++ b/src/code_80972F4.c
@@ -0,0 +1,200 @@
+#include "global.h"
+#include "pokemon.h"
+#include "wonder_mail.h"
+
+extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
+extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
+extern void sub_80015C0(u32, u32);
+
+struct unkStruct_8097270
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ struct DungeonLocation unk4;
+ u32 unk8;
+ u16 unkC;
+ u16 unkE;
+ u8 unk10;
+ u8 unk11;
+ u8 unk12;
+ u8 unk13;
+};
+
+struct subStruct_203B490
+{
+ // size: 0xC
+ struct DungeonLocation unk0;
+ u32 unk4;
+ u32 unk8;
+};
+
+
+struct unkStruct_203B490
+{
+ // size: 0x330?
+
+ struct unkStruct_8097270 unk0[4];
+ struct unkStruct_8097270 unk50[8];
+ struct unkStruct_8097270 unkF0[8];
+ u8 unk190[0x28];
+ u8 unk1B8[0x78];
+ struct subStruct_203B490 unk230[16];
+ u8 unk2F0[0x38];
+ u8 unk328;
+};
+extern struct unkStruct_203B490 *gUnknown_203B490;
+
+void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b);
+void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b);
+extern s32 sub_8096EB0(void);
+
+bool8 sub_8096F50(struct WonderMail *r0)
+{
+ s32 index;
+ s32 temp2;
+ struct subStruct_203B490 *temp;
+
+ temp2 = sub_8096EB0();
+
+
+ for(index = 0; index < 0x10; index++)
+ {
+ temp = &gUnknown_203B490->unk230[index];
+ if(temp->unk0.dungeonIndex == r0->dungeon)
+ if(temp->unk0.dungeonFloor == r0->floor)
+ if(temp->unk4 == r0->unk8)
+ if(temp->unk8 == temp2)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u32 sub_8096FA0(u8 *r0, u32 size)
+{
+ s32 index;
+ struct unkStruct_8094924 backup;
+ u32 temp;
+
+ xxx_init_struct_8094924_restore_809485C(&backup, r0, size);
+ for(index = 0; index < 4; index++)
+ {
+ sub_80971EC(&backup, &gUnknown_203B490->unk0[index]);
+ }
+ for(index = 0; index < 8; index++)
+ {
+ sub_80971EC(&backup, &gUnknown_203B490->unk50[index]);
+ }
+ for(index = 0; index < 8; index++)
+ {
+ sub_80971EC(&backup, &gUnknown_203B490->unkF0[index]);
+ }
+ for(index = 0; index < 0x38; index++)
+ {
+ RestoreIntegerBits(&backup, &temp, 1);
+ if(temp & 1)
+ gUnknown_203B490->unk2F0[index] = 1;
+ else
+ gUnknown_203B490->unk2F0[index] = 0;
+ }
+ RestoreIntegerBits(&backup, &temp, 1);
+ if(temp & 1)
+ gUnknown_203B490->unk328 = 1;
+ else
+ gUnknown_203B490->unk328 = 0;
+
+ RestoreIntegerBits(&backup, gUnknown_203B490->unk190, 0x140);
+ RestoreIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0);
+ for(index = 0; index < 0x10; index++)
+ {
+ RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
+ RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
+ RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+u32 sub_80970D8(u8 *r0, u32 size)
+{
+ s32 index;
+ struct unkStruct_8094924 backup;
+ u32 temp;
+
+ xxx_init_struct_8094924_save_809486C(&backup, r0, size);
+ for(index = 0; index < 4; index++)
+ {
+ sub_8097270(&backup, &gUnknown_203B490->unk0[index]);
+ }
+ for(index = 0; index < 8; index++)
+ {
+ sub_8097270(&backup, &gUnknown_203B490->unk50[index]);
+ }
+ for(index = 0; index < 8; index++)
+ {
+ sub_8097270(&backup, &gUnknown_203B490->unkF0[index]);
+ }
+ for(index = 0; index < 0x38; index++)
+ {
+ if(gUnknown_203B490->unk2F0[index] != 0)
+ temp = -1;
+ else
+ temp = 0;
+ SaveIntegerBits(&backup, &temp, 1);
+ }
+ if(gUnknown_203B490->unk328 != 0)
+ temp = -1;
+ else
+ temp = 0;
+ SaveIntegerBits(&backup, &temp, 1);
+ SaveIntegerBits(&backup, gUnknown_203B490->unk190, 0x140);
+ SaveIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0);
+ for(index = 0; index < 0x10; index++)
+ {
+ SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
+ SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
+ SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].unk0);
+ }
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+void sub_80971EC(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b)
+{
+ RestoreIntegerBits(a, &b->unk0, 4);
+ RestoreIntegerBits(a, &b->unk1, 3);
+ RestoreIntegerBits(a, &b->unk2, 4);
+ RestoreIntegerBits(a, &b->unkC, 9);
+ RestoreIntegerBits(a, &b->unkE, 9);
+ RestoreIntegerBits(a, &b->unk10, 8);
+ RestoreIntegerBits(a, &b->unk11, 4);
+ RestoreIntegerBits(a, &b->unk12, 8);
+ RestoreIntegerBits(a, &b->unk13, 6);
+ RestoreIntegerBits(a, &b->unk8, 0x18);
+ RestoreDungeonLocation(a, &b->unk4);
+}
+
+void sub_8097270(struct unkStruct_8094924 *a, struct unkStruct_8097270 *b)
+{
+ SaveIntegerBits(a, &b->unk0, 4);
+ SaveIntegerBits(a, &b->unk1, 3);
+ SaveIntegerBits(a, &b->unk2, 4);
+ SaveIntegerBits(a, &b->unkC, 9);
+ SaveIntegerBits(a, &b->unkE, 9);
+ SaveIntegerBits(a, &b->unk10, 8);
+ SaveIntegerBits(a, &b->unk11, 4);
+ SaveIntegerBits(a, &b->unk12, 8);
+ SaveIntegerBits(a, &b->unk13, 6);
+ SaveIntegerBits(a, &b->unk8, 0x18);
+ SaveDungeonLocation(a, &b->unk4);
+}
+
+void sub_80972F4(void)
+{
+ sub_80015C0(0, 0x2B);
+ sub_80015C0(0, 0x2C);
+ sub_80015C0(0, 0x2D);
+}
+
+void nullsub_128(void)
+{}
diff --git a/src/code_8097670.c b/src/code_8097670.c
index 75a788a..e2b3723 100644
--- a/src/code_8097670.c
+++ b/src/code_8097670.c
@@ -1,10 +1,5 @@
#include "global.h"
-
-struct unkDungeonStruct
-{
- u8 index;
- u8 floor;
-};
+#include "pokemon.h"
struct unkStruct_203B494
{
@@ -13,12 +8,12 @@ struct unkStruct_203B494
s32 numAdventures;
s32 unk8;
s32 unkC;
- struct unkDungeonStruct dungeonLocation;
+ struct DungeonLocation dungeonLocation;
s16 unk14;
s16 unk16;
s16 unk18;
u32 unk1C[0xE];
- u8 fill54[0x8C - 0x54];
+ u32 unk54[0xE];
u32 unk8C[0xD];
s32 unkC0;
};
@@ -26,6 +21,7 @@ struct unkStruct_203B494
extern struct unkStruct_203B494 *gUnknown_203B494;
extern struct unkStruct_203B494 gUnknown_2039778;
extern const u8 *gAdventureLogText[];
+s16 GetBaseSpeciesNoUnown(s16 index);
void sub_8097670(void)
{
@@ -37,13 +33,13 @@ struct unkStruct_203B494 *sub_8097680(void)
return &gUnknown_2039778;
}
-void SetDungeonLocationInfo(struct unkDungeonStruct *r0)
+void SetDungeonLocationInfo(struct DungeonLocation *r0)
{
- gUnknown_203B494->dungeonLocation.index = r0->index;
- gUnknown_203B494->dungeonLocation.floor = r0->floor;
+ gUnknown_203B494->dungeonLocation.dungeonIndex = r0->dungeonIndex;
+ gUnknown_203B494->dungeonLocation.dungeonFloor = r0->dungeonFloor;
}
-struct unkDungeonStruct *GetDungeonLocationInfo(void)
+struct DungeonLocation *GetDungeonLocationInfo(void)
{
return &gUnknown_203B494->dungeonLocation;
}
@@ -76,12 +72,12 @@ void sub_80976F8(u8 r0)
gUnknown_203B494->unk0 |= (1 << r0);
}
-u8 sub_8097710(u8 r0)
+bool8 sub_8097710(u8 r0)
{
if(gUnknown_203B494->unk0 & (1 << r0))
- return 1;
+ return TRUE;
else
- return 0;
+ return FALSE;
}
const u8 *GetAdventureLogLine(u8 index)
@@ -187,3 +183,36 @@ s16 sub_80978B8(void)
{
return gUnknown_203B494->unkC0;
}
+
+void sub_80978C8(s16 pokeIndex)
+{
+ s32 iVar2;
+ struct unkStruct_203B494 *preload;
+ s32 baseSpecies;
+
+ baseSpecies = GetBaseSpeciesNoUnown(pokeIndex);
+ preload = gUnknown_203B494;
+ iVar2 = baseSpecies;
+ if (baseSpecies < 0) {
+ iVar2 = baseSpecies + 0x1f;
+ }
+ preload->unk54[iVar2 >> 5] |= 1 << (baseSpecies + (iVar2 >> 5) * -0x20);
+}
+
+bool8 sub_8097900(s16 pokeIndex)
+{
+ s32 iVar2;
+ struct unkStruct_203B494 *preload;
+ s32 baseSpecies;
+
+ baseSpecies = GetBaseSpeciesNoUnown(pokeIndex);
+ preload = gUnknown_203B494;
+ iVar2 = baseSpecies;
+ if (baseSpecies < 0) {
+ iVar2 = baseSpecies + 0x1f;
+ }
+ if(preload->unk1C[iVar2 >> 5] & (1 << (baseSpecies + (iVar2 >> 5) * -0x20)))
+ return TRUE;
+ else
+ return FALSE;
+}
diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c
new file mode 100644
index 0000000..abbb02e
--- /dev/null
+++ b/src/code_8097DD0.c
@@ -0,0 +1,90 @@
+#include "global.h"
+#include "code_8092334.h"
+#include "pokemon.h"
+
+struct unkStruct_203B494
+{
+ // size: 0xC8?
+ u32 unk0; // 32 bit bitfield, I think
+ s32 numAdventures;
+ s32 unk8;
+ s32 unkC;
+ struct DungeonLocation dungeonLocation;
+ s16 unk14;
+ s16 unk16;
+ s16 unk18;
+ u32 unk1C[0xE];
+ u32 unk54[0xE];
+ u32 unk8C[0xD];
+ s32 unkC0;
+};
+
+extern struct unkStruct_203B494 *gUnknown_203B494;
+
+extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
+extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
+void ReadExclusivePokemon(struct unkStruct_8094924 *r0);
+void ReadGameOptions(struct unkStruct_8094924 *param_1);
+void ReadPlayTime(struct unkStruct_8094924 *r0);
+void WriteExclusivePokemon(struct unkStruct_8094924 *r0);
+void WriteGameOptions(struct unkStruct_8094924 *param_1);
+void WritePlayTime(struct unkStruct_8094924 *r0);
+
+extern void sub_8097944(void);
+
+void sub_8097C18(struct unkStruct_8094924 *r0)
+{
+ sub_8097944();
+ SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11);
+ SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11);
+ SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11);
+ SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20);
+ SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE);
+ SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE);
+ SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9);
+ SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11);
+ SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1);
+ SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1);
+ SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1);
+ SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation);
+}
+
+void sub_8097CC0(struct unkStruct_8094924 *r0)
+{
+ RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11);
+ RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11);
+ RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11);
+ RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20);
+ RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE);
+ RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE);
+ RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9);
+ RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11);
+ RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1);
+ RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1);
+ RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1);
+ RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation);
+}
+
+u32 sub_8097D60(u8 *r0, u32 size)
+{
+ struct unkStruct_8094924 backup;
+ xxx_init_struct_8094924_save_809486C(&backup, r0, size);
+ WriteGameOptions(&backup);
+ WritePlayTime(&backup);
+ sub_8097C18(&backup);
+ WriteExclusivePokemon(&backup);
+ nullsub_102(&backup);
+ return backup.unk8;
+}
+
+u32 sub_8097D98(u8 *r0, u32 size)
+{
+ struct unkStruct_8094924 backup;
+ xxx_init_struct_8094924_restore_809485C(&backup, r0, size);
+ ReadGameOptions(&backup);
+ ReadPlayTime(&backup);
+ sub_8097CC0(&backup);
+ ReadExclusivePokemon(&backup);
+ nullsub_102(&backup);
+ return backup.unk8;
+}
diff --git a/src/code_80A26CC.c b/src/code_80A26CC.c
index bc5f60e..b18cf5f 100644
--- a/src/code_80A26CC.c
+++ b/src/code_80A26CC.c
@@ -61,7 +61,7 @@ s32 sub_80A2668(u32 r0)
}
}
-u32 sub_80A2688(u8 r0, u32 r1)
+u32 sub_80A2688(u8 r0)
{
u32 uVar1;
diff --git a/src/dungeon_2.c b/src/dungeon_2.c
new file mode 100644
index 0000000..282ac99
--- /dev/null
+++ b/src/dungeon_2.c
@@ -0,0 +1,83 @@
+#include "global.h"
+#include "dungeon.h"
+#include "code_800D090.h"
+#include "pokemon.h"
+#include "code_8092334.h"
+#include "constants/dungeon.h"
+
+extern const char gUnknown_8108F10[];
+extern const char gUnknown_8108F18[];
+extern const char gUnknown_8108F2C[];
+extern u8 gUnknown_81077A8[];
+extern u8 gUnknown_81077E8[];
+
+void sub_80901D8(struct DungeonLocation *param_1,struct DungeonLocation *param_2)
+{
+ if ((u8)(param_2->dungeonIndex - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE) {
+ param_1->dungeonIndex = DUNGEON_NORMAL_MAZE;
+ param_1->dungeonFloor = (param_2->dungeonIndex - DUNGEON_NORMAL_MAZE_2) * 3 + param_2->dungeonFloor;
+ }
+ else {
+ *param_1 = *param_2;
+ }
+}
+
+void PrintYellowDungeonNametoBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation)
+{
+ sprintf_2(buffer, gUnknown_8108F10, gDungeonNames[dungeonLocation->dungeonIndex].name1); // {COLOR_2 YELLOW_4}%s{END_COLOR_TEXT_2} (normal floor print (no B)
+}
+
+void PrintDungeonLocationtoBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation)
+{
+ if(gDungeons[dungeonLocation->dungeonIndex].stairDirection != 0){
+ sprintf_2(buffer, gUnknown_8108F18, gDungeonNames[dungeonLocation->dungeonIndex].name1, dungeonLocation->dungeonFloor); //_F
+ }
+ else
+ {
+ sprintf_2(buffer, gUnknown_8108F2C, gDungeonNames[dungeonLocation->dungeonIndex].name1, dungeonLocation->dungeonFloor); // B _F
+ }
+}
+
+void CopyDungeonName1toBuffer(u8 *buffer, struct DungeonLocation *dungeonLocation)
+{
+ strncpy(buffer, gDungeonNames[dungeonLocation->dungeonIndex].name1, 0x50);
+}
+
+u8 sub_8090298(u8 dungeon)
+{
+ if ((u8)(dungeon - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE)
+ return 4;
+ else if(dungeon > DUNGEON_PURITY_FOREST)
+ return 1;
+ else
+ return gUnknown_81077A8[dungeon];
+}
+
+u8 sub_80902C8(u8 dungeon)
+{
+ if ((u8)(dungeon - DUNGEON_NORMAL_MAZE_2) < NUM_DUNGEON_MAZE)
+ return 0;
+ else if(dungeon > DUNGEON_PURITY_FOREST)
+ return 0;
+ else
+ return gUnknown_81077E8[dungeon];
+}
+
+void SaveDungeonLocation(struct unkStruct_8094924* r0, struct DungeonLocation* r1)
+{
+ SaveIntegerBits(r0, &r1->dungeonIndex, 0x7);
+ SaveIntegerBits(r0, &r1->dungeonFloor, 0x7);
+}
+
+void RestoreDungeonLocation(struct unkStruct_8094924* r0, struct DungeonLocation* r1)
+{
+ r1->dungeonIndex = 0;
+ r1->dungeonFloor = 0;
+ RestoreIntegerBits(r0, &r1->dungeonIndex, 0x7);
+ RestoreIntegerBits(r0, &r1->dungeonFloor, 0x7);
+}
+
+u8 GetDungeonUnk1(u8 dungeon)
+{
+ return gDungeons[dungeon].unk1;
+}
diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c
index 1abd973..38650d0 100644
--- a/src/friend_area_action_menu_1.c
+++ b/src/friend_area_action_menu_1.c
@@ -43,11 +43,129 @@ extern u32 sub_801F194(void);
u32 sub_8027E18(struct PokemonStruct *);
u8 sub_8027E4C(struct PokemonStruct *r0);
+
extern u32 sub_801BF48(void);
extern void sub_801BF98(void);
extern u32 sub_80244E4(void);
extern void sub_802453C(void);
+extern u32 sub_8023A94(u32);
+extern bool8 sub_808D750(s16 index_);
+extern struct PokemonStruct *GetPlayerPokemonStruct(void);
+extern void sub_808ED00();
+extern s16 sub_8023B44(void);
+extern void sub_8023C60(void);
+
+void sub_80277FC(void)
+{
+ struct PokemonStruct *iVar4;
+
+ switch(sub_8023A94(1)) {
+ case 0:
+ case 1:
+ break;
+ case 3:
+ gUnknown_203B2BC->targetPoke = sub_8023B44();
+ iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
+ gUnknown_203B2BC->unk18 = iVar4;
+ gUnknown_203B2BC->unk1C = iVar4->isLeader;
+ PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14);
+ SetFriendAreaActionMenuState(3);
+ break;
+ case 4:
+ gUnknown_203B2BC->targetPoke = sub_8023B44();
+ iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
+ gUnknown_203B2BC->unk18 = iVar4;
+ gUnknown_203B2BC->unk1C = iVar4->isLeader;
+ PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14);
+ SetFriendAreaActionMenuState(4);
+ break;
+ case 2:
+ sub_8023C60();
+ SetFriendAreaActionMenuState(0x11);
+ break;
+ }
+}
+
+void sub_80278B4(void)
+{
+ struct PokemonStruct *playerStruct;
+ struct PokemonStruct *puVar3;
+ struct PokemonStruct *iVar4;
+ int local_c;
+
+ local_c = 0;
+ sub_8023A94(0);
+ if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == '\0') && (sub_8013114(&gUnknown_203B2BC->unk7C,&local_c), local_c != 1)) {
+ gUnknown_203B2BC->unk70 = local_c;
+ }
+ switch(local_c) {
+ case 6:
+ if (sub_808D750(gUnknown_203B2BC->targetPoke) != '\0') {
+#ifdef NONMATCHING
+ puVar3 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
+#else
+ register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]);
+ struct PokemonStruct* p = gRecruitedPokemonRef->pokemon;
+ size_t addr = offset + (size_t)p;
+ puVar3 = (struct PokemonStruct*)addr;
+#endif
+ puVar3->unk0 |= 2;
+ nullsub_104();
+ }
+ sub_808ED00();
+ SetFriendAreaActionMenuState(2);
+ break;
+ case 7:
+ gUnknown_203B2BC->unk18->unk0 &= 0xfffd;
+ nullsub_104();
+ sub_808ED00();
+ SetFriendAreaActionMenuState(2);
+ break;
+ case 8:
+ iVar4 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
+ playerStruct = GetPlayerPokemonStruct();
+ if (!iVar4->isLeader) {
+ playerStruct->isLeader = FALSE;
+ iVar4->isLeader = TRUE;
+ nullsub_104();
+ }
+ sub_808ED00();
+ SetFriendAreaActionMenuState(2);
+ break;
+ case 9:
+ SetFriendAreaActionMenuState(8);
+ break;
+ case 0xc:
+ SetFriendAreaActionMenuState(0xe);
+ break;
+ case 10:
+ SetFriendAreaActionMenuState(10);
+ break;
+ case 0xb:
+ PlaySound(0x14d);
+ if (gUnknown_203B2BC->unk14.itemIndex != ITEM_ID_NOTHING) {
+ AddHeldItemToInventory(&gUnknown_203B2BC->unk14);
+ }
+ FillInventoryGaps();
+ gUnknown_203B2BC->unk14.itemIndex = 0;
+ gUnknown_203B2BC->unk14.numItems = 0;
+ GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->unk14);
+ nullsub_104();
+ SetFriendAreaActionMenuState(2);
+ break;
+ case 4:
+ SetFriendAreaActionMenuState(4);
+ break;
+ case 5:
+ SetFriendAreaActionMenuState(5);
+ break;
+ case 1:
+ SetFriendAreaActionMenuState(2);
+ break;
+ }
+}
+
void sub_8027A40(void)
{
switch(sub_80244E4())
@@ -79,7 +197,7 @@ void sub_8027A5C(void)
}
static inline bool8 sub_8027A78_sub(void) {
- if (gUnknown_203B2BC->unk18->unk4.unk4 == 0x44 || gUnknown_203B2BC->unk18->unk4.unk4 == 0x45)
+ if (gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x45)
return TRUE;
else
return FALSE;
@@ -171,7 +289,7 @@ void sub_8027BD8(void)
ShiftItemsDownFrom(gUnknown_203B2BC->itemIndex);
FillInventoryGaps();
if (gUnknown_203B2BC->unk14.itemIndex != 0) {
- sub_8091274(&gUnknown_203B2BC->unk14);
+ AddHeldItemToInventory(&gUnknown_203B2BC->unk14);
}
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive);
sub_801A928();
@@ -267,10 +385,10 @@ void sub_8027D40(u32 r0, struct HeldItem *heldItem)
u32 sub_8027D9C(struct PokemonStruct *r0)
{
u32 var1;
- if(r0->unk2 == 0)
+ if(r0->isLeader == 0)
{
var1 = 0;
- if(r0->unk4.unk4 == 0x41)
+ if(r0->unk4.dungeonIndex == 0x41)
var1 = 1;
if(var1 != 0)
{
@@ -288,10 +406,10 @@ u32 sub_8027DCC(struct PokemonStruct *r0)
u32 var1;
if(sub_808D3BC() != r0)
if(sub_808D3F8() != r0)
- if(r0->unk2 == 0)
+ if(r0->isLeader == 0)
{
var1 = 0;
- if(r0->unk4.unk4 == 0x41)
+ if(r0->unk4.dungeonIndex == 0x41)
var1 = 1;
if(var1 != 0)
{
@@ -345,7 +463,7 @@ void sub_8027EB8(void)
{
case 1:
PlaySound(0x14d);
- sub_8091274(&gUnknown_203B2BC->unk14);
+ AddHeldItemToInventory(&gUnknown_203B2BC->unk14);
FillInventoryGaps();
gUnknown_203B2BC->unk14.itemIndex = 0;
gUnknown_203B2BC->unk14.numItems = 0;
diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c
index 9310665..fe9de8c 100644
--- a/src/friend_list_menu.c
+++ b/src/friend_list_menu.c
@@ -113,7 +113,7 @@ void sub_8026A94(void)
static inline bool8 sub_8026AB0_sub(void) {
- if (gUnknown_203B2B8->unk18->unk4.unk4 == 0x44 || gUnknown_203B2B8->unk18->unk4.unk4 == 0x45)
+ if (gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x45)
return TRUE;
else
return FALSE;
@@ -222,7 +222,7 @@ void sub_8026C14(void)
ShiftItemsDownFrom(gUnknown_203B2B8->unkC);
FillInventoryGaps();
if (gUnknown_203B2B8->unk14.itemIndex != '\0') {
- sub_8091274(&gUnknown_203B2B8->unk14);
+ AddHeldItemToInventory(&gUnknown_203B2B8->unk14);
nextState = 0x10;
}
HeldItemToSlot(&slot,&gUnknown_203B2B8->unk10);
@@ -342,9 +342,9 @@ void sub_8026E08(u32 r0)
u32 sub_8026E88(struct PokemonStruct *r0)
{
u8 iVar3;
- if(r0->unk2 == 0)
+ if(r0->isLeader == 0)
{
- iVar3 = (r0->unk4.unk4 == 0x41);
+ iVar3 = (r0->unk4.dungeonIndex == 0x41);
if(iVar3 != 0)
if(sub_80023E4(0x8) == 0)
return 0;
@@ -359,9 +359,9 @@ u32 sub_8026EB8(struct PokemonStruct *r0)
u8 iVar3;
if(sub_808D3BC() != r0)
if(sub_808D3F8() != r0)
- if(r0->unk2 == 0)
+ if(r0->isLeader == 0)
{
- iVar3 = (r0->unk4.unk4 == 0x41);
+ iVar3 = (r0->unk4.dungeonIndex == 0x41);
if(iVar3 != 0)
{
if(sub_80023E4(0x8) != 0)
@@ -414,7 +414,7 @@ void sub_8026FA4(void)
{
case 1:
PlaySound(0x14d);
- sub_8091274(&gUnknown_203B2B8->unk14);
+ AddHeldItemToInventory(&gUnknown_203B2B8->unk14);
FillInventoryGaps();
gUnknown_203B2B8->unk14.itemIndex = 0;
gUnknown_203B2B8->unk14.numItems = 0;
diff --git a/src/friend_rescue_1.c b/src/friend_rescue_1.c
index 325cf4e..c3571c0 100644
--- a/src/friend_rescue_1.c
+++ b/src/friend_rescue_1.c
@@ -8,6 +8,7 @@
#include "friend_rescue.h"
#include "sub_8095228.h"
#include "item.h"
+#include "code_8094F88.h"
extern struct TeamInventory *gTeamInventory_203B460;
extern u8 *gUnknown_203B484;
@@ -81,10 +82,10 @@ extern void sub_8023DA4(void);
extern void sub_8035D1C(void);
extern u16 sub_8023B44(void);
-extern u32 sub_8039068(u32, u8 *r1, u8 *r0);
+extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0);
extern void sub_8095274(u32);
-extern void sub_80951BC(u8 *r0);
-extern void sub_80951FC(u8 *r0);
+extern void sub_80951BC(struct unkStruct_8095228 *r0);
+extern void sub_80951FC(struct unkStruct_8095228 *r0);
extern u8 sub_809539C(u32, u32);
extern u8 sub_800D588(void);
extern u32 sub_8095324(u32);
@@ -454,7 +455,7 @@ void sub_8033DBC(void)
default:
break;
}
- switch(sub_8039068(input_var, gUnknown_203B33C->passwordBuffer, &temp.unk0))
+ switch(sub_8039068(input_var, gUnknown_203B33C->passwordBuffer, &temp))
{
case 17:
sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2290, 0, 4, 0, 0, 0x101);
@@ -470,8 +471,8 @@ void sub_8033DBC(void)
break;
case 22:
sub_8095274(temp.unk10);
- temp.unk0 = 2; // Some sort of Ack?
- sub_80951BC(&temp.unk0);
+ temp.mailType = 2;
+ sub_80951BC(&temp);
sub_80141B4(gUnknown_80E4928, 0, 0, 0x101);
SetFriendRescueMenuState(0x16);
break;
@@ -484,11 +485,11 @@ void sub_8033DBC(void)
SetFriendRescueMenuState(8);
break;
case 23:
- temp.unk0 = 5; // Some sort of Ack?
- sub_80951FC(&temp.unk0);
+ temp.mailType = 5;
+ sub_80951FC(&temp);
temp2 = sub_8095228(sub_809539C(1, temp.unk10));
- temp2->unk0 = 7;
- MemoryFill8((u8 *)gUnknown_203B484, 0, 0x5C);
+ temp2->mailType = 7;
+ MemoryFill8((u8 *)gUnknown_203B484, 0, sizeof(struct unkStruct_203B484));
SetFriendRescueMenuState(0x40);
break;
case 24:
@@ -1339,7 +1340,7 @@ void sub_8034D74(void)
switch(return_var)
{
case 3:
- switch(sub_8039068(0x20, gUnknown_203B33C->passwordBuffer, &temp.unk0))
+ switch(sub_8039068(0x20, gUnknown_203B33C->passwordBuffer, &temp))
{
case 17:
sub_8014248(gUnknown_80E48A8, 0, 6, gUnknown_80E2440, 0, 4, 0, 0, 0x101);
@@ -1356,7 +1357,7 @@ void sub_8034D74(void)
case 24:
temp2 = sub_8095228(sub_809539C(4, temp.unk10));
*temp2 = temp;
- temp2->unk0 = 6; // Some sort of Ack?
+ temp2->mailType = 6;
gUnknown_203B33C->unk420 = temp.unk10;
SetFriendRescueMenuState(0x6D);
break;
diff --git a/src/items.c b/src/items.c
index e4bdc6a..6d2acaf 100644
--- a/src/items.c
+++ b/src/items.c
@@ -586,7 +586,7 @@ bool8 sub_809124C(u8 itemIndex, u8 param_3)
return AddItemToInventory(&temp);
}
-bool8 sub_8091274(struct HeldItem* slot)
+bool8 AddHeldItemToInventory(struct HeldItem* slot)
{
struct ItemSlot temp;
@@ -1083,7 +1083,7 @@ struct HeldItem* xxx_get_unk250_at_8091A90(u8 index) {
return &gTeamInventory_203B460->unk250[index];
}
-void xxx_fill_inv_unk250_gaps_8091AA8(u8 index) {
+void xxx_fill_inv_unk250_gaps_8091AA8(void) {
s32 slot_checking = 0;
s32 last_filled = 0;
diff --git a/src/kangaskhan_storage_3.c b/src/kangaskhan_storage_3.c
index 1c65da6..568e69f 100644
--- a/src/kangaskhan_storage_3.c
+++ b/src/kangaskhan_storage_3.c
@@ -159,7 +159,7 @@ void sub_80186F8(void)
item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | (0x80 << 1);
}
gTeamInventory_203B460->teamStorage[item.temp.norm.itemIndex] -= item.temp.norm.numItems;
- sub_8091274((struct HeldItem *)&item);
+ AddHeldItemToInventory((struct HeldItem *)&item);
}
}
FillInventoryGaps();
@@ -218,7 +218,7 @@ void sub_8018854(void)
itemsCast = (gUnknown_203B20C->unk8.numItems << 8);
item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | itemsCast;
- sub_8091274((struct HeldItem *)&item);
+ AddHeldItemToInventory((struct HeldItem *)&item);
if(sub_801CF14(1) == 0)
if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
{
@@ -319,7 +319,7 @@ void sub_80189C8(void)
itemsCast = (gUnknown_203B20C->unk8.numItems << 8);
item.temp.full_bits = (item.temp.full_bits & 0xffff00ff) | itemsCast;
- sub_8091274((struct HeldItem *)&item);
+ AddHeldItemToInventory((struct HeldItem *)&item);
if(sub_801CF14(1) == 0)
if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
{
diff --git a/src/kecleon_items_1.c b/src/kecleon_items_1.c
index cd5df5b..c3e90b6 100644
--- a/src/kecleon_items_1.c
+++ b/src/kecleon_items_1.c
@@ -99,12 +99,204 @@ extern void sub_8013984(u8 *);
extern void sub_801A064(void);
extern void sub_801A0D8(void);
extern void AddMenuCursorSprite(void *);
-extern s32 xxx_count_inv_unk230();
extern u8 sub_801A37C(void);
extern u16 gUnknown_203B228;
extern u16 gUnknown_203B22A;
extern struct UnkTextStruct2 gUnknown_80DB95C;
+extern void sub_801A010(void);
+extern void sub_801A3DC(void);
+extern void sub_801AD34(u32);
+extern void PlaySound(u16 songIndex);
+
+extern void xxx_init_inv_unk250_at_8091A74(u8 index);
+extern void xxx_fill_inv_unk250_gaps_8091AA8(void);
+
+u32 sub_8019D8C(void);
+
+void sub_8019730(void)
+{
+ s32 local_8;
+
+ if (sub_80144A4(&local_8) != 0)
+ return;
+ if (local_8 != 1)
+ gUnknown_203B210->unk28 = local_8;
+ switch(local_8) {
+ case 2:
+ if (sub_8019D8C() == 0)
+ UpdateKecleonStoreState(5);
+ else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
+ UpdateKecleonStoreState(0xA);
+ else
+ UpdateKecleonStoreState(0xF);
+ break;
+ case 3:
+ if (GetNumberOfFilledInventorySlots() == 0)
+ UpdateKecleonStoreState(9);
+ else if (gUnknown_203B210->unk14 == 0)
+ UpdateKecleonStoreState(8);
+ else if (gTeamInventory_203B460->teamMoney < 99999)
+ UpdateKecleonStoreState(0x17);
+ else
+ UpdateKecleonStoreState(7);
+ break;
+ case 4:
+ if (GetNumberOfFilledInventorySlots() == 0)
+ UpdateKecleonStoreState(9);
+ else if (gUnknown_203B210->unk14 == 0)
+ UpdateKecleonStoreState(8);
+ else if (gUnknown_203B210->unk18 + gTeamInventory_203B460->teamMoney > 99999)
+ UpdateKecleonStoreState(7);
+ else
+ UpdateKecleonStoreState(0x1f);
+ break;
+ case 7:
+ UpdateKecleonStoreState(2);
+ break;
+ case 1:
+ UpdateKecleonStoreState(3);
+ break;
+ }
+}
+
+void sub_8019850(void)
+{
+ s32 local_c;
+
+ if (sub_80144A4(&local_c) == 0) {
+ switch(local_c)
+ {
+ case 5:
+ AddToTeamMoney(-gUnknown_203B210->itemSellPrice);
+ if (gUnknown_203B210->unk4 != '\0') {
+ AddHeldItemToInventory(xxx_get_inv_unk230_at_809185C(gUnknown_203B210->unk20));
+ xxx_init_unk230_substruct(gUnknown_203B210->unk20);
+ xxx_fill_unk230_gaps();
+ }
+ else {
+ AddHeldItemToInventory(xxx_get_unk250_at_8091A90(gUnknown_203B210->unk21));
+ xxx_init_inv_unk250_at_8091A74(gUnknown_203B210->unk21);
+ xxx_fill_inv_unk250_gaps_8091AA8();
+ }
+ PlaySound(0x14c);
+ UpdateKecleonStoreState(0x11);
+ break;
+ case 6:
+ case 1:
+ UpdateKecleonStoreState(0x10);
+ break;
+ }
+ }
+}
+
+void sub_80198E8(void)
+{
+ s32 local_c;
+
+ if (sub_80144A4(&local_c) == 0) {
+ switch(local_c)
+ {
+ case 5:
+ AddToTeamMoney(gUnknown_203B210->itemSellPrice);
+ ShiftItemsDownFrom(gUnknown_203B210->unk24);
+ PlaySound(0x14c);
+ UpdateKecleonStoreState(0x19);
+ break;
+ case 6:
+ case 1:
+ UpdateKecleonStoreState(0x18);
+ break;
+ }
+ }
+}
+
+void sub_8019944(void)
+{
+ s32 slotIndex;
+ s32 local_10;
+ struct ItemSlot *itemSlot;
+
+ if (sub_80144A4(&local_10) == 0) {
+ switch(local_10)
+ {
+ case 5:
+ for(slotIndex = 0; slotIndex < INVENTORY_SIZE; slotIndex++)
+ {
+ itemSlot = &gTeamInventory_203B460->teamItems[slotIndex];
+ if ((itemSlot->itemFlags & ITEM_FLAG_EXISTS) && CanSellItem(itemSlot->itemIndex)) {
+ ClearItemSlotAt(slotIndex);
+ }
+ }
+ FillInventoryGaps();
+ AddToTeamMoney(gUnknown_203B210->unk18);
+ PlaySound(0x14c);
+ UpdateKecleonStoreState(0x20);
+ break;
+ case 1:
+ case 6:
+ UpdateKecleonStoreState(1);
+ break;
+ }
+ }
+}
+
+void sub_80199CC(void)
+{
+ u32 uVar2;
+ struct HeldItem *puVar3;
+
+ if (gUnknown_203B210->unk4 != '\0') {
+ uVar2 = sub_8019EDC(1);
+ }
+ else {
+ uVar2 = sub_801A2A8(1);
+ }
+
+ switch(uVar2)
+ {
+ case 3:
+ if (gUnknown_203B210->unk4) {
+ gUnknown_203B210->unk20 = sub_8019FB0();
+ puVar3 = xxx_get_inv_unk230_at_809185C(gUnknown_203B210->unk20);
+ }
+ else {
+ gUnknown_203B210->unk21 = sub_801A37C();
+ puVar3 = xxx_get_unk250_at_8091A90(gUnknown_203B210->unk21);
+ }
+ xxx_init_itemslot_8090A8C(&gUnknown_203B210->unk1C,puVar3->itemIndex,0);
+ gUnknown_203B210->unk1C.numItems =puVar3->numItems;
+ gUnknown_203B210->itemSellPrice = GetStackBuyPrice(&gUnknown_203B210->unk1C);
+ UpdateKecleonStoreState(0x14);
+ break;
+ case 4:
+ if (gUnknown_203B210->unk4) {
+ gUnknown_203B210->unk20 = sub_8019FB0();
+ puVar3 = xxx_get_inv_unk230_at_809185C(gUnknown_203B210->unk20);
+ }
+ else {
+ gUnknown_203B210->unk21 = sub_801A37C();
+ puVar3 = xxx_get_unk250_at_8091A90(gUnknown_203B210->unk21);
+ }
+ xxx_init_itemslot_8090A8C(&gUnknown_203B210->unk1C,puVar3->itemIndex,0);
+ gUnknown_203B210->unk1C.numItems = puVar3->numItems;
+ gUnknown_203B210->itemSellPrice = GetStackBuyPrice(&gUnknown_203B210->unk1C);
+ UpdateKecleonStoreState(0x15);
+ break;
+ case 2:
+ if (gUnknown_203B210->unk4)
+ sub_801A010();
+ else
+ sub_801A3DC();
+ UpdateKecleonStoreState(1);
+ break;
+ case 1:
+ sub_801AD34(0);
+ DrawTeamMoneyBox(1);
+ break;
+ }
+}
+
void sub_8019B08(void)
{
switch(sub_801A6E8(1))
@@ -151,15 +343,12 @@ void sub_8019BBC(void)
}
switch(menuAction){
case 2:
- if (gTeamInventory_203B460->teamMoney == 0) {
+ if (gTeamInventory_203B460->teamMoney == 0)
UpdateKecleonStoreState(0x6);
- }
- else if (gUnknown_203B210->itemSellPrice > gTeamInventory_203B460->teamMoney) {
+ else if (gUnknown_203B210->itemSellPrice > gTeamInventory_203B460->teamMoney)
UpdateKecleonStoreState(0xC);
- }
- else {
+ else
UpdateKecleonStoreState(0x16);
- }
break;
case 7:
UpdateKecleonStoreState(0x15);
@@ -182,15 +371,12 @@ void sub_8019C78(void)
switch(menuAction){
case 3:
sub_8099690(0);
- if (!CanSellItem(gUnknown_203B210->unk1C.itemIndex)) {
+ if (!CanSellItem(gUnknown_203B210->unk1C.itemIndex))
UpdateKecleonStoreState(0xd);
- }
- else if (gUnknown_203B210->itemSellPrice + gTeamInventory_203B460->teamMoney > 99999) {
+ else if (gUnknown_203B210->itemSellPrice + gTeamInventory_203B460->teamMoney > 99999)
UpdateKecleonStoreState(0xe);
- }
- else {
+ else
UpdateKecleonStoreState(0x1e);
- }
break;
case 7:
sub_8099690(0);
@@ -253,15 +439,15 @@ u32 sub_8019D8C(void)
void sub_8019DAC(void)
{
s32 iVar3;
- struct ItemSlot *pbVar4;
+ struct ItemSlot *itemSlot;
s32 iVar5;
gUnknown_203B210->unk14 = 0;
gUnknown_203B210->unk18 = 0;
for(iVar5 = 0; iVar5 < INVENTORY_SIZE; iVar5++){
- pbVar4 = &gTeamInventory_203B460->teamItems[iVar5];
- if (((pbVar4->itemFlags & ITEM_FLAG_EXISTS) != 0) && (CanSellItem(pbVar4->itemIndex))) {
- iVar3 = GetStackSellPrice(pbVar4);
+ itemSlot = &gTeamInventory_203B460->teamItems[iVar5];
+ if (((itemSlot->itemFlags & ITEM_FLAG_EXISTS) != 0) && (CanSellItem(itemSlot->itemIndex))) {
+ iVar3 = GetStackSellPrice(itemSlot);
gUnknown_203B210->unk18 += iVar3;
gUnknown_203B210->unk14++;
}
diff --git a/src/load_screen.c b/src/load_screen.c
index 1c224f5..775e974 100644
--- a/src/load_screen.c
+++ b/src/load_screen.c
@@ -9,17 +9,10 @@
#include "pokemon.h"
#include "save.h"
#include "code_800D090.h"
+#include "code_8094F88.h"
extern const struct FileArchive gTitleMenuFileArchive;
-struct unkStruct_203B484
-{
- u8 fill0[0xC];
- /* 0xC */ s16 speciesIndex;
- u8 fillE[0x50 - 0xE];
- /* 0x50 */ u8 helperName[10];
-};
-
struct LoadScreen
{
// size: 0x27c
@@ -373,9 +366,9 @@ void DrawLoadScreenText(void)
if (iVar2 == 0xf1207){
// NOTE: very hacky match here but needed var here to match
temp2 = gUnknown_203B484;
- if(temp2->speciesIndex != SPECIES_NONE) {
- sub_808D930(speciesHelper,temp2->speciesIndex);
- sub_80922B4(nameHelper,temp2->helperName,POKEMON_NAME_LENGTH);
+ if(temp2->unk4.speciesNum != SPECIES_NONE) {
+ sub_808D930(speciesHelper,temp2->unk4.speciesNum);
+ sub_80922B4(nameHelper,temp2->unk4.name,POKEMON_NAME_LENGTH);
sprintf_2(gLoadScreen->formattedHelperInfo,gHelperInfoPlaceholder,nameHelper,speciesHelper); // %s (%s)
}
else
diff --git a/src/luminous_cave.c b/src/luminous_cave.c
index 2b5afa3..fa78f06 100644
--- a/src/luminous_cave.c
+++ b/src/luminous_cave.c
@@ -97,7 +97,6 @@ extern void sub_80141B4(const char *r0, u32, struct OpenedFile **r1, u32);
extern void sub_8014248(const char *r0, u32, u32, struct MenuItem *r4, u16 *, u32, u32, struct OpenedFile **r5, u32);
void xxx_call_fade_out_bgm(u16 speed);
void sub_801199C(u16 songIndex);
-void ClearItemSlotAt(u32 index);
void xxx_call_fade_in_new_bgm(u16 songIndex, u16 speed);
void sub_80977D0(void);
void PlaySound(u32);
diff --git a/src/music_pre.c b/src/music_pre.c
index 95940aa..3bac474 100644
--- a/src/music_pre.c
+++ b/src/music_pre.c
@@ -407,7 +407,7 @@ void InitMusic(void)
gBGMusicPlayerState = 0;
gCurrentBGSong = 999;
gUnknown_202D68C = 999;
- gUnknown_202D68E = 0x3e5;
+ gUnknown_202D68E = 997;
gUnknown_202D690 = 0;
gUnknown_202D692 = 0;
gUnknown_202D694 = 0;
@@ -415,7 +415,7 @@ void InitMusic(void)
for(counter = 0, preload = &gUnknown_3000FD8[0]; counter < 8; counter++, preload++)
{
preload->unk0 = 0;
- preload->songIndex = 0x3e5;
+ preload->songIndex = 997;
preload->unk4 = 0;
preload->unk6 = 0;
}
@@ -425,8 +425,8 @@ void InitMusic(void)
void sub_800BDDC(void)
{
sub_800BF80();
- sub_800C298(0x3e6);
- sub_800C298(0x3e5);
+ sub_800C298(998);
+ sub_800C298(997);
}
@@ -583,52 +583,53 @@ u16 GetCurrentBGSong(void)
return gCurrentBGSong;
}
-#ifdef NONMATCHING
-// TODO fix reg allocation.. using one too many regs
void sub_800C074(u16 SongIndex, u16 param_2)
{
bool8 interrupt_flag;
+ bool8 interrupt_flag2;
u16 msVar;
struct unkStruct_3000FD8 *preload;
- if (SongIndex == 0x3e5)
+ if (SongIndex == 997)
return;
- if (256 < param_2)
+ if (param_2 > 256)
param_2 = 256;
if (sub_800CACC(SongIndex))
{
- msVar = GetMusicPlayerIndex(SongIndex);
- if (msVar == 1) {
+ if (GetMusicPlayerIndex(SongIndex) == 1) {
interrupt_flag = DisableInterrupts();
gUnknown_202D68E = SongIndex;
if(gUnknown_202D690 == 0)
{
if (gCurrentBGSong != 999)
{
- if ((u16)(gBGMusicPlayerState - 1U) < 2)
+ if ((u16)(gBGMusicPlayerState - 1) < 2)
{
- gUnknown_202D690 = msVar;
+ gUnknown_202D690 = 1;
gUnknown_202D692 = 16;
gUnknown_202D694 = 0;
- m4aMPlayFadeOutTemporarily(&gMPlayInfo_BGM,1);
+ m4aMPlayFadeOutTemporarily(&gMPlayInfo_BGM, 1);
}
- else
+ else if (gBGMusicPlayerState == 3)
+ gUnknown_202D690 = 2;
+ else
{
- if (gBGMusicPlayerState == 3)
- gUnknown_202D690 = 2;
- else
- {
- gUnknown_202D690 = 3;
- m4aMPlayStop(&gMPlayInfo_BGM);
- m4aSongNumStart(gUnknown_202D68E);
- }
+ gUnknown_202D690 = 3;
+ m4aMPlayStop(&gMPlayInfo_BGM);
+ m4aSongNumStart(gUnknown_202D68E);
}
}
+ else
+ {
+ gUnknown_202D690 = 3;
+ m4aMPlayStop(&gMPlayInfo_BGM);
+ m4aSongNumStart(gUnknown_202D68E);
+ }
}
else
{
- if (1 < (u16)(gUnknown_202D690 - 1U))
+ if (1 < (u16)(gUnknown_202D690 - 1))
{
m4aMPlayStop(&gMPlayInfo_BGM);
m4aSongNumStart(gUnknown_202D68E);
@@ -675,230 +676,24 @@ void sub_800C074(u16 SongIndex, u16 param_2)
nullsub_20(SongIndex);
else
{
- interrupt_flag = DisableInterrupts();
+ interrupt_flag2 = DisableInterrupts();
m4aSongNumStart(SongIndex);
preload->unk0 = 1;
preload->songIndex = SongIndex;
- if(msVar == param_2)
+ if(param_2 == 256)
{
- preload->unk6 = 1;
+ preload->unk6 = 0;
}
else
{
- preload->unk6 = 0;
+ preload->unk6 = 1;
}
- preload->unk4 = msVar;
- if (interrupt_flag)
+ preload->unk4 = param_2;
+ if (interrupt_flag2)
EnableInterrupts();
}
}
}
-#else
-NAKED
-void sub_800C074(u16 SongIndex, u16 param_2)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r8\n"
- "\tpush {r7}\n"
- "\tlsls r0, 16\n"
- "\tlsrs r5, r0, 16\n"
- "\tmov r8, r5\n"
- "\tlsls r1, 16\n"
- "\tlsrs r6, r1, 16\n"
- "\tldr r0, _0800C0FC\n"
- "\tcmp r5, r0\n"
- "\tbne _0800C08C\n"
- "\tb _0800C208\n"
-"_0800C08C:\n"
- "\tmovs r7, 0x80\n"
- "\tlsls r7, 1\n"
- "\tcmp r6, r7\n"
- "\tbls _0800C096\n"
- "\tadds r6, r7, 0\n"
-"_0800C096:\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_800CACC\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbne _0800C0A4\n"
- "\tb _0800C1B0\n"
-"_0800C0A4:\n"
- "\tadds r0, r5, 0\n"
- "\tbl GetMusicPlayerIndex\n"
- "\tlsls r0, 16\n"
- "\tlsrs r7, r0, 16\n"
- "\tcmp r7, 0x1\n"
- "\tbeq _0800C0B4\n"
- "\tb _0800C1D0\n"
-"_0800C0B4:\n"
- "\tbl DisableInterrupts\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r8, r0\n"
- "\tldr r6, _0800C100\n"
- "\tstrh r5, [r6]\n"
- "\tldr r4, _0800C104\n"
- "\tldrh r0, [r4]\n"
- "\tadds r2, r0, 0\n"
- "\tcmp r2, 0\n"
- "\tbne _0800C144\n"
- "\tldr r0, _0800C108\n"
- "\tldrh r1, [r0]\n"
- "\tldr r0, _0800C10C\n"
- "\tcmp r1, r0\n"
- "\tbeq _0800C12C\n"
- "\tldr r0, _0800C110\n"
- "\tldrh r1, [r0]\n"
- "\tsubs r0, r1, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x1\n"
- "\tbhi _0800C120\n"
- "\tstrh r7, [r4]\n"
- "\tldr r1, _0800C114\n"
- "\tmovs r0, 0x10\n"
- "\tstrh r0, [r1]\n"
- "\tldr r0, _0800C118\n"
- "\tstrb r2, [r0]\n"
- "\tldr r0, _0800C11C\n"
- "\tmovs r1, 0x1\n"
- "\tbl m4aMPlayFadeOutTemporarily\n"
- "\tb _0800C15E\n"
- "\t.align 2, 0\n"
-"_0800C0FC: .4byte 0x000003e5\n"
-"_0800C100: .4byte gUnknown_202D68E\n"
-"_0800C104: .4byte gUnknown_202D690\n"
-"_0800C108: .4byte gCurrentBGSong\n"
-"_0800C10C: .4byte 0x000003e7\n"
-"_0800C110: .4byte gBGMusicPlayerState\n"
-"_0800C114: .4byte gUnknown_202D692\n"
-"_0800C118: .4byte gUnknown_202D694\n"
-"_0800C11C: .4byte gMPlayInfo_BGM\n"
-"_0800C120:\n"
- "\tlsls r0, r1, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x3\n"
- "\tbne _0800C12C\n"
- "\tmovs r0, 0x2\n"
- "\tb _0800C15C\n"
-"_0800C12C:\n"
- "\tmovs r0, 0x3\n"
- "\tstrh r0, [r4]\n"
- "\tldr r0, _0800C140\n"
- "\tbl m4aMPlayStop\n"
- "\tldrh r0, [r6]\n"
- "\tbl m4aSongNumStart\n"
- "\tb _0800C15E\n"
- "\t.align 2, 0\n"
-"_0800C140: .4byte gMPlayInfo_BGM\n"
-"_0800C144:\n"
- "\tsubs r0, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x1\n"
- "\tbls _0800C15E\n"
- "\tldr r0, _0800C17C\n"
- "\tbl m4aMPlayStop\n"
- "\tldrh r0, [r6]\n"
- "\tbl m4aSongNumStart\n"
- "\tmovs r0, 0x3\n"
-"_0800C15C:\n"
- "\tstrh r0, [r4]\n"
-"_0800C15E:\n"
- "\tldr r0, _0800C180\n"
- "\tldrh r0, [r0]\n"
- "\tcmp r0, 0x26\n"
- "\tbgt _0800C184\n"
- "\tcmp r0, 0x25\n"
- "\tbge _0800C19A\n"
- "\tcmp r0, 0x1A\n"
- "\tblt _0800C1A0\n"
- "\tcmp r0, 0x1F\n"
- "\tble _0800C19A\n"
- "\tcmp r0, 0x23\n"
- "\tbgt _0800C1A0\n"
- "\tcmp r0, 0x22\n"
- "\tblt _0800C1A0\n"
- "\tb _0800C19A\n"
- "\t.align 2, 0\n"
-"_0800C17C: .4byte gMPlayInfo_BGM\n"
-"_0800C180: .4byte gCurrentBGSong\n"
-"_0800C184:\n"
- "\tcmp r0, 0x7A\n"
- "\tbeq _0800C19A\n"
- "\tcmp r0, 0x7A\n"
- "\tbgt _0800C196\n"
- "\tcmp r0, 0x77\n"
- "\tbgt _0800C1A0\n"
- "\tcmp r0, 0x75\n"
- "\tblt _0800C1A0\n"
- "\tb _0800C19A\n"
-"_0800C196:\n"
- "\tcmp r0, 0x7F\n"
- "\tbne _0800C1A0\n"
-"_0800C19A:\n"
- "\tldr r1, _0800C1AC\n"
- "\tmovs r0, 0x1\n"
- "\tstrb r0, [r1]\n"
-"_0800C1A0:\n"
- "\tmov r0, r8\n"
- "\tcmp r0, 0\n"
- "\tbeq _0800C208\n"
- "\tbl EnableInterrupts\n"
- "\tb _0800C208\n"
- "\t.align 2, 0\n"
-"_0800C1AC: .4byte gUnknown_202D694\n"
-"_0800C1B0:\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_800CAAC\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _0800C208\n"
- "\tadds r0, r5, 0\n"
- "\tbl GetMusicPlayerIndex\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tlsls r2, r0, 3\n"
- "\tldr r1, _0800C1D8\n"
- "\tadds r4, r2, r1\n"
- "\tcmp r0, 0x1\n"
- "\tbhi _0800C1DC\n"
-"_0800C1D0:\n"
- "\tadds r0, r5, 0\n"
- "\tbl nullsub_20\n"
- "\tb _0800C208\n"
- "\t.align 2, 0\n"
-"_0800C1D8: .4byte gUnknown_3000FD8\n"
-"_0800C1DC:\n"
- "\tbl DisableInterrupts\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tmov r0, r8\n"
- "\tbl m4aSongNumStart\n"
- "\tmovs r0, 0x1\n"
- "\tstrh r0, [r4]\n"
- "\tmov r0, r8\n"
- "\tstrh r0, [r4, 0x2]\n"
- "\tcmp r6, r7\n"
- "\tbne _0800C1FA\n"
- "\tmovs r0, 0\n"
- "\tb _0800C1FC\n"
-"_0800C1FA:\n"
- "\tmovs r0, 0x1\n"
-"_0800C1FC:\n"
- "\tstrb r0, [r4, 0x6]\n"
- "\tstrh r6, [r4, 0x4]\n"
- "\tcmp r5, 0\n"
- "\tbeq _0800C208\n"
- "\tbl EnableInterrupts\n"
-"_0800C208:\n"
- "\tpop {r3}\n"
- "\tmov r8, r3\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0");
-}
-#endif
void sub_800C214(u16 songIndex, u16 volume)
{
@@ -940,14 +735,14 @@ void sub_800C298(u16 songIndex)
struct unkStruct_3000FD8 *preload;
struct unkStruct_3000FD8 *puVar3;
- if (songIndex == 0x3e5) {
+ if (songIndex == 997) {
cVar1 = DisableInterrupts();
for(iVar4 = 2, puVar3 = &gUnknown_3000FE8[0]; iVar4 < 7; iVar4++, puVar3++)
{
m4aMPlayStop(gMPlayTable[iVar4].info);
puVar3->unk0 = 0;
- puVar3->songIndex = 0x3e5;
+ puVar3->songIndex = 997;
puVar3->unk4 = 0;
puVar3->unk6 = 0;
}
@@ -955,7 +750,7 @@ void sub_800C298(u16 songIndex)
EnableInterrupts();
}
}
- else if (sub_800CAAC(songIndex) != '\0')
+ else if (sub_800CAAC(songIndex))
{
uVar2 = GetMusicPlayerIndex(songIndex);
puVar6 = gMPlayTable[uVar2].info;
@@ -968,7 +763,7 @@ void sub_800C298(u16 songIndex)
if (preload->songIndex == songIndex) {
m4aMPlayStop(puVar6);
preload->unk0 = 0;
- preload->songIndex = 0x3e5;
+ preload->songIndex = 997;
preload->unk4 = 0;
preload->unk6 = 0;
}
@@ -977,12 +772,12 @@ void sub_800C298(u16 songIndex)
}
}
}
- else if (songIndex == 0x3e6)
+ else if (songIndex == 998)
{
cVar3 = DisableInterrupts();
if (gUnknown_202D690 != 0) {
- if (gUnknown_202D68E != 0x3e5) {
- gUnknown_202D68E = 0x3e5;
+ if (gUnknown_202D68E != 997) {
+ gUnknown_202D68E = 997;
m4aMPlayStop(&gUnknown_2000970);
}
}
@@ -990,12 +785,12 @@ void sub_800C298(u16 songIndex)
EnableInterrupts();
}
}
- else if (sub_800CACC(songIndex) != '\0')
+ else if (sub_800CACC(songIndex))
{
cVar4 = DisableInterrupts();
if (gUnknown_202D690 != 0) {
if (gUnknown_202D68E == songIndex) {
- gUnknown_202D68E = 0x3e5;
+ gUnknown_202D68E = 997;
m4aMPlayStop(&gUnknown_2000970);
}
}
@@ -1031,19 +826,18 @@ void sub_800C3F8(u16 songIndex, u16 speed)
}
}
- if (songIndex == 0x3e5) {
+ if (songIndex == 997) {
cVar1 = DisableInterrupts();
-
for(uVar6 = 2, puVar3 = &gUnknown_3000FE8[0]; uVar6 < 7; uVar6++, puVar3++)
{
- if (puVar3->songIndex != 0x3e5) {
+ if (puVar3->songIndex != 997) {
if (sub_800CAF0(uVar6) != '\0') {
m4aMPlayFadeOut(gMPlayTable[uVar6].info,speed);
}
else {
m4aMPlayStop(gMPlayTable[uVar6].info);
puVar3->unk0 = 0;
- puVar3->songIndex = 0x3e5;
+ puVar3->songIndex = 997;
puVar3->unk4 = 0;
puVar3->unk6 = 0;
}
@@ -1054,19 +848,19 @@ void sub_800C3F8(u16 songIndex, u16 speed)
}
}
else {
- if (sub_800CAAC(songIndex) != '\0') {
+ if (sub_800CAAC(songIndex)) {
uVar8 = GetMusicPlayerIndex(songIndex);
preload = &gUnknown_3000FD8[uVar8];
puVar5 = gMPlayTable[uVar8].info;
cVar2 = DisableInterrupts();
- if (preload->songIndex != 0x3e5) {
+ if (preload->songIndex != 997) {
if (sub_800CAF0(uVar8) != '\0') {
m4aMPlayFadeOut(puVar5,speed);
}
else {
m4aMPlayStop(puVar5);
preload->unk0 = 0;
- preload->songIndex = 0x3e5;
+ preload->songIndex = 997;
preload->unk4 = 0;
preload->unk6 = 0;
}
@@ -1075,40 +869,35 @@ void sub_800C3F8(u16 songIndex, u16 speed)
EnableInterrupts();
}
}
- else
- {
- if (songIndex == 0x3e6) {
- cVar3 = DisableInterrupts();
- if ((gUnknown_202D690 != 0) && (gUnknown_202D68E != 0x3e5)) {
- if (sub_800CAF0(1) != '\0') {
- m4aMPlayFadeOut(&gUnknown_2000970,speed);
- }
- else {
- m4aMPlayStop(&gUnknown_2000970);
- gUnknown_202D68E = 0x3e5;
- }
+ else if (songIndex == 998) {
+ cVar3 = DisableInterrupts();
+ if ((gUnknown_202D690 != 0) && (gUnknown_202D68E != 997)) {
+ if (sub_800CAF0(1) != '\0') {
+ m4aMPlayFadeOut(&gUnknown_2000970,speed);
}
- if (cVar3 != '\0') {
- EnableInterrupts();
+ else {
+ m4aMPlayStop(&gUnknown_2000970);
+ gUnknown_202D68E = 997;
}
}
- else {
- if (sub_800CACC(songIndex) != '\0') {
- cVar4 = DisableInterrupts();
- if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex)) {
- if (sub_800CAF0(1) != '\0') {
- m4aMPlayFadeOut(&gUnknown_2000970,speed);
- }
- else {
- m4aMPlayStop(&gUnknown_2000970);
- gUnknown_202D68E = 0x3e5;
- }
- }
- if (cVar4 != '\0') {
- EnableInterrupts();
- }
+ if (cVar3 != '\0') {
+ EnableInterrupts();
+ }
+ }
+ else if (sub_800CACC(songIndex)) {
+ cVar4 = DisableInterrupts();
+ if ((gUnknown_202D690 != 0) && (gUnknown_202D68E == songIndex)) {
+ if (sub_800CAF0(1) != '\0') {
+ m4aMPlayFadeOut(&gUnknown_2000970,speed);
+ }
+ else {
+ m4aMPlayStop(&gUnknown_2000970);
+ gUnknown_202D68E = 997;
}
}
+ if (cVar4 != '\0') {
+ EnableInterrupts();
+ }
}
}
}
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 68c894b..251a69f 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -49,10 +49,10 @@ extern s32 gUnknown_810AC90[10];
extern void AddSprite(u16 *, u32, u32, u32);
-extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*);
+extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
extern void SavePokemonMoves(struct unkStruct_8094924*, struct PokemonMove*);
-void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*);
+void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
void RestorePokemonMoves(struct unkStruct_8094924*, struct PokemonMove*);
@@ -685,7 +685,7 @@ s32 SaveRecruitedPokemon(u8 *a1, s32 a2)
if (pokemon->unk0 & 2) {
buffer[count++] = i;
}
- if (pokemon->unk2) {
+ if (pokemon->isLeader) {
data_s16 = i;
}
}
@@ -745,7 +745,7 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2)
}
RestoreIntegerBits(&backup, &data_s16, 16);
if ((u16)data_s16 < NUM_SPECIES) {
- gRecruitedPokemonRef->pokemon[data_s16].unk2 = 1;
+ gRecruitedPokemonRef->pokemon[data_s16].isLeader = 1;
}
nullsub_102(&backup);
return backup.unk8;
@@ -755,7 +755,7 @@ void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokem
{
SaveIntegerBits(a1, &pokemon->unkHasNextStage, 7);
SaveIntegerBits(a1, &pokemon->speciesNum, 9);
- xxx_save_poke_sub_4_80902F4(a1, &pokemon->unk4);
+ SaveDungeonLocation(a1, &pokemon->unk4);
xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[0]);
xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[1]);
SaveIntegerBits(a1, &pokemon->IQ, 10);
@@ -776,13 +776,13 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po
{
memset(pokemon, 0, sizeof(struct PokemonStruct));
pokemon->unk0 = 0;
- pokemon->unk2 = 0;
+ pokemon->isLeader = 0;
RestoreIntegerBits(a1, &pokemon->unkHasNextStage, 7);
if (pokemon->unkHasNextStage) {
pokemon->unk0 |= 1;
}
RestoreIntegerBits(a1, &pokemon->speciesNum, 9);
- xxx_restore_poke_sub_4_8090314(a1, &pokemon->unk4);
+ RestoreDungeonLocation(a1, &pokemon->unk4);
xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[0]);
xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[1]);
RestoreIntegerBits(a1, &pokemon->IQ, 10);
@@ -814,10 +814,10 @@ s32 SavePokemonStruct2(u8* a1, s32 size)
struct PokemonStruct2* pokemon2 = &gRecruitedPokemonRef->pokemon2[i];
SaveIntegerBits(&backup, &pokemon2->unk0, 2);
- SaveIntegerBits(&backup, pokemon2->unk2 ? &data_u8_neg1 : &data_u8_zero, 1);
+ SaveIntegerBits(&backup, pokemon2->isLeader ? &data_u8_neg1 : &data_u8_zero, 1);
SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7);
- xxx_save_poke_sub_4_80902F4(&backup, &pokemon2->unk4);
+ SaveDungeonLocation(&backup, &pokemon2->unk4);
SaveIntegerBits(&backup, &pokemon2->IQ, 10);
SaveIntegerBits(&backup, &pokemon2->unkA, 16);
SaveIntegerBits(&backup, &pokemon2->unkC, 16);
@@ -858,14 +858,14 @@ s32 RestorePokemonStruct2(u8* a1, s32 size)
RestoreIntegerBits(&backup, &unk2, 1);
if (unk2 & 1) {
- pokemon2->unk2 = TRUE;
+ pokemon2->isLeader = TRUE;
}
else {
- pokemon2->unk2 = FALSE;
+ pokemon2->isLeader = FALSE;
}
RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7);
- xxx_restore_poke_sub_4_8090314(&backup, &pokemon2->unk4);
+ RestoreDungeonLocation(&backup, &pokemon2->unk4);
RestoreIntegerBits(&backup, &pokemon2->IQ, 10);
RestoreIntegerBits(&backup, &pokemon2->unkA, 16);
RestoreIntegerBits(&backup, &pokemon2->unkC, 16);
diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c
index d57e8a2..11e387e 100644
--- a/src/pokemon_mid.c
+++ b/src/pokemon_mid.c
@@ -529,7 +529,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po
a1->IQSkills = pokemon->IQSkills;
sub_808E6F4(&a1->unk54);
a1->unk4 = pokemon->unk4;
- a1->unk2 = pokemon->unk2;
+ a1->isLeader = pokemon->isLeader;
a1->unkA = a3;
a1->speciesNum = pokemon->speciesNum;
a1->unk50 = pokemon->unk24;
@@ -582,7 +582,7 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct
pokemon->IQ = a2->IQ;
pokemon->IQSkills = a2->IQSkills;
pokemon->unk4 = a2->unk4;
- pokemon->unk2 = a2->unk2;
+ pokemon->isLeader = a2->isLeader;
pokemon->speciesNum = a2->speciesNum;
pokemon->unk24 = a2->unk50;
pokemon->pokeHP = a2->unk12;
diff --git a/src/post_office_guide.c b/src/post_office_guide.c
index 929c2e1..2103e5f 100644
--- a/src/post_office_guide.c
+++ b/src/post_office_guide.c
@@ -5,6 +5,8 @@
#include "menu.h"
#include "memory.h"
#include "text.h"
+#include "sub_8095228.h"
+#include "wonder_mail.h"
struct PostOfficeHelper
{
@@ -29,7 +31,7 @@ struct unkStruct_203B330
struct UnkInputStruct *unk0;
u8 fill4[0x8];
u8 unkC;
- u8 unkD;
+ u8 dungeonIndex;
u8 fillE[2];
u32 unk10;
struct UnkTextStruct2 *unk14;
@@ -41,11 +43,19 @@ EWRAM_DATA struct unkStruct_203B330 *gUnknown_203B330;
extern const char GetHelp_Text[];
extern const char GoRescue_Text[];
extern const char FriendRescueInfo_Text[];
-
extern const char FriendRescue_80E0A80[];
extern const char Delivery_Text[];
extern const char BulletinBoard_Text[];
extern const char PostOffice_Text[];
+extern u8 gUnknown_80E1F30[];
+extern u8 gUnknown_80E1F3C[];
+extern u8 gUnknown_80E1F60[];
+extern u8 gUnknown_80E1F70[];
+extern u8 gUnknown_202DE58[];
+extern u8 gUnknown_80E1F80[];
+extern u8 gUnknown_80E1F40[];
+extern u8 gUnknown_80E1F54[];
+extern u8 gUnknown_80E1F94[];
enum PostOfficeStates
{
@@ -166,7 +176,19 @@ extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32
extern u32 sub_8012A64(struct UnkInputStruct**, u32);
extern void PlayMenuSoundEffect(u32);
extern void sub_8031A84();
-extern void sub_8031AE8();
+extern void DisplayMissionObjectives();
+extern u8 *GetCurrentMissionText(s16 r0);
+extern u8 *sub_80975DC(u32 r0);
+extern u8 sub_8099360(u8 *);
+extern u8 sub_8099394(u8 *);
+extern struct WonderMail *GetJobSlotInfo(u8);
+extern void xxx_call_draw_string(s32 x, u32 y, const u8 *, u32 , u32);
+extern void sub_80073B8(u32);
+extern void sub_80073E0(u32);
+extern void sprintf_2(char *buffer, const char *text, ...);
+extern void sub_803B6B0(u32, u32, u32, u32);
+extern s16 sub_80A2688(u8 r0);
+extern u8 sub_80992E0(s16 *, s16 *);
extern u8 gUnknown_202E5D8[];
extern u8 gAvailablePokemonNames[];
@@ -504,12 +526,12 @@ void ReturnToGetHelpMenu(void)
}
}
-u32 sub_80319A4(u8 param_1,u8 param_2,int param_3)
+u32 sub_80319A4(u8 param_1,u8 dungeon,int param_3)
{
gUnknown_203B330 = MemoryAlloc(sizeof(struct unkStruct_203B330),8);
gUnknown_203B330->unkC = param_1;
- gUnknown_203B330->unkD = param_2;
+ gUnknown_203B330->dungeonIndex = dungeon;
sub_801317C(&gUnknown_203B330->unk0);
gUnknown_203B330->unk10 = param_3;
gUnknown_203B330->unk14 = &gUnknown_203B330->unk18[param_3];
@@ -535,7 +557,7 @@ u32 sub_80319F8(void)
void sub_8031A2C(void)
{
sub_8031A84();
- sub_8031AE8();
+ DisplayMissionObjectives();
}
void sub_8031A3C(void)
@@ -557,7 +579,7 @@ void sub_8031A84(void)
sub_8006518(gUnknown_203B330->unk18);
gUnknown_203B330->unk18[gUnknown_203B330->unk10] = gUnknown_80E1F18;
if (gUnknown_203B330->unkC == 2) {
- iVar1 = sub_80969D0(gUnknown_203B330->unkD);
+ iVar1 = sub_80969D0(gUnknown_203B330->dungeonIndex);
if (iVar1 == 0) {
iVar1 = 1;
}
@@ -566,3 +588,96 @@ void sub_8031A84(void)
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B330->unk18,1,1);
}
+
+void DisplayMissionObjectives(void)
+{
+ s32 yCoord;
+ s32 jobSlotIdx;
+ struct unkStruct_8095228 *iVar8;
+ struct WonderMail *jobInfo;
+ u8 auStack248 [100];
+ u8 local_94 [4];
+ u8 auStack144 [100];
+ short auStack44;
+ short local_2a;
+ u8 local_test;
+
+ sub_80073B8(gUnknown_203B330->unk10);
+ // Objectives
+ xxx_call_draw_string(10,0,gUnknown_80E1F30,gUnknown_203B330->unk10,0);
+ switch(gUnknown_203B330->unkC)
+ {
+ case 1:
+ sub_8099394(local_94);
+ iVar8 = sub_8095228(local_94[0]);
+ sub_803B6B0(10,16,3,gUnknown_203B330->unk10);
+ // %dF
+ sprintf_2(auStack248,gUnknown_80E1F3C,iVar8->floor);
+ xxx_call_draw_string(0x15,16,auStack248,gUnknown_203B330->unk10,0);
+ // Rescue #C6%s#R
+ sprintf_2(auStack248,gUnknown_80E1F40,GetMonSpecies(iVar8->clientSpecies));
+ xxx_call_draw_string(0x28,16,auStack248,gUnknown_203B330->unk10,0);
+ break;
+ case 2:
+ if (sub_80969D0(gUnknown_203B330->dungeonIndex) == 0) {
+ // Just go!
+ xxx_call_draw_string(10,16,gUnknown_80E1F54,gUnknown_203B330->unk10,0);
+ }
+ else
+ {
+ yCoord = 16;
+
+ // 8 Job Slots... check each of them
+ for(jobSlotIdx = 0; jobSlotIdx < 8; jobSlotIdx++)
+ {
+ jobInfo = GetJobSlotInfo(jobSlotIdx);
+ if ((((jobInfo->dungeon == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0)
+ ) && (jobInfo->mailType != 5)) && (jobInfo->mailType != 7)) {
+ sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10);
+ if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) {
+ sprintf_2(auStack144,gUnknown_80E1F3C,jobInfo->floor);
+ xxx_call_draw_string(21,yCoord,auStack144,gUnknown_203B330->unk10,0);
+ }
+ switch(jobInfo->missionType)
+ {
+ case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM:
+ // Bring #C4%s#R
+ sub_8090DC4(gUnknown_202DE58,jobInfo->targetItem,0);
+ sprintf_2(auStack144,gUnknown_80E1F60,gUnknown_202DE58);
+ xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0);
+ break;
+ case WONDER_MAIL_MISSION_TYPE_FIND_ITEM:
+ // Find #C4%s#R
+ sub_8090DC4(gUnknown_202DE58,jobInfo->targetItem,0);
+ sprintf_2(auStack144,gUnknown_80E1F70,gUnknown_202DE58);
+ xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0);
+ break;
+ case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT:
+ // Escort to #C6$s#R
+ sprintf_2(auStack144,gUnknown_80E1F80,GetMonSpecies(jobInfo->targetSpecies));
+ xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0);
+ break;
+ default:
+ // Rescue #C6%s#R
+ sprintf_2(auStack144,gUnknown_80E1F40,GetMonSpecies(jobInfo->targetSpecies));
+ xxx_call_draw_string(40,yCoord,auStack144,gUnknown_203B330->unk10,0);
+ break;
+ }
+ yCoord = yCoord + 12;
+ }
+ }
+ }
+ break;
+ case 3:
+ case 0:
+ default:
+ if (sub_80992E0(&auStack44,&local_2a) != 0)
+ xxx_call_draw_string(10,16,GetCurrentMissionText(local_2a),gUnknown_203B330->unk10,0);
+ else if (sub_8099360(&local_test) != 0)
+ xxx_call_draw_string(10,16,sub_80975DC(sub_80A2688(local_test)),gUnknown_203B330->unk10,0);
+ else
+ xxx_call_draw_string(10,16,gUnknown_80E1F94,gUnknown_203B330->unk10,0);
+ break;
+ }
+ sub_80073E0(gUnknown_203B330->unk10);
+}
diff --git a/src/rescue_password_menu.c b/src/rescue_password_menu.c
index ac2f296..f170a00 100644
--- a/src/rescue_password_menu.c
+++ b/src/rescue_password_menu.c
@@ -66,7 +66,7 @@ void CreateRescuePasswordMenu(u32 currMenu)
case MENU_DISPLAY_RESCUE_PASSWORD:
temp = sub_8095228(0x1F);
MemoryFill8((u8 *)temp, 0, sizeof(struct unkStruct_8095228));
- temp->unk0 = 2;
+ temp->mailType = 2;
temp->unk20.itemIndex = ITEM_ID_NOTHING;
sub_8031D70(0x1F, 0);
break;
diff --git a/src/save.c b/src/save.c
index 835c111..72a6496 100644
--- a/src/save.c
+++ b/src/save.c
@@ -171,7 +171,7 @@ extern void sub_800135C(void);
extern u32 GetGameOptions(void);
extern void InitializeGameOptions(u8 r0);
extern u8 *sub_80950F8(void);
-extern void sub_80958E4(u8 *a, u32 b);
+extern void sub_80958E4(u32 *a, u32 b);
extern u32 sub_80958F8(void);
extern void sub_8095900(void);
extern void sub_80972F4(void);
@@ -529,7 +529,7 @@ u32 sub_80121E0(u32 r0)
string = sub_8011C4C();
strncpy(r4->unk4, string, ARRAY_COUNT(r4->unk4));
- sub_80958E4((u8 *)r4 + 32, 0);
+ sub_80958E4(&r4->unk20, 0);
temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct));
MemoryFree(r4);
return temp3;
diff --git a/src/thank_you_wonder_mail.c b/src/thank_you_wonder_mail.c
index cdfb97a..fedf2ff 100644
--- a/src/thank_you_wonder_mail.c
+++ b/src/thank_you_wonder_mail.c
@@ -251,7 +251,7 @@ extern void sub_801CB5C(u32);
extern void sub_801CCD8(void);
extern void sub_8011C28(u32);
extern u32 sub_80154F0(void);
-extern u32 sub_8039068(u32, u8 *r1, u8 *r0);
+extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0);
extern u8 sub_809539C(u32, u32);
@@ -829,7 +829,7 @@ void HandleThankYouMailPasswordMenu(void)
switch(return_var)
{
case 3:
- switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp.unk0))
+ switch(sub_8039068(0x20,gUnknown_203B2C4->passwordBuffer,&temp))
{
case 0x11:
// Wrong password
@@ -851,7 +851,7 @@ void HandleThankYouMailPasswordMenu(void)
uVar1 = sub_809539C(4,temp.unk10);
puVar5 = sub_8095228(uVar1);
*puVar5 = temp;
- puVar5->unk0 = 6;
+ puVar5->mailType = 6;
gUnknown_203B2C4->unk430 = temp.unk10;
SetThankYouMailMenuState(THANK_YOU_PASSWORD_SUCCESS);
break;
@@ -1423,7 +1423,7 @@ void UpdateThankYouMailText(void)
else
gUnknown_203B2C4->unk53C.itemRewards[0] = 0; // unk558
gUnknown_203B2C4->unk53C.numItems = 1; // unk55B
- gUnknown_203B2C4->unk53C.teamRankPtsReward = sub_803C200(&puVar4->unk4, 0); // unk560
+ gUnknown_203B2C4->unk53C.teamRankPtsReward = sub_803C200(&puVar4->dungeon, 0); // unk560
gUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559
gUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A
gUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index 0844a96..6c449aa 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -46,11 +46,11 @@ extern void sub_8030DE4(void);
extern void sub_803092C(void);
extern u32 sub_80154F0();
-extern u32 sub_8039068(u32, u8 *r1, u8 *r0);
+extern u32 sub_8039068(u32, u8 *r1, struct unkStruct_8095228 *r0);
extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u32, u32, u32, void *r5, u32);
extern void sub_8095274(u32);
extern void sub_80155F0();
-extern void sub_80951BC(u8 *r0);
+extern void sub_80951BC(struct unkStruct_8095228 *r0);
extern void sub_8013114(u32 *r0, s32 *r1);
extern void sub_8023C60();
extern u32 sub_8023A94(u32);
@@ -1171,7 +1171,7 @@ void sub_8028FDC(void)
{
case 8:
return_var = sub_8095228(gUnknown_203B2C0->unk218);
- if(sub_80A2824(return_var->unk4) == 0)
+ if(sub_80A2824(return_var->dungeon) == 0)
{
sub_8028B04(0x1C);
}
@@ -1459,7 +1459,7 @@ void sub_80293F4(void)
switch(return_var)
{
case 3:
- switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp.unk0))
+ switch(sub_8039068(0x1C, (gUnknown_203B2C0->passwordBuffer), &temp))
{
case 17:
sub_8014248(gWonderMailPasswordIncorrectText, 0, 8, gUnknown_80DDA48, 0, 4, 0, &gUnknown_203B2C0->faceFile, 0xC);
@@ -1475,8 +1475,8 @@ void sub_80293F4(void)
break;
case 22:
sub_8095274(temp.unk10);
- temp.unk0 = 2; // Some sort of Ack?
- sub_80951BC(&temp.unk0);
+ temp.mailType = 2;
+ sub_80951BC(&temp);
sub_80141B4(gWonderMailAOKMailReceivedText, 0, &gUnknown_203B2C0->faceFile, 0x101);
sub_8028B04(35);
break;
diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c
index 6c90992..3359a61 100644
--- a/src/wonder_mail_2.c
+++ b/src/wonder_mail_2.c
@@ -386,8 +386,8 @@ void sub_802B3E0(void)
gUnknown_203B2C8->unk114.moneyReward = 0;
sub_8097790();
iVar3 = sub_8095228(gUnknown_203B2C8->unk1);
- sub_803C37C(&iVar3->unk4, 0, gUnknown_203B2C8->unk114.itemRewards);
- gUnknown_203B2C8->unk114.teamRankPtsReward = sub_803C200(&iVar3->unk4, 0);
+ sub_803C37C(&iVar3->dungeon, 0, gUnknown_203B2C8->unk114.itemRewards);
+ gUnknown_203B2C8->unk114.teamRankPtsReward = sub_803C200(&iVar3->dungeon, 0);
gUnknown_203B2C8->unk114.itemRewards[1] = 0;
gUnknown_203B2C8->unk114.itemRewards[2] = 0;
gUnknown_203B2C8->unk114.numItems = 10;
@@ -447,7 +447,7 @@ void sub_802B5B8(void)
if (sub_80144A4(&temp) == 0) {
uVar2 = sub_8011C34();
puVar3 = sub_8095228(gUnknown_203B2C8->unk1);
- puVar3->unk0 = 4;
+ puVar3->mailType = 4;
puVar3->unk28 = uVar2;
sub_802B548(3);
sub_8011C28(1);
diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c
index 02dcfb7..4cc2e0e 100644
--- a/src/wonder_mail_3.c
+++ b/src/wonder_mail_3.c
@@ -85,7 +85,7 @@ extern u8 sub_8096C08(u8 *);
extern void sub_802C750(void);
extern void sub_802D1A0(u32);
extern void sub_8012EA4(u8 *, u32);
-extern void* sub_8096AB4(u8);
+extern struct WonderMail* GetJobSlotInfo(u8);
extern void sub_803B35C(void *, u32*);
extern void sub_802DE84(u32 *);
extern void sub_802D73C(void);
@@ -321,7 +321,7 @@ void sub_802D2A8(void)
sub_8012D60(gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3);
break;
case 0xf:
- sub_803B35C(sub_8096AB4(gUnknown_203B2F8->unk10),&gUnknown_203B2F8->unk14);
+ sub_803B35C(GetJobSlotInfo(gUnknown_203B2F8->unk10),&gUnknown_203B2F8->unk14);
gUnknown_203B2F8->unk14 = 3;
sub_802DE84(&gUnknown_203B2F8->unk14);
break;
diff --git a/src/wonder_mail_802DF88.c b/src/wonder_mail_802DF88.c
index b85df28..ffac5a8 100644
--- a/src/wonder_mail_802DF88.c
+++ b/src/wonder_mail_802DF88.c
@@ -16,9 +16,8 @@ struct unkStruct_203B2FC
s16 unkE;
u8 unk10;
u8 fill11[0x30 - 0x11];
- u8 unk30;
- u8 fill31[3];
- struct WonderMail *unk34;
+ u8 jobSlot;
+ struct WonderMail *jobInfo;
struct OpenedFile *faceFile;
u8 *faceData;
u16 unk40;
@@ -76,16 +75,16 @@ extern void sub_802DC40(void);
extern void sub_802DC9C(void);
void sub_802DE44(void);
void sub_802DE60(void);
-struct WonderMail *sub_8096AB4(u8);
+struct WonderMail *GetJobSlotInfo(u8);
extern void sub_8096AF8(u8 *, u32, u32);
extern void sub_8096EEC(void);
extern void sub_803C21C(struct WonderMail *, u32 *);
-u32 sub_802DB28(u8 param_1, u8 param_2)
+u32 sub_802DB28(u8 jobSlot, u8 param_2)
{
char local_18 [8];
- sub_8096AF8(local_18,param_1,param_2);
+ sub_8096AF8(local_18,jobSlot,param_2);
if (local_18[0] == '\0') {
return 0;
}
@@ -93,11 +92,11 @@ u32 sub_802DB28(u8 param_1, u8 param_2)
ResetUnusedInputStruct();
sub_800641C(0,1,1);
gUnknown_203B2FC = MemoryAlloc(sizeof(struct unkStruct_203B2FC),8);
- gUnknown_203B2FC->unk30 = param_1;
- gUnknown_203B2FC->unk34 = sub_8096AB4(param_1);
+ gUnknown_203B2FC->jobSlot = jobSlot;
+ gUnknown_203B2FC->jobInfo = GetJobSlotInfo(jobSlot);
sub_8096EEC();
- sub_803C21C(gUnknown_203B2FC->unk34,&gUnknown_203B2FC->unk8);
- gUnknown_203B2FC->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B2FC->unk34->clientSpecies);
+ sub_803C21C(gUnknown_203B2FC->jobInfo,&gUnknown_203B2FC->unk8);
+ gUnknown_203B2FC->faceFile = GetDialogueSpriteDataPtr(gUnknown_203B2FC->jobInfo->clientSpecies);
gUnknown_203B2FC->faceData = NULL;
gUnknown_203B2FC->unk44 = 0;
gUnknown_203B2FC->unk45 = 0;
@@ -117,7 +116,7 @@ u32 sub_802DBD4(void)
switch(gUnknown_203B2FC->state)
{
case 7:
- gUnknown_203B2FC->unk34->mailType = 7;
+ gUnknown_203B2FC->jobInfo->mailType = 7;
return 3;
case 6:
sub_802DE44();
@@ -173,16 +172,16 @@ void sub_802DC9C(void)
switch(gUnknown_203B2FC->state) {
case 0:
- CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8,gUnknown_203B2FC->unk34->clientSpecies);
- CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8,gUnknown_203B2FC->unk34->clientSpecies);
- speciesText = GetMonSpecies(gUnknown_203B2FC->unk34->clientSpecies);
+ CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8,gUnknown_203B2FC->jobInfo->clientSpecies);
+ CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8,gUnknown_203B2FC->jobInfo->clientSpecies);
+ speciesText = GetMonSpecies(gUnknown_203B2FC->jobInfo->clientSpecies);
strcpy(gUnknown_202E1C8 + 0xfffffdd0,speciesText);
- speciesText = GetMonSpecies(gUnknown_203B2FC->unk34->targetSpecies);
+ speciesText = GetMonSpecies(gUnknown_203B2FC->jobInfo->targetSpecies);
strcpy(gUnknown_202E1C8 + 0xfffffe20,speciesText);
- UnlockExclusivePokemon(gUnknown_203B2FC->unk34->clientSpecies);
- sub_8090DC4(gUnknown_202DE58,gUnknown_203B2FC->unk34->targetItem,0);
+ UnlockExclusivePokemon(gUnknown_203B2FC->jobInfo->clientSpecies);
+ sub_8090DC4(gUnknown_202DE58,gUnknown_203B2FC->jobInfo->targetItem,0);
gUnknown_203B2FC->fallbackState = 6;
- switch(gUnknown_203B2FC->unk34->missionType) {
+ switch(gUnknown_203B2FC->jobInfo->missionType) {
case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM:
sub_802DC28(5);
break;
@@ -191,11 +190,11 @@ void sub_802DC9C(void)
break;
case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET:
sub_802DC28(2);
- UnlockExclusivePokemon(gUnknown_203B2FC->unk34->targetSpecies);
+ UnlockExclusivePokemon(gUnknown_203B2FC->jobInfo->targetSpecies);
break;
case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT:
sub_802DC28(3);
- UnlockExclusivePokemon(gUnknown_203B2FC->unk34->targetSpecies);
+ UnlockExclusivePokemon(gUnknown_203B2FC->jobInfo->targetSpecies);
break;
default:
case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT:
@@ -216,7 +215,7 @@ void sub_802DC9C(void)
sub_80141B4(gWonderMailClientItemDelivered1,0,&gUnknown_203B2FC->faceFile,0x10d);
break;
case 4:
- index = FindItemInInventory(gUnknown_203B2FC->unk34->targetItem);
+ index = FindItemInInventory(gUnknown_203B2FC->jobInfo->targetItem);
if (index != -1) {
ShiftItemsDownFrom(index);
FillInventoryGaps();