summaryrefslogtreecommitdiff
path: root/src/options.c
diff options
context:
space:
mode:
authorCameron Hall <cameronghall@cox.net>2019-08-11 13:11:32 -0500
committerCameron Hall <cameronghall@cox.net>2019-08-11 13:11:32 -0500
commitb0870ee7fbf34fe4fa8bf6a622a3c46aa326f1fb (patch)
treed460bab4119ca6326b0e71787c63794b52835fbd /src/options.c
parent4c8669a3aad601f1381ca9c67c78040ce80157df (diff)
decompile through sub_51C3C
Diffstat (limited to 'src/options.c')
-rw-r--r--src/options.c501
1 files changed, 501 insertions, 0 deletions
diff --git a/src/options.c b/src/options.c
new file mode 100644
index 0000000..ef31b58
--- /dev/null
+++ b/src/options.c
@@ -0,0 +1,501 @@
+#include "global.h"
+#include "m4a.h"
+#include "main.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 gUnknown_02002920;
+
+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)
+{
+ sub_438();
+
+ 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++;
+}
+
+extern u8 gUnknown_02031AF0[][10];
+extern u8 gUnknown_08527ED6[][10];
+
+void sub_513B8(void)
+{
+ int i;
+ int j;
+
+ gUnknown_02002920.unk0 = 0;
+ gUnknown_02002920.unk2 = 0;
+ gUnknown_02002920.unk4 = 0;
+ gUnknown_02002920.unk6 = 1;
+ gUnknown_02002920.unk8 = 0;
+ gUnknown_02002920.unkA = 0;
+ gUnknown_02002920.unkC = gUnknown_0200B134.unk143;
+ gUnknown_02002920.unkE = 0;
+ gUnknown_02002920.unk10 = 0;
+ gUnknown_02002920.unk12 = 0;
+ gUnknown_02002920.unk13 = 0;
+ gUnknown_02002920.unk14 = 1;
+ gUnknown_02002920.unk15 = 0;
+ gUnknown_02002920.unk16 = 0;
+ gUnknown_02002920.unk17 = 1;
+ gUnknown_02002920.unk18 = 0;
+ for (i = 0; i < 6; i++)
+ gUnknown_02002920.unk1A[i] = 0;
+ gUnknown_02002920.unk20 = 0;
+ gUnknown_02002920.unk22 = 0;
+ for (i = 0; i < 2; i++)
+ gUnknown_02002920.unk24[i] = 10;
+ gUnknown_02002920.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)
+ {
+ gUnknown_02002920.unk2A = gUnknown_0200B134.unk141;
+ gUnknown_0200B134.unk141 = 1;
+ }
+ else
+ {
+ gUnknown_02002920.unk2A = 0;
+ gUnknown_0200B134.unk141 = 0;
+ }
+ gUnknown_02002920.unk2E = 0;
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2D = 0;
+ gUnknown_02002920.unk2F = 0;
+ gUnknown_02002920.unk30 = 0;
+}
+
+extern u16 gUnknown_08527D22[];
+extern u16 gUnknown_086BB910[][4];
+extern struct {u8 unk0; s16 unk2;} gUnknown_086BB9B4[];
+extern u16 gUnknown_08527D66[];
+
+void sub_514B8(void)
+{
+ s16 r4;
+
+ sub_51C9C();
+ switch (gUnknown_02002920.unk0)
+ {
+ case 0:
+ if (gMain.newKeys & 0x40)
+ {
+ if (gUnknown_02002920.unkA != 0xD)
+ {
+ if (gUnknown_02002920.unkA == 0xE)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA = 0xD;
+ }
+ else if (gUnknown_02002920.unkA > 0)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA--;
+ }
+ }
+ }
+ //_0805152C
+ else if (gMain.newKeys & 0x80)
+ {
+ if (gUnknown_02002920.unkA < 6)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA++;
+ }
+ else if (gUnknown_02002920.unkA == 0xD)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA = 0xE;
+ }
+ //_0805155E
+ else if (gUnknown_02002920.unkA == 0xE)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA = 2;
+ }
+ // _0805156A
+ }
+ //_0805156C
+ if ((gMain.newKeys & 0x10) && gGameBoyPlayerEnabled == 1 && (u16)gUnknown_02002920.unkA < 2)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA += 0xD;
+ }
+ if ((gMain.newKeys & 0x20) && gGameBoyPlayerEnabled == 1 && (u16)(gUnknown_02002920.unkA - 13) < 2)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA -= 0xD;
+ }
+ //_080515C2
+ if (gMain.newKeys & 1)
+ {
+ switch (gUnknown_02002920.unkA)
+ {
+ case 0:
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk0 = 1;
+ gUnknown_02002920.unk18 = 0;
+ gUnknown_02002920.unk30 = 1;
+ if (gUnknown_02002920.unk2E == 1)
+ {
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2D = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2E = 0;
+ }
+ break;
+ case 1:
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk0 = 2;
+ gUnknown_02002920.unk18 = 0;
+ gUnknown_02002920.unk30 = 1;
+ if (gUnknown_02002920.unk2E == 1)
+ {
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2D = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2E = 0;
+ }
+ break;
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unkC = gUnknown_02002920.unkA - 2;
+ gUnknown_0200B134.unk143 = gUnknown_02002920.unkC;
+ break;
+ case 6:
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unkC = gUnknown_02002920.unkA - 2;
+ gUnknown_0200B134.unk143 = gUnknown_02002920.unkC;
+ gUnknown_02002920.unkA = 7;
+ gUnknown_02002920.unk0 = 3;
+ break;
+ case 14:
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk2D = 0;
+ if (gUnknown_02002920.unk2E == 1)
+ gUnknown_02002920.unk2E = 0;
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2A = 0;
+ }
+ break;
+ case 13:
+ if (gGameBoyPlayerEnabled == 1)
+ {
+ m4aSongNumStart(0x65);
+ sub_11B0(11);
+ if (gUnknown_02002920.unk2E == 0)
+ gUnknown_02002920.unk2E = 1;
+
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2A = 1;
+ }
+ break;
+ }
+ }
+ //_0805177C
+ else if (gMain.newKeys & 2)
+ {
+ m4aSongNumStart(0x66);
+ gMain.subState++;
+ sub_525CC(gMain.saveData.unk143);
+
+ }
+ if (!(gMain.unk4C & 7))
+ gUnknown_02002920.unk2 = 1 - gUnknown_02002920.unk2;
+ break;
+ case 1: // _080517A8
+ if (gMain.heldKeys & 0x20)
+ {
+ if (gUnknown_02002920.unk18 == 0)
+ {
+ gUnknown_02002920.unkE--;
+ gUnknown_02002920.unk18 = 10;
+ }
+ }
+ else if (gMain.heldKeys & 0x10)
+ {
+ if (gUnknown_02002920.unk18 == 0)
+ {
+ gUnknown_02002920.unkE++;
+ gUnknown_02002920.unk18 = 10;
+ }
+ }
+ if (gMain.newKeys & 0x40)
+ gUnknown_02002920.unkE += 10;
+ else if (gMain.newKeys & 0x80)
+ gUnknown_02002920.unkE -= 10;
+ if (gUnknown_02002920.unkE < 0)
+ gUnknown_02002920.unkE = 33;
+ if (gUnknown_02002920.unkE > 33)
+ gUnknown_02002920.unkE = 0;
+
+ r4 = gUnknown_02002920.unkE + 1;
+ gUnknown_02002920.unk12 = r4 / 100;
+ r4 %= 100;
+ gUnknown_02002920.unk13 = r4 / 10;
+ gUnknown_02002920.unk14 = r4 % 10;
+ if (gMain.newKeys & 1)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(gUnknown_08527D22[gUnknown_02002920.unkE]);
+ }
+ else if (gMain.newKeys & 2)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(0x66);
+ gUnknown_02002920.unk4 = 0;
+ gUnknown_02002920.unk30 = 0;
+ gUnknown_02002920.unk0 = 0;
+ }
+ //_080518AA
+ if (!(gMain.unk4C & 7))
+ gUnknown_02002920.unk4 = 1 - gUnknown_02002920.unk4;
+ if (gUnknown_02002920.unk18 > 0)
+ gUnknown_02002920.unk18--;
+ break;
+ case 2:
+ if (gMain.heldKeys & 0x20)
+ {
+ if (gUnknown_02002920.unk18 == 0)
+ {
+ gUnknown_02002920.unk10--;
+ gUnknown_02002920.unk18 = 10;
+ }
+ }
+ else if (gMain.heldKeys & 0x10)
+ {
+ if (gUnknown_02002920.unk18 == 0)
+ {
+ gUnknown_02002920.unk10++;
+ gUnknown_02002920.unk18 = 10;
+ }
+ }
+ //_08051918
+ if (gMain.newKeys & 0x40)
+ gUnknown_02002920.unk10 += 10;
+ else if (gMain.newKeys & 0x80)
+ gUnknown_02002920.unk10 -= 10;
+ if (gUnknown_02002920.unk10 < 0)
+ gUnknown_02002920.unk10 = 0xB7;
+ if (gUnknown_02002920.unk10 > 0xB7)
+ gUnknown_02002920.unk10 = 0;
+
+ r4 = gUnknown_02002920.unk10 + 1;
+ gUnknown_02002920.unk15 = r4 / 100;
+ r4 %= 100;
+ gUnknown_02002920.unk16 = r4 / 10;
+ gUnknown_02002920.unk17 = r4 % 10;
+ if (gMain.newKeys & 0x1)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(gUnknown_08527D66[gUnknown_02002920.unk10]);
+ }
+ else if (gMain.newKeys & 0x2)
+ {
+ m4aMPlayAllStop();
+ m4aSongNumStart(0x66);
+ gUnknown_02002920.unk4 = 0;
+ gUnknown_02002920.unk30 = 0;
+ gUnknown_02002920.unk0 = 0;
+ }
+ if (!(gMain.unk4C & 7))
+ gUnknown_02002920.unk4 = 1 - gUnknown_02002920.unk4;
+ if (gUnknown_02002920.unk18 > 0)
+ gUnknown_02002920.unk18--;
+ break;
+ case 3: //_08051A08
+ if (gMain.newKeys & 0x40)
+ {
+ if (gUnknown_02002920.unkA > 7)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA--;
+ }
+ }
+ //_08051A34
+ else if (gMain.newKeys & 0x80)
+ {
+ if (gUnknown_02002920.unkA <= 10)
+ {
+ m4aSongNumStart(0x67);
+ gUnknown_02002920.unkA++;
+ }
+ }
+ //_08051A52
+ if (gMain.newKeys & 1)
+ {
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk0 = 4;
+ gUnknown_02002920.unk1A[gUnknown_02002920.unkA - 7] = 1;
+ }
+ //_08051A80
+ else if (gMain.newKeys & 2)
+ {
+ m4aSongNumStart(0x66);
+ gUnknown_02002920.unkA = 6;
+ gUnknown_02002920.unk0 = 0;
+ }
+ //_08051A96
+ if (!(gMain.unk4C & 7))
+ gUnknown_02002920.unk2 = 1 - gUnknown_02002920.unk2;
+ break;
+ case 4:
+ gUnknown_02002920.unk8++;
+ if (gUnknown_02002920.unk8 > 24)
+ {
+ gUnknown_02002920.unk8 = 0;
+ gUnknown_02002920.unk6 = 1 - gUnknown_02002920.unk6;
+ }
+ if (gMain.newKeys & 0x3F7)
+ {
+ s16 i;
+
+ m4aSongNumStart(0x65);
+ gUnknown_02002920.unk20 = 10;
+ gUnknown_02002920.unk22 = 0;
+ for (i = 0; i < 2; i++)
+ gUnknown_02002920.unk24[i] = 10;
+ gUnknown_02002920.unk28 = 0;
+ }
+ //_08051B0E
+ if (gUnknown_02002920.unk20 > 0)
+ {
+ sub_524BC();
+ gUnknown_02002920.unk20--;
+ if (gUnknown_02002920.unk20 == 0)
+ {
+ gUnknown_02031AF0[4][(gUnknown_02002920.unkA - 7) * 2 + 0] = gUnknown_02002920.unk24[0];
+ gUnknown_02031AF0[4][(gUnknown_02002920.unkA - 7) * 2 + 1] = gUnknown_02002920.unk24[1];
+ gUnknown_0200B134.unk144[(gUnknown_02002920.unkA - 7)][0] = gUnknown_086BB910[gUnknown_02002920.unk24[0]][0];
+ gUnknown_0200B134.unk144[(gUnknown_02002920.unkA - 7)][1] = gUnknown_086BB910[gUnknown_02002920.unk24[1]][0];
+ gUnknown_02002920.unk0 = 3;
+ gUnknown_02002920.unk1A[gUnknown_02002920.unkA - 7] = 0;
+ gUnknown_02002920.unk8 = 0;
+ gUnknown_02002920.unk6 = 1;
+ }
+ }
+ break;
+ }
+ //_08051B98
+ if (gUnknown_02002920.unk2E == 1)
+ {
+ //gUnknown_02002920.unk2B++;
+ if (++gUnknown_02002920.unk2B > gUnknown_086BB9B4[gUnknown_02002920.unk2C].unk2)
+ {
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2C++;
+ if (gUnknown_02002920.unk2C > 12)
+ {
+ gUnknown_02002920.unk2C = 0;
+ gUnknown_02002920.unk2D = 0;
+ gUnknown_02002920.unk2E = 0;
+ }
+ //_08051BE8
+ gUnknown_02002920.unk2D = gUnknown_086BB9B4[gUnknown_02002920.unk2C].unk0;
+ }
+ // _08051C30
+ }
+ else
+ //_08051C10
+ {
+ gUnknown_02002920.unk2B++;
+ if (gUnknown_02002920.unk2B > 18)
+ {
+ gUnknown_02002920.unk2B = 0;
+ gUnknown_02002920.unk2D = 1 - gUnknown_02002920.unk2D;
+ }
+ }
+ sub_11FC();
+}
+
+void sub_51C3C(void)
+{
+ sub_111C();
+ if (sub_1170() != 0)
+ {
+ sub_1198();
+ gMain.subState++;
+ }
+}