From 4886c9f7dcfbaea24ff56e47c81e8af027b86c98 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Wed, 27 Jan 2021 18:46:39 -0600 Subject: decomp, label, doc, repeat --- src/code_800558C.c | 49 +------ src/code_800C9CC.c | 42 +++--- src/code_800D090.c | 60 ++++++++- src/code_80118A4.c | 118 ++++------------ src/code_80118A4_1.c | 55 -------- src/code_808EAB0.c | 8 +- src/code_8097F40.c | 60 +++++++-- src/debug.c | 198 +++++++++++++++++++++++++++ src/fatal_system.c | 89 ------------ src/friend_area.c | 69 +--------- src/friend_area_1.c | 6 +- src/music.c | 6 +- src/music_pre.c | 372 ++++++++++++++++++++++++++++++++++++++++++++++++--- src/save_mid.c | 4 +- 14 files changed, 729 insertions(+), 407 deletions(-) create mode 100644 src/debug.c delete mode 100644 src/fatal_system.c (limited to 'src') 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 #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 +#include #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 +#include +#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 -#include -#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) { -- cgit v1.2.3