diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/code_2.c | 5 | ||||
-rw-r--r-- | src/code_80118A4.c | 23 | ||||
-rw-r--r-- | src/code_803C190.c | 34 | ||||
-rw-r--r-- | src/code_8040094.c | 47 | ||||
-rw-r--r-- | src/code_8048480.c | 31 | ||||
-rw-r--r-- | src/code_80521D0_1.c | 200 | ||||
-rw-r--r-- | src/code_8094F88.c | 24 | ||||
-rw-r--r-- | src/event_flag.c | 58 | ||||
-rw-r--r-- | src/fatal_system.c | 26 | ||||
-rw-r--r-- | src/main.c | 12 | ||||
-rw-r--r-- | src/more_input.c | 132 | ||||
-rw-r--r-- | src/music.c | 38 | ||||
-rw-r--r-- | src/music_pre.c | 225 | ||||
-rw-r--r-- | src/save.c | 2 | ||||
-rw-r--r-- | src/save1.c | 72 |
15 files changed, 735 insertions, 194 deletions
diff --git a/src/code_2.c b/src/code_2.c index fcec96d..ef469c8 100644 --- a/src/code_2.c +++ b/src/code_2.c @@ -3,6 +3,8 @@ #include "friend_area.h" #include "input.h" #include "bg.h" +#include "music.h" +#include "constants/bg_music.h" extern void InitHeap(void); extern void NDS_DebugInit(void); @@ -39,7 +41,6 @@ extern void sub_800CDA8(u32); extern void sub_800641C(u32, u32, u32); extern void LoadTitleScreen(void); extern void SetBGPaletteBufferColorRGB(s32, u8 *, s32, u8 *); -extern void sub_800BDFC(u32); extern void sub_80095CC(u32, u32); extern void InitMainMenu(void); extern void sub_8012468(void); @@ -149,7 +150,7 @@ void GameLoop(void) sub_8012558(); } tmp3 = 1; - sub_800BDFC(8); + StartNewBGM(MUS_LOADING_SCREEN); flag = TRUE; sub_80095CC(0, 20); InitMainMenu(); diff --git a/src/code_80118A4.c b/src/code_80118A4.c index 73cb8b2..c4022da 100644 --- a/src/code_80118A4.c +++ b/src/code_80118A4.c @@ -1,22 +1,19 @@ #include "global.h" +#include "music.h" +#include "constants/bg_music.h" void sub_8011924(void); void nullsub_26(void); extern u8 sub_80023E4(u8); -extern void sub_800BDFC(u16 r0); -extern void FadeInNewBGM(u16 r0, u16 r1); extern void sub_800BF48(u16 r0); extern void sub_800BF80(void); extern void sub_800BFD0(u16 r0); extern void sub_800C3F8(u16 r0, u16 r1); extern void sub_801199C(u16 r0); -extern u16 sub_800C068(); extern void sub_800C074(u16 r0, u16 r1); extern void sub_800C298(u16 r0); -extern void sub_800C93C(); extern u8 sub_800C5D0(u16 r0); -extern void sub_800C9CC(); extern void nullsub_27(void); extern void nullsub_29(void); @@ -49,12 +46,12 @@ void sub_8011760(void) { if(sub_80023E4(0xD) != 0) { - sub_800BDFC(0x13); + StartNewBGM(MUS_WORLD_CALAMITY); return; } if(sub_80023E4(0xC) != 0) { - sub_800BDFC(0x7); // Pokemon Square Theme + StartNewBGM(MUS_POKEMON_SQUARE); } } @@ -62,10 +59,10 @@ void sub_801178C(void) { if(sub_80023E4(0xD) != 0) { - sub_800BDFC(0x13); + StartNewBGM(MUS_WORLD_CALAMITY); return; } - sub_800BDFC(0x7); // Pokemon Square Theme + StartNewBGM(MUS_POKEMON_SQUARE); } void sub_80117AC(void) @@ -147,12 +144,12 @@ void sub_80118C4(u16 r0) sub_800C3F8(0x3e5, r0); } -void sub_80118F0(u16 r0) +void xxx_call_start_new_bgm(u16 songIndex) { - sub_800BDFC(r0); + StartNewBGM(songIndex); } -void sub_8011900(u16 songIndex, u16 speed) +void xxx_call_fade_in_new_bgm(u16 songIndex, u16 speed) { FadeInNewBGM(songIndex, speed); } @@ -175,7 +172,7 @@ void sub_8011930(u16 r0) u32 sub_8011940(u16 r0) { u32 temp; - temp = sub_800C068(); + temp = GetCurrentBGSong(); if(r0 == 999) return temp != 999; diff --git a/src/code_803C190.c b/src/code_803C190.c new file mode 100644 index 0000000..26565c0 --- /dev/null +++ b/src/code_803C190.c @@ -0,0 +1,34 @@ +#include "global.h" + +struct unkStruct_80EBA18 +{ + u32 unk0; + u32 unk4; +}; + +extern struct unkStruct_80EBA18 gUnknown_80EBA18[]; +extern s32 sub_80908D8(u32); + +u32 sub_803C190(u8 r0) +{ + return gUnknown_80EBA18[r0].unk0; +} + + +u32 sub_803C1A0(u8 r0) +{ + return gUnknown_80EBA18[r0].unk4; +} + +s32 sub_803C1B4(s32 r0, u8 r1) +{ + s32 temp; + temp = sub_80908D8(r0); + if(r1 == 2) + { + temp += 2; + } + if(temp > 0xF) + temp = 0xF; + return temp; +} diff --git a/src/code_8040094.c b/src/code_8040094.c index 97458c9..f322fa9 100644 --- a/src/code_8040094.c +++ b/src/code_8040094.c @@ -1,8 +1,27 @@ #include "global.h" #include "time.h" +#include "file_system.h" + +struct unkStruct_203B418 +{ + u8 padding[0x181FB]; + u32 unk181FC; + u32 unk18200; + u32 unk18204; + u32 unk18208; + u32 unk1820C; + u32 unk18210; + u8 padding2[3]; + u8 unk18217; +}; -extern u8 *gUnknown_203B418; extern struct PlayTimeStruct *gUnknown_203B47C; +extern struct unkStruct_203B418 *gUnknown_203B418; +extern s32 gUnknown_80F6568[]; +extern u8 gUnknown_202EE01; +extern const char gUnknown_80F6604; // "zmappat" +extern struct FileArchive gUnknown_83B0000; +extern struct OpenedFile *gUnknown_202EE04; extern void sub_803F7BC(void); extern void sub_80060EC(void); @@ -14,7 +33,7 @@ extern void sub_8011860(void); void sub_8040094(u8 r0) { - gUnknown_203B418[0x18217] = r0; + gUnknown_203B418->unk18217 = r0; sub_803F7BC(); sub_80060EC(); IncrementPlayTime(gUnknown_203B47C); @@ -24,3 +43,27 @@ void sub_8040094(u8 r0) sub_8083F58(); sub_8011860(); } + +void sub_80400D4(void) +{ + s32 temp; + temp = gUnknown_203B418->unk18200; + if(temp == 0) + return; + if(temp > 0x1E) + temp = 0x1F; + gUnknown_203B418->unk181FC = gUnknown_80F6568[temp]; + gUnknown_203B418->unk18200--; + if(gUnknown_203B418->unk18200 == 0) + gUnknown_203B418->unk18200 = gUnknown_203B418->unk18204; +} + +void sub_8040124(void) +{ + gUnknown_202EE01 = 0; +} + +void sub_8040130(void) +{ + gUnknown_202EE04 = OpenFileAndGetFileDataPtr(&gUnknown_80F6604, &gUnknown_83B0000); +} diff --git a/src/code_8048480.c b/src/code_8048480.c index aac957a..8ede564 100644 --- a/src/code_8048480.c +++ b/src/code_8048480.c @@ -1,13 +1,25 @@ #include "global.h" +struct unkDungeon_8041D5C +{ + u8 padding[0x70]; + u8 *unk70[100]; +}; + +extern u32 gUnknown_80F89F4; +extern u32 gUnknown_202DF98; +extern u32 gUnknown_80FB580; + extern void sub_807D148(u32 r0, u32 r1, u32 r2, u32 r3); extern void sub_8075FCC(void); extern void sub_8077AE4(u32 r0, u32 r1, u32 r2); extern void sub_8072008(u32 r0, u32 r1, u32 r2, u8 r3); extern void sub_8076D10(void); -extern void sub_80522F4(u32 r0, u32 r1, u32 r2); extern void sub_807232C(u32 r0, u32 r1, u32 r2); -extern u32 gUnknown_80F89F4; + +extern void sub_8045B94(u32 *r0, struct unkDungeon_8041D5C *r1, u32); +extern void sub_807A290(u32); +extern void sub_80522F4(u32 r0, struct unkDungeon_8041D5C *r1, u32); void sub_8048480(u32 r0, u32 r1) { @@ -36,7 +48,7 @@ void sub_80484BC(void) sub_8076D10(); } -void sub_80484C8(u32 r0, u32 r1) +void sub_80484C8(u32 r0, struct unkDungeon_8041D5C *r1) { sub_80522F4(r0, r1, gUnknown_80F89F4); } @@ -45,3 +57,16 @@ void sub_80484DC(u32 r0, u32 r1) { sub_807232C(r0, r1, 1); } + +void sub_80484E8(u32 r0, struct unkDungeon_8041D5C *r1) +{ + u8 *temp; + temp = r1->unk70[0]; + if(temp[0xAC] == 1) + { + sub_807A290(r0); + return; + } + sub_8045B94(&gUnknown_202DF98, r1, 0); + sub_80522F4(r0, r1, gUnknown_80FB580); +} diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c new file mode 100644 index 0000000..dd6dc7c --- /dev/null +++ b/src/code_80521D0_1.c @@ -0,0 +1,200 @@ +#include "global.h" + +extern s16 *sub_8085480(void); +extern u32 sub_8085680(u32); +extern u32 gUnknown_202E038; +extern u8* gUnknown_203B418; + +extern u32 gUnknown_8106778; +extern u32 gUnknown_81067BC; +extern u32 gUnknown_81067E0; +extern u32 gUnknown_8106834; +extern u32 gUnknown_810688C; +extern u32 gUnknown_81068D0; +extern u32 gUnknown_8106918; +extern u32 gUnknown_8106934; + +extern void sub_8086A3C(void); +extern void sub_808D8BC(u32 *r0, u32 r1); +extern void sub_8083E88(u32); +extern void sub_80854D4(void); +extern void sub_80855E4(void *); +extern void sub_8085930(u32); +extern void sub_8068FE0(u32, u32, u32); +extern void sub_8085860(s16 r0, u32 r1); + +extern void sub_803E708(u32, u32); +extern void sub_8052910(u32 *r0); +extern void sub_8086448(void); +extern void sub_8086598(void); +extern void sub_808696C(); +extern void sub_80862BC(u32); +extern void sub_8083E38(u32); +extern void sub_806CDD4(u32, u32, u32); +extern void sub_80869E4(u32, u32, u32, u32); +extern void sub_806CE68(u32, u32); +extern void sub_804539C(u32, u32, u32); +extern void sub_803E46C(u32); +extern void sub_8042B0C(u32); +extern void sub_8085918(u32, u32); + +void sub_808C9C4(void) +{ + s16 *array; + u32 temp_2; + + array = sub_8085480(); + temp_2 = sub_8085680(7); + sub_8083E88(0x72); + sub_80854D4(); + sub_8085930(0x4); + sub_80855E4(sub_8086A3C); + sub_8085918(temp_2, 0); + sub_8085860(array[2], array[3] - 3); + sub_808D8BC(&gUnknown_202E038, 0x14d); +} + +void sub_808CA1C(void) +{ + u32 temp; + s32 counter; + + temp = sub_8085680(7); + sub_808696C(); + sub_803E708(0xA, 0x46); + sub_8052910(&gUnknown_8106778); + sub_803E708(0xA, 0x46); + sub_80869E4(temp, 4, 2, 4); + sub_803E708(0xA, 0x46); + sub_8052910(&gUnknown_81067BC); + sub_803E708(0xA, 0x46); + sub_8086448(); + sub_8086598(); + sub_803E708(0x20, 0x46); + sub_80862BC(temp); + sub_803E708(0x20, 0x46); + sub_80869E4(temp, 4, 2, 0); + sub_8052910(&gUnknown_81067E0); + sub_803E708(0xA, 0x46); + sub_8083E38(0x1c7); + sub_806CDD4(temp, 0xA, 0); + sub_803E708(0x14, 0x46); + sub_806CE68(temp, 0); + sub_803E708(0x4, 0x46); + sub_8083E38(0x1c7); + sub_806CDD4(temp, 0xA, 0); + sub_803E708(0x14, 0x46); + sub_8052910(&gUnknown_8106834); + sub_803E708(0xA, 0x46); + sub_806CDD4(temp, 0, 0); + for(counter = 0x17; counter >= 0; counter--) + { + sub_804539C(temp, 0, 0x80 << 1); + sub_803E46C(0x46); + } + sub_806CE68(temp, 0); + sub_803E708(0x20, 0x46); + sub_8042B0C(temp); + sub_8068FE0(temp, 0x87 << 2, 0); + gUnknown_203B418[4] = 1; + gUnknown_203B418[0x11] = 4; +} + +void sub_808CB5C(void) +{ + s16 *array; + u32 temp_2; + + array = sub_8085480(); + temp_2 = sub_8085680(7); + sub_8083E88(0x72); + sub_80854D4(); + sub_8085930(0x4); + sub_8068FE0(temp_2, 0x87 << 2, 0); + sub_8085860(array[2], array[3]); + sub_808D8BC(&gUnknown_202E038, 0x14d); +} + +void nullsub_101(void) +{ +} + +void sub_808CBB0(void) +{ + s16 *array; + u32 temp_2; + + array = sub_8085480(); + temp_2 = sub_8085680(0x1F); + sub_8083E88(0x72); + sub_80854D4(); + sub_8085930(4); + sub_80855E4(sub_8086A3C); + sub_8085918(temp_2, 0); + sub_8085860(array[2], array[3] - 3); + sub_808D8BC(&gUnknown_202E038, 0x82 << 1); +} + +void sub_808CC04(void) +{ + u32 temp; + s32 counter; + + temp = sub_8085680(0x1F); + sub_808696C(); + sub_803E708(0xA, 0x46); + sub_8052910(&gUnknown_810688C); + sub_803E708(0xA, 0x46); + sub_80869E4(temp, 4, 2, 4); + sub_803E708(0xA, 0x46); + sub_8052910(&gUnknown_81068D0); + sub_803E708(0xA, 0x46); + sub_8086448(); + sub_8086598(); + sub_803E708(0x20, 0x46); + sub_80862BC(temp); + sub_803E708(0x20, 0x46); + sub_80869E4(temp, 4, 2, 0); + sub_8052910(&gUnknown_8106918); + sub_803E708(0xA, 0x46); + sub_8083E38(0x1c7); + sub_806CDD4(temp, 0xA, 0); + sub_803E708(0x14, 0x46); + sub_806CE68(temp, 0); + sub_803E708(0x4, 0x46); + sub_8083E38(0x1c7); + sub_806CDD4(temp, 0xA, 0); + sub_803E708(0x14, 0x46); + sub_8052910(&gUnknown_8106934); + sub_803E708(0xA, 0x46); + sub_806CDD4(temp, 0, 0); + for(counter = 0x17; counter >= 0; counter--) + { + sub_804539C(temp, 0, 0x80 << 1); + sub_803E46C(0x46); + } + sub_806CE68(temp, 0); + sub_803E708(0x20, 0x46); + sub_8042B0C(temp); + sub_8068FE0(temp, 0x87 << 2, 0); + gUnknown_203B418[4] = 1; + gUnknown_203B418[0x11] = 4; + +} + +void sub_808CD44(void) +{ + s16 *array; + u32 temp_2; + + array = sub_8085480(); + temp_2 = sub_8085680(0x1F); + sub_8083E88(0x72); + sub_80854D4(); + sub_8085930(0x4); + sub_80855E4(sub_8086A3C); + sub_8068FE0(temp_2, 0x87 << 2, 0); + sub_8085860(array[2], array[3] - 3); + sub_808D8BC(&gUnknown_202E038, 0x82 << 1); +} + diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 95854d3..54da9b2 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -14,8 +14,8 @@ extern u32 *gUnknown_203B488; extern u32 *gUnknown_203B48C; -extern void sub_809488C(u32, u32, u32); -extern void sub_8094924(u32, u32, u32); +extern void sub_809488C(u32 *r0, u32 *r1, u32); +extern void sub_8094924(u32 *r0, u32 *r1, u32); // Forward Declaration @@ -91,20 +91,20 @@ void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinut } } -void sub_8095044(u32 r0) +void sub_8095044(u32 *r0) { - sub_809488C(r0, (u32)(gUnknown_203B47C) + 4, 0x6); - sub_809488C(r0, (u32)(gUnknown_203B47C) + 3, 0x6); - sub_809488C(r0, (u32)(gUnknown_203B47C) + 2, 0x6); - sub_809488C(r0, (u32)(gUnknown_203B47C), 0xE); + sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->frames)), 6); + sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->seconds)), 6); + sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->minutes)), 6); + sub_809488C(r0, (u32 *)(&(gUnknown_203B47C->hours)), 14); } -void sub_8095080(u32 r0) +void sub_8095080(u32 *r0) { - sub_8094924(r0, (u32)(gUnknown_203B47C) + 4, 0x6); - sub_8094924(r0, (u32)(gUnknown_203B47C) + 3, 0x6); - sub_8094924(r0, (u32)(gUnknown_203B47C) + 2, 0x6); - sub_8094924(r0, (u32)(gUnknown_203B47C), 0xE); + sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->frames)), 6); + sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->seconds)), 6); + sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->minutes)), 6); + sub_8094924(r0, (u32 *)(&(gUnknown_203B47C->hours)), 14); } void sub_80950BC(void) diff --git a/src/event_flag.c b/src/event_flag.c index 501b1af..a19d3db 100644 --- a/src/event_flag.c +++ b/src/event_flag.c @@ -1,41 +1,39 @@ #include "global.h" +#include "event_flag.h" #include "memory.h" - -struct UnkEventStruct -{ - /* 0x0 */ u32 unk0; - /* 0x4 */ s16 unk4; - /* 0x6 */ u16 unk6; - /* 0x8 */ u16 unk8; - /* 0xA */ s16 unkA; -}; - -struct UnkEventStruct2 -{ - /* 0x0 */ u32 unk0; - /* 0x4 */ u32 *unk4; - /* 0x8 */ u16 unk8; - /* 0xA */ s16 unkA; -}; +#include "friend_area.h" extern void sub_800226C(u8 r0, u8 r1, u32* r2, u8 u3); -extern void sub_800160C(struct UnkEventStruct2 *r0, u32 r1, u32 r2); +extern void sub_800160C(struct UnkEventStruct *r0, u32 r1, u32 r2); +extern u8 sub_8002658(s32); extern u8 gUnknown_2000A88; +bool8 sub_80026CC(s16 r0) +{ + return GetFriendAreaStatus(sub_8002658(r0)); +} -// TODO fix stack allocation from 0xC to 0x8 to make this match -//u8 sub_8002718(struct UnkEventStruct *r0) -//{ -// struct UnkEventStruct2 temp; -// sub_800160C(&temp, 0, 0); -// MemoryCopy8(&gUnknown_2000A88, (u8 *)r0, (0x80 << 3)); -// -// // TODO fix this comparison to make it match -// if(temp.unkA != *(temp.unk4)) -// return 0; -// return 1; -//} +void sub_80026E8(s16 r0) +{ + UnlockFriendArea(sub_8002658(r0)); +} + +bool8 sub_8002700(void *r0) +{ + MemoryCopy8(r0, &gUnknown_2000A88, 0x80 << 3); + return 1; +} + +bool8 sub_8002718(u8 *r0) +{ + struct UnkEventStruct temp; + sub_800160C(&temp, 0, 0); + MemoryCopy8(&gUnknown_2000A88, r0, 0x80 << 3); + if (temp.unk0[5] != temp.unk4[0]) + return 0; + return 1; +} void sub_8002758(u32 *r0) { diff --git a/src/fatal_system.c b/src/fatal_system.c index 2079a38..3d5bb25 100644 --- a/src/fatal_system.c +++ b/src/fatal_system.c @@ -1,8 +1,30 @@ -#include "global.h" +#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) { } @@ -25,7 +47,7 @@ const char *sub_8011BAC(void) } // Unused -void sub_8011BB4(void) +void UnusedHang(void) { Hang(); } @@ -1,19 +1,21 @@ #include "global.h" +#include "crt0.h" #include "random.h" #include "flash.h" #include "text.h" extern char ewram_start[]; -extern u8 gUnknown_202D4B8; -extern void *gUnknown_202D5F0[6]; +typedef void (*IntrCallback)(void); + +extern u8 IntrMain_Buffer[0x120]; +extern IntrCallback gUnknown_202D5F0[6]; extern u16 gUnknown_202D7FC; extern u8 gUnknown_202D7FE; extern u8 gInterruptsEnabled; extern u16 gUnknown_203B0AC; extern s16 gUnknown_203B0AE; extern u32 gIntrTable[]; -extern u32 IntrMain; extern char alt_203B038[]; @@ -226,8 +228,8 @@ void SetInterruptFlag(u16 flag) void InitIntrTable(const u32 *interrupt_table) { CpuCopy32(interrupt_table, &gIntrTable, 0x18); // 0x18 = 0x6 * 4 (0x4f00 is 32 bits) - CpuCopy32(&IntrMain, &gUnknown_202D4B8, 0x120); // 0x120 = 0x48 * 4 (0x4f00 is 32 bits) - INTR_VECTOR = &gUnknown_202D4B8; + CpuCopy32(&IntrMain, &IntrMain_Buffer, 0x120); // 0x120 = 0x48 * 4 (0x4f00 is 32 bits) + INTR_VECTOR = &IntrMain_Buffer; } u32 *sub_800B6E8(u32 r0) diff --git a/src/more_input.c b/src/more_input.c new file mode 100644 index 0000000..9ab4c97 --- /dev/null +++ b/src/more_input.c @@ -0,0 +1,132 @@ +#include "global.h" +#include "input.h" + +struct UnkInputStruct +{ + /* 0x0 */ u8 unk0; + /* 0x1 */ u8 unk1; + /* 0x2 */ u8 unk2; + /* 0x3 */ u8 unk3; + /* 0x4 */ u8 unk4; + /* 0x5 */ u32 unk5; + /* 0x9 */ u32 unk9; + /* 0xD */ u32 unkD; + /* 0x12 */ u32 unk11; + /* 0x16 */ u32 unk15; + /* 0x1A */ u32 unk19; + /* 0x1E */ u32 unk1D; + /* 0x24 */ u32 unk24; + /* 0x28 */ u8 unk28; + /* 0x29 */ u8 a_button; + /* 0x2A */ u8 b_button; + /* 0x2B */ u8 dpad_right; + /* 0x2C */ u8 dpad_left; +}; + + +extern void nullsub_34(struct UnkInputStruct *r0); +extern struct Inputs gRealInputs; +u32 sub_8012AE8(void); + +u32 sub_8012A64(struct UnkInputStruct *r0, u32 r1) +{ + if(r0 == NULL) + { + return sub_8012AE8(); + } + if(r1 != -1) + { + nullsub_34(r0); + } + if(r0->unk1 != 0) + { + r0->unk1 = 0; + return 1; + } + if(r0->unk2 == 0) + { + return sub_8012AE8(); + } + r0->unk2 = r0->unk1; + return 2; +} + +u32 GetKeyPress(struct UnkInputStruct *r0) +{ + if(r0 != NULL) + { + if(r0->a_button != 0) + { + return 1; + } + if(r0->b_button != 0) + { + return 2; + } + if(r0->dpad_left != 0) + { + return 9; + } + if(r0->dpad_right != 0) + { + return 10; + } + } + return sub_8012AE8(); +} + +u32 sub_8012AE8(void) +{ + if ((gRealInputs.held & R_BUTTON) != 0) { + if ((gRealInputs.pressed & A_BUTTON) != 0) { + return 11; + } + if ((gRealInputs.repeated & DPAD_UP) != 0) { + return 12; + } + if ((gRealInputs.repeated & DPAD_DOWN) != 0) { + return 13; + } + if ((gRealInputs.repeated & DPAD_LEFT) != 0) { + return 14; + } + if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { + return 15; + } + if ((gRealInputs.repeated & R_BUTTON) != 0) { + return 6; + } + } + else + { + if ((gRealInputs.pressed & A_BUTTON) != 0) { + return 1; + } + if ((gRealInputs.pressed & B_BUTTON) != 0) { + return 2; + } + if ((gRealInputs.pressed & SELECT_BUTTON) != 0) { + return 3; + } + if ((gRealInputs.pressed & START_BUTTON) != 0) { + return 4; + } + if ((gRealInputs.repeated & DPAD_UP) != 0) { + return 7; + } + if ((gRealInputs.repeated & DPAD_DOWN) != 0) { + return 8; + } + if ((gRealInputs.repeated & DPAD_LEFT) != 0) { + return 9; + } + if ((gRealInputs.repeated & DPAD_RIGHT) != 0) { + return 10; + } + if ((gRealInputs.repeated & L_BUTTON) != 0) { + return 5; + } + } + return 0; +} + diff --git a/src/music.c b/src/music.c index 1017b47..8f02775 100644 --- a/src/music.c +++ b/src/music.c @@ -1,7 +1,6 @@ #include "global.h" #include "m4a.h" - -#define NUM_BG_SONGS 128 +#include "constants/bg_music.h" extern u8 sub_80023E4(u32); extern void sub_80118C4(u16); @@ -15,8 +14,14 @@ extern void Random(); extern void sub_800BA5C(); extern void xxx_update_bg_sound_input(); -extern u16 gUnknown_202D688; -extern u16 gUnknown_202D68A; +// 0 - Only seen it initialized +// 1 - Playing +// 2 - +// 3 - Fade Out? +// 4 - Stopped +extern u16 gBGMusicPlayerState; + +extern u16 gCurrentBGSong; extern u16 gUnknown_202D690; extern u8 gUnknown_202D694; extern u32 gUnknown_203B0B8; @@ -38,23 +43,20 @@ void sub_800C93C(void) interrupt_flag = DisableInterrupts(); if(gUnknown_202D690 == 0) { - if(gUnknown_202D68A != 0x3e7) + if(gCurrentBGSong != 999) { - temp = gUnknown_202D688 - 1; + temp = gBGMusicPlayerState - 1; if(temp <= 1) { - if(gUnknown_202D688 == 2) + if(gBGMusicPlayerState == 2) { gUnknown_202D694 = gUnknown_202D690; } - else + else if(gBGMusicPlayerState == 1) { - if(gUnknown_202D688 == 1) - { - gUnknown_202D694 = 1; - } + gUnknown_202D694 = 1; } - gUnknown_202D688 = 4; + gBGMusicPlayerState = 4; } } } @@ -72,14 +74,14 @@ void sub_800C9CC(void) m4aSoundVSyncOn(); if(gUnknown_202D690 == 0) { - if(gUnknown_202D68A != 0x3e7) + if(gCurrentBGSong != 999) { - if(gUnknown_202D688 == 4) + if(gBGMusicPlayerState == 4) { - gUnknown_202D688 = 1; + gBGMusicPlayerState = 1; if(gUnknown_202D694 != 0) { - m4aSongNumStart(gUnknown_202D68A); + m4aSongNumStart(gCurrentBGSong); } else { @@ -99,6 +101,7 @@ void nullsub_179(void) { } +// Unused u8 sub_800CA38(u32 songIndex) { if(IsBGSong(songIndex)) @@ -190,6 +193,7 @@ void sub_800CB20(void) Random(); } +// Unused u32 sub_800CB50(void) { return gUnknown_203B0B8; diff --git a/src/music_pre.c b/src/music_pre.c index 4260ea1..42a8cb0 100644 --- a/src/music_pre.c +++ b/src/music_pre.c @@ -2,24 +2,33 @@ #include "gba/io_reg.h" #include "m4a.h" #include "bg.h" +#include "music.h" -extern void nullsub_19(void); -extern void nullsub_20(u16 songIndex); extern bool8 EnableInterrupts(void); extern bool8 DisableInterrupts(void); -extern bool8 IsBGSong(u32); +extern void SoundBiasReset(); +extern void SoundBiasSet(); +extern void SetInterruptFlag(u16); +extern void nullsub_25(); +extern void nullsub_18(); extern void sub_800C298(u16 r0); -extern u16 sub_800CAE0(u16); -extern u32 gUnknown_202D5F0[]; -extern u16 gUnknown_202D688; -extern u16 gUnknown_202D68A; +typedef void (*IntrCallback)(void); +extern IntrCallback gUnknown_202D5F0[]; + +extern u32 gUnknown_203B0A0; +extern u16 gBGMusicPlayerState; +extern u16 gCurrentBGSong; extern u16 gUnknown_202D68C; extern u16 gUnknown_202D68E; extern u16 gUnknown_202D690; extern u16 gUnknown_202D692; extern u8 gUnknown_202D694; +extern u8 gUnknown_203B099; +extern u8 gUnknown_203B09B; +extern u32 gUnknown_203B09C; +extern u8 gUnknown_203B09A; struct unkStruct_3000FD8 { @@ -40,6 +49,152 @@ extern struct BGControlStruct gUnknown_202D6A8; extern struct BGControlStruct gUnknown_202D6B0; void sub_800BF80(void); +void xxx_update_bg_sound_input(void); + +void sub_800BA5C(void) +{ + if(gUnknown_203B09A != 0) + { + gUnknown_203B09C++; + xxx_update_bg_sound_input(); + } + gUnknown_203B09A = 1; + gUnknown_203B09B = 0; + gUnknown_203B09C = 0; + nullsub_25(); + + while(REG_VCOUNT > 159){} + + gUnknown_203B099 = 1; + VBlankIntrWait(); + nullsub_18(); +} + +#ifdef NONMATCHING +void xxx_update_bg_sound_input(void) +{ + u8 store; + store = gUnknown_203B09B; + if(gUnknown_203B09B != 0){ + gUnknown_203B09C++; + } + else { + gUnknown_203B09B = 1; + gUnknown_203B09A = store; + gUnknown_203B09C = store; + UpdateBGControlRegisters(); + if(gUnknown_203B099 != 0) + UpdateSound(); + UpdateInput(); + gUnknown_203B099 = store; + gUnknown_203B0A4 = gUnknown_203B0A0; + } +} +#else +NAKED +void xxx_update_bg_sound_input(void) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tldr r1, _0800BACC\n" + "\tldrb r4, [r1]\n" + "\tcmp r4, 0\n" + "\tbeq _0800BAD4\n" + "\tldr r1, _0800BAD0\n" + "\tldr r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tstr r0, [r1]\n" + "\tb _0800BAFE\n" + "\t.align 2, 0\n" +"_0800BACC: .4byte gUnknown_203B09B\n" +"_0800BAD0: .4byte gUnknown_203B09C\n" +"_0800BAD4:\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r1]\n" + "\tldr r0, _0800BB04\n" + "\tstrb r4, [r0]\n" + "\tldr r0, _0800BB08\n" + "\tstr r4, [r0]\n" + "\tbl UpdateBGControlRegisters\n" + "\tldr r5, _0800BB0C\n" + "\tldrb r0, [r5]\n" + "\tcmp r0, 0\n" + "\tbeq _0800BAF0\n" + "\tbl UpdateSound\n" +"_0800BAF0:\n" + "\tbl UpdateInput\n" + "\tstrb r4, [r5]\n" + "\tldr r0, _0800BB10\n" + "\tldr r1, _0800BB14\n" + "\tldr r1, [r1]\n" + "\tstr r1, [r0]\n" +"_0800BAFE:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" +"_0800BB04: .4byte gUnknown_203B09A\n" +"_0800BB08: .4byte gUnknown_203B09C\n" +"_0800BB0C: .4byte gUnknown_203B099\n" +"_0800BB10: .4byte gUnknown_203B0A4\n" +"_0800BB14: .4byte gUnknown_203B0A0"); +} +#endif + +void Timer3Intr(void) +{ + if(gUnknown_202D5F0[4]) + gUnknown_202D5F0[4](); + SetInterruptFlag(INTR_FLAG_TIMER3); +} + +// Unused +u32 sub_800BB34(void) +{ + return gUnknown_203B0A0; +} + +void nullsub_178(void) +{ +} + +// Unused +void sub_800BB44(void) +{ + u16 ie_store; + u16 dispcnt_store; + bool8 interrupt_flag; + + while(REG_KEYINPUT != 0x3ff){} + + interrupt_flag = DisableInterrupts(); + + while(REG_VCOUNT <= 159){} + + dispcnt_store = REG_DISPCNT; + REG_DISPCNT = 0x80; + + *(vu16 *)BG_PLTT = 0x7fff; + + ie_store = REG_IE; + REG_IE = INTR_FLAG_KEYPAD | INTR_FLAG_GAMEPAK; + + REG_KEYCNT = 0x8304; + REG_IME = 1; + + SoundBiasReset(); + asm("swi 0x3"); + SoundBiasSet(); + + REG_IME = 0; + REG_IE = ie_store; + REG_KEYCNT = 0; + REG_DISPCNT = dispcnt_store; + *(vu16 *)BG_PLTT = 0; + + if(interrupt_flag) + EnableInterrupts(); + while(REG_KEYINPUT != 0x3ff){} +} void nullsub_17(void) { @@ -104,9 +259,9 @@ void sub_800BD08(void) m4aSoundInit(); - gUnknown_202D688 = 0; - gUnknown_202D68A = 0x3e7; - gUnknown_202D68C = 0x3e7; + gBGMusicPlayerState = 0; + gCurrentBGSong = 999; + gUnknown_202D68C = 999; gUnknown_202D68E = 0x3e5; gUnknown_202D690 = 0; gUnknown_202D692 = 0; @@ -138,18 +293,18 @@ void sub_800BDDC(void) } -void sub_800BDFC(u16 songIndex) +void StartNewBGM(u16 songIndex) { bool8 interrupt_flag; u16 temp_store; if(!IsBGSong(songIndex)) return; - if(songIndex == 0x3e7) + if(songIndex == 999) return; - if(songIndex == gUnknown_202D68A) + if(songIndex == gCurrentBGSong) { - temp_store = gUnknown_202D688 - 1; + temp_store = gBGMusicPlayerState - 1; if(temp_store <= 1) return; } @@ -159,12 +314,12 @@ void sub_800BDFC(u16 songIndex) return; } interrupt_flag = DisableInterrupts(); - gUnknown_202D68A = songIndex; + gCurrentBGSong = songIndex; gUnknown_202D694 = 1; if(gUnknown_202D690 == 0) { - gUnknown_202D688 = 1; + gBGMusicPlayerState = 1; m4aSongNumStart(songIndex); } if(interrupt_flag) @@ -178,11 +333,11 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) if(!IsBGSong(SongIndex)) return; - if(SongIndex == 0x3e7) + if(SongIndex == 999) return; - if(SongIndex == gUnknown_202D68A) + if(SongIndex == gCurrentBGSong) { - temp_store = gUnknown_202D688 - 1; + temp_store = gBGMusicPlayerState - 1; if((temp_store) <= 1) return; } @@ -201,12 +356,12 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) } interrupt_flag = DisableInterrupts(); - gUnknown_202D68A = SongIndex; + gCurrentBGSong = SongIndex; gUnknown_202D694 = 1; if(gUnknown_202D690 == 0) { - gUnknown_202D688 = 1; + gBGMusicPlayerState = 1; m4aSongNumStart(SongIndex); m4aMPlayImmInit(&gUnknown_20008F0); m4aMPlayVolumeControl(&gUnknown_20008F0, 0xFF, 0); @@ -219,10 +374,10 @@ void FadeInNewBGM(u16 SongIndex, u16 speed) void sub_800BF48(u16 SongIndex) { - u16 preload = gUnknown_202D68A; - if(preload == 0x3e7) + u16 preload = gCurrentBGSong; + if(preload == 999) { - sub_800BDFC(SongIndex); + StartNewBGM(SongIndex); gUnknown_202D68C = preload; return; } @@ -234,13 +389,13 @@ void sub_800BF80(void) bool8 interrupt_flag = DisableInterrupts(); if(gUnknown_202D690 == 0) { - if(gUnknown_202D68A != 0x3e7) + if(gCurrentBGSong != 999) { m4aMPlayStop(&gUnknown_20008F0); } } - gUnknown_202D68A = 0x3e7; - gUnknown_202D68C = 0x3e7; + gCurrentBGSong = 999; + gUnknown_202D68C = 999; if(interrupt_flag) EnableInterrupts(); } @@ -267,30 +422,30 @@ void sub_800BFD0(u16 speed) interrupt_flag = DisableInterrupts(); if(gUnknown_202D690 == 0) { - if(gUnknown_202D68A != 0x3e7) + if(gCurrentBGSong != 999) { - if(gUnknown_202D688 == 2) + if(gBGMusicPlayerState == 2) { - gUnknown_202D688 = 3; + gBGMusicPlayerState = 3; m4aMPlayFadeOut(&gUnknown_20008F0, speed); } else { - gUnknown_202D68A = 0x3e7; + gCurrentBGSong = 999; m4aMPlayStop(&gUnknown_20008F0); } } } else { - gUnknown_202D68A = 0x3e7; + gCurrentBGSong = 999; } - gUnknown_202D68C = 0x3e7; + gUnknown_202D68C = 999; if(interrupt_flag) EnableInterrupts(); } -u16 sub_800C068(void) +u16 GetCurrentBGSong(void) { - return gUnknown_202D68A; + return gCurrentBGSong; } @@ -2,6 +2,7 @@ #include "flash.h" #include "memory.h" #include "save.h" +#include "event_flag.h" struct UnkStruct_sub_8011DAC { u8 fill000[0x4]; @@ -44,7 +45,6 @@ extern volatile struct UnkStruct_203B184 *gUnknown_203B184; extern void* MemoryAlloc(u32 a, u32 b); extern void MemoryFree(void* a); extern void SetRngState(s32 state); -extern bool8 sub_8002718(u8 *a); extern bool8 sub_800DAB0(u16, u8*, s32); extern bool8 sub_800DAB4(u16, u8*, s32); extern bool8 sub_800DAB8(void); diff --git a/src/save1.c b/src/save1.c index dd0fc45..e8f844c 100644 --- a/src/save1.c +++ b/src/save1.c @@ -11,27 +11,6 @@ struct UnkSaveStruct1 /* 0xA */ u8 unkA; }; -struct UnkStruct -{ - /* 0x0 */ u8 unk0; - /* 0x1 */ u8 unk1; - /* 0x2 */ u8 unk2; - /* 0x3 */ u8 unk3; - /* 0x4 */ u8 unk4; - /* 0x5 */ u32 unk5; - /* 0x9 */ u32 unk9; - /* 0xD */ u32 unkD; - /* 0x12 */ u32 unk11; - /* 0x16 */ u32 unk15; - /* 0x1A */ u32 unk19; - /* 0x1E */ u32 unk1D; - /* 0x24 */ u32 unk24; - /* 0x28 */ u8 unk28; - /* 0x29 */ u8 unk29; - /* 0x2A */ u8 unk2A; - /* 0x2B */ u8 unk2B; - /* 0x2C */ u8 unk2C; -}; extern void MemoryFree(void *); extern void sub_8011860(); @@ -46,8 +25,6 @@ extern void xxx_call_update_bg_vram(); extern void sub_8009908(); extern void xxx_call_update_bg_sound_input(); extern void ResetSprites(u8 r0); -extern u32 sub_8012AE8(void); -extern void nullsub_34(struct UnkStruct *r0); extern struct UnkSaveStruct1 *gUnknown_203B46C; @@ -79,52 +56,3 @@ void sub_8012A18() ResetSprites(0); } -u32 sub_8012A64(struct UnkStruct *r0, u32 r1) -{ - if(r0 == NULL) - { - return sub_8012AE8(); - } - if(r1 != -1) - { - nullsub_34(r0); - } - if(r0->unk1 != 0) - { - r0->unk1 = 0; - return 1; - } - if(r0->unk2 == 0) - { - return sub_8012AE8(); - } - r0->unk2 = r0->unk1; - return 2; -} - -// TODO match that one line -//u32 GetKeyPress(struct UnkStruct *r0) -//{ -// if(r0 == NULL) -// { -// return sub_8012AE8(); -// } -// // TODO it's not a struct access.. -// if(r0->unk29 != 0) -// { -// return 1; -// } -// if(r0->unk2A != 0) -// { -// return 2; -// } -// if(r0->unk2C != 0) -// { -// return 9; -// } -// if(r0->unk2B == 0) -// { -// return sub_8012AE8(); -// } -// return 0xA; -//} |