diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/gbplayer.c | 1 | ||||
-rw-r--r-- | src/rom_1068C.c | 124 | ||||
-rwxr-xr-x | src/rom_3219C.c | 16 | ||||
-rw-r--r-- | src/rom_528AC.c | 254 | ||||
-rwxr-xr-x | src/titlescreen.c | 149 |
5 files changed, 467 insertions, 77 deletions
diff --git a/src/gbplayer.c b/src/gbplayer.c index 00d30d5..c0d9655 100755 --- a/src/gbplayer.c +++ b/src/gbplayer.c @@ -292,6 +292,7 @@ void sub_1198(void) void sub_11B0(int arg0) { if (gUnknown_0200B134[0xCD]) + //if (gMain.saveData.unk141) { gUnknown_02019BF8 = arg0; gUnknown_02019BFC = 0; diff --git a/src/rom_1068C.c b/src/rom_1068C.c new file mode 100644 index 0000000..4a5e619 --- /dev/null +++ b/src/rom_1068C.c @@ -0,0 +1,124 @@ +#include "global.h" +#include "main.h" + +void sub_1068C(int a, int b, int c, int d, u16 e) +{ + u16 i; + u16 j; + + for (i = 0; i < d; i++) + { + for (j = 0; j < c; j++) + { + u16 index = b * 32 + a + i * 32 + j; + + gUnknown_03005C00[index] = (gUnknown_03005C00[index] & 0xFFF) | (e << 12); + } + } +} + +// This requires volatile parameters to match. There is no reason, *ever*, to do this. +void sub_10708(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY) +{ + int i; + + for (i = 0; i < numTilesY; i++) + { + DmaCopy16(3, (u8 *)src + 0x400 * i, (u8 *)dest + 0x400 * i, numTilesX * 32); + } +} + +void sub_10750(void *volatile src, void *volatile dest, s16 numTilesX, s16 numTilesY) +{ + int i; + + for (i = 0; i < numTilesY; i++) + { + DmaCopy16(3, (u8 *)src + 0x40 * i, (u8 *)dest + 0x40 * i, numTilesX * 2); + } +} + +void sub_10798(void *a, void *b, void (*func)(void)) +{ + u16 i; + + DmaCopy16(3, a, gUnknown_0201A920, 0x200); + DmaCopy16(3, b, gUnknown_0201A920 + 0x200, 0x200); + DmaFill16(3, 0x7FFF, gUnknown_0201A920 - 0x200, 0x400); + DmaCopy16(3, gUnknown_0201A920 - 0x200, gUnknown_0201A920 + 0x200, 0x400); + DmaCopy16(3, gUnknown_0201A920 + 0x200, (void *)PLTT, 0x400); + + sub_1050C(); + gMain.unk16 = REG_DISPCNT; + + for (i = 0; i <= 32; i += 16) + { + if (func != NULL) + func(); + sub_1001C(i); + sub_D74(); + if (i == 32) + { + DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400); + } + else + { + DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400); + } + } +} + +void sub_10860(void (*func)(void)) +{ + u16 i; + + DmaCopy16(3, (void *)PLTT, gUnknown_0201A520, 0x400); + DmaFill16(3, 0x7FFF, gUnknown_0201A520 + 0x200, 0x400); + DmaCopy16(3, gUnknown_0201A520, gUnknown_0201A520 + 0x400, 0x400); + + for (i = 0; i <= 32; i += 16) + { + if (func != NULL) + func(); + sub_1001C(i); + sub_D74(); + if (i == 32) + { + DmaCopy16(3, gUnknown_0201A920, (void *)PLTT, 0x400); + } + else + { + DmaCopy16(3, gUnknown_0201AD20, (void *)PLTT, 0x400); + } + } + sub_D74(); +} + +#ifdef NONMATCHING +// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}' +void sub_1090C(void) +{ + int i; + + for (i = 0; i < 4; i++) + gUnknown_0201A500[i] = 0; +} +#else +NAKED +void sub_1090C(void) +{ + asm_unified("\n\ + ldr r1, _08010920 @ =gUnknown_0201A500\n\ + movs r2, #0\n\ + adds r0, r1, #0\n\ + adds r0, #0xc\n\ +_08010914:\n\ + str r2, [r0]\n\ + subs r0, #4\n\ + cmp r0, r1\n\ + bge _08010914\n\ + bx lr\n\ + .align 2, 0\n\ +_08010920: .4byte gUnknown_0201A500"); +} +#endif diff --git a/src/rom_3219C.c b/src/rom_3219C.c index 6954fbe..77eb7ac 100755 --- a/src/rom_3219C.c +++ b/src/rom_3219C.c @@ -43,31 +43,31 @@ void sub_3219C(void) { s16 numSpecialMons = 0; gUnknown_020314E0->catchModeSpecies = 0; - if (gUnknown_0200B134[SPECIES_AERODACTYL]) + if (gMain+0x74[SPECIES_AERODACTYL]) { specialMons[numSpecialMons++] = SPECIES_AERODACTYL; - if (gUnknown_0200B134[SPECIES_AERODACTYL] < 4) + if (gMain+0x74[SPECIES_AERODACTYL] < 4) gUnknown_020314E0->catchModeSpecies = SPECIES_AERODACTYL; } - if (gUnknown_0200B134[SPECIES_CHIKORITA]) + if (gMain+0x74[SPECIES_CHIKORITA]) { specialMons[numSpecialMons++] = SPECIES_CHIKORITA; - if (gUnknown_0200B134[SPECIES_CHIKORITA] < 4) + if (gMain+0x74[SPECIES_CHIKORITA] < 4) gUnknown_020314E0->catchModeSpecies = SPECIES_CHIKORITA; } - if (gUnknown_0200B134[SPECIES_TOTODILE]) + if (gMain+0x74[SPECIES_TOTODILE]) { specialMons[numSpecialMons++] = SPECIES_TOTODILE; - if (gUnknown_0200B134[SPECIES_TOTODILE] < 4) + if (gMain+0x74[SPECIES_TOTODILE] < 4) gUnknown_020314E0->catchModeSpecies = SPECIES_TOTODILE; } - if (gUnknown_0200B134[SPECIES_CYNDAQUIL]) + if (gMain+0x74[SPECIES_CYNDAQUIL]) { specialMons[numSpecialMons++] = SPECIES_CYNDAQUIL; - if (gUnknown_0200B134[SPECIES_CYNDAQUIL] < 4) + if (gMain+0x74[SPECIES_CYNDAQUIL] < 4) gUnknown_020314E0->catchModeSpecies = SPECIES_CYNDAQUIL; } diff --git a/src/rom_528AC.c b/src/rom_528AC.c new file mode 100644 index 0000000..f1c7d5f --- /dev/null +++ b/src/rom_528AC.c @@ -0,0 +1,254 @@ +#include "global.h" +#include "m4a.h" +#include "agb_sram.h" +#include "main.h" + +extern const u16 gUnknown_08527F18[]; + +#ifdef NONMATCHING +// Like sub_C24, it matches except for that damn 'push {lr}/pop {lr}' +int sub_528AC(u16 a) +{ + if (a <= 0xFA) + return a; + if (a <= 0x113) + return 0xC8; + return gUnknown_08527F18[a - 0x114]; +} +#else +NAKED +int sub_528AC(u16 a) +{ + asm_unified("\n\ + lsls r0, r0, #0x10\n\ + lsrs r0, r0, #0x10\n\ + adds r1, r0, #0\n\ + cmp r0, #0xfa\n\ + bls _080528DA\n\ + ldr r0, _080528CC @ =0x00000113\n\ + cmp r1, r0\n\ + bls _080528D8\n\ + ldr r0, _080528D0 @ =gUnknown_08527F18\n\ + ldr r2, _080528D4 @ =0xFFFFFEEC\n\ + adds r1, r1, r2\n\ + lsls r1, r1, #1\n\ + adds r1, r1, r0\n\ + ldrh r0, [r1]\n\ + b _080528DA\n\ + .align 2, 0\n\ +_080528CC: .4byte 0x00000113\n\ +_080528D0: .4byte gUnknown_08527F18\n\ +_080528D4: .4byte 0xFFFFFEEC\n\ +_080528D8:\n\ + movs r0, #0xc8\n\ +_080528DA:\n\ + bx lr"); +} +#endif + +void sub_52940(u16, s8, s8, u8, int); + +void sub_528DC(u16 a, s8 b) +{ + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x99); + sub_52940(a, b, 0x7D, 10, 0); +} + +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) +{ + u16 r5 = a - 1; + u32 pitch = 0x3C00; + u32 var; + u32 r1; + u8 r0; + + SetPokemonCryVolume(c); + SetPokemonCryPanpot(b); + SetPokemonCryPitch(pitch); + SetPokemonCryLength(0x8C); + SetPokemonCryProgress(0); + SetPokemonCryRelease(0); + SetPokemonCryChorus(0); + SetPokemonCryPriority(d); + var = sub_528AC(r5); + r1 = var & 0x7F; + r0 = var >> 7; + switch (r0) + { + case 0: + SetPokemonCryTone(&gUnknown_08532D6C[r1]); + break; + case 1: + SetPokemonCryTone(&gUnknown_08533360[r1]); + break; + case 2: + SetPokemonCryTone(&gUnknown_08533960[r1]); + break; + case 3: + SetPokemonCryTone(&gUnknown_08533F60[r1]); + break; + } +} + +extern u16 sub_52A68(void); +extern void sub_525CC(s8); + +void sub_52A18(void) +{ + SetSramFastFunc(); + gMain.unkC = 0; + if (sub_52A68() == 0) + { + sub_52C64(); + sub_52B30(); + if (sub_52A68() == 0) + { + gMain.unkC = 1; + sub_52C64(); + } + } + else + { + sub_525CC(gMain.saveData.unk143); + } +} + +extern struct Main2 gMain_; +extern u8 gSaveFileSignature[]; + +u16 sub_52A68(void) +{ + u16 r8 = 0; + u16 fileNum; + u16 i; + u32 checksum; + + // 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; + + ReadSramFast((u8 *)0x0E000004 + fileNum * 672, (u8 *)saveData, size); + + // Verify signature + for (i = 0; i < 10; i++) + { + if (gMain.saveData.signature[i] != gSaveFileSignature[i]) + break; + } + if (i != 10) + continue; + + // Verify checksum + 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); + if (checksum == 0xFFFF) + { + r8 = 1; + break; + } + } + return r8; +} + +// 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) +{ + u32 checksum; + u16 *saveData = (u16 *)&gUnknown_0200B134_; + u32 size = 0x274; + + gUnknown_0200B134_.unk2E4++; + gUnknown_0200B134_.unk2E2 = 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); + gUnknown_0200B134_.unk2E2 = ~((checksum >> 16) + checksum); + + WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E000004, 0x274); + WriteAndVerifySramFast((u8 *)&gUnknown_0200B134_, (u8 *)0x0E0002A4, 0x274); +} + +void sub_52BB0(s16 a, u8 b) +{ + u16 *saveData = (u16 *)&gUnknown_0200B134_; + u32 size = 0x274; + u32 checksum; + + if (gUnknown_0200B134_.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); + } +} + +void sub_52C44(void) +{ + ReadSramFast((u8 *)0x0E000544, (u8 *)&gMain.hasSavedGame, sizeof(gMain.hasSavedGame)); +} + +void sub_52C64(void) +{ + s16 r1; + + for (r1 = 0; r1 < 10; r1++) + gUnknown_0200B134_.signature[r1] = gSaveFileSignature[r1]; + gUnknown_0200B134_.unk2E4 = 0; + gUnknown_0200B134_.unk141 = 0; + gUnknown_0200B134_.unk142 = 0; + sub_525CC(-1); + sub_F6E0(); + sub_8ABC(); + gUnknown_0200B134_.unk143 = 0; +} diff --git a/src/titlescreen.c b/src/titlescreen.c index 6a2bcac..22bc699 100755 --- a/src/titlescreen.c +++ b/src/titlescreen.c @@ -12,6 +12,15 @@ static void sub_11640(void); // it will transition to a demo gameplay experience. #define NUM_IDLE_FRAMES 1800 +enum +{ + SUBSTATE_LOAD_GRAPHICS = 0, + SUBSTATE_WAIT_FOR_START_BUTTON = 1, + SUBSTATE_MENU_INPUT_NO_SAVED_GAME = 4, + SUBSTATE_MENU_INPUT_SAVED_GAME = 5, + SUBSTATE_ANIM_CLOSE_MENU = 6, + SUBSTATE_EXEC_MENU_SELECTION = 10 +}; void TitlescreenMain(void) { @@ -33,7 +42,7 @@ void LoadTitlescreenGraphics(void) DmaCopy16(3, gTitlescreenBgTilemap, (void *)BG_SCREEN_ADDR(0), BG_SCREEN_SIZE); sub_52C44(); - if (gMain.unk40 == 1) + if (gMain.hasSavedGame == TRUE) { DmaCopy16(3, gTitlescreenSprites_Pals, (void *)OBJ_PLTT, 0xA0); DmaCopy16(3, gTitlescreenSpritesSavedGame_Gfx, (void *)BG_CHAR_ADDR(4), 0x7000); @@ -62,7 +71,7 @@ void LoadTitlescreenGraphics(void) } else { - gMain.subState = 1; + gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON; sub_CBC(); sub_FD5C(sub_11640); } @@ -74,7 +83,7 @@ void sub_10AC0(void) { int i; - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gTitlescreen.unk2 = 0; gTitlescreen.unk6 = 0; gTitlescreen.unk8 = 0; @@ -93,7 +102,7 @@ void sub_10AC0(void) gEReaderAccessStep = 0; gEReaderAccessCounter = 0; - if (gMain.unk40 == 1) + if (gMain.hasSavedGame == TRUE) { for (i = 0; i < 7; i++) gUnknown_0202BE00[i] = gUnknown_086A975C[i]; @@ -123,7 +132,7 @@ void sub_10AC0(void) gUnknown_202BE24 = 0; } -void sub_10BB8(void) +void TitleScreen1_WaitForStartButton(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) @@ -142,10 +151,10 @@ void sub_10BB8(void) if (!gUnknown_020028A4) { - gTitlescreen.unk4++; - if (gTitlescreen.unk4 >= gUnknown_086A9662[gTitlescreen.unk8]) + gTitlescreen.animTimer++; + if (gTitlescreen.animTimer >= gUnknown_086A9662[gTitlescreen.unk8]) { - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; if (++gTitlescreen.unk8 > 3) gTitlescreen.unk8 = 0; } @@ -156,7 +165,7 @@ void sub_10BB8(void) if (gMain.newKeys & (A_BUTTON | START_BUTTON)) { m4aSongNumStart(0x65); - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gTitlescreen.unk2 = 0; gMain.subState = 2; } @@ -185,7 +194,7 @@ void sub_10BB8(void) sub_11640(); } -void sub_10CF0(void) +void TitleScreen2_Unknown(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) @@ -197,10 +206,10 @@ void sub_10CF0(void) if (!gUnknown_020028A4) { - gTitlescreen.unk4++; - if (gTitlescreen.unk4 >= gUnknown_086A9666[gTitlescreen.unk2][1]) + gTitlescreen.animTimer++; + if (gTitlescreen.animTimer >= gUnknown_086A9666[gTitlescreen.unk2][1]) { - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gTitlescreen.unk8 = gUnknown_086A9666[gTitlescreen.unk2][0]; if (++gTitlescreen.unk2 > 5) { @@ -216,14 +225,14 @@ void sub_10CF0(void) sub_11640(); } -void sub_10D84(void) +void TitleScreen9_Unknown(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) { gUnknown_020028A4 = 1; gTitlescreen.unk6 = 9; - gMain.subState = 10; + gMain.subState = SUBSTATE_EXEC_MENU_SELECTION; } if (!gUnknown_020028A4) @@ -235,20 +244,20 @@ void sub_10D84(void) sub_2B4(); m4aMPlayAllStop(); sub_D10(); - gMain.subState = 0; + gMain.subState = SUBSTATE_LOAD_GRAPHICS; } else if (gMain.newKeys & B_BUTTON) { m4aSongNumStart(0x66); gTitlescreen.unk11 = 0; - gMain.subState = 1; + gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON; } } sub_11640(); } -void sub_10E00(void) +void TitleScreen3_Unknown(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) @@ -262,17 +271,17 @@ void sub_10E00(void) { if (!gTitlescreen.unk7) { - gTitlescreen.unk4++; - if (gTitlescreen.unk4 >= gUnknown_086A9748[gTitlescreen.unk2]) + gTitlescreen.animTimer++; + if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2]) { - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gUnknown_0201C190[6] = gUnknown_086A9714[gTitlescreen.unk2]; if (++gTitlescreen.unk2 > 11) { gTitlescreen.unk2 = 0; gTitlescreen.unkD = 1; gTitlescreen.unkF = 1; - gMain.subState = 4; + gMain.subState = SUBSTATE_MENU_INPUT_NO_SAVED_GAME; } } @@ -280,17 +289,17 @@ void sub_10E00(void) } else { - gTitlescreen.unk4++; - if (gTitlescreen.unk4 >= gUnknown_086A9748[gTitlescreen.unk2]) + gTitlescreen.animTimer++; + if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2]) { - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gUnknown_0202BE00[6] = gUnknown_086A9778[gTitlescreen.unk2]; if (++gTitlescreen.unk2 > 11) { gTitlescreen.unk2 = 0; gTitlescreen.unkD = 1; gTitlescreen.unkF = 1; - gMain.subState = 5; + gMain.subState = SUBSTATE_MENU_INPUT_SAVED_GAME; } } @@ -299,22 +308,22 @@ void sub_10E00(void) } } -void sub_10EF4(void) +void TitleScreen4_MenuInputNoSavedGame(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) { gUnknown_020028A4 = 1; gTitlescreen.unk6 = 9; - gMain.subState = 10; + gMain.subState = SUBSTATE_EXEC_MENU_SELECTION; } if (!gUnknown_020028A4) { - gTitlescreen.unk4++; - if (gTitlescreen.unk4 >= gUnknown_086A9672[gTitlescreen.unk2][1]) + gTitlescreen.animTimer++; + if (gTitlescreen.animTimer >= gUnknown_086A9672[gTitlescreen.unk2][1]) { - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; if (++gTitlescreen.unk2 > 6) gTitlescreen.unk2 = 0; @@ -338,18 +347,18 @@ void sub_10EF4(void) if (gMain.newKeys & (A_BUTTON | START_BUTTON)) { m4aSongNumStart(0x65); - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gTitlescreen.unk2 = 0; gMain.subState = 7; } else if (gMain.newKeys & B_BUTTON) { m4aSongNumStart(0x66); - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gTitlescreen.unk2 = 12; gTitlescreen.unkD = 0; gTitlescreen.unkF = 0; - gMain.subState = 6; + gMain.subState = SUBSTATE_ANIM_CLOSE_MENU; } sub_1157C(); @@ -358,7 +367,7 @@ void sub_10EF4(void) sub_1175C(); } -void sub_11020(void) +void TitleScreen7_Unknown(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) @@ -370,9 +379,9 @@ void sub_11020(void) if (!gUnknown_020028A4) { - u16 unk4 = gTitlescreen.unk4; + u16 animTimer = gTitlescreen.animTimer; u16 mask = 0x3; - if (!(unk4 & mask)) + if (!(animTimer & mask)) { if (!gTitlescreen.unk2) { @@ -387,35 +396,35 @@ void sub_11020(void) } } - if (gTitlescreen.unk4 > 20) + if (gTitlescreen.animTimer > 20) { gMain.unkD = 0; gTitlescreen.unk6 = gUnknown_086A96A4[gTitlescreen.menuCursorIndex]; - gMain.subState = 10; + gMain.subState = SUBSTATE_EXEC_MENU_SELECTION; } - gTitlescreen.unk4++; + gTitlescreen.animTimer++; } sub_1175C(); } -void sub_110FC(void) +void TitleScreen5_MenuInputSavedGame(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) { gUnknown_020028A4 = 1; gTitlescreen.unk6 = 9; - gMain.subState = 10; + gMain.subState = SUBSTATE_EXEC_MENU_SELECTION; } if (!gUnknown_020028A4) { - gTitlescreen.unk4++; - if (gTitlescreen.unk4 >= gUnknown_086A9672[gTitlescreen.unk2][1]) + gTitlescreen.animTimer++; + if (gTitlescreen.animTimer >= gUnknown_086A9672[gTitlescreen.unk2][1]) { - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; if (++gTitlescreen.unk2 > 6) gTitlescreen.unk2 = 0; @@ -439,18 +448,18 @@ void sub_110FC(void) if (gMain.newKeys & (A_BUTTON | START_BUTTON)) { m4aSongNumStart(0x65); - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gTitlescreen.unk2 = 0; gMain.subState = 8; } else if (gMain.newKeys & B_BUTTON) { m4aSongNumStart(0x66); - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; gTitlescreen.unk2 = 12; gTitlescreen.unkD = 0; gTitlescreen.unkF = 0; - gMain.subState = 6; + gMain.subState = SUBSTATE_ANIM_CLOSE_MENU; } sub_1157C(); @@ -459,7 +468,7 @@ void sub_110FC(void) sub_11968(); } -void sub_11228(void) +void TitleScreen8_Unknown(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) @@ -471,9 +480,11 @@ void sub_11228(void) if (!gUnknown_020028A4) { - u16 unk4 = gTitlescreen.unk4; + u16 animTimer = gTitlescreen.animTimer; u16 mask = 0x3; - if (!(unk4 & mask)) + + // Blink menu item + if (!(animTimer & mask)) { if (!gTitlescreen.unk2) { @@ -488,7 +499,7 @@ void sub_11228(void) } } - if (gTitlescreen.unk4 > 20) + if (gTitlescreen.animTimer > 20) { if (gTitlescreen.menuCursorIndex == 1) gMain.unkD = 1; @@ -496,16 +507,16 @@ void sub_11228(void) gMain.unkD = 0; gTitlescreen.unk6 = gUnknown_086A96D4[gTitlescreen.menuCursorIndex]; - gMain.subState = 10; + gMain.subState = SUBSTATE_EXEC_MENU_SELECTION; } - gTitlescreen.unk4++; + gTitlescreen.animTimer++; } sub_11968(); } -void sub_11320(void) +void TitleScreen6_AnimCloseMenu(void) { if ((gMain.heldKeys & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) == (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON)) @@ -519,10 +530,10 @@ void sub_11320(void) { if (!gTitlescreen.unk7) { - gTitlescreen.unk4++; - if (gTitlescreen.unk4 >= gUnknown_086A9748[gTitlescreen.unk2]) + gTitlescreen.animTimer++; + if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2]) { - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; if (--gTitlescreen.unk2 < 0) { gTitlescreen.unk2 = 0; @@ -530,7 +541,7 @@ void sub_11320(void) gUnknown_202BE24 = 1; gTitlescreen.unk9 = 1; gTitlescreen.unkB = 0; - gMain.subState = 1; + gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON; } gUnknown_0201C190[6] = gUnknown_086A9714[gTitlescreen.unk2]; @@ -540,10 +551,10 @@ void sub_11320(void) } else { - gTitlescreen.unk4++; - if (gTitlescreen.unk4 >= gUnknown_086A9748[gTitlescreen.unk2]) + gTitlescreen.animTimer++; + if (gTitlescreen.animTimer >= gUnknown_086A9748[gTitlescreen.unk2]) { - gTitlescreen.unk4 = 0; + gTitlescreen.animTimer = 0; if (--gTitlescreen.unk2 < 0) { gTitlescreen.unk2 = 0; @@ -551,7 +562,7 @@ void sub_11320(void) gUnknown_202BE24 = 1; gTitlescreen.unk9 = 1; gTitlescreen.unkB = 0; - gMain.subState = 1; + gMain.subState = SUBSTATE_WAIT_FOR_START_BUTTON; } gUnknown_0202BE00[6] = gUnknown_086A9778[gTitlescreen.unk2]; @@ -562,7 +573,7 @@ void sub_11320(void) } } -void sub_11428(void) +void TitleScreen10_ExecMenuSelection(void) { if (!gTitlescreen.unk7) sub_FE04(sub_1175C); @@ -581,7 +592,7 @@ void sub_11428(void) SetMainGameState(gUnknown_086A964C[gTitlescreen.unk6]); } -void sub_114B4(void) +void TitleScreen11_Unknown(void) { sub_FE04(sub_11640); m4aMPlayAllStop(); @@ -634,10 +645,10 @@ static void sub_1157C(void) gEReaderAccessCounter = 0; m4aSongNumStart(0x65); gTitlescreen.unk6 = 5; - if (gMain.subState == 1) + if (gMain.subState == SUBSTATE_WAIT_FOR_START_BUTTON) gMain.subState = 11; else - gMain.subState = 10; + gMain.subState = SUBSTATE_EXEC_MENU_SELECTION; } } @@ -852,6 +863,6 @@ void sub_11B74(void) { sub_52C64(); sub_52B30(); - gMain.unk40 = 0; - WriteAndVerifySramFast((const u8 *)&gMain.unk40, (void *)0x0E000544, 4); + gMain.hasSavedGame = FALSE; + WriteAndVerifySramFast((const u8 *)&gMain.hasSavedGame, (void *)0x0E000544, sizeof(gMain.hasSavedGame)); } |