summaryrefslogtreecommitdiff
path: root/src/intro.c
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-10-11 21:51:34 -0700
committerYamaArashi <shadow962@live.com>2016-10-11 21:51:34 -0700
commitfa9ddc90c560fa5dcf104752a4fbe625bc2cf084 (patch)
tree3ab24c841a55c24ccfbd39566f398e8e543eece5 /src/intro.c
parente29af253cee26e42697458ff46112506d6aca076 (diff)
begin decompiling intro functions
Diffstat (limited to 'src/intro.c')
-rw-r--r--src/intro.c147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/intro.c b/src/intro.c
new file mode 100644
index 000000000..0a91a4f93
--- /dev/null
+++ b/src/intro.c
@@ -0,0 +1,147 @@
+#include "global.h"
+#include "main.h"
+#include "palette.h"
+#include "task.h"
+#include "link.h"
+
+struct GcmbStruct
+{
+ u16 gcmb_field_0;
+ u8 gcmb_field_2;
+};
+
+extern s32 gUnknown_03005ED0;
+extern struct GcmbStruct gUnknown_03005EE0;
+extern u16 gSaveFileStatus;
+
+extern const u8 gIntroCopyright_Gfx[];
+extern const u16 gIntroCopyright_Pal[];
+extern const u16 gIntroCopyright_Tilemap[];
+
+extern void CB2_InitTitleScreen(void);
+
+void CB2_813B7EC(void);
+void task_intro_1(u8);
+
+void sub_813B784(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void CB2_813B798(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ if (gMain.newKeys && !gPaletteFade.active)
+ SetMainCallback2(CB2_813B7EC);
+ else if (gUnknown_03005ED0 != -1)
+ gUnknown_03005ED0++;
+}
+
+void CB2_813B7EC(void)
+{
+ if (!UpdatePaletteFade())
+ SetMainCallback2(CB2_InitTitleScreen);
+}
+
+void sub_813B808(u16 a1, u16 a2, u16 a3)
+{
+ LZ77UnCompVram(gIntroCopyright_Gfx, (void *)(VRAM + a1));
+ LoadPalette(gIntroCopyright_Pal, a3, 0x20);
+ CpuCopy16(gIntroCopyright_Tilemap, (void *)(VRAM + a2), 0x500);
+}
+
+void SerialCb_CopyrightScreen(void)
+{
+ GameCubeMultiBoot_HandleSerialInterrupt(&gUnknown_03005EE0);
+}
+
+u8 SetUpCopyrightScreen(void)
+{
+ u16 ime;
+
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+ REG_BLDY = 0;
+ *(u16 *)PLTT = 0x7FFF;
+ REG_DISPCNT = 0;
+ REG_BG0HOFS = 0;
+ REG_BG0VOFS = 0;
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
+ ResetPaletteFade();
+ sub_813B808(0, 14336, 0);
+ remove_some_task();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF);
+ REG_BG0CNT = 1792;
+ ime = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = ime;
+ REG_DISPSTAT |= 8;
+ SetVBlankCallback(sub_813B784);
+ REG_DISPCNT = 320;
+ SetSerialCallback(SerialCb_CopyrightScreen);
+ GameCubeMultiBoot_Init(&gUnknown_03005EE0);
+ default:
+ UpdatePaletteFade();
+ gMain.state++;
+ GameCubeMultiBoot_Main(&gUnknown_03005EE0);
+ break;
+ case 140:
+ GameCubeMultiBoot_Main(&gUnknown_03005EE0);
+ if (gUnknown_03005EE0.gcmb_field_2 != 1)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFFu, 0, 0, 0x10, 0);
+ gMain.state++;
+ }
+ break;
+ case 141:
+ if (UpdatePaletteFade())
+ break;
+ CreateTask(task_intro_1, 0);
+ SetMainCallback2(CB2_813B798);
+ if (gUnknown_03005EE0.gcmb_field_2)
+ {
+ GameCubeMultiBoot_ExecuteProgram(&gUnknown_03005EE0);
+ }
+ else
+ {
+ GameCubeMultiBoot_Quit();
+ SetSerialCallback(SerialCB);
+ }
+ return 0;
+ }
+
+ return 1;
+}
+
+void c2_copyright_1(void)
+{
+ if (!SetUpCopyrightScreen())
+ {
+ sub_8052E4C();
+ sub_81251B8();
+ sub_8125EC8(0);
+ if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
+ ClearSav2();
+ SetPokemonCryStereo(gSaveBlock2.optionsSound);
+ }
+}
+
+void sub_813BA88(void)
+{
+ SetUpCopyrightScreen();
+}