summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/code_800558C.c49
-rw-r--r--src/code_800C9CC.c42
-rw-r--r--src/code_800D090.c60
-rw-r--r--src/code_80118A4.c118
-rw-r--r--src/code_80118A4_1.c55
-rw-r--r--src/code_808EAB0.c8
-rw-r--r--src/code_8097F40.c60
-rw-r--r--src/debug.c198
-rw-r--r--src/fatal_system.c89
-rw-r--r--src/friend_area.c69
-rw-r--r--src/friend_area_1.c6
-rw-r--r--src/music.c6
-rw-r--r--src/music_pre.c372
-rw-r--r--src/save_mid.c4
14 files changed, 729 insertions, 407 deletions
diff --git a/src/code_800558C.c b/src/code_800558C.c
index 13e3255..8de7dd3 100644
--- a/src/code_800558C.c
+++ b/src/code_800558C.c
@@ -16,58 +16,17 @@ extern void sub_800CC44(s32 r0, s32 r1);
void sub_80060A8(void)
{
- bool32 temp;
- bool32 preload;
- bool32 preload2;
-
gUnknown_2026E3C = gUnknown_2026E58;
-
- preload = gUnknown_2026E54;
- temp = FALSE;
- if (!gUnknown_2026E54)
- {
- temp = TRUE;
- }
- gUnknown_2026E54 = temp;
-
- preload2 = gUnknown_2026E50;
- temp = FALSE;
- if (!gUnknown_2026E50)
- {
- temp = TRUE;
- }
- gUnknown_2026E50 = temp;
-
+ gUnknown_2026E54 = !gUnknown_2026E54;
+ gUnknown_2026E50 = !gUnknown_2026E50;
gUnknown_2026E38 = FALSE;
}
void sub_80060EC(void)
{
- bool32 temp;
- bool32 preload;
- bool32 preload2;
-
gUnknown_2026E3C = gUnknown_2026E58;
-
- preload = gUnknown_2026E54;
- temp = FALSE;
-
- if (!gUnknown_2026E54)
- {
- temp = TRUE;
- }
- gUnknown_2026E54 = temp;
-
-
- preload2 = gUnknown_2026E50;
- temp = FALSE;
-
- if (!gUnknown_2026E50)
- {
- temp = TRUE;
- }
- gUnknown_2026E50 = temp;
-
+ gUnknown_2026E54 = !gUnknown_2026E54;
+ gUnknown_2026E50 = !gUnknown_2026E50;
sub_800CC44((gUnknown_2026E4E & (0xF8 << 5)) >> 8, gUnknown_2026E4E & 0x1F);
gUnknown_2026E38 = TRUE;
}
diff --git a/src/code_800C9CC.c b/src/code_800C9CC.c
index 28ce10a..99aa827 100644
--- a/src/code_800C9CC.c
+++ b/src/code_800C9CC.c
@@ -8,10 +8,10 @@ extern u8 gUnknown_202D6B9;
extern u16 gUnknown_202D7FA;
extern u8 gUnknown_202D7FE;
-extern struct BGControlStruct gUnknown_202D698;
-extern struct BGControlStruct gUnknown_202D6A0;
-extern struct BGControlStruct gUnknown_202D6A8;
-extern struct BGControlStruct gUnknown_202D6B0;
+extern struct BGControlStruct gBG0Control;
+extern struct BGControlStruct gBG1Control;
+extern struct BGControlStruct gBG2Control;
+extern struct BGControlStruct gBG3Control;
void ReadKeyInput(struct Inputs *r0)
{
@@ -93,26 +93,26 @@ void sub_800CC44(s32 r0, s32 r1)
void SetBG0RegOffsets(s32 xoffset, s32 yoffset)
{
- gUnknown_202D698.hofs = xoffset;
- gUnknown_202D698.vofs = yoffset;
+ gBG0Control.hofs = xoffset;
+ gBG0Control.vofs = yoffset;
}
void SetBG1RegOffsets(s32 xoffset, s32 yoffset)
{
- gUnknown_202D6A0.hofs = xoffset;
- gUnknown_202D6A0.vofs = yoffset;
+ gBG1Control.hofs = xoffset;
+ gBG1Control.vofs = yoffset;
}
void SetBG2RegOffsets(s32 xoffset, s32 yoffset)
{
- gUnknown_202D6A8.hofs = xoffset;
- gUnknown_202D6A8.vofs = yoffset;
+ gBG2Control.hofs = xoffset;
+ gBG2Control.vofs = yoffset;
}
void SetBG3RegOffsets(s32 xoffset, s32 yoffset)
{
- gUnknown_202D6B0.hofs = xoffset;
- gUnknown_202D6B0.vofs = yoffset;
+ gBG3Control.hofs = xoffset;
+ gBG3Control.vofs = yoffset;
}
void SetBGRegOffsets(s32 reg, u32 xoffset, s32 yoffset)
@@ -131,16 +131,16 @@ void SetBGRegXOffset(s32 reg, s32 offset)
switch (reg) {
default:
case 0:
- gUnknown_202D698.hofs = offset;
+ gBG0Control.hofs = offset;
break;
case 1:
- gUnknown_202D6A0.hofs = offset;
+ gBG1Control.hofs = offset;
break;
case 2:
- gUnknown_202D6A8.hofs = offset;
+ gBG2Control.hofs = offset;
break;
case 3:
- gUnknown_202D6B0.hofs = offset;
+ gBG3Control.hofs = offset;
break;
}
}
@@ -150,16 +150,16 @@ void SetBGRegYOffset(s32 reg, s32 offset)
switch (reg) {
default:
case 0:
- gUnknown_202D698.vofs = offset;
+ gBG0Control.vofs = offset;
break;
case 1:
- gUnknown_202D6A0.vofs = offset;
+ gBG1Control.vofs = offset;
break;
case 2:
- gUnknown_202D6A8.vofs = offset;
+ gBG2Control.vofs = offset;
break;
case 3:
- gUnknown_202D6B0.vofs = offset;
+ gBG3Control.vofs = offset;
break;
}
}
@@ -167,7 +167,7 @@ void SetBGRegYOffset(s32 reg, s32 offset)
void sub_800CD64(s32 r0, u8 r1)
{
gUnknown_202D7FE = r1;
- gUnknown_202D6A8.unk2 = r0 ? 0x8000 : 0;
+ gBG2Control.unk2 = r0 ? 0x8000 : 0;
}
void SetBGOBJEnableFlags(u32 mask)
diff --git a/src/code_800D090.c b/src/code_800D090.c
index da82789..b263d30 100644
--- a/src/code_800D090.c
+++ b/src/code_800D090.c
@@ -2,11 +2,20 @@
#include <stdio.h>
#include "gba/gba.h"
#include "config.h"
+#include "global.h"
extern void SoundBiasReset(void);
extern void SoundBiasSet(void);
+struct unkStruct_202DB60
+{
+ u32 unk0;
+ u32 unk4;
+};
+
+extern struct unkStruct_202DB60 gUnknown_202DB60;
+
void Hang(void)
{
while(1)
@@ -62,7 +71,6 @@ void sub_800D098(void)
REG_IME = 1;
- // Good after here
while(REG_VCOUNT <= 159){}
REG_DISPCNT = dispcnt_save; // restore DISPCNT
while(REG_KEYINPUT != 0x3ff){} // All buttons
@@ -75,3 +83,53 @@ void sub_800D158(u8 *buffer, const char *text, ...)
vsprintf(buffer, text, vArgv);
va_end(vArgv);
}
+
+// Unused
+void sub_800D16C(const char *text, ...)
+{
+ char buffer[1024];
+ va_list vArgv;
+ va_start(vArgv, text);
+ vsprintf(buffer, text, vArgv);
+ va_end(vArgv);
+}
+
+// Unused
+void sub_800D10A(const char *r0, u32 r1, u32 r2, u32 r3, ...)
+{
+}
+
+void nullsub_183(void)
+{
+}
+
+void nullsub_188(void)
+{
+}
+
+void nullsub_184(void)
+{
+}
+
+u32 sub_800D1B4(void)
+{
+ return 0;
+}
+
+u32 sub_800D1B8(u32 r0, u32 r1, u32 r2)
+{
+ return r2;
+}
+
+void nullsub_187(void)
+{
+}
+
+u32 sub_800D1C0(void)
+{
+ if(gUnknown_202DB60.unk0 != 2)
+ return 0;
+ if(gUnknown_202DB60.unk4 != 2)
+ return 0;
+ return 1;
+}
diff --git a/src/code_80118A4.c b/src/code_80118A4.c
index 2cb450d..03859b0 100644
--- a/src/code_80118A4.c
+++ b/src/code_80118A4.c
@@ -1,12 +1,15 @@
+#include <stdarg.h>
+#include <stdio.h>
#include "global.h"
#include "music.h"
#include "constants/bg_music.h"
#include "time.h"
#include "bg.h"
#include "input.h"
+#include "config.h"
+
void sub_8011924(void);
-void nullsub_26(void);
extern u8 sub_80023E4(u8);
extern void sub_800BF48(u16 r0);
@@ -18,15 +21,6 @@ extern void sub_800C074(u16 r0, u16 r1);
extern void sub_800C298(u16 r0);
extern u8 sub_800C5D0(u16 r0);
-extern void nullsub_27(void);
-extern void nullsub_29(void);
-extern void nullsub_30(void);
-extern void nullsub_31(void);
-extern void nullsub_32(void);
-extern void nullsub_28(void);
-
-extern int sprintf(char *, const char *, ...);
-
extern struct PlayTimeStruct *gUnknown_203B47C;
struct UnkSaveStruct1
@@ -50,23 +44,12 @@ struct UnkBgStruct
};
extern struct UnkBgStruct *gUnknown_203B0E4;
-struct DebugLocation
-{
- char *file;
- u32 line;
- char *func;
-};
-
extern u16 gUnknown_80D4144[];
extern s16 gUnknown_202DE20;
extern s16 gUnknown_202DE22;
extern s16 gUnknown_202DE24;
extern u32 gUnknown_202DE1C;
-extern u32 gUnknown_203B14C;
-extern const char gNotEntryText[];
-extern const char gFuncFileLineString[];
-extern const char gFuncFileLineStringWPrefix[];
void nullsub_8(u32);
void sub_8005838(u32, u32);
@@ -114,32 +97,23 @@ void sub_801169C(void)
void sub_8011760(void)
{
if(sub_80023E4(0xD) != 0)
- {
StartNewBGM(MUS_WORLD_CALAMITY);
- return;
- }
- if(sub_80023E4(0xC) != 0)
- {
+ else if(sub_80023E4(0xC) != 0)
StartNewBGM(MUS_POKEMON_SQUARE);
- }
}
void sub_801178C(void)
{
if(sub_80023E4(0xD) != 0)
- {
StartNewBGM(MUS_WORLD_CALAMITY);
- return;
- }
- StartNewBGM(MUS_POKEMON_SQUARE);
+ else
+ StartNewBGM(MUS_POKEMON_SQUARE);
}
void sub_80117AC(void)
{
if(sub_80023E4(0xD) == 0)
- {
sub_800BFD0(0x1E);
- }
}
void sub_80117C4(void)
@@ -149,17 +123,19 @@ void sub_80117C4(void)
void sub_80117D0(void)
{
- sub_800C074(0x97 << 1, 0x80 << 1);
+ sub_800C074(0x97 << 1, 256);
}
+// Some sound effect
void sub_80117E4(void)
{
- sub_800C074(0x12f, 0x80 << 1);
+ sub_800C074(303, 256);
}
+// Some sound effect
void sub_80117F8(void)
{
- sub_800C074(0x12d, 0x80 << 1);
+ sub_800C074(301, 256);
}
void sub_801180C(void)
@@ -172,15 +148,15 @@ void sub_801180C(void)
void sub_8011830(void)
{
- sub_800C93C();
+ StopBGMusicVSync();
gUnknown_202DE20 = 0;
gUnknown_202DE22 = 0;
gUnknown_202DE24 = 0;
}
-void sub_8011854(void)
+void xxx_call_start_bg_music(void)
{
- sub_800C9CC();
+ StartBGMusicVSync();
}
void sub_8011860(void)
@@ -238,40 +214,40 @@ void sub_8011930(u16 r0)
sub_800BFD0(r0);
}
-u32 sub_8011940(u16 r0)
+u32 IsEqualtoBGTrack(u16 songIndex)
{
u32 temp;
temp = GetCurrentBGSong();
- if(r0 == 999)
+ if(songIndex == 999)
return temp != 999;
- return temp == r0;
+ return temp == songIndex;
}
-void sub_8011974(u16 r0, u16 r1)
+void sub_8011974(u16 songIndex, u16 r1)
{
- sub_800C074(r0, r1);
+ sub_800C074(songIndex, r1);
}
-void sub_8011988(u16 r0)
+void sub_8011988(u16 songIndex)
{
- sub_800C074(r0, 0x80 << 1);
+ sub_800C074(songIndex, 0x80 << 1);
}
-void sub_801199C(u16 r0)
+void sub_801199C(u16 songIndex)
{
- sub_800C298(r0);
+ sub_800C298(songIndex);
}
-void sub_80119AC(u16 r0, u16 r1)
+void sub_80119AC(u16 songIndex, u16 r1)
{
- sub_800C3F8(r0, r1);
+ sub_800C3F8(songIndex, r1);
}
-u8 sub_80119C0(u16 r0)
+u8 sub_80119C0(u16 songIndex)
{
- return sub_800C5D0(r0);
+ return sub_800C5D0(songIndex);
}
void sub_80119D4(u32 r0)
@@ -294,41 +270,3 @@ void sub_8011A2C(u32 r0)
{
gUnknown_202DE1C = r0;
}
-
-void NDS_DebugInit(void)
-{
- nullsub_26();
- nullsub_27();
- nullsub_29();
- nullsub_30();
- nullsub_31();
- nullsub_32();
- nullsub_28();
- gUnknown_203B14C = 1; // Maybe a flag saying Debug is on?
-}
-
-void nullsub_25(void)
-{
-}
-
-void nullsub_26(void)
-{
-}
-
-// Unused
-void PrintFuncFileLineOrNotEntry(char * r0, struct DebugLocation *r1)
-{
- if(r1 != 0)
- {
- sprintf(r0, gFuncFileLineString, r1->func, r1->file, r1->line);
- }
- else
- {
- sprintf(r0, gNotEntryText);
- }
-}
-
-void PrintFuncFileLine(char *buf, struct DebugLocation *loc, char* prefix)
-{
- sprintf(buf, gFuncFileLineStringWPrefix, prefix, loc->func, loc->file, loc->line);
-}
diff --git a/src/code_80118A4_1.c b/src/code_80118A4_1.c
index 89f4db5..e69de29 100644
--- a/src/code_80118A4_1.c
+++ b/src/code_80118A4_1.c
@@ -1,55 +0,0 @@
-#include "global.h"
-
-extern u8 gUnknown_203B150;
-
-void PrintFuncFileLine(char *r0, const char *r1, ...);
-extern const char gUnknown_80D421C;
-
-void nullsub_199(void)
-{
-}
-
-void nullsub_27(void)
-{
-}
-
-void sub_8011B08(void)
-{
- gUnknown_203B150 = 1;
-}
-
-void sub_8011B14(void)
-{
- gUnknown_203B150 = 0;
-}
-
-u8 sub_8011B20(void)
-{
- gUnknown_203B150 = !gUnknown_203B150;
- return gUnknown_203B150;
-}
-
-// unused
-u8 sub_8011B3C(void)
-{
- return gUnknown_203B150;
-}
-
-// unused
-void nullsub_137(void)
-{
-
-}
-
-// TODO merge with fatal_system
-void FatalErrorPrintFuncFileLine(const char *r0, const char *r1)
-{
- char buf[0x100];
- if(r0 != 0){
- PrintFuncFileLine(buf, r1, r0);
- }
- else
- {
- PrintFuncFileLine(buf, r1, &gUnknown_80D421C);
- }
-}
diff --git a/src/code_808EAB0.c b/src/code_808EAB0.c
index bf80687..44be84e 100644
--- a/src/code_808EAB0.c
+++ b/src/code_808EAB0.c
@@ -119,16 +119,10 @@ void sub_808EB48(u8 *r0, s32 r1)
bool8 sub_808EB7C(s32 r0, u8 r1)
{
- u8 return_var;
if(r1 == 0)
{
return FALSE;
}
- return_var = FALSE;
- if(gUnknown_810A390[r1] <= r0)
- {
- return_var = TRUE;
- }
- return return_var;
+ return gUnknown_810A390[r1] <= r0;
}
diff --git a/src/code_8097F40.c b/src/code_8097F40.c
index 94d271c..6775965 100644
--- a/src/code_8097F40.c
+++ b/src/code_8097F40.c
@@ -1,4 +1,13 @@
#include "global.h"
+#define NUM_EXCLUSIVE_POKEMON 12
+
+struct ExclusivePokemon
+{
+ u16 poke_id;
+ bool8 in_rrt; // red rescue team
+ bool8 in_brt; // blue rescue team
+};
+extern struct ExclusivePokemon gExclusivePokemon[];
extern u8 gUnknown_810ACC0[];
extern u8 *gUnknown_203B498;
@@ -6,14 +15,7 @@ extern u8 gUnknown_2039840;
bool8 sub_8097F40(u32 r0)
{
- bool8 temp;
- temp = FALSE;
- if(gUnknown_810ACC0[r0] == 2)
- {
- temp = TRUE;
- }
- return temp;
-
+ return gUnknown_810ACC0[r0] == 2;
}
void sub_8097F5C(void)
@@ -26,3 +28,45 @@ u8 *sub_8097F6C(void)
return &gUnknown_2039840;
}
+#ifdef NONMATCHING
+void sub_8097F74(void)
+{
+ s32 counter;
+ memset(gUnknown_203B498, 0, 0x64);
+ for(counter = 0; counter < NUM_EXCLUSIVE_POKEMON; counter++)
+ {
+ // TODO fix switching of addition statements (when it figures out the index)
+ gUnknown_203B498[counter + 0x58] = gExclusivePokemon[counter].in_rrt;
+ }
+}
+#else
+NAKED
+void sub_8097F74(void)
+{
+ asm_unified("\tpush {r4,lr}\n"
+ "\tldr r4, _08097FA0\n"
+ "\tldr r0, [r4]\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0x64\n"
+ "\tbl memset\n"
+ "\tmovs r2, 0\n"
+ "\tldr r3, _08097FA4\n"
+"_08097F86:\n"
+ "\tldr r0, [r4]\n"
+ "\tadds r0, 0x58\n"
+ "\tadds r0, r2\n"
+ "\tldrb r1, [r3, 0x2]\n"
+ "\tstrb r1, [r0]\n"
+ "\tadds r3, 0x4\n"
+ "\tadds r2, 0x1\n"
+ "\tcmp r2, 0xB\n"
+ "\tble _08097F86\n"
+ "\tpop {r4}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+"_08097FA0: .4byte gUnknown_203B498\n"
+"_08097FA4: .4byte gExclusivePokemon");
+
+}
+#endif
diff --git a/src/debug.c b/src/debug.c
new file mode 100644
index 0000000..4482df1
--- /dev/null
+++ b/src/debug.c
@@ -0,0 +1,198 @@
+#include <stdarg.h>
+#include <stdio.h>
+#include "gba/gba.h"
+#include "config.h"
+#include "debug.h"
+
+extern void Hang();
+
+extern u8 gUnknown_203B150;
+
+extern bool32 gNDS_DebugEnabled;
+
+extern const char gUnknown_80D421C[];
+extern const char gNotMountText[];
+extern const char gNotEntryText[];
+extern const char gFuncFileLineString[];
+extern const char gFuncFileLineStringWPrefix[];
+extern const char gFuncFileLineString2[];
+
+void NDS_DebugInit(void)
+{
+ nullsub_26();
+ nullsub_27();
+ nullsub_29();
+ nullsub_30();
+ nullsub_31();
+ nullsub_32();
+ nullsub_28();
+ gNDS_DebugEnabled = TRUE;
+}
+
+void nullsub_25(void)
+{
+}
+
+void nullsub_26(void)
+{
+}
+
+// Unused
+void PrintFuncFileLineOrNotEntry(char * buf, struct DebugLocation *debug)
+{
+ if(debug != NULL)
+ {
+ sprintf(buf, gFuncFileLineString, debug->func, debug->file, debug->line);
+ }
+ else
+ {
+ sprintf(buf, gNotEntryText);
+ }
+}
+
+void PrintFuncFileLine(char *buf, struct DebugLocation *loc, const char* prefix)
+{
+ sprintf(buf, gFuncFileLineStringWPrefix, prefix, loc->func, loc->file, loc->line);
+}
+
+void PrintMessageWithFuncFileLine(u8 *buffer, struct DebugLocation *debug, const char *text, ...)
+{
+ va_list vArgv;
+ u32 length;
+
+ va_start(vArgv, text);
+ vsprintf(buffer, text, vArgv);
+ length = strlen(buffer);
+ sprintf(&buffer[length], gFuncFileLineString2, debug->func, debug->file, debug->line);
+ va_end(vArgv);
+}
+
+void nullsub_199(void)
+{
+}
+
+void nullsub_27(void)
+{
+}
+
+void sub_8011B08(void)
+{
+ gUnknown_203B150 = 1;
+}
+
+void sub_8011B14(void)
+{
+ gUnknown_203B150 = 0;
+}
+
+u8 sub_8011B20(void)
+{
+ gUnknown_203B150 = !gUnknown_203B150;
+ return gUnknown_203B150;
+}
+
+// unused
+u8 sub_8011B3C(void)
+{
+ return gUnknown_203B150;
+}
+
+// unused
+void nullsub_137(void)
+{
+
+}
+
+void FatalErrorPrintFuncFileLine(const char *r0, struct DebugLocation *debug)
+{
+ char buf[0x100];
+ if(r0 != NULL){
+ PrintFuncFileLine(buf, debug, r0);
+ }
+ else
+ {
+ PrintFuncFileLine(buf, debug, gUnknown_80D421C);
+ }
+}
+
+void FatalErrorFormatMessage(const char *text, ...)
+{
+ char bufPrint[0x100];
+ va_list vArgv;
+ va_start(vArgv, text);
+ vsprintf(bufPrint, text, vArgv);
+ va_end(vArgv);
+}
+
+
+void sub_8011B88(const char *text, ...)
+{
+ char bufPrint[0x100];
+ va_list vArgv;
+ va_start(vArgv, text);
+ vsprintf(bufPrint, text, vArgv);
+ va_end(vArgv);
+}
+
+void nullsub_28(void)
+{
+}
+
+u32 sub_8011BA4(void)
+{
+ return 0;
+}
+
+// Unused
+u32 sub_8011BA8(void)
+{
+ return 0;
+}
+
+// Unused
+const char *sub_8011BAC(void)
+{
+ return gNotMountText;
+}
+
+// Unused
+void UnusedHang(void)
+{
+ Hang();
+}
+
+void Log(u8 *buffer, const char *text, ...)
+{
+ va_list vArgv;
+ va_start(vArgv, text);
+ va_end(vArgv);
+}
+
+// Unused
+void sub_8011BC8(u32 r0, u32 r1, u32 r2, ...)
+{
+ va_list vArgv;
+ va_start(vArgv, r2);
+ va_end(vArgv);
+}
+
+void nullsub_29()
+{
+}
+
+void nullsub_30()
+{
+}
+
+void nullsub_31()
+{
+}
+
+void nullsub_32()
+{
+}
+
+void FatalErrorHang()
+{
+ Hang();
+}
diff --git a/src/fatal_system.c b/src/fatal_system.c
deleted file mode 100644
index 31c430e..0000000
--- a/src/fatal_system.c
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <stdarg.h>
-#include <stdio.h>
-#include "gba/gba.h"
-#include "config.h"
-
-extern const char gNotMountText;
-extern void Hang();
-
-void FatalErrorFormatMessage(const char *text, ...)
-{
- char bufPrint[0x100];
- va_list vArgv;
- va_start(vArgv, text);
- vsprintf(bufPrint, text, vArgv);
- va_end(vArgv);
-}
-
-
-void sub_8011B88(const char *text, ...)
-{
- char bufPrint[0x100];
- va_list vArgv;
- va_start(vArgv, text);
- vsprintf(bufPrint, text, vArgv);
- va_end(vArgv);
-}
-
-void nullsub_28(void)
-{
-}
-
-u32 sub_8011BA4(void)
-{
- return 0;
-}
-
-// Unused
-u32 sub_8011BA8(void)
-{
- return 0;
-}
-
-// Unused
-const char *sub_8011BAC(void)
-{
- return &gNotMountText;
-}
-
-// Unused
-void UnusedHang(void)
-{
- Hang();
-}
-
-void Log(u8 *buffer, const char *text, ...)
-{
- va_list vArgv;
- va_start(vArgv, text);
- va_end(vArgv);
-}
-
-// Unused
-void sub_8011BC8(u32 r0, u32 r1, u32 r2, ...)
-{
- va_list vArgv;
- va_start(vArgv, r2);
- va_end(vArgv);
-}
-
-void nullsub_29()
-{
-}
-
-void nullsub_30()
-{
-}
-
-void nullsub_31()
-{
-}
-
-void nullsub_32()
-{
-}
-
-void FatalErrorHang()
-{
- Hang();
-}
diff --git a/src/friend_area.c b/src/friend_area.c
index 445a1cf..8435bb1 100644
--- a/src/friend_area.c
+++ b/src/friend_area.c
@@ -18,14 +18,6 @@ struct unkStruct_203B45C
u8 unk29[0x2f];
};
-struct unkFriendAreaStruct
-{
- // size: 0x18
- u32 unk0;
- u32 unk4;
- u32 padding[4];
-};
-
extern struct unkStruct_203B45C gUnknown_203B45C[];
extern bool8 *gFriendAreas;
@@ -622,75 +614,20 @@ void sub_8092558(u8 *buffer, u8 index)
sub_800D158(buffer, &gUnknown_81098A4, gFriendAreaNames[index]);
}
-#ifdef NONMATCHING
void sub_8092578(u8 *buffer, u8 index, u8 r2)
{
// I think this is when we buy the friend area from wigglytuff
- struct unkFriendAreaStruct temp;
+ u32 temp[5];
if(r2)
{
- sub_8090FEC(gFriendAreaSettings[index].price, &(temp.unk4), 1);
- // TODO: There's some stack storage here in the middle calling this func
- // add r0, sp, 0x4
- // str r0, [sp]
- //temp.unk0 = temp.unk4;
- sub_800D158(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96);
+ sub_8090FEC(gFriendAreaSettings[index].price, (&temp[0]), 1);
+ sub_800D158(buffer, &gUnknown_81098AC, gFriendAreaNames[index], 96, temp);
}
else
{
strcpy(buffer, gFriendAreaNames[index]);
}
}
-#else
-NAKED void sub_8092578(u8 *buffer, u8 index, u8 r2)
-{
- asm_unified("\tpush {r4,r5,lr}\n"
- "\tsub sp, 0x18\n"
- "\tadds r5, r0, 0\n"
- "\tlsls r1, 24\n"
- "\tlsrs r4, r1, 24\n"
- "\tlsls r2, 24\n"
- "\tcmp r2, 0\n"
- "\tbeq _080925C0\n"
- "\tldr r0, _080925B4\n"
- "\tlsls r1, r4, 3\n"
- "\tadds r0, 0x4\n"
- "\tadds r1, r0\n"
- "\tldr r0, [r1]\n"
- "\tadd r1, sp, 0x4\n"
- "\tmovs r2, 0x1\n"
- "\tbl sub_8090FEC\n"
- "\tldr r1, _080925B8\n"
- "\tldr r2, _080925BC\n"
- "\tlsls r0, r4, 2\n"
- "\tadds r0, r2\n"
- "\tldr r2, [r0]\n"
- "\tadd r0, sp, 0x4\n"
- "\tstr r0, [sp]\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r3, 0x60\n"
- "\tbl sub_800D158\n"
- "\tb _080925CE\n"
- "\t.align 2, 0\n"
-"\t_080925B4: .4byte gFriendAreaSettings\n"
-"\t_080925B8: .4byte gUnknown_81098AC\n"
-"\t_080925BC: .4byte gFriendAreaNames\n"
-"\t_080925C0:\n"
- "\tldr r0, _080925D8\n"
- "\tlsls r1, r4, 2\n"
- "\tadds r1, r0\n"
- "\tldr r1, [r1]\n"
- "\tadds r0, r5, 0\n"
- "\tbl strcpy\n"
-"\t_080925CE:\n"
- "\tadd sp, 0x18\n"
- "\tpop {r4,r5}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
-"\t_080925D8: .4byte gFriendAreaNames");
-}
-#endif
u32 GetFriendAreaDescription(u8 index)
{
diff --git a/src/friend_area_1.c b/src/friend_area_1.c
index ae04cdf..9a40e2c 100644
--- a/src/friend_area_1.c
+++ b/src/friend_area_1.c
@@ -17,10 +17,8 @@ u32 sub_80927A8(u32 r0, u32 r1)
sub_809486C(temp, r0, r1);
for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
{
- // TODO moves into R1 for the load else it matches
- if(!gFriendAreas[counter])
- temp[4] = gFriendAreas[counter];
- else
+ // TODO fix one line diff of storing into temp[4]
+ if(gFriendAreas[counter])
temp[4] = -1;
sub_809488C(temp, &(temp[4]), 1);
}
diff --git a/src/music.c b/src/music.c
index 8f02775..701fd3f 100644
--- a/src/music.c
+++ b/src/music.c
@@ -32,7 +32,7 @@ bool8 sub_800CAAC(u32);
bool8 sub_800CACC(u32);
u16 sub_800CAE0(u16);
-void sub_800C93C(void)
+void StopBGMusicVSync(void)
{
bool8 interrupt_flag;
u16 temp;
@@ -50,7 +50,7 @@ void sub_800C93C(void)
{
if(gBGMusicPlayerState == 2)
{
- gUnknown_202D694 = gUnknown_202D690;
+ gUnknown_202D694 = 0;
}
else if(gBGMusicPlayerState == 1)
{
@@ -68,7 +68,7 @@ void sub_800C93C(void)
}
}
-void sub_800C9CC(void)
+void StartBGMusicVSync(void)
{
bool8 interrupt_flag = DisableInterrupts();
m4aSoundVSyncOn();
diff --git a/src/music_pre.c b/src/music_pre.c
index 42a8cb0..5c0589a 100644
--- a/src/music_pre.c
+++ b/src/music_pre.c
@@ -11,13 +11,17 @@ extern void SoundBiasSet();
extern void SetInterruptFlag(u16);
extern void nullsub_25();
extern void nullsub_18();
+extern void UpdateSound();
+extern void UpdateInput();
extern void sub_800C298(u16 r0);
typedef void (*IntrCallback)(void);
extern IntrCallback gUnknown_202D5F0[];
+extern struct MusicPlayerInfo gUnknown_20008F0; // BGM??
extern u32 gUnknown_203B0A0;
+extern u32 gUnknown_203B0A4;
extern u16 gBGMusicPlayerState;
extern u16 gCurrentBGSong;
extern u16 gUnknown_202D68C;
@@ -33,20 +37,19 @@ extern u8 gUnknown_203B09A;
struct unkStruct_3000FD8
{
u16 unk0;
- u16 unk2;
+ u16 songIndex;
u16 unk4;
u8 unk6;
- u8 padding;
};
extern struct unkStruct_3000FD8 gUnknown_3000FD8[8];
extern u8 gUnknown_202D7FE;
extern u16 gUnknown_202D7FC;
-extern struct BGControlStruct gUnknown_202D698;
-extern struct BGControlStruct gUnknown_202D6A0;
-extern struct BGControlStruct gUnknown_202D6A8;
-extern struct BGControlStruct gUnknown_202D6B0;
+extern struct BGControlStruct gBG0Control;
+extern struct BGControlStruct gBG1Control;
+extern struct BGControlStruct gBG2Control;
+extern struct BGControlStruct gBG3Control;
void sub_800BF80(void);
void xxx_update_bg_sound_input(void);
@@ -219,18 +222,18 @@ void UpdateBGControlRegisters(void)
BG[3] = 3;
}
- REG_BG0HOFS = gUnknown_202D698.hofs;
- REG_BG0VOFS = gUnknown_202D698.vofs;
- REG_BG1HOFS = gUnknown_202D6A0.hofs;
- REG_BG1VOFS = gUnknown_202D6A0.vofs;
- REG_BG2HOFS = gUnknown_202D6A8.hofs;
- REG_BG2VOFS = gUnknown_202D6A8.vofs;
- REG_BG3HOFS = gUnknown_202D6B0.hofs;
- REG_BG3VOFS = gUnknown_202D6B0.vofs;
+ REG_BG0HOFS = gBG0Control.hofs;
+ REG_BG0VOFS = gBG0Control.vofs;
+ REG_BG1HOFS = gBG1Control.hofs;
+ REG_BG1VOFS = gBG1Control.vofs;
+ REG_BG2HOFS = gBG2Control.hofs;
+ REG_BG2VOFS = gBG2Control.vofs;
+ REG_BG3HOFS = gBG3Control.hofs;
+ REG_BG3VOFS = gBG3Control.vofs;
REG_BG0CNT = BG[0] | 0xB0 << 6;
REG_BG1CNT = BG[1] | 0xB4 << 6;
- if(gUnknown_202D6A8.unk2 == 0x80 << 8)
+ if(gBG2Control.unk2 == 0x80 << 8)
{
REG_BG2CNT = BG[2] | 0x2e08;
}
@@ -276,7 +279,7 @@ void sub_800BD08(void)
while(counter >= 0)
{
preload->unk0 = zero2;
- preload->unk2 = 0x3e5;
+ preload->songIndex = 0x3e5;
preload->unk4 = zero2;
preload->unk6 = zero;
counter--;
@@ -449,3 +452,340 @@ u16 GetCurrentBGSong(void)
{
return gCurrentBGSong;
}
+
+#ifdef NONMATCHING
+void sub_800C074(u16 SongIndex,u16 param_2)
+{
+ bool8 interrupt_flag;
+ u16 msVar;
+ struct unkStruct_3000FD8 *preload;
+
+ if (SongIndex == 0x3e5)
+ return;
+ if (0x100 < param_2)
+ param_2 = 0x100;
+
+ if (sub_800CACC(SongIndex))
+ {
+ msVar = sub_800CAE0(SongIndex);
+ if (msVar == 1) {
+ interrupt_flag = DisableInterrupts();
+ gUnknown_202D68E = SongIndex;
+ if(gUnknown_202D690 == 0)
+ {
+ if (gCurrentBGSong != 999)
+ {
+ if ((u16)(gBGMusicPlayerState - 1U) < 2)
+ {
+ gUnknown_202D690 = msVar;
+ gUnknown_202D692 = 16;
+ gUnknown_202D694 = 0;
+ m4aMPlayFadeOutTemporarily(&gUnknown_20008F0,1);
+ }
+ else
+ {
+ if (gBGMusicPlayerState == 3)
+ gUnknown_202D690 = 2;
+ else
+ {
+ gUnknown_202D690 = 3;
+ m4aMPlayStop(&gUnknown_20008F0);
+ m4aSongNumStart(gUnknown_202D68E);
+ }
+ }
+ }
+ }
+ else
+ {
+ if (1 < (u16)(gUnknown_202D690 - 1U))
+ {
+ m4aMPlayStop(&gUnknown_20008F0);
+ m4aSongNumStart(gUnknown_202D68E);
+ gUnknown_202D690 = 3;
+ }
+ }
+ switch(gCurrentBGSong)
+ {
+ case 26: // 0x1A
+ case 27: // 0x1B
+ case 28: // 0x1C
+ case 29: // 0x1D
+ case 30: // 0x1E
+ case 31: // 0x1F
+ case 34: // 0x22
+ case 35: // 0x23
+ case 37: // 0x25
+ case 38: // 0x26
+ case 117: // 0x75
+ case 118: // 0x76
+ case 119: // 0x77
+ case 122: // 0x7A
+ case 127: // 0x7F
+ gUnknown_202D694 = 1;
+ break;
+ default:
+ break;
+ }
+ if (interrupt_flag)
+ EnableInterrupts();
+ }
+ else
+ {
+ nullsub_20(SongIndex);
+ }
+ }
+ else
+ {
+ if (!sub_800CAAC(SongIndex))
+ return;
+ msVar = sub_800CAE0(SongIndex);
+ preload = &gUnknown_3000FD8[msVar]; // need to load this before comparison to match
+ if (msVar <= 1)
+ nullsub_20(SongIndex);
+ else
+ {
+ interrupt_flag = DisableInterrupts();
+ m4aSongNumStart(SongIndex);
+ preload->unk0 = 1;
+ preload->songIndex = SongIndex;
+ // TODO fix this comparison
+ // Generates eor/neg/lsr
+ preload->unk6 = param_2 != 0x100;
+ preload->unk4 = param_2;
+ if (interrupt_flag)
+ 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 sub_800CAE0\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 gUnknown_20008F0\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 gUnknown_20008F0\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 gUnknown_20008F0\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 sub_800CAE0\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)
+{
+ bool8 interrupt_flag;
+ u16 msVar;
+ struct MusicPlayerInfo *info;
+ struct unkStruct_3000FD8 *preload;
+
+ if (256 < volume) {
+ volume = 256;
+ }
+
+ if ((!sub_800CACC(songIndex)) && (sub_800CAAC(songIndex))) {
+ msVar = sub_800CAE0(songIndex);
+ info = gMPlayTable[msVar].info;
+ preload = &gUnknown_3000FD8[msVar];
+ if (msVar > 1) {
+ interrupt_flag = DisableInterrupts();
+ if (preload->songIndex == songIndex) {
+ m4aMPlayVolumeControl(info, 0xf, volume);
+ }
+ if (interrupt_flag)
+ EnableInterrupts();
+ }
+ }
+}
diff --git a/src/save_mid.c b/src/save_mid.c
index 604c98d..0c4531c 100644
--- a/src/save_mid.c
+++ b/src/save_mid.c
@@ -75,7 +75,7 @@ extern void MemoryFree(void* a);
extern void MemoryFill8(u8 *dest, u8 value, s32 size);
extern void sub_8011830(void);
extern s32 WriteFlashData(s32 sector, u8 *src, s32 size);
-extern void sub_8011854(void);
+extern void xxx_call_start_bg_music(void);
extern u32 *sub_809769C(void);
u32 *sub_8011C4C(void);
extern void sub_80958E4(u8 *a, u32 b);
@@ -125,7 +125,7 @@ u32 sub_8012240(void)
MemoryFill8((u8 *)r5, 0xFF, 0x4);
sub_8011830();
temp = WriteFlashData(0x1F, (u8 *)r5, sizeof(struct unk_struct));
- sub_8011854();
+ xxx_call_start_bg_music();
MemoryFree(r5);
if(temp != 0)
{