summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-07-30 22:07:15 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-07-30 22:07:15 -0400
commitea8f529f2d5bb520b83d5b7721dc47ba1b489d45 (patch)
tree87a234f44bc4284c3a7c997d274b264320c8163b /src
parent23d917f7c89c1256f1e935a57d490816fd916f55 (diff)
title_screen: data and code thru sub_8078C9C
Diffstat (limited to 'src')
-rw-r--r--src/title_screen.c192
1 files changed, 192 insertions, 0 deletions
diff --git a/src/title_screen.c b/src/title_screen.c
new file mode 100644
index 000000000..9e779bb7b
--- /dev/null
+++ b/src/title_screen.c
@@ -0,0 +1,192 @@
+#include "global.h"
+#include "malloc.h"
+#include "palette.h"
+#include "gpu_regs.h"
+#include "bg.h"
+#include "task.h"
+#include "main.h"
+#include "new_menu_helpers.h"
+#include "m4a.h"
+#include "scanline_effect.h"
+#include "constants/songs.h"
+
+EWRAM_DATA u8 gUnknown_2037F30 = 0;
+
+void sub_8078B34(void);
+void sub_8078B9C(void);
+void sub_8078BB4(void);
+void sub_8078BEC(u8 taskId);
+void sub_8078C24(u8 taskId);
+void sub_8078C90(s16 * data, u8 a1);
+void sub_8078C9C(s16 * data);
+void sub_8078D24(s16 * data);
+void sub_8078DA4(s16 * data);
+void sub_8078FC4(s16 * data);
+void sub_80790CC(s16 * data);
+void sub_80791C0(s16 * data);
+void sub_8079708(void);
+void sub_8079620(void);
+void sub_8079648(void);
+void sub_8079A10(s16 a0);
+
+const u8 gUnknown_83BF58C[] = INCBIN_U8("data/graphics/title_screen/unk_83BF58C.4bpp.lz");
+const u8 gUnknown_83BF5A8[] = INCBIN_U8("data/graphics/title_screen/unk_83BF5A8.bin.lz");
+extern const struct BgTemplate gUnknown_83BFB74[4];
+extern const void (*const gUnknown_83BFB84[])(s16 * data);
+
+/*graphics.h*/
+extern const u16 gUnknown_8EAB6C4[];
+extern const u8 gUnknown_8EAB8C4[];
+extern const u8 gUnknown_8EAD390[];
+extern const u16 gUnknown_8EAD5E8[];
+extern const u8 gUnknown_8EAD608[];
+extern const u8 gUnknown_8EADEE4[];
+extern const u16 gUnknown_8EAE094[];
+extern const u8 gUnknown_8EAE0B4[];
+extern const u8 gUnknown_8EAE374[];
+
+void CB2_InitTitleScreen(void)
+{
+ switch (gMain.state)
+ {
+ default:
+ gMain.state = 0;
+ // fallthrough
+ case 0:
+ SetVBlankCallback(NULL);
+ StartTimer1();
+ InitHeap(gHeap, HEAP_SIZE);
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ ResetPaletteFade();
+ sub_8078B34();
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)PLTT, PLTT_SIZE);
+ ResetBgsAndClearDma3BusyFlags(FALSE);
+ InitBgsFromTemplates(0, gUnknown_83BFB74, NELEMS(gUnknown_83BFB74));
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
+ gUnknown_2037F30 = 0xFF;
+ break;
+ case 1:
+ LoadPalette(gUnknown_8EAB6C4, 0, 0x1A0);
+ DecompressAndCopyTileDataToVram(0, gUnknown_8EAB8C4, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(0, gUnknown_8EAD390, 0, 0, 1);
+ LoadPalette(gUnknown_8EAD5E8, 0xD0, 0x20);
+ DecompressAndCopyTileDataToVram(1, gUnknown_8EAD608, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(1, gUnknown_8EADEE4, 0, 0, 1);
+ LoadPalette(gUnknown_8EAE094, 0xF0, 0x20);
+ DecompressAndCopyTileDataToVram(2, gUnknown_8EAE0B4, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(2, gUnknown_8EAE374, 0, 0, 1);
+ LoadPalette(gUnknown_8EAE094, 0xE0, 0x20);
+ DecompressAndCopyTileDataToVram(3, gUnknown_83BF58C, 0, 0, 0);
+ DecompressAndCopyTileDataToVram(3, gUnknown_83BF5A8, 0, 0, 1);
+ sub_8079708();
+ break;
+ case 2:
+ if (!FreeTempTileDataBuffersIfPossible())
+ {
+ BlendPalettes(0x0000FFFF, 0x10, RGB_BLACK);
+ CreateTask(sub_8078C24, 4);
+ gUnknown_2037F30 = CreateTask(sub_8078BEC, 2);
+ SetVBlankCallback(sub_8078BB4);
+ SetMainCallback2(sub_8078B9C);
+ m4aSongNumStart(BGM_FRLG_TITLE);
+ }
+ return;
+ }
+ gMain.state++;
+}
+
+void sub_8078B34(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+}
+
+void sub_8078B9C(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void sub_8078BB4(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+
+ if (gUnknown_2037F30 != 0xFF)
+ gTasks[gUnknown_2037F30].data[0]++;
+}
+
+void sub_8078BEC(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (data[0] >= 2700)
+ {
+ gUnknown_2037F30 = 0xFF;
+ DestroyTask(taskId);
+ }
+}
+
+void sub_8078C24(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (JOY_NEW(A_BUTTON | B_BUTTON | START_BUTTON)
+ && data[0] != 3 && data[0] != 4 && data[0] != 5)
+ {
+ sub_8079620();
+ sub_8079648();
+ sub_8079A10(data[5]);
+ sub_8078C90(data, 3);
+ }
+ else
+ {
+ gUnknown_83BFB84[data[0]](data);
+ }
+}
+
+void sub_8078C90(s16 * data, u8 a1)
+{
+ data[1] = 0;
+ data[0] = a1;
+}
+
+void sub_8078C9C(s16 * data)
+{
+ struct ScanlineEffectParams params;
+
+ HideBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+
+ params.dmaDest = (volatile void *)REG_ADDR_BLDY;
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.initState = 1;
+ params.unused9 = 0;
+
+ CpuFill16(0, gScanlineEffectRegBuffers[0], 0x140);
+ CpuFill16(0, gScanlineEffectRegBuffers[1], 0x140);
+
+ ScanlineEffect_SetParams(params);
+
+ sub_8078C90(data, 1);
+}