summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhuderlem <huderlem@gmail.com>2019-08-13 17:23:23 -0500
committerGitHub <noreply@github.com>2019-08-13 17:23:23 -0500
commit5cbb66a6e5dd18d133e692a04e116aa3909d22ed (patch)
treec1ca88b5138d19eb5106f171c8ae77d4516e8b22 /src
parent4c8669a3aad601f1381ca9c67c78040ce80157df (diff)
parent0648ededb9161e9f5fc4e0a38ae91c7bf14e6c0b (diff)
Merge pull request #8 from camthesaxman/decompile-options
decompile field_select.s and start decompiling options.s
Diffstat (limited to 'src')
-rw-r--r--src/field_select.c374
-rwxr-xr-xsrc/gbplayer.c3
-rwxr-xr-xsrc/main.c50
-rw-r--r--src/options.c500
-rw-r--r--src/rom_1068C.c10
-rw-r--r--src/rom_528AC.c137
-rwxr-xr-xsrc/rom_850.c52
-rwxr-xr-xsrc/titlescreen.c6
-rwxr-xr-xsrc/util.c14
9 files changed, 998 insertions, 148 deletions
diff --git a/src/field_select.c b/src/field_select.c
new file mode 100644
index 0000000..ea6acba
--- /dev/null
+++ b/src/field_select.c
@@ -0,0 +1,374 @@
+#include "global.h"
+#include "main.h"
+#include "m4a.h"
+#include "titlescreen.h"
+
+enum
+{
+ FIELD_RUBY,
+ FIELD_SAPPHIRE,
+};
+
+static void sub_8F94(void);
+static void sub_8C38(void);
+
+struct FieldSelectData
+{
+ u16 unk0;
+ u16 unk2;
+ u16 unk4;
+ u16 unk6;
+ u16 selectedField;
+ u16 state;
+ s16 unkC;
+ s16 unkE;
+ u8 ballSpeed;
+ s16 unk12;
+ s8 unk14;
+ u16 nextMainState;
+};
+
+extern struct FieldSelectData gFieldSelectData;
+
+void FieldSelectMain(void)
+{
+ gFieldSelectStateFuncs[gMain.subState]();
+}
+
+void LoadFieldSelectGraphics(void)
+{
+ ResetSomeGraphicsRelatedStuff();
+
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_FORCED_BLANK | DISPCNT_OBJ_ON;
+
+ REG_BG0CNT = BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(0) | BGCNT_PRIORITY(0) | BGCNT_TXT256x256;
+ REG_DISPCNT |= DISPCNT_BG0_ON;
+
+ REG_BG1CNT = BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(1) | BGCNT_PRIORITY(1) | BGCNT_TXT256x256;
+ REG_DISPCNT |= DISPCNT_BG1_ON;
+
+ REG_BG2CNT = BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(2) | BGCNT_PRIORITY(2) | BGCNT_TXT256x256;
+ REG_DISPCNT |= DISPCNT_BG2_ON;
+
+ gMain.unk16 = REG_DISPCNT;
+
+ DmaCopy16(3, gFieldSelectBGPals, (void *)(PLTT), 0x200);
+ DmaCopy16(3, gFieldSelectWindow_Gfx, (void *)(VRAM + 0x4000), 0x1400);
+ DmaCopy16(3, gFieldSelectMiniFields_Gfx, (void *)(VRAM + 0x8000), 0x3800);
+ DmaCopy16(3, gUnknown_080A2400, (void *)(VRAM), 0x800);
+ DmaCopy16(3, gFieldSelectFrameShadowTilemap, (void *)(VRAM + 0x800), 0x800);
+ DmaCopy16(3, gFieldSelectWindowTilemap, (void *)(VRAM + 0x1000), 0x800);
+ DmaCopy16(3, gFieldSelectSpritePals, (void *)(PLTT + 0x200), 0x200);
+ DmaCopy16(3, gFieldSelectSpriteGfx, (void *)(VRAM + 0x10000), 0x4020);
+
+ sub_CBC();
+ sub_8C38();
+ sub_FD5C(sub_8F94);
+ gMain.subState++;
+ m4aSongNumStart(3);
+}
+
+static void sub_8C38(void)
+{
+ gFieldSelectData.unk0 = 2;
+ gFieldSelectData.unk2 = 3;
+ gFieldSelectData.unk4 = 0;
+ gFieldSelectData.unk6 = 1;
+ gFieldSelectData.selectedField = FIELD_RUBY;
+ gFieldSelectData.state = 0;
+ gFieldSelectData.unkC = 0;
+ gFieldSelectData.unkE = 0;
+ gFieldSelectData.nextMainState = STATE_INTRO;
+ gFieldSelectData.unk12 = 0;
+ gFieldSelectData.unk14 = 0;
+
+ gFieldSelectData.ballSpeed = gMain_saveData.ballSpeed;
+ gMain.unk4 = 0;
+ gUnknown_02002850 = 0;
+}
+
+void sub_8C7C(void)
+{
+ sub_8F94();
+ if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON))
+ {
+ gUnknown_02002850 = 1;
+ gFieldSelectData.nextMainState = STATE_INTRO;
+ gMain.subState++;
+ }
+ if (gUnknown_02002850 == 0)
+ {
+ switch (gFieldSelectData.state)
+ {
+ case 0:
+ if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gFieldSelectData.selectedField == FIELD_SAPPHIRE)
+ {
+ m4aSongNumStart(0x6D);
+ gFieldSelectData.selectedField = FIELD_RUBY;
+ gFieldSelectData.unk4 = 0;
+ gFieldSelectData.unk6 = 1;
+ gFieldSelectData.state = 1;
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (gFieldSelectData.selectedField == FIELD_RUBY)
+ {
+ m4aSongNumStart(0x6D);
+ gFieldSelectData.selectedField = FIELD_SAPPHIRE;
+ gFieldSelectData.unk4 = 1;
+ gFieldSelectData.unk6 = 0;
+ gFieldSelectData.state = 1;
+ }
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ m4aSongNumStart(0x65);
+ gFieldSelectData.state = 2;
+ gFieldSelectData.unk14 = 1;
+ gFieldSelectData.unkE = 0;
+ if (gFieldSelectData.selectedField == FIELD_RUBY)
+ {
+ gFieldSelectData.unk4 = 0;
+ gFieldSelectData.unk6 = 1;
+ gFieldSelectData.unk0 = 2;
+ gFieldSelectData.unk2 = 3;
+ gFieldSelectData.unkC = 0;
+ }
+ else
+ {
+ gFieldSelectData.unk4 = 1;
+ gFieldSelectData.unk6 = 0;
+ gFieldSelectData.unk0 = 7;
+ gFieldSelectData.unk2 = 11;
+ gFieldSelectData.unkC = 0;
+ }
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ m4aSongNumStart(0x66);
+ gMain.subState++;
+ gFieldSelectData.nextMainState = STATE_TITLE;
+ if (gFieldSelectData.selectedField == FIELD_RUBY)
+ {
+ gFieldSelectData.unk4 = 0;
+ gFieldSelectData.unk6 = 1;
+ gFieldSelectData.unk0 = 2;
+ gFieldSelectData.unk2 = 3;
+ gFieldSelectData.unkC = 0;
+ }
+ else
+ {
+ gFieldSelectData.unk4 = 1;
+ gFieldSelectData.unk6 = 0;
+ gFieldSelectData.unk0 = 7;
+ gFieldSelectData.unk2 = 11;
+ gFieldSelectData.unkC = 0;
+ }
+ }
+ if (gMain.unk4 < 2)
+ gMain.unk6 = 0;
+ else
+ gMain.unk6 = 1;
+ break;
+ case 2: // Choose ball speed
+ if (gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT))
+ {
+ m4aSongNumStart(0x67);
+ gFieldSelectData.ballSpeed = 1 - gFieldSelectData.ballSpeed;
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ m4aSongNumStart(0x65);
+ gFieldSelectData.unkE = 0;
+ gFieldSelectData.unkC = 0;
+ gMain_saveData.ballSpeed = gFieldSelectData.ballSpeed;
+ SaveFile_WriteToSram();
+ gFieldSelectData.state = 3;
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ m4aSongNumStart(0x66);
+ gFieldSelectData.unk14 = 0;
+ gFieldSelectData.state = 0;
+ }
+ gFieldSelectData.unkE++;
+ if (gFieldSelectData.unkE > 4)
+ {
+ gFieldSelectData.unkE = 0;
+ gFieldSelectData.unk12 = 1 - gFieldSelectData.unk12;
+ }
+ break;
+ case 1:
+ if (gFieldSelectData.selectedField == FIELD_RUBY)
+ {
+ gFieldSelectData.unk0 = gUnknown_086A6B14.unk0[4 - gFieldSelectData.unkC];
+ gFieldSelectData.unk2 = gUnknown_086A6B14.unkA[4 - gFieldSelectData.unkC];
+ }
+ else
+ {
+ gFieldSelectData.unk0 = gUnknown_086A6B14.unk0[gFieldSelectData.unkC];
+ gFieldSelectData.unk2 = gUnknown_086A6B14.unkA[gFieldSelectData.unkC];
+ }
+ if (!(gMain.frameCount & 1))
+ {
+ if (gFieldSelectData.unkC < 4)
+ {
+ gFieldSelectData.unkC++;
+ }
+ else
+ {
+ gFieldSelectData.unkC = 0;
+ gFieldSelectData.state = 0;
+ }
+ }
+ if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gFieldSelectData.selectedField == FIELD_SAPPHIRE)
+ {
+ m4aSongNumStart(0x6D);
+ gFieldSelectData.selectedField = FIELD_RUBY;
+ gFieldSelectData.unk4 = 0;
+ gFieldSelectData.unk6 = 1;
+ gFieldSelectData.unk0 = 2;
+ gFieldSelectData.unk2 = 3;
+ gFieldSelectData.unkC = 0;
+ gFieldSelectData.state = 0;
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (gFieldSelectData.selectedField == FIELD_RUBY)
+ {
+ m4aSongNumStart(0x6D);
+ gFieldSelectData.selectedField = FIELD_SAPPHIRE;
+ gFieldSelectData.unk4 = 1;
+ gFieldSelectData.unk6 = 0;
+ gFieldSelectData.unk0 = 7;
+ gFieldSelectData.unk2 = 11;
+ gFieldSelectData.unkC = 0;
+ gFieldSelectData.state = 0;
+ }
+ }
+ break;
+ case 3:
+ gFieldSelectData.unkE++;
+ if (gFieldSelectData.unkE > 3)
+ {
+ gFieldSelectData.unkE = 0;
+ if (gFieldSelectData.selectedField == FIELD_RUBY)
+ gFieldSelectData.unk4 = 1 - gFieldSelectData.unk4;
+ else
+ gFieldSelectData.unk6 = 1 - gFieldSelectData.unk6;
+ gFieldSelectData.unkC++;
+ if (gFieldSelectData.unkC > 5)
+ {
+ gFieldSelectData.nextMainState = STATE_GAME_MAIN;
+ gMain.subState++;
+ }
+ }
+ break;
+ }
+ gMain.unk4 = gFieldSelectData.selectedField;
+ gMain.unk5 = gFieldSelectData.selectedField;
+ }
+}
+
+void sub_8F64(void)
+{
+ sub_FE04(sub_8F94);
+ m4aMPlayAllStop();
+ sub_D10();
+ gAutoDisplayTitlescreenMenu = TRUE;
+ SetMainGameState(gFieldSelectData.nextMainState);
+}
+
+static void sub_8F94(void)
+{
+ struct SpriteGroup *r6;
+ struct SpriteGroup *r9;
+ struct SpriteGroup *sp0;
+ struct SpriteGroup *r10;
+ struct SpriteGroup *r8;
+ const struct SpriteSet *spriteSet;
+ int i;
+
+ gMain.blendControl = BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2;
+ gMain.blendAlpha = BLDALPHA_BLEND(8, 8);
+ REG_BLDCNT = gMain.blendControl;
+ REG_BLDALPHA = gMain.blendAlpha;
+
+ r6 = &gMain.spriteGroups[0];
+ r9 = &gMain.spriteGroups[1];
+ sp0 = &gMain.spriteGroups[gFieldSelectData.unk0];
+ r10 = &gMain.spriteGroups[gFieldSelectData.unk2];
+ r8 = &gMain.spriteGroups[12 + gFieldSelectData.ballSpeed * 2 + gFieldSelectData.unk12];
+
+ r6->available = gFieldSelectData.unk4;
+ r9->available = gFieldSelectData.unk6;
+ sp0->available = 1;
+ r10->available = 1;
+ r8->available = gFieldSelectData.unk14;
+
+ LoadSpriteSets(gUnknown_086A6AD4, 16, r6);
+
+ if (gFieldSelectData.unk4 == 1)
+ {
+ r6->baseX = 0x25;
+ r6->baseY = 0x18;
+ for (i = 0; i < 2; i++)
+ {
+ gOamBuffer[r6->oam[i].oamId].x = r6->oam[i].xOffset + r6->baseX;
+ gOamBuffer[r6->oam[i].oamId].y = r6->oam[i].yOffset + r6->baseY;
+ }
+ }
+
+ if (gFieldSelectData.unk6 == 1)
+ {
+ r9->baseX = 0x8D;
+ r9->baseY = 0x18;
+ for (i = 0; i < 2; i++)
+ {
+ gOamBuffer[r9->oam[i].oamId].x = r9->oam[i].xOffset + r9->baseX;
+ gOamBuffer[r9->oam[i].oamId].y = r9->oam[i].yOffset + r9->baseY;
+ }
+ }
+
+ sp0->baseX = 32;
+ sp0->baseY = 32;
+ spriteSet = gUnknown_086A6AD4[gFieldSelectData.unk0];
+ for (i = 0; i < spriteSet->count; i++)
+ {
+ gOamBuffer[sp0->oam[i].oamId].objMode = 1;
+ gOamBuffer[sp0->oam[i].oamId].x = sp0->oam[i].xOffset + sp0->baseX;
+ gOamBuffer[sp0->oam[i].oamId].y = sp0->oam[i].yOffset + sp0->baseY;
+ }
+
+ r10->baseX = 0x88;
+ r10->baseY = 32;
+ spriteSet = gUnknown_086A6AD4[gFieldSelectData.unk2];
+ for (i = 0; i < spriteSet->count; i++)
+ {
+ gOamBuffer[r10->oam[i].oamId].objMode = 1;
+ gOamBuffer[r10->oam[i].oamId].x = r10->oam[i].xOffset + r10->baseX;
+ gOamBuffer[r10->oam[i].oamId].y = r10->oam[i].yOffset + r10->baseY;
+ }
+
+ if (r8->available == 1)
+ {
+ r8->baseX = gUnknown_086A6B28[gFieldSelectData.selectedField].x;
+ r8->baseY = gUnknown_086A6B28[gFieldSelectData.selectedField].y;
+ for (i = 0; i < 5; i++)
+ {
+ gOamBuffer[r8->oam[i].oamId].objMode = 0;
+ gOamBuffer[r8->oam[i].oamId].x = r8->oam[i].xOffset + r8->baseX;
+ gOamBuffer[r8->oam[i].oamId].y = r8->oam[i].yOffset + r8->baseY;
+ }
+ }
+
+ sp0->available = 0;
+ r10->available = 0;
+ r8->available = 0;
+}
diff --git a/src/gbplayer.c b/src/gbplayer.c
index c0d9655..412be7d 100755
--- a/src/gbplayer.c
+++ b/src/gbplayer.c
@@ -291,8 +291,7 @@ void sub_1198(void)
void sub_11B0(int arg0)
{
- if (gUnknown_0200B134[0xCD])
- //if (gMain.saveData.unk141)
+ if (gMain_saveData.unk141)
{
gUnknown_02019BF8 = arg0;
gUnknown_02019BFC = 0;
diff --git a/src/main.c b/src/main.c
index de8d269..af1fca1 100755
--- a/src/main.c
+++ b/src/main.c
@@ -3,7 +3,7 @@
#include "gbplayer.h"
#include "m4a.h"
-static void sub_B54(void);
+static void InitGame(void);
static void sub_B8C(void);
static void InitIntrHandlers(void);
static void ReadKeys(void);
@@ -14,13 +14,13 @@ void AgbMain(void)
InitIntrHandlers();
DmaCopy32(3, IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer));
INTR_VECTOR = IntrMain_Buffer;
- sub_B54();
+ InitGame();
InitGameBoyPlayer();
while (1)
{
ReadKeys();
gMainFuncs[gMain.mainState]();
- sub_D74();
+ MainLoopIter();
}
}
@@ -40,12 +40,12 @@ void sub_9BC_Main(void)
default:
sub_2B4();
sub_D10();
- SetMainGameState(1);
+ SetMainGameState(STATE_TITLE);
break;
}
}
-void HBlankIntr(void)
+void VBlankIntr(void)
{
m4aSoundVSync();
INTR_CHECK |= INTR_FLAG_VBLANK;
@@ -55,7 +55,7 @@ void VCountIntr(void)
{
INTR_CHECK |= INTR_FLAG_VCOUNT;
while (!(REG_DISPSTAT & DISPSTAT_HBLANK));
- if (gMain.mainState == 2)
+ if (gMain.mainState == STATE_GAME_MAIN)
{
REG_BG0HOFS = 0;
if (gMain.unk28)
@@ -122,7 +122,7 @@ void IntrDummy(void)
{
}
-static void sub_B54(void)
+static void InitGame(void)
{
REG_WAITCNT = WAITCNT_AGB
| WAITCNT_PREFETCH_ENABLE
@@ -139,24 +139,24 @@ static void sub_B54(void)
sub_B8C();
m4aSoundInit();
m4aSoundVSyncOff();
- sub_52A18();
+ SaveFile_LoadGameData();
}
static void sub_B8C(void)
{
- gMain.mainState = 0;
+ gMain.mainState = STATE_INTRO;
gMain.subState = 0;
gMain.unk16 = 0;
gMain.heldKeys = 0;
gMain.newKeys = 0;
gMain.unk20 = 0;
gMain.rngValue = 0;
- gMain.unk4C = 0;
+ gMain.frameCount = 0;
gMain.unk30 = 0;
gMain.vCount = 144;
gMain.unk2C = 0;
- sub_1090C();
- sub_438();
+ ClearSomeArray();
+ ResetSomeGraphicsRelatedStuff();
}
static void InitIntrHandlers(void)
@@ -166,11 +166,11 @@ static void InitIntrHandlers(void)
for (i = 0; i < INTR_COUNT; i++)
gIntrTable[i] = gIntrTableTemplate[i];
- gUnknown_0200FB98 = &gIntrTable[2];
- gUnknown_02019BE0 = &gIntrTable[4];
- sub_8BC();
- sub_8FC();
- sub_940();
+ gVBlankIntrFuncPtr = &gIntrTable[2];
+ gVCountIntrFuncPtr = &gIntrTable[4];
+ ResetMainCallback();
+ ResetVBlankIntrFunc();
+ ResetVCountIntrFunc();
}
// The number 1103515245 comes from the example implementation of rand and srand
@@ -320,18 +320,18 @@ void sub_D10(void)
m4aSoundVSyncOff();
}
-void sub_D74(void)
+void MainLoopIter(void)
{
- gUnknown_0200FB9C = gUnknown_02017BD4;
- *gUnknown_0200FB98 = gUnknown_02017BD0;
- *gUnknown_02019BE0 = gUnknown_0200FBA0;
- if (gUnknown_0200FB9C)
- gUnknown_0200FB9C();
+ gMainCallback = gUnknown_02017BD4;
+ *gVBlankIntrFuncPtr = gUnknown_02017BD0;
+ *gVCountIntrFuncPtr = gUnknown_0200FBA0;
+ if (gMainCallback)
+ gMainCallback();
- gMain.unk4C++;
+ gMain.frameCount++;
}
-void sub_DC4(void)
+void DefaultMainCallback(void)
{
if (REG_DISPSTAT & DISPSTAT_VBLANK_INTR)
{
diff --git a/src/options.c b/src/options.c
new file mode 100644
index 0000000..cd02b94
--- /dev/null
+++ b/src/options.c
@@ -0,0 +1,500 @@
+#include "global.h"
+#include "m4a.h"
+#include "main.h"
+#include "titlescreen.h"
+
+struct OptionsData
+{
+ s16 unk0;
+ u16 unk2;
+ u16 unk4;
+ u16 unk6;
+ s16 unk8;
+ s16 unkA;
+ u16 unkC;
+ s16 unkE;
+ s16 unk10;
+ u8 unk12;
+ u8 unk13;
+ u8 unk14;
+ u8 unk15;
+ u8 unk16;
+ u8 unk17;
+ s16 unk18;
+ u8 unk1A[6];
+ s16 unk20;
+ u16 unk22;
+ s16 unk24[2];
+ u16 unk28;
+ u8 unk2A;
+ s8 unk2B;
+ s8 unk2C;
+ u8 unk2D;
+ s8 unk2E;
+ u8 unk2F;
+ u8 unk30;
+};
+
+extern struct OptionsData gOptionsData;
+
+void OptionsMain(void)
+{
+ gUnknown_08527F08[gMain.subState]();
+}
+
+extern const u16 gUnknown_0852B468[];
+extern const u8 gUnknown_08528828[];
+extern const u8 gUnknown_0852A848[];
+extern const u8 gUnknown_08528028[];
+extern const u8 gUnknown_0852A048[];
+
+void sub_51240(void)
+{
+ ResetSomeGraphicsRelatedStuff();
+
+ REG_DISPCNT = 0x1080;
+ REG_BG0CNT = 4;
+ REG_DISPCNT |= 0x100;
+ REG_BG1CNT = 0x109;
+ REG_DISPCNT |= 0x200;
+
+ gMain.unk16 = REG_DISPCNT;
+
+ DmaCopy16(3, gUnknown_0852B468, (void *)PLTT, 0x200);
+ DmaCopy16(3, gUnknown_08528828, (void *)(VRAM + 0x4000), 0x1800);
+ DmaCopy16(3, gUnknown_0852A848, (void *)(VRAM + 0x8000), 0xC00);
+ DmaCopy16(3, gUnknown_08528028, gUnknown_03005C00, 0x800);
+ DmaCopy16(3, gUnknown_03005C00, (void *)VRAM, 0x800);
+
+ if (gGameBoyPlayerEnabled != 1)
+ {
+ sub_1068C(0x12, 4, 2, 1, 2);
+ sub_1068C(0x12, 5, 3, 2, 2);
+ }
+
+ DmaCopy16(3, gUnknown_03005C00, (void *)VRAM, 0x800);
+ DmaCopy16(3, gUnknown_0852A048, (void *)(VRAM + 0x800), 0x800);
+ DmaCopy16(3, gGBAButtonIcons_Pals, (void *)(PLTT + 0x200), 0x60);
+ DmaCopy16(3, gOptionsSprites_Gfx, (void *)(VRAM + 0x10000), 0x2020);
+ sub_513B8();
+ sub_51C9C();
+ m4aMPlayAllStop();
+ sub_CBC();
+ sub_24C();
+ sub_10C0();
+
+ gMain.subState++;
+}
+
+void sub_513B8(void)
+{
+ int i;
+ int j;
+
+ gOptionsData.unk0 = 0;
+ gOptionsData.unk2 = 0;
+ gOptionsData.unk4 = 0;
+ gOptionsData.unk6 = 1;
+ gOptionsData.unk8 = 0;
+ gOptionsData.unkA = 0;
+ gOptionsData.unkC = gMain_saveData.unk143;
+ gOptionsData.unkE = 0;
+ gOptionsData.unk10 = 0;
+ gOptionsData.unk12 = 0;
+ gOptionsData.unk13 = 0;
+ gOptionsData.unk14 = 1;
+ gOptionsData.unk15 = 0;
+ gOptionsData.unk16 = 0;
+ gOptionsData.unk17 = 1;
+ gOptionsData.unk18 = 0;
+ for (i = 0; i < 6; i++)
+ gOptionsData.unk1A[i] = 0;
+ gOptionsData.unk20 = 0;
+ gOptionsData.unk22 = 0;
+ for (i = 0; i < 2; i++)
+ gOptionsData.unk24[i] = 10;
+ gOptionsData.unk28 = 0;
+ for (i = 0; i < 4; i++)
+ {
+ for (j = 0; j < 10; j++)
+ gUnknown_02031AF0[i][j] = gUnknown_08527ED6[i][j];
+ }
+ sub_52528();
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ gOptionsData.unk2A = gMain_saveData.unk141;
+ gMain_saveData.unk141 = 1;
+ }
+ else
+ {
+ gOptionsData.unk2A = 0;
+ gMain_saveData.unk141 = 0;
+ }
+ gOptionsData.unk2E = 0;
+ gOptionsData.unk2B = 0;
+ gOptionsData.unk2C = 0;
+ gOptionsData.unk2D = 0;
+ gOptionsData.unk2F = 0;
+ gOptionsData.unk30 = 0;
+}
+
+void sub_514B8(void)
+{
+ s16 r4;
+
+ sub_51C9C();
+ switch (gOptionsData.unk0)
+ {
+ case 0:
+ if (gMain.newKeys & 0x40)
+ {
+ if (gOptionsData.unkA != 0xD)
+ {
+ if (gOptionsData.unkA == 0xE)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA = 0xD;
+ }
+ else if (gOptionsData.unkA > 0)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA--;
+ }
+ }
+ }
+ else if (gMain.newKeys & 0x80)
+ {
+ if (gOptionsData.unkA < 6)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA++;
+ }
+ else if (gOptionsData.unkA == 0xD)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA = 0xE;
+ }
+ else if (gOptionsData.unkA == 0xE)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA = 2;
+ }
+ }
+ if ((gMain.newKeys & 0x10) && gGameBoyPlayerEnabled == 1 && (u16)gOptionsData.unkA < 2)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA += 0xD;
+ }
+ if ((gMain.newKeys & 0x20) && gGameBoyPlayerEnabled == 1 && (u16)(gOptionsData.unkA - 13) < 2)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA -= 0xD;
+ }
+ if (gMain.newKeys & 1)
+ {
+ switch (gOptionsData.unkA)
+ {
+ case 0:
+ m4aSongNumStart(0x65);
+ gOptionsData.unk0 = 1;
+ gOptionsData.unk18 = 0;
+ gOptionsData.unk30 = 1;
+ if (gOptionsData.unk2E == 1)
+ {
+ gOptionsData.unk2B = 0;
+ gOptionsData.unk2D = 0;
+ gOptionsData.unk2C = 0;
+ gOptionsData.unk2E = 0;
+ }
+ break;
+ case 1:
+ m4aSongNumStart(0x65);
+ gOptionsData.unk0 = 2;
+ gOptionsData.unk18 = 0;
+ gOptionsData.unk30 = 1;
+ if (gOptionsData.unk2E == 1)
+ {
+ gOptionsData.unk2B = 0;
+ gOptionsData.unk2D = 0;
+ gOptionsData.unk2C = 0;
+ gOptionsData.unk2E = 0;
+ }
+ break;
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ m4aSongNumStart(0x65);
+ gOptionsData.unkC = gOptionsData.unkA - 2;
+ gMain_saveData.unk143 = gOptionsData.unkC;
+ break;
+ case 6:
+ m4aSongNumStart(0x65);
+ gOptionsData.unkC = gOptionsData.unkA - 2;
+ gMain_saveData.unk143 = gOptionsData.unkC;
+ gOptionsData.unkA = 7;
+ gOptionsData.unk0 = 3;
+ break;
+ case 14:
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ m4aSongNumStart(0x65);
+ gOptionsData.unk2D = 0;
+ if (gOptionsData.unk2E == 1)
+ gOptionsData.unk2E = 0;
+ gOptionsData.unk2B = 0;
+ gOptionsData.unk2C = 0;
+ gOptionsData.unk2A = 0;
+ }
+ break;
+ case 13:
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ m4aSongNumStart(0x65);
+ sub_11B0(11);
+ if (gOptionsData.unk2E == 0)
+ gOptionsData.unk2E = 1;
+
+ gOptionsData.unk2B = 0;
+ gOptionsData.unk2C = 0;
+ gOptionsData.unk2A = 1;
+ }
+ break;
+ }
+ }
+ else if (gMain.newKeys & 2)
+ {
+ m4aSongNumStart(0x66);
+ gMain.subState++;
+ sub_525CC(gMain_saveData.unk143);
+
+ }
+ if (!(gMain.frameCount & 7))
+ gOptionsData.unk2 = 1 - gOptionsData.unk2;
+ break;
+ case 1:
+ if (gMain.heldKeys & 0x20)
+ {
+ if (gOptionsData.unk18 == 0)
+ {
+ gOptionsData.unkE--;
+ gOptionsData.unk18 = 10;
+ }
+ }
+ else if (gMain.heldKeys & 0x10)
+ {
+ if (gOptionsData.unk18 == 0)
+ {
+ gOptionsData.unkE++;
+ gOptionsData.unk18 = 10;
+ }
+ }
+ if (gMain.newKeys & 0x40)
+ gOptionsData.unkE += 10;
+ else if (gMain.newKeys & 0x80)
+ gOptionsData.unkE -= 10;
+ if (gOptionsData.unkE < 0)
+ gOptionsData.unkE = 33;
+ if (gOptionsData.unkE > 33)
+ gOptionsData.unkE = 0;
+
+ r4 = gOptionsData.unkE + 1;
+ gOptionsData.unk12 = r4 / 100;
+ r4 %= 100;
+ gOptionsData.unk13 = r4 / 10;
+ gOptionsData.unk14 = r4 % 10;
+ if (gMain.newKeys & 1)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(gUnknown_08527D22[gOptionsData.unkE]);
+ }
+ else if (gMain.newKeys & 2)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(0x66);
+ gOptionsData.unk4 = 0;
+ gOptionsData.unk30 = 0;
+ gOptionsData.unk0 = 0;
+ }
+ if (!(gMain.frameCount & 7))
+ gOptionsData.unk4 = 1 - gOptionsData.unk4;
+ if (gOptionsData.unk18 > 0)
+ gOptionsData.unk18--;
+ break;
+ case 2:
+ if (gMain.heldKeys & 0x20)
+ {
+ if (gOptionsData.unk18 == 0)
+ {
+ gOptionsData.unk10--;
+ gOptionsData.unk18 = 10;
+ }
+ }
+ else if (gMain.heldKeys & 0x10)
+ {
+ if (gOptionsData.unk18 == 0)
+ {
+ gOptionsData.unk10++;
+ gOptionsData.unk18 = 10;
+ }
+ }
+ if (gMain.newKeys & 0x40)
+ gOptionsData.unk10 += 10;
+ else if (gMain.newKeys & 0x80)
+ gOptionsData.unk10 -= 10;
+ if (gOptionsData.unk10 < 0)
+ gOptionsData.unk10 = 0xB7;
+ if (gOptionsData.unk10 > 0xB7)
+ gOptionsData.unk10 = 0;
+
+ r4 = gOptionsData.unk10 + 1;
+ gOptionsData.unk15 = r4 / 100;
+ r4 %= 100;
+ gOptionsData.unk16 = r4 / 10;
+ gOptionsData.unk17 = r4 % 10;
+ if (gMain.newKeys & 0x1)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(gUnknown_08527D66[gOptionsData.unk10]);
+ }
+ else if (gMain.newKeys & 0x2)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(0x66);
+ gOptionsData.unk4 = 0;
+ gOptionsData.unk30 = 0;
+ gOptionsData.unk0 = 0;
+ }
+ if (!(gMain.frameCount & 7))
+ gOptionsData.unk4 = 1 - gOptionsData.unk4;
+ if (gOptionsData.unk18 > 0)
+ gOptionsData.unk18--;
+ break;
+ case 3:
+ if (gMain.newKeys & 0x40)
+ {
+ if (gOptionsData.unkA > 7)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA--;
+ }
+ }
+ else if (gMain.newKeys & 0x80)
+ {
+ if (gOptionsData.unkA <= 10)
+ {
+ m4aSongNumStart(0x67);
+ gOptionsData.unkA++;
+ }
+ }
+ if (gMain.newKeys & 1)
+ {
+ m4aSongNumStart(0x65);
+ gOptionsData.unk0 = 4;
+ gOptionsData.unk1A[gOptionsData.unkA - 7] = 1;
+ }
+ else if (gMain.newKeys & 2)
+ {
+ m4aSongNumStart(0x66);
+ gOptionsData.unkA = 6;
+ gOptionsData.unk0 = 0;
+ }
+ if (!(gMain.frameCount & 7))
+ gOptionsData.unk2 = 1 - gOptionsData.unk2;
+ break;
+ case 4:
+ gOptionsData.unk8++;
+ if (gOptionsData.unk8 > 24)
+ {
+ gOptionsData.unk8 = 0;
+ gOptionsData.unk6 = 1 - gOptionsData.unk6;
+ }
+ if (gMain.newKeys & 0x3F7)
+ {
+ s16 i;
+
+ m4aSongNumStart(0x65);
+ gOptionsData.unk20 = 10;
+ gOptionsData.unk22 = 0;
+ for (i = 0; i < 2; i++)
+ gOptionsData.unk24[i] = 10;
+ gOptionsData.unk28 = 0;
+ }
+ //_08051B0E
+ if (gOptionsData.unk20 > 0)
+ {
+ sub_524BC();
+ gOptionsData.unk20--;
+ if (gOptionsData.unk20 == 0)
+ {
+ gUnknown_02031AF0[4][(gOptionsData.unkA - 7) * 2 + 0] = gOptionsData.unk24[0];
+ gUnknown_02031AF0[4][(gOptionsData.unkA - 7) * 2 + 1] = gOptionsData.unk24[1];
+ gMain_saveData.unk144[(gOptionsData.unkA - 7)][0] = gUnknown_086BB910[gOptionsData.unk24[0]][0];
+ gMain_saveData.unk144[(gOptionsData.unkA - 7)][1] = gUnknown_086BB910[gOptionsData.unk24[1]][0];
+ gOptionsData.unk0 = 3;
+ gOptionsData.unk1A[gOptionsData.unkA - 7] = 0;
+ gOptionsData.unk8 = 0;
+ gOptionsData.unk6 = 1;
+ }
+ }
+ break;
+ }
+ //_08051B98
+ if (gOptionsData.unk2E == 1)
+ {
+ //gOptionsData.unk2B++;
+ if (++gOptionsData.unk2B > gUnknown_086BB9B4[gOptionsData.unk2C].unk2)
+ {
+ gOptionsData.unk2B = 0;
+ gOptionsData.unk2C++;
+ if (gOptionsData.unk2C > 12)
+ {
+ gOptionsData.unk2C = 0;
+ gOptionsData.unk2D = 0;
+ gOptionsData.unk2E = 0;
+ }
+ //_08051BE8
+ gOptionsData.unk2D = gUnknown_086BB9B4[gOptionsData.unk2C].unk0;
+ }
+ // _08051C30
+ }
+ else
+ //_08051C10
+ {
+ gOptionsData.unk2B++;
+ if (gOptionsData.unk2B > 18)
+ {
+ gOptionsData.unk2B = 0;
+ gOptionsData.unk2D = 1 - gOptionsData.unk2D;
+ }
+ }
+ sub_11FC();
+}
+
+void sub_51C3C(void)
+{
+ sub_111C();
+ if (sub_1170() != 0)
+ {
+ sub_1198();
+ gMain.subState++;
+ }
+}
+
+void sub_51C60(void)
+{
+ gMain_saveData.unk141 = gOptionsData.unk2A;
+ SaveFile_WriteToSram();
+ sub_2B4();
+ m4aMPlayAllStop();
+ sub_D10();
+ gAutoDisplayTitlescreenMenu = 1;
+ SetMainGameState(STATE_TITLE);
+}
+
+/*
+void sub_51C9C(void)
+{
+
+}
+*/
diff --git a/src/rom_1068C.c b/src/rom_1068C.c
index 4a5e619..297f982 100644
--- a/src/rom_1068C.c
+++ b/src/rom_1068C.c
@@ -56,7 +56,7 @@ void sub_10798(void *a, void *b, void (*func)(void))
if (func != NULL)
func();
sub_1001C(i);
- sub_D74();
+ MainLoopIter();
if (i == 32)
{
DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400);
@@ -81,7 +81,7 @@ void sub_10860(void (*func)(void))
if (func != NULL)
func();
sub_1001C(i);
- sub_D74();
+ MainLoopIter();
if (i == 32)
{
DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400);
@@ -91,12 +91,12 @@ void sub_10860(void (*func)(void))
DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400);
}
}
- sub_D74();
+ MainLoopIter();
}
#ifdef NONMATCHING
// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}'
-void sub_1090C(void)
+void ClearSomeArray(void)
{
int i;
@@ -105,7 +105,7 @@ void sub_1090C(void)
}
#else
NAKED
-void sub_1090C(void)
+void ClearSomeArray(void)
{
asm_unified("\n\
ldr r1, _08010920 @ =gUnknown_0201A500\n\
diff --git a/src/rom_528AC.c b/src/rom_528AC.c
index f1c7d5f..7abf1d9 100644
--- a/src/rom_528AC.c
+++ b/src/rom_528AC.c
@@ -5,6 +5,9 @@
extern const u16 gUnknown_08527F18[];
+static void sub_52940(u16, s8, s8, u8, int);
+static u16 LoadSaveDataFromSram(void);
+
#ifdef NONMATCHING
// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}'
int sub_528AC(u16 a)
@@ -46,8 +49,6 @@ _080528DA:\n\
}
#endif
-void sub_52940(u16, s8, s8, u8, int);
-
void sub_528DC(u16 a, s8 b)
{
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x99);
@@ -59,12 +60,7 @@ void sub_5291C(u16 a, s8 b, s8 c, u8 d)
sub_52940(a, b, c, d, 0);
}
-extern struct ToneData gUnknown_08532D6C[];
-extern struct ToneData gUnknown_08533360[];
-extern struct ToneData gUnknown_08533960[];
-extern struct ToneData gUnknown_08533F60[];
-
-void sub_52940(u16 a, s8 b, s8 c, u8 d, int unused)
+static void sub_52940(u16 a, s8 b, s8 c, u8 d, int unused)
{
u16 r5 = a - 1;
u32 pitch = 0x3C00;
@@ -100,18 +96,15 @@ void sub_52940(u16 a, s8 b, s8 c, u8 d, int unused)
}
}
-extern u16 sub_52A68(void);
-extern void sub_525CC(s8);
-
-void sub_52A18(void)
+void SaveFile_LoadGameData(void)
{
SetSramFastFunc();
gMain.unkC = 0;
- if (sub_52A68() == 0)
+ if (LoadSaveDataFromSram() == 0)
{
sub_52C64();
- sub_52B30();
- if (sub_52A68() == 0)
+ SaveFile_WriteToSram();
+ if (LoadSaveDataFromSram() == 0)
{
gMain.unkC = 1;
sub_52C64();
@@ -119,16 +112,15 @@ void sub_52A18(void)
}
else
{
- sub_525CC(gMain.saveData.unk143);
+ sub_525CC(gMain_saveData.unk143);
}
}
-extern struct Main2 gMain_;
extern u8 gSaveFileSignature[];
-u16 sub_52A68(void)
+static u16 LoadSaveDataFromSram(void)
{
- u16 r8 = 0;
+ u16 isOk = FALSE;
u16 fileNum;
u16 i;
u32 checksum;
@@ -136,15 +128,15 @@ u16 sub_52A68(void)
// Looks like there are two copies of the save data, one used as a backup?
for (fileNum = 0; fileNum < 2; fileNum++)
{
- u16 *saveData = (u16 *)&gMain.saveData;
- u32 size = 0x274;
+ u16 *saveData = (u16 *)&gMain_saveData;
+ size_t size = sizeof(gMain_saveData);
- ReadSramFast((u8 *)0x0E000004 + fileNum * 672, (u8 *)saveData, size);
+ ReadSramFast((void *)(SRAM + 0x4 + fileNum * 672), (u8 *)saveData, size);
// Verify signature
for (i = 0; i < 10; i++)
{
- if (gMain.saveData.signature[i] != gSaveFileSignature[i])
+ if (gMain_saveData.signature[i] != gSaveFileSignature[i])
break;
}
if (i != 10)
@@ -162,93 +154,82 @@ u16 sub_52A68(void)
checksum = (checksum & 0xFFFF) + (checksum >> 16);
if (checksum == 0xFFFF)
{
- r8 = 1;
+ isOk = TRUE;
break;
}
}
- return r8;
+ return isOk;
}
-// I really think gUnknown_0200B134_ is part of gMain, but the code doesn't
-// match if I do that.
-#ifdef NONMATCHING
-#define gUnknown_0200B134_ gMain.saveData
-#else
-extern struct SaveData gUnknown_0200B134_; // gMain.saveData
-asm(".set gUnknown_0200B134_, gMain+0x74");
-#endif
-
-void sub_52B30(void)
+void SaveFile_WriteToSram(void)
{
u32 checksum;
- u16 *saveData = (u16 *)&gUnknown_0200B134_;
- u32 size = 0x274;
+ u16 *saveData = (u16 *)&gMain_saveData;
+ size_t size = sizeof(gMain_saveData);
- gUnknown_0200B134_.unk2E4++;
- gUnknown_0200B134_.unk2E2 = 0;
+ gMain_saveData.unk2E4++;
+ gMain_saveData.checksum = 0;
checksum = 0;
while (size > 1)
{
- checksum += *saveData++;
- size -= 2;
+ checksum += *saveData++;
+ size -= 2;
}
if (size != 0) // never happens (size is even)
- checksum += *saveData & 0xFF00;
+ checksum += *saveData & 0xFF00;
checksum = (checksum & 0xFFFF) + (checksum >> 16);
- gUnknown_0200B134_.unk2E2 = ~((checksum >> 16) + checksum);
+ gMain_saveData.checksum = ~((checksum >> 16) + checksum);
- WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E000004, 0x274);
- WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E0002A4, 0x274);
+ WriteAndVerifySramFast((u8 *)&gMain_saveData, (void *)(SRAM + 0x4), sizeof(gMain_saveData));
+ WriteAndVerifySramFast((u8 *)&gMain_saveData, (void *)(SRAM + 0x2A4), sizeof(gMain_saveData));
}
-void sub_52BB0(s16 a, u8 b)
+void SaveFile_SetPokedexFlags(s16 a, u8 b)
{
- u16 *saveData = (u16 *)&gUnknown_0200B134_;
- u32 size = 0x274;
+ u16 *saveData = (u16 *)&gMain_saveData;
+ size_t size = sizeof(gMain_saveData);
u32 checksum;
- if (gUnknown_0200B134_.pokedexFlags[a] < b)
+ if (gMain_saveData.pokedexFlags[a] < b)
{
- u16 r1;
-
- gUnknown_0200B134_.unk2E4++;
- r1 = 0;
- gUnknown_0200B134_.pokedexFlags[a] = b;
- gUnknown_0200B134_.unk2E2 = r1;
-
- checksum = 0;
- while (size > 1)
- {
- checksum += *saveData++;
- size -= 2;
- }
- if (size != 0) // never happens (size is even)
- checksum += *saveData & 0xFF00;
- checksum = (checksum & 0xFFFF) + (checksum >> 16);
- gUnknown_0200B134_.unk2E2 = ~((checksum >> 16) + checksum);
-
- WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E000004, 0x274);
- WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E0002A4, 0x274);
+ gMain_saveData.unk2E4++;
+ gMain_saveData.pokedexFlags[a] = b;
+ gMain_saveData.checksum = 0;
+
+ checksum = 0;
+ while (size > 1)
+ {
+ checksum += *saveData++;
+ size -= 2;
+ }
+ if (size != 0) // never happens (size is even)
+ checksum += *saveData & 0xFF00;
+ checksum = (checksum & 0xFFFF) + (checksum >> 16);
+ gMain_saveData.checksum = ~((checksum >> 16) + checksum);
+
+ WriteAndVerifySramFast((u8 *)&gMain_saveData, (void *)(SRAM + 0x4), sizeof(gMain_saveData));
+ WriteAndVerifySramFast((u8 *)&gMain_saveData, (void *)(SRAM + 0x2A4), sizeof(gMain_saveData));
}
}
-void sub_52C44(void)
+void SaveFile_ReadSavedGamePresent(void)
{
- ReadSramFast((u8 *)0x0E000544, (u8 *)&gMain.hasSavedGame, sizeof(gMain.hasSavedGame));
+ ReadSramFast((void *)(SRAM + 0x544), (u8 *)&gMain.hasSavedGame, sizeof(gMain.hasSavedGame));
}
void sub_52C64(void)
{
- s16 r1;
+ s16 i;
+
+ for (i = 0; i < 10; i++)
+ gMain_saveData.signature[i] = gSaveFileSignature[i];
- for (r1 = 0; r1 < 10; r1++)
- gUnknown_0200B134_.signature[r1] = gSaveFileSignature[r1];
- gUnknown_0200B134_.unk2E4 = 0;
- gUnknown_0200B134_.unk141 = 0;
- gUnknown_0200B134_.unk142 = 0;
+ gMain_saveData.unk2E4 = 0;
+ gMain_saveData.unk141 = 0;
+ gMain_saveData.ballSpeed = 0;
sub_525CC(-1);
sub_F6E0();
sub_8ABC();
- gUnknown_0200B134_.unk143 = 0;
+ gMain_saveData.unk143 = 0;
}
diff --git a/src/rom_850.c b/src/rom_850.c
index 56a4914..cd820e9 100755
--- a/src/rom_850.c
+++ b/src/rom_850.c
@@ -1,57 +1,53 @@
#include "global.h"
#include "main.h"
-u16 sub_850(void)
+u16 IsInVblank(void)
{
- if (REG_IME & INTR_FLAG_VBLANK
- && REG_DISPSTAT & DISPSTAT_VBLANK_INTR
- && REG_IE & INTR_FLAG_VBLANK
- && !(REG_DISPCNT & DISPCNT_FORCED_BLANK))
- {
- return 1;
- }
+ if ((REG_IME & 1) // Interrupts enabled
+ && (REG_DISPSTAT & DISPSTAT_VBLANK_INTR) // In VBLANK
+ && (REG_IE & INTR_FLAG_VBLANK) // VBlank interrupt enabled
+ && !(REG_DISPCNT & DISPCNT_FORCED_BLANK)) // Ignore VBlank interrupts during forced blank
+ return TRUE;
else
- {
- return 0;
- }
+ return FALSE;
}
-void sub_898(void (*func)(void))
+void SetMainCallback(void (*func)(void))
{
gUnknown_02017BD4 = func;
- if (!sub_850())
- gUnknown_0200FB9C = func;
+ if (!IsInVblank())
+ gMainCallback = func;
}
-void sub_8BC(void)
+void ResetMainCallback(void)
{
- gUnknown_0200FB9C = sub_DC4;
- gUnknown_02017BD4 = sub_DC4;
+ gMainCallback = DefaultMainCallback;
+ gUnknown_02017BD4 = DefaultMainCallback;
}
-void sub_8D4(void (*func)(void))
+void SetVBlankIntrFunc(void (*func)(void))
{
gUnknown_02017BD0 = func;
- if (!sub_850())
- *gUnknown_0200FB98 = func;
+ if (!IsInVblank())
+ *gVBlankIntrFuncPtr = func;
}
-void sub_8FC(void)
+void ResetVBlankIntrFunc(void)
{
- *gUnknown_0200FB98 = HBlankIntr;
- gUnknown_02017BD0 = HBlankIntr;
+ *gVBlankIntrFuncPtr = VBlankIntr;
+ gUnknown_02017BD0 = VBlankIntr;
}
-void sub_918(void (*func)(void))
+void SetVCountIntrFunc(void (*func)(void))
{
gUnknown_0200FBA0 = func;
- if (!sub_850())
- *gUnknown_02019BE0 = func;
+ if (!IsInVblank())
+ *gVCountIntrFuncPtr = func;
}
-void sub_940(void)
+void ResetVCountIntrFunc(void)
{
- *gUnknown_02019BE0 = VCountIntr;
+ *gVCountIntrFuncPtr = VCountIntr;
gUnknown_0200FBA0 = VCountIntr;
}
diff --git a/src/titlescreen.c b/src/titlescreen.c
index 22bc699..583ca5f 100755
--- a/src/titlescreen.c
+++ b/src/titlescreen.c
@@ -31,7 +31,7 @@ void LoadTitlescreenGraphics(void)
{
int autoDisplayMenu;
- sub_438();
+ ResetSomeGraphicsRelatedStuff();
REG_DISPCNT = DISPCNT_OBJ_ON| DISPCNT_FORCED_BLANK;
REG_BG1CNT = BGCNT_256COLOR | BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(0);
REG_DISPCNT |= DISPCNT_BG1_ON;
@@ -41,7 +41,7 @@ void LoadTitlescreenGraphics(void)
DmaCopy16(3, gTitlescreenBg_Pals, (void *)BG_PLTT, BG_PLTT_SIZE);
DmaCopy16(3, gTitlescreenBgTilemap, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE);
- sub_52C44();
+ SaveFile_ReadSavedGamePresent();
if (gMain.hasSavedGame == TRUE)
{
DmaCopy16(3, gTitlescreenSprites_Pals, (void *)OBJ_PLTT, 0xA0);
@@ -862,7 +862,7 @@ void sub_11968(void)
void sub_11B74(void)
{
sub_52C64();
- sub_52B30();
+ SaveFile_WriteToSram();
gMain.hasSavedGame = FALSE;
WriteAndVerifySramFast((const u8 *)&gMain.hasSavedGame, (void *)0x0E000544, sizeof(gMain.hasSavedGame));
}
diff --git a/src/util.c b/src/util.c
index d0f3f42..eb2a1ab 100755
--- a/src/util.c
+++ b/src/util.c
@@ -25,7 +25,7 @@ void sub_24C(void)
for (i = 0; i < 32; i++)
{
REG_BLDY = 15 - i / 2;
- sub_D74();
+ MainLoopIter();
}
REG_BLDCNT = 0;
@@ -44,7 +44,7 @@ void sub_2B4(void)
for (i = 0; i < 16; i++)
{
REG_BLDY = i + 1;
- sub_D74();
+ MainLoopIter();
}
gMain.unk16 |= DISPCNT_FORCED_BLANK;
@@ -92,13 +92,13 @@ s16 LoadSpriteSets(const struct SpriteSet *const *spriteSets, u16 numSpriteSets,
return loadedCount;
}
-void sub_438(void)
+void ResetSomeGraphicsRelatedStuff(void)
{
gMain.unk16 |= DISPCNT_FORCED_BLANK;
REG_DISPCNT |= DISPCNT_FORCED_BLANK;
- sub_490();
+ ClearGraphicsMemory();
sub_518();
- sub_578();
+ ClearSprites();
gMain.unkF = 0;
gMain.unk10 = 0;
gMain.unk50 = 0;
@@ -115,7 +115,7 @@ void sub_438(void)
gMain.unk2C = 0;
}
-void sub_490(void)
+void ClearGraphicsMemory(void)
{
DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
@@ -146,7 +146,7 @@ void sub_518(void)
}
}
-void sub_578(void)
+void ClearSprites(void)
{
u16 i, j;