summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2021-05-23 16:19:35 -0500
committerGitHub <noreply@github.com>2021-05-23 16:19:35 -0500
commiteaa141c612dd1689936a21bd57018a55ff686b69 (patch)
treefafe2a9a562af6a8e36716ff76a5b3e8b30d4411 /src
parentf402e46cd3c8b7236673d6edbae77903a7cc0618 (diff)
Keep on keepin on (#38)
* end of may dump of work * move save text to src * decomp a little more
Diffstat (limited to 'src')
-rw-r--r--src/adventure_log.c5
-rw-r--r--src/code_2.c13
-rw-r--r--src/code_8012A18.c12
-rw-r--r--src/code_8012A18_1.c284
-rw-r--r--src/code_801C620.c197
-rw-r--r--src/code_801D760.c286
-rw-r--r--src/code_801DCC4.c474
-rw-r--r--src/code_8048480.c27
-rw-r--r--src/code_8057824.c50
-rw-r--r--src/code_808EAB0.c8
-rw-r--r--src/credits.c79
-rw-r--r--src/debug.c16
-rw-r--r--src/debug_menu.c4
-rw-r--r--src/debug_menu_mid.c3
-rw-r--r--src/felicity_bank.c3
-rw-r--r--src/friend_area.c22
-rw-r--r--src/friend_rescue.c4
-rw-r--r--src/game_options.c34
-rw-r--r--src/kangaskhan_storage.c3
-rw-r--r--src/kangaskhan_storage_2.c98
-rw-r--r--src/kangaskhan_storage_3.c37
-rw-r--r--src/kecleon_items.c11
-rw-r--r--src/load_screen.c4
-rw-r--r--src/main_menu.c6
-rw-r--r--src/main_menu_1.c4
-rw-r--r--src/makuhita_dojo.c19
-rw-r--r--src/memory_mid.c63
-rw-r--r--src/other_menus.c16
-rw-r--r--src/personality_test.c12
-rw-r--r--src/pokemon.c31
-rw-r--r--src/post_office_guide.c4
-rw-r--r--src/save.c152
-rw-r--r--src/trade_items_menu.c4
-rw-r--r--src/unk_menu_203B360.c4
-rw-r--r--src/unk_menu_203B364.c4
-rw-r--r--src/wonder_mail.c5
-rw-r--r--src/wonder_mail_2.c9
-rw-r--r--src/wonder_mail_3.c9
-rw-r--r--src/wonder_mail_main_menu.c4
-rw-r--r--src/wonder_mail_pre.c3
40 files changed, 1678 insertions, 345 deletions
diff --git a/src/adventure_log.c b/src/adventure_log.c
index d3baf40..4c9b10f 100644
--- a/src/adventure_log.c
+++ b/src/adventure_log.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "input.h"
#include "gba/io_reg.h"
+#include "memory.h"
struct unkData
{
@@ -54,8 +55,6 @@ const u8 gAdventureLogHeaderText[] = "Adventure Log";
const u8 gUnknown_80E2030[] = "~95~95~95~95~95~95~95~95~95~95~95~95~95~95~95 "; // string of ???????
const u8 fill_adven[] = "pksdir0";
-extern void *MemoryAlloc(u32, u32);
-extern void MemoryFree(void *);
extern void sub_8006518(struct unkData *);
extern void sub_800641C(void *, u32, u32);
void sub_8032084();
@@ -78,7 +77,7 @@ extern u32 gUnknown_202DE30;
u32 CreateAdventureLogScreen(u32 param_1)
{
- gAdventureLog = MemoryAlloc(0xa0,8);
+ gAdventureLog = MemoryAlloc(sizeof(struct AdventureLog),8);
gAdventureLog->unk34 = param_1;
gAdventureLog->unk38 = &gAdventureLog->unk3C[param_1];
sub_8006518(gAdventureLog->unk3C);
diff --git a/src/code_2.c b/src/code_2.c
index 08db080..c4362b3 100644
--- a/src/code_2.c
+++ b/src/code_2.c
@@ -8,6 +8,7 @@
#include "music.h"
#include "play_time.h"
#include "save.h"
+#include "gUnknown_203B46C.h"
extern void NDS_DebugInit(void);
extern void sub_801180C(void);
@@ -15,7 +16,7 @@ extern void NDS_LoadOverlay_GroundMain(void);
extern void sub_8014144(void);
extern void LoadMonsterParameters(void);
extern void sub_8097670(void);
-extern void sub_8094980(void);
+extern void LoadGameOptions(void);
extern void sub_8094C14(void);
extern void LoadExclusivePokemon(void);
extern void LoadItemParameters(void);
@@ -24,7 +25,7 @@ extern void LoadWazaParameters(void);
extern void sub_80950BC(void);
extern void sub_80958E8(void);
extern void sub_800CD64(u32, u32);
-extern void sub_8094998(u32);
+extern void InitializeGameOptions(u32);
extern void SetWindowTitle(char *);
extern void sub_800DAAC(void);
extern void SetSavingIconCoords(u32);
@@ -71,7 +72,7 @@ extern u16 gUnknown_2026E4E;
extern s32 gUnknown_2000A80;
extern struct OpenedFile *gTitlePaletteFile;
extern struct Inputs gRealInputs;
-extern u8 *gUnknown_203B46C;
+extern struct UnkSaveStruct1 *gUnknown_203B46C;
extern char gPMDBuildVersion[];
@@ -92,7 +93,7 @@ void GameLoop(void)
LoadMonsterParameters();
sub_8097670();
InitializePlayTime();
- sub_8094980();
+ LoadGameOptions();
sub_8094C14();
LoadExclusivePokemon();
LoadFriendAreas();
@@ -103,7 +104,7 @@ void GameLoop(void)
sub_80958E8();
sub_800CD64(0x8000, 0);
sub_8012284();
- sub_8094998(1);
+ InitializeGameOptions(1);
SetWindowTitle(gPMDBuildVersion);
sub_800DAAC();
SetSavingIconCoords(0);
@@ -207,7 +208,7 @@ void xxx_update_stuff(u32 r0)
{
xxx_draw_string_80144C4();
sub_8005838(0, 0);
- nullsub_8(gUnknown_203B46C[10]);
+ nullsub_8(gUnknown_203B46C->unkA);
sub_8005180();
sub_80060EC();
sub_8011860();
diff --git a/src/code_8012A18.c b/src/code_8012A18.c
index 0e0099b..983d4e7 100644
--- a/src/code_8012A18.c
+++ b/src/code_8012A18.c
@@ -1,15 +1,7 @@
#include "global.h"
#include "code_800558C.h"
#include "input.h"
-
-struct UnkStruct_203B46C
-{
- /* 0x0 */ u32 unk0;
- /* 0x4 */ u32 unk4;
- /* 0x8 */ u16 unk8;
- /* 0xA */ u8 unkA;
-};
-
+#include "gUnknown_203B46C.h"
extern void sub_8011860();
extern void xxx_draw_string_80144C4();
@@ -24,7 +16,7 @@ extern void sub_8009908();
extern void xxx_call_update_bg_sound_input();
extern void ResetSprites(u8 r0);
-extern struct UnkStruct_203B46C *gUnknown_203B46C;
+extern struct UnkSaveStruct1 *gUnknown_203B46C;
void sub_8012A18()
diff --git a/src/code_8012A18_1.c b/src/code_8012A18_1.c
new file mode 100644
index 0000000..62dc64d
--- /dev/null
+++ b/src/code_8012A18_1.c
@@ -0,0 +1,284 @@
+#include "global.h"
+#include "menu.h"
+#include "file_system.h"
+#include "memory.h"
+#include "input.h"
+
+extern void sub_800641C(u32, u32, u32);
+
+struct unkStruct_203B200
+{
+ u32 unk0;
+ u32 unk4;
+ u8 *pokeName;
+ s32 state;
+ /* 0x10 */ struct MenuItem menus[3];
+};
+extern struct unkStruct_203B200 *gUnknown_203B200;
+extern const char *gUnknown_80D4920;
+extern const char *gUnknown_80D4928;
+
+extern const char gUnknown_80DB6A4;
+extern const char gUnknown_80DB6BC;
+extern const char gUnknown_80DB688;
+extern u8 gAvailablePokemonNames[0x58];
+
+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 s32 sub_80144A4(s32 *);
+extern void sub_80151C0(u32, u8 *);
+extern void CreateConfirmNameMenu(void);
+extern void sub_80160F4(u32);
+bool8 sub_80162B8(void);
+extern u32 sub_80154F0(void);
+extern void sub_80155F0(void);
+extern void sub_80922B4(u8 *, u8 *, s32);
+
+void nullsub_36(void);
+void sub_8016110(void);
+extern void sub_80161F8(void);
+extern void HandleConfirmNameMenu(void);
+extern void sub_8016280(void);
+extern void sub_801629C(void);
+
+
+enum
+{
+ MENU_ACTION_DEFAULT = 1,
+ MENU_ACTION_YES,
+ MENU_ACTION_NO,
+};
+
+extern u32 ReturnIntFromChar2(u8);
+
+struct unkChar
+{
+ u32 unk0;
+ s16 unk4;
+ s16 unk6;
+};
+
+struct unkChar *GetCharacter(u32);
+
+
+s32 sub_8015FEC(u8 *buffer, s32 size)
+{
+ struct unkChar *iVar2;
+ s32 currLength;
+ s32 iVar4;
+ u8 *bufferPtr;
+
+ iVar4 = 0;
+ currLength = 0;
+
+ if(currLength < size && *buffer != '\0')
+ {
+ bufferPtr = buffer; // Had to have another variable to match..
+ do {
+ iVar2 = GetCharacter(ReturnIntFromChar2(*bufferPtr));
+ iVar4 += iVar2->unk6;
+ bufferPtr++;
+ currLength++;
+ } while (currLength < size && *bufferPtr != '\0');
+ }
+ return iVar4;
+}
+
+s32 sub_8016028(void)
+{
+ return 60;
+}
+
+u32 sub_801602C(u32 r0, u8 *name)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(0, 1, 1);
+ gUnknown_203B200 = MemoryAlloc(0x50, 8);
+ gUnknown_203B200->unk0 = r0;
+ gUnknown_203B200->pokeName = name;
+ switch(r0)
+ {
+ case 0:
+ gUnknown_203B200->unk4 = 0;
+ break;
+ case 1:
+ gUnknown_203B200->unk4 = 1;
+ break;
+ case 2:
+ gUnknown_203B200->unk4 = 2;
+ break;
+ case 3:
+ gUnknown_203B200->unk4 = 3;
+ break;
+ default:
+ break;
+ }
+ sub_80160F4(0);
+ return 1;
+}
+
+u32 sub_8016080(void)
+{
+ switch(gUnknown_203B200->state) {
+ case 0:
+ sub_80161F8();
+ break;
+ case 1:
+ HandleConfirmNameMenu();
+ break;
+ case 2:
+ sub_8016280();
+ break;
+ case 3:
+ sub_801629C();
+ break;
+ case 4:
+ return 3;
+ }
+ return 0;
+}
+
+extern void MemoryFree(void *);
+
+void sub_80160D8(void)
+{
+ if(gUnknown_203B200 != NULL)
+ {
+ MemoryFree(gUnknown_203B200);
+ gUnknown_203B200 = NULL;
+ }
+}
+
+
+void sub_80160F4(u32 newState)
+{
+ gUnknown_203B200->state = newState;
+ nullsub_36();
+ sub_8016110();
+}
+
+void nullsub_36(void)
+{
+}
+
+void sub_8016110(void)
+{
+ switch(gUnknown_203B200->state)
+ {
+ case 0:
+ sub_80151C0(gUnknown_203B200->unk4,gUnknown_203B200->pokeName);
+ break;
+ case 1:
+ CreateConfirmNameMenu();
+ if (gUnknown_203B200->unk4 == 1) {
+ sub_80922B4(gAvailablePokemonNames,gUnknown_203B200->pokeName,10);
+ }
+ else {
+ sub_80922B4(gAvailablePokemonNames,gUnknown_203B200->pokeName,10);
+ }
+ // Is the name #C5$m0#R OK?
+ sub_8014248(&gUnknown_80DB688,0,3,gUnknown_203B200->menus,0,4,0,0,0x20);
+ break;
+
+ case 2:
+ // This name is too long
+ sub_80141B4(&gUnknown_80DB6A4,0,0,0x121);
+ break;
+ case 3:
+ // Please enter a name
+ sub_80141B4(&gUnknown_80DB6BC,0,0,0x121);
+ break;
+ default:
+ break;
+ }
+}
+
+void CreateConfirmNameMenu(void)
+{
+ gUnknown_203B200->menus[0].text = gUnknown_80D4920; // Yes
+ gUnknown_203B200->menus[0].menuAction = MENU_ACTION_YES;
+ gUnknown_203B200->menus[1].text = gUnknown_80D4928; // No
+ gUnknown_203B200->menus[1].menuAction = MENU_ACTION_NO;
+ gUnknown_203B200->menus[2].text = NULL;
+ gUnknown_203B200->menus[2].menuAction = MENU_ACTION_DEFAULT;
+}
+
+void sub_80161F8(void)
+{
+ s32 iVar2;
+ s32 maxLength;
+
+ if (sub_80154F0() == 3) {
+ sub_80155F0();
+ if (sub_80162B8()) {
+ sub_80160F4(3);
+ }
+ else{
+ iVar2 = sub_8015FEC(gUnknown_203B200->pokeName,10);
+ maxLength = sub_8016028(); // returns 60
+ if (iVar2 > maxLength) {
+ sub_80160F4(2);
+ }
+ else {
+ sub_80160F4(1);
+ }
+ }
+ }
+}
+
+void HandleConfirmNameMenu(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ switch(temp)
+ {
+ case MENU_ACTION_YES:
+ sub_80160F4(4);
+ break;
+ case MENU_ACTION_NO:
+ case MENU_ACTION_DEFAULT:
+ sub_80160F4(0);
+ break;
+ default:
+ break;
+ }
+ }
+}
+
+void sub_8016280(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ sub_80160F4(0);
+ }
+}
+
+
+void sub_801629C(void)
+{
+ s32 temp;
+
+ if (sub_80144A4(&temp) == 0) {
+ sub_80160F4(0);
+ }
+}
+
+bool8 sub_80162B8(void)
+{
+ u8 character;
+ s32 index;
+ s32 max;
+
+ max = 10; // constant needed at top of loop to match
+ index = 0;
+ do {
+ character = gUnknown_203B200->pokeName[index];
+ if (character == '\0') break;
+ if (character != ' ') return 0;
+ index++;
+ } while (index < max);
+ return 1;
+}
diff --git a/src/code_801C620.c b/src/code_801C620.c
new file mode 100644
index 0000000..66269c9
--- /dev/null
+++ b/src/code_801C620.c
@@ -0,0 +1,197 @@
+#include "global.h"
+#include "input.h"
+#include "memory.h"
+
+struct unkData
+{
+ u8 unk0[24];
+};
+
+
+struct subStruct_203B240
+{
+ char * unk0;
+ char * unk4;
+};
+
+struct unkStruct_203B240
+{
+ s32 unk0;
+ u8 unk4;
+ u8 fill5[3];
+ s32 unk8;
+ s32 unkC;
+ struct subStruct_203B240 *unk10[2];
+ u8 fill14[0x20 - 0x18];
+ u32 unk20;
+ u32 unk24;
+ struct unkData unk28[4];
+ u32 unk88;
+};
+
+extern struct unkStruct_203B240 *gUnknown_203B240;
+extern char gUnknown_80DBE2C[]; // $i0
+extern char gUnknown_80DBE30[]; // $m0
+extern u8 gUnknown_202DE58[0x58];
+extern u8 gAvailablePokemonNames[0x58];
+
+
+extern void ResetSprites(u32);
+extern void sub_801317C(u32 *);
+extern void sub_80140B4(struct unkData *);
+extern void sub_800641C(struct unkData *,u32, u32);
+
+
+extern void sub_8014FF0(u32, u32, char *, u32, u32);
+extern void sub_8008C54(u32);
+extern void sub_80073B8(u32);
+extern void xxx_call_draw_string(u32, u32, char *, u32, u32);
+extern void sub_80073E0(u32);
+extern u32 sub_8097DF0(char *, struct subStruct_203B240 **);
+extern u32 sub_8012A64(u32 *, u32);
+extern void sub_8013F84();
+extern void PlayMenuSoundEffect(u32);
+extern char * GetIQSkillName(u8 r0);
+extern char * GetIQSkillDescription(u8 r0);
+
+void sub_801C6D0(s32);
+void sub_801C7D4();
+void sub_801C6E4();
+void sub_801C848();
+
+u32 sub_801C620(u8 param_1)
+{
+ ResetSprites(1);
+ gUnknown_203B240 = MemoryAlloc(0x94,8);
+ gUnknown_203B240->unk4 = param_1;
+ sub_801317C(&gUnknown_203B240->unk88);
+ gUnknown_203B240->unk24 = 0;
+ sub_80140B4(gUnknown_203B240->unk28);
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B240->unk28,1,1);
+ sub_801C6D0(0);
+ return 1;
+}
+
+u32 sub_801C674(void)
+{
+ switch(gUnknown_203B240->unk0)
+ {
+ case 0:
+ sub_801C7D4();
+ break;
+ case 1:
+ sub_801C848();
+ break;
+ case 3:
+ return 3;
+ case 2:
+ default:
+ return 2;
+ }
+ return 0;
+}
+
+void sub_801C6B4(void)
+{
+ if(gUnknown_203B240 != NULL)
+ {
+ MemoryFree(gUnknown_203B240);
+ gUnknown_203B240 = NULL;
+ }
+}
+
+void sub_801C6D0(s32 unk0)
+{
+ gUnknown_203B240->unk0 = unk0;
+ sub_801C6E4();
+}
+
+void sub_801C6E4(void)
+{
+ char *skillName;
+ struct subStruct_203B240 *preload;
+
+ switch(gUnknown_203B240->unk0)
+ {
+ case 0:
+ sub_8008C54(gUnknown_203B240->unk24);
+ sub_80073B8(gUnknown_203B240->unk24);
+ skillName = GetIQSkillName(gUnknown_203B240->unk4);
+ strcpy(gUnknown_202DE58,skillName);
+ sub_8014FF0(16,0,gUnknown_80DBE2C,0,0); // $i0
+ xxx_call_draw_string(8,16,GetIQSkillDescription(gUnknown_203B240->unk4),gUnknown_203B240->unk24,0);
+ sub_80073E0(gUnknown_203B240->unk24);
+ gUnknown_203B240->unkC = sub_8097DF0(GetIQSkillDescription(gUnknown_203B240->unk4),gUnknown_203B240->unk10);
+ gUnknown_203B240->unk20 = 0;
+ break;
+ case 1:
+ sub_8008C54(gUnknown_203B240->unk24);
+ sub_80073B8(gUnknown_203B240->unk24);
+ preload = gUnknown_203B240->unk10[gUnknown_203B240->unk8];
+ strcpy(gAvailablePokemonNames,preload->unk0);
+ sub_8014FF0(16,0,gUnknown_80DBE30,gUnknown_203B240->unk24,0); // $m0
+ sub_8014FF0(4,16,gUnknown_203B240->unk10[gUnknown_203B240->unk8]->unk4, gUnknown_203B240->unk24,0);
+ sub_80073E0(gUnknown_203B240->unk24);
+ break;
+ case 2:
+ case 3:
+ break;
+ }
+}
+
+void sub_801C7D4(void)
+{
+
+ if (gUnknown_203B240->unkC != 0) {
+ if ((gUnknown_203B240->unk20 & 8) != 0) {
+ sub_8013F84();
+ }
+ gUnknown_203B240->unk20++;
+ }
+ switch(sub_8012A64(&gUnknown_203B240->unk88,gUnknown_203B240->unk24))
+ {
+ case 1:
+ PlayMenuSoundEffect(0);
+ if (gUnknown_203B240->unkC != 0) {
+ gUnknown_203B240->unk8 = 0;
+ sub_801C6D0(1);
+ }
+ else {
+ sub_801C6D0(3);
+ }
+ break;
+ case 2:
+ PlayMenuSoundEffect(1);
+ sub_801C6D0(2);
+ break;
+ }
+}
+
+void sub_801C848(void)
+{
+
+ if (gUnknown_203B240->unk8 < (gUnknown_203B240->unkC - 1)) {
+ if ((gUnknown_203B240->unk20 & 8) != 0) {
+ sub_8013F84();
+ }
+ gUnknown_203B240->unk20++;
+ }
+ switch(sub_8012A64(&gUnknown_203B240->unk88,gUnknown_203B240->unk24))
+ {
+ case 1:
+ PlayMenuSoundEffect(0);
+ gUnknown_203B240->unk8++;
+ if (gUnknown_203B240->unk8 < gUnknown_203B240->unkC) {
+ sub_801C6D0(1);
+ }
+ else {
+ sub_801C6D0(0);
+ }
+ break;
+ case 2:
+ PlayMenuSoundEffect(1);
+ sub_801C6D0(2);
+ break;
+ }
+}
diff --git a/src/code_801D760.c b/src/code_801D760.c
index b0f163a..be96c88 100644
--- a/src/code_801D760.c
+++ b/src/code_801D760.c
@@ -2,6 +2,39 @@
#include "constants/friend_area.h"
#include "file_system.h"
#include "gUnknown_203B460.h"
+#include "memory.h"
+#include "input.h"
+
+struct unkData
+{
+ u8 unk0[0x14];
+ u32 *unk14;
+};
+
+struct unkStruct_203B258
+{
+ // size: 0xA0
+ u8 fill0[0x14];
+ u32 unk14;
+ u8 fill18[0x34 - 0x18];
+ u32 unk34;
+ struct unkData *unk38;
+ struct unkData unk3C[4];
+ u32 unk9C;
+};
+
+extern struct unkStruct_203B258 *gUnknown_203B258;
+extern struct unkData gUnknown_80DBF88;
+
+extern void sub_800641C(struct unkData *, u32, u32);
+extern void sub_8006518(struct unkData *);
+extern void sub_8013818(void *, u32, u32, u32);
+extern void sub_8013878(void *, s32);
+extern u8 sub_80138B8(void *, u32);
+extern u32 GetKeyPress(void *);
+extern void PlayMenuSoundEffect(u32);
+extern void sub_801DB54();
+extern void sub_801DBD4();
extern u32 sub_801BF48(void);
extern void sub_801BF98(void);
@@ -121,130 +154,156 @@ void sub_801D680(void)
void sub_801D760()
{
- u32 temp;
- temp = sub_8022860();
- if (temp <= 1)
- return;
- if (temp > 3)
- return;
- sub_8022908();
- sub_801D208(1);
-
+ switch(sub_8022860())
+ {
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ sub_8022908();
+ sub_801D208(1);
+ break;
+ }
}
void sub_801D77C()
{
- u32 temp;
- temp = sub_80270A4();
- if (temp <= 1)
- return;
- if (temp > 3)
- return;
- sub_8027168();
- sub_801D208(1);
-
+ switch(sub_80270A4())
+ {
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ sub_8027168();
+ sub_801D208(1);
+ break;
+ }
}
void sub_801D798(void)
{
- u32 temp;
- temp = sub_8025F68();
- if (temp <= 1)
- return;
- if (temp > 3)
- return;
- if(sub_802604C() != 0)
- gUnknown_203B250->unk7 = gUnknown_203B250->currFriendAreaLocation;
- sub_8026058();
- sub_801D208(2);
+ switch(sub_8025F68())
+ {
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ if(sub_802604C() != 0)
+ gUnknown_203B250->unk7 = gUnknown_203B250->currFriendAreaLocation;
+ sub_8026058();
+ sub_801D208(2);
+ break;
+ }
}
void sub_801D7CC()
{
- u32 check;
- u32 temp2;
-
- check = sub_8025354();
- if(check <= 1)
- return;
- if(check > 3)
- return;
-
- temp2 = sub_802540C();
- gUnknown_203B250->unk7 = temp2;
-
- sub_8025418();
-
- if(gUnknown_203B250->unk7 != 0)
- {
- sub_801D208(2);
- }
- else
+ switch(sub_8025354())
{
- sub_801D208(1);
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ gUnknown_203B250->unk7 = sub_802540C();
+ sub_8025418();
+ if(gUnknown_203B250->unk7 != 0)
+ {
+ sub_801D208(2);
+ }
+ else
+ {
+ sub_801D208(1);
+ }
+ break;
}
}
void sub_801D808(void)
{
- u32 check;
-
- check = sub_80244E4();
- if(check <= 1)
- return;
- if(check > 3)
- return;
-
- sub_802453C();
- sub_801D208(1);
+ switch(sub_80244E4())
+ {
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ sub_802453C();
+ sub_801D208(1);
+ break;
+ }
}
void sub_801D824(void)
{
- u32 check;
- check = sub_801BF48();
- if(check <= 1)
- return;
- if(check > 3)
- return;
- sub_801BF98();
- sub_801D208(1);
+ switch(sub_801BF48())
+ {
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ sub_801BF98();
+ sub_801D208(1);
+ break;
+ }
}
void sub_801D840(void)
{
- u32 check;
- check = sub_80217EC();
- if(check <= 1)
- return;
- if(check > 3)
- return;
- sub_8021830();
- sub_801D208(1);
+ switch(sub_80217EC())
+ {
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ sub_8021830();
+ sub_801D208(1);
+ break;
+ }
}
void sub_801D85C(void)
{
- u32 check;
- check = sub_802C898();
- if(check <= 1)
- return;
- if(check > 3)
- return;
- sub_802C8F4();
- sub_801D208(1);
+ switch(sub_802C898())
+ {
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ sub_802C8F4();
+ sub_801D208(1);
+ break;
+ }
}
void sub_801D878(void)
{
- u32 check;
- check = sub_801DCE8();
- if(check <= 1)
- return;
- if(check > 3)
- return;
- sub_801DD50();
- sub_801D208(1);
+ switch(sub_801DCE8())
+ {
+ case 0:
+ case 1:
+ default:
+ break;
+ case 2:
+ case 3:
+ sub_801DD50();
+ sub_801D208(1);
+ break;
+ }
}
void sub_801D894(void)
@@ -307,3 +366,50 @@ void LoadTeamRankBadge(u32 param_1, u32 param_2, u32 param_3)
sub_8007E20(param_1, param_2, param_3, 16, 16, teamBadgePic, 14);
CloseFile(teamBadgeFile);
}
+
+u32 sub_801D9E4(void)
+{
+ gUnknown_203B258 = MemoryAlloc(sizeof(struct unkStruct_203B258),8);
+ gUnknown_203B258->unk34 = 3;
+ gUnknown_203B258->unk38 = &gUnknown_203B258->unk3C[3];
+ sub_8006518(gUnknown_203B258->unk3C);
+ gUnknown_203B258->unk3C[gUnknown_203B258->unk34] = gUnknown_80DBF88;
+ gUnknown_203B258->unk38->unk14 = &gUnknown_203B258->unk9C;
+ ResetUnusedInputStruct();
+ sub_800641C(gUnknown_203B258->unk3C,1,1);
+ sub_8013818(gUnknown_203B258,0xe5,10,gUnknown_203B258->unk34);
+ sub_801DB54();
+ sub_801DBD4();
+ return 1;
+}
+
+void sub_801DA58(s16 param_0)
+{
+ s32 cast;
+ cast = param_0;
+ sub_8013878(gUnknown_203B258, cast);
+ sub_801DB54();
+ sub_801DBD4();
+}
+
+u32 sub_801DA78(void)
+{
+ switch(GetKeyPress(gUnknown_203B258))
+ {
+ case 2:
+ PlayMenuSoundEffect(1);
+ return 2;
+ case 1:
+ return 3;
+ default:
+ if(sub_80138B8(gUnknown_203B258, 1) != 0)
+ {
+ sub_801DB54();
+ sub_801DBD4();
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+}
diff --git a/src/code_801DCC4.c b/src/code_801DCC4.c
new file mode 100644
index 0000000..d713bd6
--- /dev/null
+++ b/src/code_801DCC4.c
@@ -0,0 +1,474 @@
+#include "global.h"
+#include "memory.h"
+#include "menu.h"
+#include "gUnknown_203B46C.h"
+
+struct unkData
+{
+ u8 unk0[0xB];
+ u16 unkB;
+ u16 unkD;
+ u16 unk10;
+ u16 unk12;
+ u32 *unk14;
+};
+
+struct unkStruct_203B25C
+{
+ // size: 0x11C
+ u32 state;
+ u32 unk4;
+ struct UnkSaveStruct1 unk8;
+ u32 unk18;
+ const char *unk1C;
+ u8 fill20[0x6C - 0x20];
+ struct MenuItem unk6C[3];
+ u8 fill84[0xAC - 0x84];
+ u16 unkAC[8];
+ struct unkData unkBC[4];
+};
+
+
+extern void sub_801DD6C(u32);
+
+extern void HandleOthersMenu();
+extern void sub_801E088();
+extern void sub_801E0E0();
+extern void sub_801E0FC();
+extern void HandleChangeSettingsMenu();
+extern void sub_801DD84();
+extern void sub_801DED0();
+extern void sub_8012D60(const char **, struct MenuItem *, u32, u16 *, u32, u32);
+extern u32 sub_801E198(struct UnkSaveStruct1 *);
+extern void sub_8014248(const char *, u32, u32, struct MenuItem *, u32, u32, u32, u32, u32);
+extern void sub_801E658(u32);
+extern void sub_801E3F0(u32);
+extern void sub_801E510(u32);
+extern void CreateChangeSettingsConfirmMenu(void);
+extern u8 sub_8012FD8(u32 *);
+extern void sub_8013114(u32 *, u32 *);
+extern u32 sub_801E474(u32);
+extern u32 sub_801E4F4(void);
+extern void sub_801E54C(void);
+extern u32 sub_801E6CC(void);
+extern void sub_801E724(void);
+extern u32 sub_801E218(void);
+extern bool8 GameOptionsNotChange(struct UnkSaveStruct1 *);
+extern void sub_801E2C4(void);
+extern s32 sub_80144A4(s32 *);
+extern void sub_8094C14(void);
+extern void sub_8099690(u32);
+
+extern struct UnkSaveStruct1 *gUnknown_203B46C;
+extern struct unkStruct_203B25C *gUnknown_203B25C;
+
+extern const char gOthers_MenuOption[];
+extern const char gUnknown_80DBFEC[];
+extern const char gOthers_GameOptions[];
+extern const char gOthers_Hints[];
+extern const char *gUnknown_80D4920[];
+extern const char *gUnknown_80D4928[];
+
+
+enum
+{
+ MENU_OPTION_DEFAULT = 1,
+ MENU_OPTION_HINTS,
+ MENU_OPTION_GAMEOPTIONS,
+ MENU_OPTION_YES,
+ MENU_OPTION_NO
+};
+
+u32 sub_801DCC4(void)
+{
+ gUnknown_203B25C = MemoryAlloc(sizeof(struct unkStruct_203B25C), 8);
+ sub_801DD6C(0);
+ return 1;
+}
+
+u32 sub_801DCE8(void)
+{
+ switch(gUnknown_203B25C->state)
+ {
+ case 2:
+ return 3;
+ case 0:
+ case 1:
+ HandleOthersMenu();
+ break;
+ case 3:
+ case 4:
+ sub_801E088();
+ break;
+ case 5:
+ sub_801E0E0();
+ break;
+ case 6:
+ sub_801E0FC();
+ break;
+ case 7:
+ HandleChangeSettingsMenu();
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+void sub_801DD50(void)
+{
+ if(gUnknown_203B25C != NULL)
+ {
+ MemoryFree(gUnknown_203B25C);
+ gUnknown_203B25C = NULL;
+ }
+}
+
+void sub_801DD6C(u32 newState)
+{
+ gUnknown_203B25C->state = newState;
+ sub_801DD84();
+ sub_801DED0();
+}
+
+NAKED
+void sub_801DD84(void)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r9\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6,r7}\n"
+ "\tldr r4, _0801DDAC\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, 0xBC\n"
+ "\tbl sub_8006518\n"
+ "\tldr r0, [r4]\n"
+ "\tldr r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _0801DDB4\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _0801DE38\n"
+ "\tmovs r3, 0\n"
+ "\tadds r7, r4, 0\n"
+ "\tldr r2, _0801DDB0\n"
+ "\tb _0801DE90\n"
+ "\t.align 2, 0\n"
+"_0801DDAC: .4byte gUnknown_203B25C\n"
+"_0801DDB0: .4byte gUnknown_80DBFB0\n"
+"_0801DDB4:\n"
+ "\tbl CreateOthersMenu\n"
+ "\tmovs r3, 0\n"
+ "\tldr r1, [r4]\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0xAC\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0801DDCE\n"
+ "\tldr r0, [r1, 0x70]\n"
+ "\tstr r0, [r1, 0x18]\n"
+ "\tadds r7, r4, 0\n"
+ "\tb _0801DDF2\n"
+"_0801DDCE:\n"
+ "\tadds r3, 0x1\n"
+ "\tldr r7, _0801DE2C\n"
+ "\tcmp r3, 0x7\n"
+ "\tbgt _0801DDF2\n"
+ "\tldr r2, [r7]\n"
+ "\tlsls r0, r3, 1\n"
+ "\tadds r1, r2, 0\n"
+ "\tadds r1, 0xAC\n"
+ "\tadds r1, r0\n"
+ "\tldrh r0, [r1]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _0801DDCE\n"
+ "\tlsls r0, r3, 3\n"
+ "\tadds r1, r2, 0\n"
+ "\tadds r1, 0x70\n"
+ "\tadds r1, r0\n"
+ "\tldr r0, [r1]\n"
+ "\tstr r0, [r2, 0x18]\n"
+"_0801DDF2:\n"
+ "\tldr r0, _0801DE30\n"
+ "\tmov r9, r0\n"
+ "\tldr r2, _0801DE2C\n"
+ "\tmov r12, r2\n"
+ "\tldr r3, _0801DE34\n"
+ "\tmov r8, r3\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0x3\n"
+"_0801DE02:\n"
+ "\tmov r4, r12\n"
+ "\tldr r1, [r4]\n"
+ "\tadds r1, r2\n"
+ "\tadds r1, 0xBC\n"
+ "\tmov r0, r8\n"
+ "\tldm r0!, {r4-r6}\n"
+ "\tstm r1!, {r4-r6}\n"
+ "\tldm r0!, {r4-r6}\n"
+ "\tstm r1!, {r4-r6}\n"
+ "\tadds r2, 0x18\n"
+ "\tsubs r3, 0x1\n"
+ "\tcmp r3, 0\n"
+ "\tbge _0801DE02\n"
+ "\tldr r1, [r7]\n"
+ "\tadds r1, 0xBC\n"
+ "\tmov r0, r9\n"
+ "\tldm r0!, {r2,r5,r6}\n"
+ "\tstm r1!, {r2,r5,r6}\n"
+ "\tldm r0!, {r3-r5}\n"
+ "\tstm r1!, {r3-r5}\n"
+ "\tb _0801DE70\n"
+ "\t.align 2, 0\n"
+"_0801DE2C: .4byte gUnknown_203B25C\n"
+"_0801DE30: .4byte gUnknown_80DBFCC\n"
+"_0801DE34: .4byte gUnknown_80DBFB0\n"
+"_0801DE38:\n"
+ "\tbl CreateOthersMenu\n"
+ "\tmov r8, r4\n"
+ "\tldr r6, _0801DE88\n"
+ "\tmov r12, r6\n"
+ "\tmov r7, r8\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r3, 0x3\n"
+"_0801DE48:\n"
+ "\tmov r0, r8\n"
+ "\tldr r1, [r0]\n"
+ "\tadds r1, r2\n"
+ "\tadds r1, 0xBC\n"
+ "\tmov r0, r12\n"
+ "\tldm r0!, {r4-r6}\n"
+ "\tstm r1!, {r4-r6}\n"
+ "\tldm r0!, {r4-r6}\n"
+ "\tstm r1!, {r4-r6}\n"
+ "\tadds r2, 0x18\n"
+ "\tsubs r3, 0x1\n"
+ "\tcmp r3, 0\n"
+ "\tbge _0801DE48\n"
+ "\tldr r1, [r7]\n"
+ "\tadds r1, 0xBC\n"
+ "\tldr r0, _0801DE8C\n"
+ "\tldm r0!, {r2-r4}\n"
+ "\tstm r1!, {r2-r4}\n"
+ "\tldm r0!, {r2,r5,r6}\n"
+ "\tstm r1!, {r2,r5,r6}\n"
+"_0801DE70:\n"
+ "\tldr r1, [r7]\n"
+ "\tadds r0, r1, 0\n"
+ "\tadds r0, 0xBC\n"
+ "\tadds r1, 0x6C\n"
+ "\tbl sub_8012CAC\n"
+ "\tldr r0, [r7]\n"
+ "\tadds r0, 0xC8\n"
+ "\tmovs r1, 0xA\n"
+ "\tstrh r1, [r0]\n"
+ "\tb _0801DEAC\n"
+ "\t.align 2, 0\n"
+"_0801DE88: .4byte gUnknown_80DBFB0\n"
+"_0801DE8C: .4byte gUnknown_80DBFCC\n"
+"_0801DE90:\n"
+ "\tldr r0, [r7]\n"
+ "\tlsls r1, r3, 1\n"
+ "\tadds r1, r3\n"
+ "\tlsls r1, 3\n"
+ "\tadds r0, r1\n"
+ "\tadds r0, 0xBC\n"
+ "\tadds r1, r2, 0\n"
+ "\tldm r1!, {r4-r6}\n"
+ "\tstm r0!, {r4-r6}\n"
+ "\tldm r1!, {r4-r6}\n"
+ "\tstm r0!, {r4-r6}\n"
+ "\tadds r3, 0x1\n"
+ "\tcmp r3, 0x3\n"
+ "\tble _0801DE90\n"
+"_0801DEAC:\n"
+ "\tbl ResetUnusedInputStruct\n"
+ "\tldr r0, _0801DECC\n"
+ "\tldr r0, [r0]\n"
+ "\tadds r0, 0xBC\n"
+ "\tmovs r1, 0x1\n"
+ "\tmovs r2, 0x1\n"
+ "\tbl sub_800641C\n"
+ "\tpop {r3,r4}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_0801DECC: .4byte gUnknown_203B25C");
+}
+
+void sub_801DED0(void)
+{
+ switch(gUnknown_203B25C->state) {
+ case 0:
+ case 1:
+ gUnknown_203B25C->unk1C = gOthers_MenuOption;
+ sub_8012D60(&gUnknown_203B25C->unk1C,gUnknown_203B25C->unk6C,0,gUnknown_203B25C->unkAC,gUnknown_203B25C->unk18,0);
+ break;
+ case 3:
+ sub_801E3F0(0);
+ break;
+ case 4:
+ sub_801E510(1);
+ break;
+ case 5:
+ sub_801E658(gUnknown_203B25C->unk4);
+ break;
+ case 6:
+ // Load our current options?
+ gUnknown_203B25C->unk8 = *gUnknown_203B46C;
+ sub_801E198(&gUnknown_203B25C->unk8);
+ break;
+ case 7:
+ CreateChangeSettingsConfirmMenu();
+ // Change settings?
+ sub_8014248(gUnknown_80DBFEC,0,4,gUnknown_203B25C->unk6C,0,4,0,0,0x20);
+ break;
+ }
+}
+
+void CreateOthersMenu(void)
+{
+ const char *blankText;
+ s32 defaultAction;
+ struct unkStruct_203B25C *preload;
+
+ MemoryFill16(gUnknown_203B25C->unkAC,0,sizeof(gUnknown_203B25C->unkAC));
+
+ // This is dumb that I have to squeeze this in like this
+ preload = gUnknown_203B25C;
+ blankText = NULL;
+ preload->unk6C[0].text = gOthers_GameOptions;
+ preload->unk6C[0].menuAction = MENU_OPTION_GAMEOPTIONS;
+ defaultAction = MENU_OPTION_DEFAULT;
+ preload->unk6C[1].text = gOthers_Hints;
+ preload->unk6C[1].menuAction = MENU_OPTION_HINTS;
+ preload->unk6C[2].text = blankText;
+ preload->unk6C[2].menuAction = defaultAction;
+}
+
+void CreateChangeSettingsConfirmMenu(void)
+{
+ const char *blankText;
+ s32 defaultAction;
+ struct unkStruct_203B25C *preload;
+
+ MemoryFill16(gUnknown_203B25C->unkAC,0,sizeof(gUnknown_203B25C->unkAC));
+
+ // This is dumb that I have to squeeze this in like this
+ preload = gUnknown_203B25C;
+ blankText = NULL;
+ preload->unk6C[0].text = *gUnknown_80D4920; // Yes
+ preload->unk6C[0].menuAction = MENU_OPTION_YES;
+ defaultAction = MENU_OPTION_DEFAULT;
+ preload->unk6C[1].text = *gUnknown_80D4928; // No
+ preload->unk6C[1].menuAction = MENU_OPTION_NO;
+ preload->unk6C[2].text = blankText;
+ preload->unk6C[2].menuAction = defaultAction;
+}
+
+void HandleOthersMenu(void)
+{
+ s32 menuAction;
+
+ menuAction = 0;
+ if (sub_8012FD8((u32 *)&gUnknown_203B25C->unk1C) == '\0') {
+ sub_8013114((u32 *)&gUnknown_203B25C->unk1C,&menuAction);
+ gUnknown_203B25C->unk18 = menuAction;
+ }
+ switch(menuAction)
+ {
+ case MENU_OPTION_HINTS:
+ sub_801DD6C(3);
+ break;
+ case MENU_OPTION_GAMEOPTIONS:
+ sub_801DD6C(6);
+ break;
+ case MENU_OPTION_DEFAULT:
+ sub_801DD6C(2);
+ break;
+ }
+}
+
+void sub_801E088(void)
+{
+
+ switch(sub_801E474(1))
+ {
+ case 3:
+ case 4:
+ gUnknown_203B25C->unk4 = sub_801E4F4();
+ sub_801DD6C(5);
+ break;
+ case 2:
+ sub_801E54C();
+ sub_801DD6C(1);
+ break;
+ case 0:
+ case 1:
+ default:
+ break;
+ }
+}
+
+
+void sub_801E0E0(void)
+{
+ switch(sub_801E6CC())
+ {
+ case 3:
+ case 2:
+ sub_801E724();
+ sub_801DD6C(4);
+ break;
+ case 0:
+ case 1:
+ default:
+ break;
+ }
+}
+
+void sub_801E0FC(void)
+{
+ switch(sub_801E218())
+ {
+ case 2:
+ case 3:
+ sub_801E2C4();
+ // Check to see if the options changed?
+ if (GameOptionsNotChange(&gUnknown_203B25C->unk8)) {
+ sub_801DD6C(1);
+ }
+ else {
+ sub_801DD6C(7);
+ }
+ break;
+ case 0:
+ case 1:
+ break;
+ }
+}
+
+void HandleChangeSettingsMenu(void)
+{
+ s32 menuAction;
+
+ if (sub_80144A4(&menuAction) == 0)
+ {
+ switch(menuAction)
+ {
+ case MENU_OPTION_YES:
+ // Save our option changes??
+ *gUnknown_203B46C = gUnknown_203B25C->unk8;
+ sub_8094C14();
+ sub_8099690(0);
+ sub_801DD6C(1);
+ break;
+ case MENU_OPTION_DEFAULT:
+ case MENU_OPTION_NO:
+ sub_801DD6C(1);
+ break;
+ }
+ }
+}
diff --git a/src/code_8048480.c b/src/code_8048480.c
index efac5df..2995170 100644
--- a/src/code_8048480.c
+++ b/src/code_8048480.c
@@ -15,16 +15,16 @@ extern void sub_8075FCC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C
extern void sub_8077AE4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2);
extern void sub_8072008(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2, u8 r3, u32);
extern void sub_8076D10(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
-extern void sub_807232C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2);
+extern void LevelDownTarget(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32 r2);
extern void sub_8045B94(u8 *r0, struct unkDungeon_8041D5C *r1, u32);
extern void sub_807A290(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_80522F4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32);
-extern void sub_8079270(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
+extern void RestoreVisionTarget(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_8077910(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32);
extern void sub_80791D8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
-extern void sub_8079140(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
-extern void sub_8077C44(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, s16, s16, u32);
+extern void BlindTarget(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
+extern void HealTargetHP(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, s16, s16, u32);
extern void sub_80792F8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32);
extern void sub_8079F20(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u8);
extern void sub_806F370(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32, u32, u32, u32, u32, u32);
@@ -41,13 +41,12 @@ void sub_8048364(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u
void sub_8048374(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- sub_8077C44(r0, r1, gUnknown_80F4FB6, gUnknown_80F4FB8, 1);
+ HealTargetHP(r0, r1, gUnknown_80F4FB6, gUnknown_80F4FB8, 1);
}
-
void sub_804839C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- sub_8077C44(r0, r1, gUnknown_80F4FBA, gUnknown_80F4FBC, 1);
+ HealTargetHP(r0, r1, gUnknown_80F4FBA, gUnknown_80F4FBC, 1);
}
void sub_80483C4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
@@ -57,12 +56,12 @@ void sub_80483C4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
void sub_80483D4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- sub_8077C44(r0, r1, 0, gUnknown_80F4FBE, 1);
+ HealTargetHP(r0, r1, 0, gUnknown_80F4FBE, 1);
}
void sub_80483F4(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- sub_8079140(r0, r1);
+ BlindTarget(r0, r1);
}
void sub_8048400(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
@@ -77,12 +76,12 @@ void sub_804840C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
void sub_804841C(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- sub_8079270(r0, r1);
+ RestoreVisionTarget(r0, r1);
}
void sub_8048428(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- if(r1->unk70->unkAC == 4)
+ if(r1->unk70->statusCondition == 4) // 4 - Paralyzed??
sub_807A290(r0, r1);
else
// Pointer to "But nothing happened!"
@@ -91,7 +90,7 @@ void sub_8048428(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
void sub_8048450(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- if((u8)(r1->unk70->unkAC - 2) <= 1)
+ if((u8)(r1->unk70->statusCondition - 2) <= 1)
sub_807A290(r0, r1);
else
// Pointer to "But nothing happened!"
@@ -131,12 +130,12 @@ void sub_80484C8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
void sub_80484DC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- sub_807232C(r0, r1, 1);
+ LevelDownTarget(r0, r1, 1);
}
void sub_80484E8(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
- if(r1->unk70->unkAC == 1)
+ if(r1->unk70->statusCondition == 1) // 1 - Burn??
sub_807A290(r0, r1);
else
{
diff --git a/src/code_8057824.c b/src/code_8057824.c
index edc338d..27a546f 100644
--- a/src/code_8057824.c
+++ b/src/code_8057824.c
@@ -19,10 +19,10 @@ extern u8 sub_807EAA0(u32, u32);
extern void sub_80522F4(struct unkDungeon_8041D5C *r1, struct unkDungeon_8041D5C *r2, u32);
extern void sub_8079F20(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32);
-extern u8 sub_805727C(u32, u32, s16);
-extern u32 sub_8055640(u32, u32, u32, u32, u32);
-extern void sub_80779F0(u32, u32, u32, u32);
-extern void sub_8078968();
+extern u8 sub_805727C(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, s16);
+extern u32 sub_8055640(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, u32, u32, u32);
+extern void sub_80779F0(struct unkDungeon_8041D5C *, struct unkDungeon_8041D5C *, u32, u32);
+extern void sub_8078968(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1);
extern void sub_8079618(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u32);
extern void sub_806F370(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
@@ -33,51 +33,53 @@ extern u32 gUnknown_80FD018;
extern s16 sub_8057600(u32, u32);
extern u32 sub_8092B00(u32);
-u32 sub_8057824(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
+bool32 sub_8057824(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
+ // Lower evasion?
sub_80775DC(param_1,param_2,gUnknown_8106A50,1);
- return 1;
+ return TRUE;
}
-u32 sub_805783C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
+bool32 sub_805783C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
+ // Lower attack?
sub_80772C0(param_1,param_2,gUnknown_8106A4C,0x80,1);
- return 1;
+ return TRUE;
}
-u32 sub_805785C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
+bool32 sub_805785C(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
gUnknown_203B418->unkE26B = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == '\0') {
// The weather remains unchanged
sub_80522F4(param_1,param_2,gUnknown_80FCF74);
}
- return 1;
+ return TRUE;
}
-u32 sub_80578A4(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
+bool32 sub_80578A4(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
gUnknown_203B418->unkE26C = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == '\0') {
// The weather remains unchanged
sub_80522F4(param_1,param_2,gUnknown_80FCF80);
}
- return 1;
+ return TRUE;
}
-u32 sub_80578EC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
+bool32 sub_80578EC(struct unkDungeon_8041D5C *r0, struct unkDungeon_8041D5C *r1)
{
sub_8079F20(r0, r1, 1, 0);
- return 1;
+ return TRUE;
}
-u32 sub_80578FC(u32 param_1, u32 param_2, u32 param_3, u32 param_4)
+bool32 sub_80578FC(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3, u32 param_4)
{
- u32 uVar3;
+ bool32 uVar3;
uVar3 = 0;
if (sub_8055640(param_1, param_2, param_3, 0x80 << 1, param_4) != 0) {
- uVar3 = 1;
+ uVar3 = TRUE;
if (sub_805727C(param_1,param_2, gUnknown_80F4DB6) != '\0') {
sub_80779F0(param_1, param_2, 1, 0);
}
@@ -85,25 +87,25 @@ u32 sub_80578FC(u32 param_1, u32 param_2, u32 param_3, u32 param_4)
return uVar3;
}
-u32 sub_8057948(void)
+bool32 sub_8057948(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2)
{
- sub_8078968();
- return 1;
+ sub_8078968(param_1, param_2);
+ return TRUE;
}
-u32 sub_8057954(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3)
+bool32 sub_8057954(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3)
{
// $m0 is enraged
sub_8079618(param_1,param_2,0xc,param_3,gUnknown_80FAC88);
- return 1;
+ return TRUE;
}
-u8 sub_8057974(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3, u32 param_4)
+bool32 sub_8057974(struct unkDungeon_8041D5C *param_1, struct unkDungeon_8041D5C *param_2, u32 param_3, u32 param_4)
{
s32 newHP;
u8 local_24;
- newHP = param_2->unk70->unkE / 2;
+ newHP = param_2->unk70->HP / 2;
local_24 = 0;
if (newHP != 0) {
sub_806F370(param_1,param_2,newHP,1,&local_24,sub_8092B00(param_3),sub_8057600(param_3,param_4),0,1,0);
diff --git a/src/code_808EAB0.c b/src/code_808EAB0.c
index f50d053..fd03834 100644
--- a/src/code_808EAB0.c
+++ b/src/code_808EAB0.c
@@ -13,22 +13,22 @@ extern u32 gUnknown_81076E4[];
extern bool8 sub_808ECD0(u8 *, u32);
extern void sub_808EC30(u8 *, u32);
-u32 sub_808EAB0(u8 r0)
+u32 GetIQSkillName(u8 r0)
{
return gIQSkillNames[r0];
}
-void sub_808EAC0(char *r0, u8 r1)
+void CopyTacticsNameToBuffer(char *r0, u8 r1)
{
strncpy(r0, gTactics[r1], 0x14);
}
-u32 sub_808EADC(u8 r0)
+u32 GetIQSkillDescription(u8 r0)
{
return gIQSkillDescriptions[r0];
}
-u32 sub_808EAEC(u8 r0)
+u32 GetTacticsDescription(u8 r0)
{
return gTacticsDescriptions[r0];
}
diff --git a/src/credits.c b/src/credits.c
index 2329bd4..33fa3ba 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -1,11 +1,12 @@
#include "global.h"
#include "input.h"
+#include "memory.h"
extern struct Inputs gRealInputs;
struct unkStruct_203B344
{
- u32 unk0; // state variable
+ u32 state; // state variable
u32 unk4; // timer??
};
@@ -15,8 +16,6 @@ struct unkStruct_203B340
u32 unk0;
};
-extern void MemoryFree(void *);
-extern void* MemoryAlloc(u32, u32);
extern void sub_80015C0(u32, u32);
extern u16 gUnknown_80E5990[];
@@ -37,7 +36,7 @@ void sub_803565C(void)
u32 sub_8035678(void)
{
gUnknown_203B344 = MemoryAlloc(sizeof(struct unkStruct_203B344), 8);
- gUnknown_203B344->unk0 = 0;
+ gUnknown_203B344->state = 0;
gUnknown_203B344->unk4 = 0;
sub_80015C0(0, 0x39);
return 1;
@@ -51,46 +50,46 @@ u32 sub_80356A0(void)
held_input = gRealInputs.held;
uVar1 = gUnknown_80E5990[gUnknown_203B344->unk4];
- switch(gUnknown_203B344->unk0) {
- case 0:
- gUnknown_203B344->unk0 = 3;
- break;
- case 1:
- if (uVar1 == 0)
- gUnknown_203B344->unk0 = 4;
- else {
- if (held_input == uVar1)
- gUnknown_203B344->unk0 = 2;
- else {
- // NOTE: couldn't match with OR'd condition so split up to match
- if ((uVar1 & held_input) != held_input)
- gUnknown_203B344->unk0 = 3;
- else
- {
- if (gUnknown_203B344->unk4 == 0)
- gUnknown_203B344->unk0 = 3;
+ switch(gUnknown_203B344->state) {
+ case 0:
+ gUnknown_203B344->state = 3;
+ break;
+ case 1:
+ if (uVar1 == 0)
+ gUnknown_203B344->state = 4;
+ else {
+ if (held_input == uVar1)
+ gUnknown_203B344->state = 2;
+ else {
+ // NOTE: couldn't match with OR'd condition so split up to match
+ if ((uVar1 & held_input) != held_input)
+ gUnknown_203B344->state = 3;
+ else
+ {
+ if (gUnknown_203B344->unk4 == 0)
+ gUnknown_203B344->state = 3;
+ }
+ }
}
- }
- }
- break;
- case 2:
- if (held_input == 0) {
- gUnknown_203B344->unk0 = 1;
- gUnknown_203B344->unk4++;
- }
- else {
- if ((uVar1 & held_input) != held_input)
- gUnknown_203B344->unk0 = 3;
- }
- break;
- case 3:
- return 2;
- case 4:
- return 3; // sub_809C478 clears the flash data when this is returned
+ break;
+ case 2:
+ if (held_input == 0) {
+ gUnknown_203B344->state = 1;
+ gUnknown_203B344->unk4++;
+ }
+ else {
+ if ((uVar1 & held_input) != held_input)
+ gUnknown_203B344->state = 3;
+ }
+ break;
+ case 3:
+ return 2;
+ case 4:
+ return 3; // sub_809C478 clears the flash data when this is returned
}
if (sub_8001658(0,0x39) != 0) {
- gUnknown_203B344->unk0 = 3;
+ gUnknown_203B344->state = 3;
return 2;
}
else {
diff --git a/src/debug.c b/src/debug.c
index b6f4ee7..0f4cf35 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -15,6 +15,8 @@ extern const char gNotEntryText[];
extern const char gFuncFileLineString[];
extern const char gFuncFileLineStringWPrefix[];
extern const char gFuncFileLineString2[];
+extern const char gFatalText[];
+extern const char gUnknown_80D42D4[];
void NDS_DebugInit(void)
{
@@ -198,3 +200,17 @@ void FatalErrorHang()
{
Hang();
}
+
+/*void
+FatalError(struct DebugLocation *debug, const char *text, ...)
+{
+ char buf[0x100];
+ va_list vArgv;
+
+ FatalErrorPrintFuncFileLine(gFatalText, debug);
+ va_start(vArgv, text);
+ vsprintf(buf, text, vArgv);
+ va_end(vArgv);
+ FatalErrorFormatMessage(gUnknown_80D42D4, buf);
+ FatalErrorHang();
+}*/
diff --git a/src/debug_menu.c b/src/debug_menu.c
index 3fa662c..54f25d9 100644
--- a/src/debug_menu.c
+++ b/src/debug_menu.c
@@ -2,6 +2,7 @@
#include "debug_menu.h"
#include "main_menu.h"
#include "menu.h"
+#include "memory.h"
extern struct DebugMenu *gUnknown_203B3EC;
@@ -63,9 +64,6 @@ ALIGNED(4) const char debug_fill5[] = _("pksdir0");
ALIGNED(4) const char debug_fill6[] = _("pksdir0");
-extern void *MemoryAlloc(u32, u32);
-extern void MemoryFree(void *);
-extern void MemoryFill8(u8 *, u8, u32);
extern void sub_800641C(struct unkData *, u32, u32);
extern void ResetUnusedInputStruct(void);
diff --git a/src/debug_menu_mid.c b/src/debug_menu_mid.c
index 8ca2cbd..796ac2a 100644
--- a/src/debug_menu_mid.c
+++ b/src/debug_menu_mid.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "input.h"
#include "gUnknown_203B460.h"
+#include "memory.h"
struct unkData
{
@@ -76,8 +77,6 @@ extern u32 gDebug_NumberText;
extern u32 gUnknown_80D4970;
-extern void *MemoryAlloc(u32, u32);
-extern void MemoryFree(void *);
extern void sub_800641C(void *, u32, u32);
extern void sub_8006518(void *);
extern void sub_801C8C4(u32, u32, u32, u32);
diff --git a/src/felicity_bank.c b/src/felicity_bank.c
index 3bd3620..8a2aae8 100644
--- a/src/felicity_bank.c
+++ b/src/felicity_bank.c
@@ -4,6 +4,7 @@
#include "input.h"
#include "constants/species.h"
#include "felicity_bank.h"
+#include "memory.h"
extern u8 gUnknown_202E5D8[];
extern u8 gUnknown_202E1C8[];
@@ -13,8 +14,6 @@ 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();
diff --git a/src/friend_area.c b/src/friend_area.c
index 27eddee..a6fd1d5 100644
--- a/src/friend_area.c
+++ b/src/friend_area.c
@@ -1,22 +1,13 @@
#include "global.h"
#include "constants/friend_area.h"
#include "friend_area.h"
+#include "pokemon.h"
extern bool8 gBoughtFriendAreas[NUM_FRIEND_AREAS];
extern bool8 *gFriendAreas;
-struct unkStruct_203B45C
-{
- // size: 0x58?
- u16 unk0;
- s16 unk2;
- u8 unk4[0x24];
- u8 unk28;
- u8 unk29[0x2f];
-};
-
-extern struct unkStruct_203B45C gRecruitedPokemonRef[];
+extern struct unkStruct_203B45C *gRecruitedPokemonRef;
extern bool8 *gFriendAreas;
@@ -362,14 +353,17 @@ void sub_8092404(u8 r0, u16 *r1, bool8 r2, bool8 r3)
s32 counter;
bool32 flag;
s32 r6;
+ struct PokemonStruct *pokemon;
+
r6 = 0;
for(counter = 0; counter <= 412; counter++)
{
- if((u8)(gRecruitedPokemonRef[counter].unk0) & 1)
+ pokemon = &gRecruitedPokemonRef->pokemon[counter];
+ if((u8)(pokemon->unk0) & 1)
{
- if(((u8)gRecruitedPokemonRef[counter].unk2 == 0) || r2)
+ if((pokemon->unk2 == 0) || r2)
{
- flag = (u8)gRecruitedPokemonRef[counter].unk4[0] == 65;
+ flag = (u8)pokemon->fill4[0] == 65;
if(!flag || r3)
{
if(sub_80923D4(counter) == r0)
diff --git a/src/friend_rescue.c b/src/friend_rescue.c
index d89f5ea..bbff322 100644
--- a/src/friend_rescue.c
+++ b/src/friend_rescue.c
@@ -2,6 +2,7 @@
#include "friend_rescue.h"
#include "pokemon.h"
#include "constants/species.h"
+#include "memory.h"
extern void sub_80338C4(u32);
extern s32 sub_80144A4(s32 *);
@@ -16,8 +17,6 @@ extern char gAvailablePokemonNames[0x50];
extern struct WonderMailStruct_203B33C *gUnknown_203B33C;
extern u8 sub_8039880(void);
-void MemoryFill8(u8 *dest, u8 value, s32 size);
-void *MemoryAlloc(u32, u32);
void ResetUnusedInputStruct(void);
void sub_800641C(void *, u32, u32);
@@ -102,7 +101,6 @@ extern void sub_8035210(void);
extern void sub_8035430(void);
extern void sub_8034848(void);
-extern void MemoryFree(void *);
extern void sub_803084C(void);
extern void sub_8031E10(void);
extern void sub_8023C60(void);
diff --git a/src/game_options.c b/src/game_options.c
new file mode 100644
index 0000000..8f549f7
--- /dev/null
+++ b/src/game_options.c
@@ -0,0 +1,34 @@
+#include "global.h"
+#include "gUnknown_203B46C.h"
+
+extern struct UnkSaveStruct1 *gUnknown_203B46C;
+extern struct UnkSaveStruct1 gUnknown_2038C70;
+extern void sub_8094C14();
+
+void LoadGameOptions(void)
+{
+ gUnknown_203B46C = &gUnknown_2038C70;
+}
+
+struct UnkSaveStruct1 * GetGameOptions(void)
+{
+ return &gUnknown_2038C70;
+}
+
+void InitializeGameOptions(u8 r0)
+{
+ gUnknown_203B46C->unk8 = 0;
+ if(r0 != 0)
+ {
+ gUnknown_203B46C->playerGender = 0;
+ }
+ gUnknown_203B46C->unk9 = 0;
+ gUnknown_203B46C->unkA = 0;
+ gUnknown_203B46C->unk0 = 0;
+ gUnknown_203B46C->unk1 = 1;
+ gUnknown_203B46C->unk2 = 1;
+ gUnknown_203B46C->unk3 = 1;
+ gUnknown_203B46C->unk4 = 1;
+ gUnknown_203B46C->unkC = 0;
+ sub_8094C14();
+}
diff --git a/src/kangaskhan_storage.c b/src/kangaskhan_storage.c
index c695aec..6d7cdd1 100644
--- a/src/kangaskhan_storage.c
+++ b/src/kangaskhan_storage.c
@@ -4,6 +4,7 @@
#include "input.h"
#include "constants/species.h"
#include "kangaskhan_storage.h"
+#include "memory.h"
extern struct unkStruct_203B208 *gUnknown_203B208;
extern struct unkData gUnknown_80DB748;
@@ -13,8 +14,6 @@ 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);
diff --git a/src/kangaskhan_storage_2.c b/src/kangaskhan_storage_2.c
new file mode 100644
index 0000000..ebef475
--- /dev/null
+++ b/src/kangaskhan_storage_2.c
@@ -0,0 +1,98 @@
+#include "global.h"
+#include "input.h"
+#include "memory.h"
+
+struct unkStruct_203B20C
+{
+ u32 state;
+ u8 unk4[0x10];
+ u32 unk14;
+ u32 unk18;
+ u32 unk1C;
+};
+extern struct unkStruct_203B20C *gUnknown_203B20C;
+
+extern void sub_800641C(u8 *, u32, u32);
+extern void sub_8017F10(u32);
+
+
+extern void sub_8017F10(u32);
+extern void sub_8018588(void);
+extern void sub_8018620(void);
+extern void sub_8018904(void);
+extern void sub_8018AC8(void);
+extern void sub_80186F8(void);
+extern void sub_8018854(void);
+extern void sub_80189C8(void);
+extern void sub_8018AE4(void);
+
+
+extern void sub_8017F28();
+extern void sub_8018100();
+
+u32 sub_8017E1C(void)
+{
+ ResetUnusedInputStruct();
+ sub_800641C(NULL, 1, 1);
+ gUnknown_203B20C = MemoryAlloc(0x150, 8);
+ gUnknown_203B20C->unk14 = 0;
+ gUnknown_203B20C->unk18 = 0;
+ gUnknown_203B20C->unk1C = 0;
+ sub_8017F10(0);
+ return 1;
+}
+
+u32 sub_8017E54(void)
+{
+ switch(gUnknown_203B20C->state)
+ {
+ case 0:
+ sub_8017F10(1);
+ break;
+ case 1:
+ sub_8018588();
+ break;
+ case 4:
+ case 5:
+ sub_8018620();
+ break;
+ case 6:
+ sub_8018904();
+ break;
+ case 7:
+ sub_8018AC8();
+ break;
+ case 10:
+ case 11:
+ sub_80186F8();
+ break;
+ case 12:
+ sub_8018854();
+ break;
+ case 13:
+ sub_80189C8();
+ break;
+ case 14:
+ sub_8018AE4();
+ break;
+ case 3:
+ return 3;
+ }
+ return 0;
+}
+
+void sub_8017EF4(void)
+{
+ if(gUnknown_203B20C != NULL)
+ {
+ MemoryFree(gUnknown_203B20C);
+ gUnknown_203B20C = NULL;
+ }
+}
+
+void sub_8017F10(u32 newState)
+{
+ gUnknown_203B20C->state = newState;
+ sub_8017F28();
+ sub_8018100();
+}
diff --git a/src/kangaskhan_storage_3.c b/src/kangaskhan_storage_3.c
new file mode 100644
index 0000000..e5382c3
--- /dev/null
+++ b/src/kangaskhan_storage_3.c
@@ -0,0 +1,37 @@
+#include "global.h"
+
+extern u32 sub_801B410();
+extern void sub_801B450();
+extern void sub_8017F10(u32);
+
+void sub_8018AC8(void)
+{
+ switch(sub_801B410())
+ {
+ case 2:
+ case 3:
+ sub_801B450();
+ sub_8017F10(0x5);
+ break;
+ case 0:
+ case 1:
+ default:
+ break;
+ }
+}
+
+void sub_8018AE4(void)
+{
+ switch(sub_801B410())
+ {
+ case 2:
+ case 3:
+ sub_801B450();
+ sub_8017F10(0xB);
+ break;
+ case 0:
+ case 1:
+ default:
+ break;
+ }
+}
diff --git a/src/kecleon_items.c b/src/kecleon_items.c
index a3d0fd0..59b9ec6 100644
--- a/src/kecleon_items.c
+++ b/src/kecleon_items.c
@@ -4,6 +4,7 @@
#include "constants/species.h"
#include "input.h"
#include "kecleon_items.h"
+#include "memory.h"
extern struct unkStruct_203B210 *gUnknown_203B210;
extern u8 gUnknown_202E5D8[];
@@ -13,8 +14,6 @@ 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();
@@ -47,7 +46,7 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1)
{
case 0:
gUnknown_203B210->unk4 = 1;
- gUnknown_203B210->unkE4 = &gUnknown_203B210->unkD4;
+ gUnknown_203B210->unkE4 = &gUnknown_203B210->faceFile;
CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON);
CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON);
monName = GetMonSpecies( SPECIES_KECLEON);
@@ -63,7 +62,7 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1)
break;
case 2:
gUnknown_203B210->unk4 = 0;
- gUnknown_203B210->unkE4 = &gUnknown_203B210->unkD4;
+ gUnknown_203B210->unkE4 = &gUnknown_203B210->faceFile;
CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_KECLEON);
CopyYellowSpeciesNametoBuffer(gUnknown_202E1C8, SPECIES_KECLEON);
monName = GetMonSpecies( SPECIES_KECLEON);
@@ -81,7 +80,7 @@ u32 DisplayKeckleonDialogueSprite(u32 param_1)
break;
}
faceFile = GetDialogueSpriteDataPtr(SPECIES_KECLEON);
- gUnknown_203B210->unkD4 = faceFile;
+ gUnknown_203B210->faceFile = faceFile;
gUnknown_203B210->unkD8 = faceFile->data;
gUnknown_203B210->unkE0 = 0;
gUnknown_203B210->unkE1 = 0;
@@ -141,7 +140,7 @@ void sub_8018CF0(void)
{
if(gUnknown_203B210 != NULL)
{
- CloseFile(gUnknown_203B210->unkD4);
+ CloseFile(gUnknown_203B210->faceFile);
MemoryFree(gUnknown_203B210);
gUnknown_203B210 = NULL;
}
diff --git a/src/load_screen.c b/src/load_screen.c
index e49d5a9..2b40564 100644
--- a/src/load_screen.c
+++ b/src/load_screen.c
@@ -3,6 +3,7 @@
#include "main_menu.h"
#include "play_time.h"
#include "file_system.h"
+#include "memory.h"
extern struct PlayTimeStruct *gPlayTimeRef;
extern struct PlayTimeStruct gPlayTime;
@@ -81,9 +82,6 @@ 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);
diff --git a/src/main_menu.c b/src/main_menu.c
index 62dc4d9..052ad49 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -4,6 +4,7 @@
#include "adventure_log.h"
#include "input.h"
#include "menu.h"
+#include "memory.h"
// NOTE: 0x13 and 0x14
// Communication Screen?
@@ -20,10 +21,7 @@
extern struct MainMenu *gMainMenu;
-extern void* MemoryAlloc(u32 a, u32 b);
-extern void MemoryFill8(u8 *dest, u8 value, s32 size);
void sub_8035DA0(void);
-extern void MemoryFree(void *);
extern void sub_8094C14(void);
extern void sub_8099690(u32);
@@ -74,7 +72,7 @@ struct unkStruct_203B34C
u32 unk4;
struct unkSubStruct *unk8; // Array of menu choices??
u8 fillC[0x30 - 0xC];
- s16 unk30;
+ s16 menuIndex;
u8 fill32[0x144 - 0x32];
struct unkData unk144[4];
/* 0x1A4 */ u32 currMenuChoice;
diff --git a/src/main_menu_1.c b/src/main_menu_1.c
index 1879db4..5363bf9 100644
--- a/src/main_menu_1.c
+++ b/src/main_menu_1.c
@@ -14,7 +14,7 @@ struct unkStruct_203B34C
u32 unk4;
struct MenuItem *unk8; // Array of menu choices??
u8 fillC[0x30 - 0xC];
- s16 unk30;
+ s16 menuIndex;
u8 fill32[0x144 - 0x32];
struct unkData unk144[4];
/* 0x1A4 */ u32 currMenuChoice;
@@ -66,7 +66,7 @@ bool8 SetMainMenuText(void)
// Have to load the pointer before the index
preload = gUnknown_203B34C->unk8;
- menuChoice = preload[gUnknown_203B34C->unk30].menuAction; // chosen menu action?
+ menuChoice = preload[gUnknown_203B34C->menuIndex].menuAction; // chosen menu action?
if (gUnknown_203B34C->currMenuChoice == menuChoice) {
return FALSE;
}
diff --git a/src/makuhita_dojo.c b/src/makuhita_dojo.c
index 6061531..d35a659 100644
--- a/src/makuhita_dojo.c
+++ b/src/makuhita_dojo.c
@@ -3,6 +3,7 @@
#include "pokemon.h"
#include "input.h"
#include "constants/species.h"
+#include "memory.h"
struct unkData
{
@@ -14,7 +15,7 @@ struct unkStruct_203B318
// size: 0xcc
u32 unk0;
u32 unk4;
- s32 unk8;
+ s32 state;
u8 fillC[0x10 - 0xC];
s16 unk10;
u8 fill[0x58 - 0x12];
@@ -37,8 +38,6 @@ 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();
@@ -46,7 +45,7 @@ extern void sub_80302A8();
extern void sub_80302C4();
extern void UpdateMakuhitaDialogue();
-void sub_802FF04(s32);
+void UpdateMakuhitaState(s32);
void sub_802FF1C();
u32 CreateMakuhitaShop(u32 param_1)
@@ -113,14 +112,14 @@ u32 CreateMakuhitaShop(u32 param_1)
gUnknown_203B318->unk66 = 0;
gUnknown_203B318->unk60 = 2;
gUnknown_203B318->unk62 = 8;
- sub_802FF04(initialState);
+ UpdateMakuhitaState(initialState);
return 1;
}
u32 sub_802FE58(void)
{
- switch(gUnknown_203B318->unk8) {
+ switch(gUnknown_203B318->state) {
case 0:
case 1:
sub_8030208();
@@ -145,7 +144,7 @@ s16 sub_802FED0(void)
return gUnknown_203B318->unk10;
}
-void sub_802FEE0(void)
+void CleanMakuhitaShop(void)
{
if(gUnknown_203B318 != NULL)
{
@@ -155,9 +154,9 @@ void sub_802FEE0(void)
}
}
-void sub_802FF04(s32 newState)
+void UpdateMakuhitaState(s32 newState)
{
- gUnknown_203B318->unk8 = newState;
+ gUnknown_203B318->state = newState;
sub_802FF1C();
UpdateMakuhitaDialogue();
}
@@ -166,7 +165,7 @@ void sub_802FF1C(void)
{
s32 iVar3;
sub_8006518(gUnknown_203B318->unk6C);
- switch(gUnknown_203B318->unk8)
+ switch(gUnknown_203B318->state)
{
case 0:
case 4:
diff --git a/src/memory_mid.c b/src/memory_mid.c
new file mode 100644
index 0000000..32628cb
--- /dev/null
+++ b/src/memory_mid.c
@@ -0,0 +1,63 @@
+#include "global.h"
+#include "memory.h"
+
+extern u32 gUnknown_80B7F14;
+extern u32 gUnknown_80B7F20;
+extern struct HeapDescriptor gMainHeapDescriptor;
+
+extern s32 MemorySearchFromBack(struct HeapDescriptor *heap, s32, s32);
+extern s32 MemorySearchFromFront(struct HeapDescriptor *heap, s32, s32);
+extern struct HeapDescriptor * _LocateSetBack(struct HeapDescriptor *, u32, u32, u32, u32);
+extern struct HeapDescriptor * _LocateSetFront(struct HeapDescriptor *, u32, u32, u32, u32);
+void DoFree(struct HeapDescriptor *, void *);
+void *DoAlloc(struct HeapDescriptor *, s32, u32);
+
+void FatalError(u32 *, u32 *, ...) __attribute__((noreturn));
+
+
+s32 _LocateSet(struct HeapDescriptor *heap, s32 size, s32 param_3)
+{
+ s32 index;
+ struct HeapDescriptor * uVar2;
+ s32 uVar3;
+
+ if (heap == NULL) {
+ heap = &gMainHeapDescriptor;
+ }
+
+ // Set some sort flag/attr?
+ uVar3 = param_3 >> 8 | 1;
+
+ // Reset it?
+ param_3 = param_3 & 0xff;
+
+ if ((uVar3 & 2) != 0) {
+ index = MemorySearchFromFront(heap,uVar3,size);
+ if (index < 0) goto error;
+ uVar2 = _LocateSetFront(heap,index,uVar3,size,param_3);
+ return uVar2->freeCount;
+ }
+ else {
+ index = MemorySearchFromBack(heap,uVar3,size);
+ if (index < 0) goto error;
+ uVar2 = _LocateSetBack(heap,index,uVar3,size,param_3);
+ return uVar2->freeCount;
+ }
+
+error:
+ // LocateSet [%p] buffer %8x size can't locate
+ // atb %02x grp %3d
+ FatalError(&gUnknown_80B7F14,
+ &gUnknown_80B7F20,
+ heap,size,uVar3,param_3);
+}
+
+void *MemoryAlloc(s32 size, s32 b)
+{
+ DoAlloc(&gMainHeapDescriptor, size, b);
+}
+
+void MemoryFree(void *a)
+{
+ DoFree(&gMainHeapDescriptor, a);
+}
diff --git a/src/other_menus.c b/src/other_menus.c
index 86a90fc..193d800 100644
--- a/src/other_menus.c
+++ b/src/other_menus.c
@@ -3,6 +3,7 @@
#include "main_menu.h"
#include "gUnknown_203B460.h"
#include "menu.h"
+#include "memory.h"
struct unkData
{
@@ -19,7 +20,7 @@ struct unkStruct_203B35C
// size: 0x504
u32 unk0;
u32 unk4; // link status?
- u32 unk8; // state var?
+ u32 state; // state var?
u8 fillC[0x1C - 0xC];
u32 unk1C;
u8 fill20[0x15C - 0x20];
@@ -74,9 +75,6 @@ extern struct unkStruct_203B460 *gUnknown_203B460;
extern void sub_8037400(void);
extern void sub_800641C(void *, u32, u32);
extern void ResetSprites(u32);
-extern void *MemoryAlloc(u32, u32);
-extern void MemoryFill8(u8 *, u8, s32);
-extern void MemoryFree(void *);
extern void sub_8035CF4(u32 *,u32, u32);
extern void sub_80376CC();
extern void sub_8035CC0(void *, u32);
@@ -115,7 +113,7 @@ void sub_8036FDC(s32 param_1)
gUnknown_203B35C->unk0 = param_1;
gUnknown_203B35C->unk4 = 0;
- gUnknown_203B35C->unk8 = 0;
+ gUnknown_203B35C->state = 0;
iVar3 = 0;
do {
gUnknown_203B35C->unk1C0[iVar3 * 2] = 0;
@@ -269,7 +267,7 @@ u32 sub_80370F0(void)
local_10 = 4;
nextMenu = MENU_NO_SCREEN_CHANGE;
- switch(gUnknown_203B35C->unk8){
+ switch(gUnknown_203B35C->state){
case 0:
if (sub_80130A8(&gUnknown_203B35C->unk1C) == '\0') {
sub_8013114(&gUnknown_203B35C->unk1C,&local_10);
@@ -278,13 +276,13 @@ u32 sub_80370F0(void)
sub_8037748();
}
else {
- gUnknown_203B35C->unk8 = 1;
+ gUnknown_203B35C->state = 1;
sub_8037900();
}
break;
case 1:
sub_80376CC();
- gUnknown_203B35C->unk8 = 2;
+ gUnknown_203B35C->state = 2;
sub_80371B8();
break;
case 2:
@@ -298,7 +296,7 @@ u32 sub_80370F0(void)
if (local_10 != 4) {
PlayMenuSoundEffect(3);
nextMenu = sub_8037798();
- gUnknown_203B35C->unk8 = 4;
+ gUnknown_203B35C->state = 4;
}
sub_8037748();
}
diff --git a/src/personality_test.c b/src/personality_test.c
index 8d28ef3..ef31ec1 100644
--- a/src/personality_test.c
+++ b/src/personality_test.c
@@ -7,9 +7,9 @@
#include "pokemon.h"
#include "input.h"
#include "save.h"
+#include "memory.h"
+#include "gUnknown_203B46C.h"
-extern void* MemoryAlloc(u32, u32);
-extern void MemoryFree(void *);
extern void sub_801317C(u32 *);
extern void sub_8099690(u32);
extern void sub_8001024(u32 *);
@@ -67,14 +67,6 @@ struct PersonalityQuestion
extern struct PersonalityQuestion *gPersonalityQuestionPointerTable[NUM_QUIZ_QUESTIONS];
-struct UnkSaveStruct1
-{
- /* 0x0 */ u32 unk0;
- /* 0x4 */ u32 unk4;
- /* 0x8 */ u16 unk8;
- /* 0xA */ u8 unkA;
- /* 0xB */ u8 playerGender;
-};
extern struct UnkSaveStruct1 *gUnknown_203B46C;
struct stack_PartnerSprite
diff --git a/src/pokemon.c b/src/pokemon.c
index 90a0c00..e87c8c6 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -1,25 +1,46 @@
#include "global.h"
#include "pokemon.h"
#include "file_system.h"
+#include "constants/species.h"
-extern u32 *gRecruitedPokemonRef;
-extern u32 gRecruitedPokemon;
+extern struct unkStruct_203B45C gRecruitedPokemon[];
extern struct FileArchive gSystemFileArchive;
extern const char gUnknown_81075F4;
extern struct OpenedFile *gMonsterParametersFile;
extern u16 gLevelCurrentPokeId;
extern struct gPokemon *gMonsterParameters;
+extern struct unkStruct_203B45C *gRecruitedPokemonRef;
void LoadMonsterParameters(void)
{
- gRecruitedPokemonRef = &gRecruitedPokemon;
+ gRecruitedPokemonRef = gRecruitedPokemon;
gMonsterParametersFile = OpenFileAndGetFileDataPtr(&gUnknown_81075F4, &gSystemFileArchive);
gMonsterParameters = (struct gPokemon *)gMonsterParametersFile->data;
gLevelCurrentPokeId = 0;
}
-u32 *sub_808CE00(void)
+struct unkStruct_203B45C *GetRecruitedPokemon(void)
{
- return &gRecruitedPokemon;
+ return gRecruitedPokemon;
}
+void InitializeRecruitedPokemon(void)
+{
+ s32 iVar3;
+
+ for(iVar3 = 0; iVar3 < NUM_SPECIES; iVar3++)
+ {
+ gRecruitedPokemonRef->pokemon[iVar3].unk0 = 0;
+ }
+
+ for(iVar3 = 0; iVar3 < 4; iVar3++)
+ {
+ gRecruitedPokemonRef->pokemon2[iVar3].unk0 = 0;
+ }
+
+ for(iVar3 = 0; iVar3 < 4; iVar3++)
+ {
+ gRecruitedPokemonRef->pokemon3[iVar3].unk8 = 0;
+ gRecruitedPokemonRef->pokemon3[iVar3].unk0 = 0;
+ }
+}
diff --git a/src/post_office_guide.c b/src/post_office_guide.c
index 42a8acb..dd28446 100644
--- a/src/post_office_guide.c
+++ b/src/post_office_guide.c
@@ -4,6 +4,7 @@
#include "input.h"
#include "constants/species.h"
#include "menu.h"
+#include "memory.h"
struct PostOfficeHelper
{
@@ -30,6 +31,7 @@ struct unkData
struct unkStruct_203B330
{
+ // size: 0x78
struct UnkInputStruct *unk0;
u8 fill4[0x8];
u8 unkC;
@@ -166,8 +168,6 @@ 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);
diff --git a/src/save.c b/src/save.c
index bfeee9b..4f71d9a 100644
--- a/src/save.c
+++ b/src/save.c
@@ -63,7 +63,7 @@ struct unkStruct_203B194
u8 *unk4;
u32 unk8;
u8 unkC;
- u8 padding[0x10 - 0xD];
+ u8 fillD[3];
u32 quickSaveStatus;
};
extern struct unkStruct_203B194 *gUnknown_203B194;
@@ -85,19 +85,57 @@ extern u32 gUnknown_203B490;
extern u32 gUnknown_203B494;
extern struct ExclusivePokemonData *gUnknown_203B498;
-extern const char gSaveCorrupted;
-extern const char gSavingAdventure;
-extern const char gWriteGamePak;
-extern const char gSaveCompleted;
-extern const char gSaveNotWritten;
-extern const char gSaveFailed;
-extern const char gUnknown_80D44C8;
-extern const char gUnknown_80D45AC;
+ALIGNED(4) const char gSaveCorrupted[] = _("#+The game data is corrupted.\n"
+ "#+Your data will be erased.");
-extern const char gUnknown_80D45F4;
-extern const char gUnknown_80D4668;
-extern const char gSaveNotWritten2;
-extern const char gSaveFailed2;
+ALIGNED(4) const char fill_save0[] = _("pksdir0");
+
+ALIGNED(4) const char gSavingAdventure[] = _("#+Saving your adventure...\n"
+ "#+Please don~27t turn off the power.");
+
+ALIGNED(4) const char gWriteGamePak[] = _("#+Writing to GBA Game Pak.\n"
+ "#+Do not remove the GBA Game Pak.\n"
+ "#+Please wait with the power on.");
+
+ALIGNED(4) const char gSaveCompleted[] = _("#+Save completed!");
+
+ALIGNED(4) const char gSaveNotWritten[] = _("#+The data could not be written.\n"
+ "#+Please turn off the power and remove\n"
+ "#+and reinsert the DS Card.");
+
+ALIGNED(4) const char gSaveFailed[] = _("#+Save failed.");
+
+ALIGNED(4) const char fill_save1[] = _("pksdir0");
+
+ALIGNED(4) const char gUnknown_80D44C8[] = _("#+Your data was not properly saved~2c\n"
+ "#+so your game cannot be resumed\n"
+ "#+from your last spot.#P"
+ "#+Your last outing is considered a defeat.\n"
+ "#+Before shutting down~2c save in your\n"
+ "#+team base~2c or quicksave in a dungeon.");
+
+ALIGNED(4) const char fill_save2[] = _("pksdir0");
+
+ALIGNED(4) const char gUnknown_80D45AC[] = _("#+Quicksaving your adventure...\n"
+ "#+Please don~27t turn off the power.");
+
+ALIGNED(4) const char gUnknown_80D45F4[] = _("#+Your adventure has been saved.\n"
+ "#+When you are in a dungeon~2c quicksave\n"
+ "#+your progress before ending the game.");
+
+ALIGNED(4) const char gUnknown_80D4668[] = _("#+Your adventure has been saved.\n"
+ "#+When you resume play~2c the quicksave\n"
+ "#+data will be deleted.#P"
+ "#+When you are shutting down the game~2c\n"
+ "#+save your progress in your team base~2c\n"
+ "#+or quicksave in a dungeon.");
+
+ALIGNED(4) const char gSaveNotWritten2[] = _("#+The data could not be written.\n"
+ "#+Please turn off the power and remove\n"
+ "#+and reinsert the DS Card.");
+
+ALIGNED(4) const char gSaveFailed2[] = _("#+Save failed.");
+ALIGNED(4) const char fill_save3[] = _("pksdir0");
extern volatile struct UnkStruct_203B184 *gUnknown_203B184;
@@ -131,12 +169,12 @@ extern u32 sub_8097D60(u8 *, u32);
extern u32 sub_8097D98(void* a, s32 b);
extern void sub_80993E4();
extern void sub_800135C(void);
-extern u32 *sub_808CE00(void);
-extern void sub_808CE08(void);
+extern u32 *GetRecruitedPokemon(void);
+extern void InitializeRecruitedPokemon(void);
extern u32 *GetMoneyItemsInfo(void);
extern void InitializeMoneyItems(void);
-extern u32 sub_8094990(void);
-extern void sub_8094998(u8 r0);
+extern u32 GetGameOptions(void);
+extern void InitializeGameOptions(u8 r0);
extern u8 *sub_80950F8(void);
extern void sub_80958E4(u8 *a, u32 b);
extern u32 sub_80958F8(void);
@@ -150,10 +188,6 @@ extern void sub_80993D8(void);
extern struct PlayTimeStruct *gPlayTimeRef;
-
-extern void* MemoryAlloc(u32 a, u32 b);
-extern void MemoryFree(void* a);
-extern void MemoryFill8(u8 *dest, u8 value, s32 size);
extern void xxx_call_start_bg_music(void);
@@ -527,7 +561,7 @@ void sub_8012284(void)
{
sub_80122D0();
sub_80122F4();
- sub_8012300();
+ InitializePlayerData();
}
void sub_8012298(void)
@@ -540,7 +574,7 @@ void sub_80122A8(void)
{
sub_80122D0();
sub_80122F4();
- sub_8012300();
+ InitializePlayerData();
sub_8012240();
}
@@ -566,17 +600,17 @@ void sub_80122F4(void)
sub_800135C();
}
-void sub_8012300(void)
+void InitializePlayerData(void)
{
InitializeFriendAreas();
- sub_808CE08();
+ InitializeRecruitedPokemon();
InitializeMoneyItems();
InitializeResuceTeamInfo();
sub_80972F4();
sub_8095118();
sub_8095900();
sub_80974E8();
- sub_8094998(1);
+ InitializeGameOptions(1);
InitializeExclusivePokemon();
}
@@ -593,7 +627,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
if(r0 != NULL)
{
gUnknown_203B460 = r0->unk0;
- gRecruitedPokemonRef = r0->unk4;
+ gRecruitedPokemonRef = r0->recruitedPokemon;
gUnknown_203B480 = r0->unk8;
gUnknown_203B484 = r0->unkC;
gUnknown_203B488 = r0->unk10;
@@ -603,12 +637,12 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
gUnknown_203B494 = r0->unk20;
gUnknown_203B498 = r0->ExclusivePokemon;
gFriendAreas = r0->BoughtFriendAreas;
- gUnknown_203B46C = r0->unk2C;
+ gUnknown_203B46C = r0->gameOptions;
gPlayTimeRef = r0->playTime;
return;
}
gUnknown_203B460 = GetMoneyItemsInfo();
- gRecruitedPokemonRef = sub_808CE00();
+ gRecruitedPokemonRef = GetRecruitedPokemon();
gUnknown_203B480 = sub_80950F8();
gUnknown_203B484 = sub_8095100();
gUnknown_203B488 = sub_8095108();
@@ -618,7 +652,7 @@ void sub_8012334(struct UnkStruct_203B184 *r0)
gUnknown_203B494 = sub_8097680();
gUnknown_203B498 = GetExclusivePokemon();
gFriendAreas = GetBoughtFriendAreas();
- gUnknown_203B46C = sub_8094990();
+ gUnknown_203B46C = GetGameOptions();
gPlayTimeRef = GetPlayTime();
}
@@ -649,7 +683,7 @@ u8 sub_8012484(void)
{
if(IsSaveCorrupted())
{
- sub_80141B4(&gSaveCorrupted, 0, 0, 0x301);
+ sub_80141B4(gSaveCorrupted, 0, 0, 0x301);
gUnknown_203B188->state = 3;
}
else
@@ -661,11 +695,11 @@ u8 sub_8012484(void)
{
gUnknown_203B188->state = 6;
}
- break;
+ break;
case 3:
if(sub_80144A4(&temp2) == 0)
gUnknown_203B188->state = 4;
- break;
+ break;
case 4:
sub_8012298();
gUnknown_203B188->state = 6;
@@ -711,10 +745,10 @@ void sub_8012574(s16 PokemonID)
}
if (gUnknown_203B18C->faceFile != 0) {
preload_face = (u8 *)&gUnknown_203B18C->faceFile;
- sub_80141B4(&gSavingAdventure,0,preload_face,0x20);
+ sub_80141B4(gSavingAdventure,0,preload_face,0x20);
}
else {
- sub_80141B4(&gSavingAdventure,0,0,0x20);
+ sub_80141B4(gSavingAdventure,0,0,0x20);
}
gUnknown_203B18C->state = 3;
}
@@ -736,8 +770,8 @@ bool8 sub_8012600(void)
break;
case 1:
gUnknown_203B18C->unk4++;
- if (8 < gUnknown_203B18C->unk4) {
- sub_80141B4(&gWriteGamePak, 0, 0, 0x20);
+ if (gUnknown_203B18C->unk4 > 8) {
+ sub_80141B4(gWriteGamePak, 0, 0, 0x20);
gUnknown_203B18C->state = 3;
}
break;
@@ -754,20 +788,20 @@ bool8 sub_8012600(void)
{
case SAVE_COMPLETED:
if(gUnknown_203B18C->faceFile != NULL)
- sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101);
+ sub_80141B4(gSaveCompleted, 0, (u8 *)faceFile, 0x101);
else
- sub_80141B4(&gSaveCompleted, 0, (u8 *)faceFile, 0x101);
+ sub_80141B4(gSaveCompleted, 0, (u8 *)faceFile, 0x101);
gUnknown_203B18C->state = 5;
break;
case SAVE_NOT_WRTTEN:
- sub_80141B4(&gSaveNotWritten, 0, 0, 0);
+ sub_80141B4(gSaveNotWritten, 0, 0, 0);
gUnknown_203B18C->state = 6;
break;
default:
if(gUnknown_203B18C->faceFile != NULL)
- sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101);
+ sub_80141B4(gSaveFailed, 0, (u8 *)faceFile, 0x101);
else
- sub_80141B4(&gSaveFailed, 0, (u8 *)faceFile, 0x101);
+ sub_80141B4(gSaveFailed, 0, (u8 *)faceFile, 0x101);
gUnknown_203B18C->state = 5;
break;
}
@@ -830,7 +864,12 @@ u32 sub_80127A8(void)
}
else
{
- sub_80141B4(&gUnknown_80D44C8, 0, 0, 0x301);
+ // Data was not properly saved
+ // so your game cannot be resumed
+ // from your last spot. Your last outing is considered a defeat.
+ // Before shutting down, save in your
+ // team base or quicksave in a dungeon
+ sub_80141B4(gUnknown_80D44C8, 0, 0, 0x301);
gUnknown_203B190->state = 2;
}
break;
@@ -867,9 +906,13 @@ void sub_8012850(u8 *r0, u32 r1, u8 r2)
gUnknown_203B194->unkC = r2;
gUnknown_203B194->state = 0;
if(gUnknown_203B194->unkC != 0)
- sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20);
+ // Quicksaving your adventure...
+ // Please don't turn off the power.
+ sub_80141B4(gUnknown_80D45AC, 0, 0, 0x20);
else
- sub_80141B4(&gUnknown_80D45AC, 0, 0, 0x20);
+ // Quicksaving your adventure...
+ // Please don't turn off the power.
+ sub_80141B4(gUnknown_80D45AC, 0, 0, 0x20);
}
u32 sub_80128B0(void)
@@ -896,18 +939,29 @@ u32 sub_80128B0(void)
case SAVE_COMPLETED:
sub_80121E0(0xf1207);
if(gUnknown_203B194->unkC != 0)
- sub_80141B4(&gUnknown_80D45F4, 0, 0, 0x301);
+ // Your adventure has been saved
+ // When you are in a dungeon, quicksave
+ // your progress before ending the game.
+ sub_80141B4(gUnknown_80D45F4, 0, 0, 0x301);
else
- sub_80141B4(&gUnknown_80D4668, 0, 0, 0x301);
+ // Your adventure has been saved.
+ // When you resume play, the quicksave
+ // data will be deleted. When you are shutting down the game,
+ // save your progress in your team base,
+ // or quicksave in a dungeon.
+ sub_80141B4(gUnknown_80D4668, 0, 0, 0x301);
gUnknown_203B194->state = 3;
break;
case SAVE_NOT_WRTTEN:
- sub_80141B4(&gSaveNotWritten2, 0, 0, 0);
+ // The data could not be written.
+ // Please turn off the power and remove
+ // and reinsert the DS Card
+ sub_80141B4(gSaveNotWritten2, 0, 0, 0);
gUnknown_203B194->state = 4;
break;
default:
sub_80121E0(0xf1209);
- sub_80141B4(&gSaveFailed2, 0, 0, 0x301);
+ sub_80141B4(gSaveFailed2, 0, 0, 0x301);
gUnknown_203B194->state = 3;
break;
}
diff --git a/src/trade_items_menu.c b/src/trade_items_menu.c
index 5ca115a..cb86468 100644
--- a/src/trade_items_menu.c
+++ b/src/trade_items_menu.c
@@ -2,6 +2,7 @@
#include "input.h"
#include "trade_items_menu.h"
#include "gUnknown_203B460.h"
+#include "memory.h"
extern struct TradeItemsMenu *gTradeItemsMenu;
@@ -35,9 +36,6 @@ extern u32 gUnknown_80E6314;
extern void sub_8013AA0(u32 *);
-extern void *MemoryAlloc(u32, u32);
-extern void MemoryFill8(u8 *, u32, u32);
-extern void MemoryFree(void *);
extern void sub_800641C(u32 *, u32, u32);
extern void sub_8035C1C();
extern void sub_8035DA0();
diff --git a/src/unk_menu_203B360.c b/src/unk_menu_203B360.c
index 811ce38..2d22ef1 100644
--- a/src/unk_menu_203B360.c
+++ b/src/unk_menu_203B360.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "input.h"
#include "main_menu.h"
+#include "memory.h"
struct unkData
{
@@ -29,9 +30,6 @@ extern struct unkData gUnknown_80E6E7C;
extern struct unkData gUnknown_80E6E94;
extern struct MenuItem gUnknown_80E6EAC[];
-extern void *MemoryAlloc(u32, u32);
-extern void MemoryFill8(u8 *, u8, u32);
-extern void MemoryFree(void *);
extern void sub_8038440();
extern void sub_8035CF4(u32 *, u32, u32);
extern void sub_800641C(void *, u32, u32);
diff --git a/src/unk_menu_203B364.c b/src/unk_menu_203B364.c
index baba184..4d8a716 100644
--- a/src/unk_menu_203B364.c
+++ b/src/unk_menu_203B364.c
@@ -2,6 +2,7 @@
#include "input.h"
#include "menu.h"
#include "main_menu.h"
+#include "memory.h"
struct unkData
{
@@ -33,9 +34,6 @@ 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);
-extern void MemoryFree(void *);
extern void sub_8038440();
extern void sub_8035CF4(u32 *, u32, u32);
extern void sub_800641C(void *, u32, u32);
diff --git a/src/wonder_mail.c b/src/wonder_mail.c
index 6f93048..48bb3fc 100644
--- a/src/wonder_mail.c
+++ b/src/wonder_mail.c
@@ -4,6 +4,7 @@
#include "file_system.h"
#include "constants/species.h"
#include "wonder_mail.h"
+#include "memory.h"
extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;
extern struct WonderMailStruct_203B2C4 *gUnknown_203B2C4;
@@ -86,10 +87,6 @@ extern void sub_803092C(void);
extern void sub_8011C28(u32);
-extern void MemoryFill8(u8 *dest, u8 value, s32 size);
-extern void* MemoryAlloc(u32, u32);
-extern void MemoryFree(void *);
-
extern u32 sub_80154F0();
extern u32 sub_8039068(u32, u8 *r1, u8 *r0);
extern void sub_8014248(const char *r0, u32, u32, u32 *r4, u32, u32, u32, u32 *r5, u32);
diff --git a/src/wonder_mail_2.c b/src/wonder_mail_2.c
index 911df42..84bc576 100644
--- a/src/wonder_mail_2.c
+++ b/src/wonder_mail_2.c
@@ -3,6 +3,7 @@
#include "input.h"
#include "pokemon.h"
#include "constants/species.h"
+#include "memory.h"
struct unkStruct_203B2C8
{
@@ -33,6 +34,7 @@ struct unkStruct_203B2C8
u8 unk134;
u8 fill135[0x3];
u32 unk138;
+ u32 fill13C;
};
extern struct unkStruct_203B2C8 *gUnknown_203B2C8;
@@ -71,9 +73,6 @@ extern char gAvailablePokemonNames[0x50];
extern u32 sub_802F298();
extern void sub_802F2C0();
extern u32 sub_8011C34();
-extern void *MemoryAlloc(u32, u32);
-extern void MemoryFill8(u8 *, u8, s32);
-extern void MemoryFree(void *);
extern void sub_800641C(void *, u32, u32);
extern u8 sub_8099394(u8 *);
extern void sub_802B548(u32);
@@ -108,8 +107,8 @@ u32 sub_802B2D4(void)
ResetUnusedInputStruct();
sub_800641C(0,1,1);
- gUnknown_203B2C8 = MemoryAlloc(0x140,8);
- MemoryFill8((u8 *)gUnknown_203B2C8,0,0x140);
+ gUnknown_203B2C8 = MemoryAlloc(sizeof(struct unkStruct_203B2C8),8);
+ MemoryFill8((u8 *)gUnknown_203B2C8,0,sizeof(struct unkStruct_203B2C8));
gUnknown_203B2C8->unk1 = -1;
CopyYellowSpeciesNametoBuffer(gUnknown_202E5D8, SPECIES_PELIPPER);
faceFile = GetDialogueSpriteDataPtr(SPECIES_PELIPPER);
diff --git a/src/wonder_mail_3.c b/src/wonder_mail_3.c
index 7951efc..80552f6 100644
--- a/src/wonder_mail_3.c
+++ b/src/wonder_mail_3.c
@@ -1,9 +1,10 @@
#include "global.h"
+#include "memory.h"
struct unkStruct_203B2F8
{
// size: 0x208
- u32 unk0; // state
+ u32 state; // state
u32 unk4;
u8 unk8;
u8 unk9;
@@ -17,8 +18,6 @@ struct unkStruct_203B2F8
};
extern struct unkStruct_203B2F8 *gUnknown_203B2F8;
-extern void *MemoryAlloc(u32, u32);
-extern void MemoryFree(void *);
extern u8 sub_8099328(u8 *);
extern u32 sub_8011C1C();
extern void sub_802D1A0(u32);
@@ -52,7 +51,7 @@ u32 sub_802D098(u32 param_1)
u32 sub_802D0E0(void)
{
- switch(gUnknown_203B2F8->unk0) {
+ switch(gUnknown_203B2F8->state) {
case 0:
break;
case 1:
@@ -100,7 +99,7 @@ void sub_802D184(void)
void sub_802D1A0(u32 newState)
{
- gUnknown_203B2F8->unk0 = newState;
+ gUnknown_203B2F8->state = newState;
sub_802D1B8();
sub_802D2A8();
}
diff --git a/src/wonder_mail_main_menu.c b/src/wonder_mail_main_menu.c
index 288d352..204f622 100644
--- a/src/wonder_mail_main_menu.c
+++ b/src/wonder_mail_main_menu.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "save.h"
+#include "memory.h"
#define EXIT_TO_MAIN_MENU 5
#define PASSWORD_SUCCESS 13
@@ -38,9 +39,6 @@ extern u32 sub_8095324(u32);
extern u32 sub_80144A4(s32 *);
extern u32 sub_8011C1C(void);
extern struct unkStruct_203B3E8 *gUnknown_203B3E8;
-extern void* MemoryAlloc(u32, u32);
-extern void MemoryFree(void *);
-extern void MemoryFill8(u8 *dest, u8 value, s32 size);
extern void sub_803A1C0(u8);
extern void ResetUnusedInputStruct(void);
extern void sub_800641C(void *, u32, u32);
diff --git a/src/wonder_mail_pre.c b/src/wonder_mail_pre.c
index a187a9c..9d15ab3 100644
--- a/src/wonder_mail_pre.c
+++ b/src/wonder_mail_pre.c
@@ -4,10 +4,9 @@
#include "pokemon.h"
#include "constants/species.h"
#include "wonder_mail.h"
+#include "memory.h"
-extern void* MemoryAlloc(u32 a, u32 b);
-extern void MemoryFill8(u8 *dest, u8 value, s32 size);
extern void sub_800641C(void *r0, u8, u8);
extern struct WonderMailStruct_203B2C0 *gUnknown_203B2C0;