mirror of https://github.com/zeldaret/tmc.git
780 lines
22 KiB
C
780 lines
22 KiB
C
/**
|
|
* @file cutscene.c
|
|
*
|
|
* @brief Cutscenes
|
|
*/
|
|
#include "cutscene.h"
|
|
|
|
#include "enemy.h"
|
|
#include "fade.h"
|
|
#include "fileselect.h"
|
|
#include "functions.h"
|
|
#include "game.h"
|
|
#include "main.h"
|
|
#include "menu.h"
|
|
#include "npc.h"
|
|
#include "object.h"
|
|
#include "screen.h"
|
|
|
|
void sub_08051F78(void);
|
|
void sub_08051FF0(void);
|
|
void sub_08052004(void);
|
|
|
|
const EntityData gUnk_080FCB94[] = {
|
|
{ OBJECT, 15, CHUCHU_BOSS_CUTSCENE, 0, 0, 0x1c8, 0x288, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
void sub_080535AC(void);
|
|
void sub_080535F4(void);
|
|
void nullsub_481(void);
|
|
void sub_08053618(void);
|
|
void (*const gUnk_080FCBB4[])(void) = {
|
|
sub_080535AC,
|
|
sub_080535F4,
|
|
nullsub_481,
|
|
sub_08053618,
|
|
};
|
|
|
|
void CutsceneMain_Init(void) {
|
|
gUnk_080FCBB4[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_080535AC(void) {
|
|
gMenu.overlayType = 1;
|
|
gMenu.transitionTimer = 120;
|
|
gUI.loadGfxOnRestore = TRUE;
|
|
gUpdateVisibleTiles = 1;
|
|
gScreen.lcd.displayControl &= 0xfeff;
|
|
LoadRoomEntityList(gUnk_080FCB94);
|
|
SetFade(FADE_BLACK_WHITE | FADE_INSTANT, 8);
|
|
}
|
|
|
|
void sub_080535F4(void) {
|
|
if (gFadeControl.active == 0) {
|
|
ResetSystemPriority();
|
|
gMenu.overlayType = 2;
|
|
}
|
|
}
|
|
|
|
void nullsub_481(void) {
|
|
}
|
|
|
|
void sub_08053618(void) {
|
|
gMenu.transitionTimer--;
|
|
if (gMenu.transitionTimer == 0) {
|
|
sub_08052004();
|
|
}
|
|
}
|
|
|
|
void sub_08053634(void) {
|
|
gUI.nextToLoad = 3; // Subtask_FadeOut
|
|
MessageInitialize();
|
|
}
|
|
|
|
void sub_08053648(void) {
|
|
Entity* obj = CreateObject(SMOKE, 0, 0);
|
|
if (obj != NULL) {
|
|
obj->x.HALF.HI = gRoomControls.origin_x + 0x2d0;
|
|
obj->y.HALF.HI = gRoomControls.origin_y + 0x148;
|
|
}
|
|
}
|
|
|
|
void sub_0805367C(void) {
|
|
gMenu.overlayType++;
|
|
}
|
|
|
|
void sub_0805368C(void) {
|
|
Entity* entity = FindEntityByID(OBJECT, HOUSE_DOOR_INT, 6);
|
|
if (entity != NULL) {
|
|
DeleteEntity(entity);
|
|
SoundReq(SFX_F0); // TODO Door sound during intro
|
|
}
|
|
}
|
|
|
|
void sub_080536A8(void) {
|
|
sub_080A71C4(5, 5, FADE_INSTANT, 0x10);
|
|
}
|
|
|
|
void sub_080536B8(void) {
|
|
sub_080A71C4(5, 3, FADE_INSTANT, 4);
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
}
|
|
|
|
extern Script script_IntroCameraTarget;
|
|
extern Script script_ZeldaMoveToLinksHouse;
|
|
extern Script script_HouseDoorIntro;
|
|
extern Script script_CutsceneOrchestratorIntro2;
|
|
|
|
const EntityData gUnk_080FCBC4[] = {
|
|
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x230, 0x1a8, (u32)&script_IntroCameraTarget },
|
|
{ NPC, 79, ZELDA, 0, 0, 0x230, 0x1a8, (u32)&script_ZeldaMoveToLinksHouse },
|
|
{ OBJECT, 79, HOUSE_DOOR_EXT, 3, 3, 0x290, 0x193, (u32)&script_HouseDoorIntro },
|
|
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x2d0, 0x1a8, (u32)&script_CutsceneOrchestratorIntro2 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
extern Script script_CutsceneOrchestratorIntro;
|
|
extern Script script_SmithIntro;
|
|
extern Script script_ZeldaIntro;
|
|
const EntityData gUnk_080FCC14[] = {
|
|
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x0, 0x0, (u32)&script_CutsceneOrchestratorIntro },
|
|
{ NPC, 79, SMITH, 0, 0, 0xb8, 0x60, (u32)&script_SmithIntro },
|
|
{ NPC, 79, ZELDA, 0, 0, 0x8, 0x5e, (u32)&script_ZeldaIntro },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
extern Script script_ZeldaLeaveLinksHouse;
|
|
const EntityData gUnk_080FCC54[] = {
|
|
{ NPC, 79, ZELDA, 0, 0, 0xa0, 0x5d, (u32)&script_ZeldaLeaveLinksHouse },
|
|
{ OBJECT, 15, HOUSE_DOOR_INT, 4, 256, 0x78, 0x88, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
const Font gUnk_080FCC84 = {
|
|
&gBG1Buffer[0x1cf], BG_TILE_ADDR(0x188), gTextGfxBuffer, 0, 0xf020, 0xf0, 1, 0, 0, 0, 0, 5, 0, 0, 0
|
|
};
|
|
const Font gUnk_080FCC9C = {
|
|
&gBG1Buffer[0x96], BG_TILE_ADDR(0x188), gTextGfxBuffer, 0, 0xf020, 0x78, 1, 0, 0, 0, 0, 5, 0, 0, 0
|
|
};
|
|
|
|
const struct_080FCCB4 gUnk_080FCCB4[] = {
|
|
{ &gUnk_080FCC84, 240, 96, 193, 1 }, { &gUnk_080FCC84, 240, 96, 453, 6 }, { &gUnk_080FCC9C, 120, 160, 363, 4 },
|
|
{ &gUnk_080FCC9C, 120, 160, 498, 4 }, { &gUnk_080FCC84, 240, 96, 368, 4 }, { &gUnk_080FCC84, 240, 96, 358, 4 },
|
|
};
|
|
|
|
void sub_08053758(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053904(void);
|
|
void sub_08053974(void);
|
|
void nullsub_482(void);
|
|
void sub_080539BC(void);
|
|
void (*const gUnk_080FCCFC[])(void) = {
|
|
sub_08053758, sub_08053800, sub_08053894, sub_08053800, sub_08053894, sub_08053800, sub_08053894, sub_08053800,
|
|
sub_08053894, sub_08053800, sub_08053904, sub_08053974, nullsub_482, sub_080539BC, nullsub_482,
|
|
};
|
|
|
|
void sub_080536D4(void) {
|
|
gUnk_080FCCFC[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_0805370C(void);
|
|
void (*const gUnk_080FCD38[])(void) = {
|
|
sub_0805370C,
|
|
nullsub_482,
|
|
};
|
|
|
|
void sub_080536F0(void) {
|
|
gUnk_080FCD38[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_0805370C(void) {
|
|
gMenu.overlayType++;
|
|
gUpdateVisibleTiles = 1;
|
|
sub_08051FF0();
|
|
LoadRoomEntityList((EntityData*)gUnk_080FCC54);
|
|
SetFade(FADE_INSTANT, 0x10);
|
|
}
|
|
|
|
void sub_08053758(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_08053800(void);
|
|
void sub_08053894(void);
|
|
void sub_080539F4(void);
|
|
void sub_08053A1C(void);
|
|
void sub_08053A5C(void);
|
|
void sub_08053A90(void);
|
|
void (*const gUnk_080FCD40[])(void) = {
|
|
sub_08053758, sub_08053800, sub_08053894, sub_08053800, sub_08053894, sub_08053800,
|
|
sub_08053894, sub_08053800, sub_08053894, sub_08053800, sub_08053894, sub_08053800,
|
|
sub_08053894, sub_080539F4, sub_08053A1C, sub_08053A5C, sub_08053A90,
|
|
};
|
|
|
|
void sub_0805373C(void) {
|
|
gUnk_080FCD40[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_08053758(void) {
|
|
gMenu.overlayType = 1;
|
|
gMenu.transitionTimer = 120;
|
|
gMenu.field_0xa = 0x1e;
|
|
*((u8*)&gMenu + 0x10) = 0; // TODO
|
|
gUI.loadGfxOnRestore = TRUE;
|
|
gMapBottom.bgSettings = NULL;
|
|
gMapTop.bgSettings = NULL;
|
|
gRoomControls.camera_target = NULL;
|
|
gRoomControls.scroll_y = 0;
|
|
gRoomControls.scroll_x = 0;
|
|
ClearBgAnimations();
|
|
DispReset(0);
|
|
gScreen.lcd.displayControl = 0x2640;
|
|
gScreen.controls.layerFXControl = 0x2244;
|
|
gScreen.controls.alphaBlend = 0x1000;
|
|
gScreen.controls.windowInsideControl = 0x1f;
|
|
gScreen.controls.windowOutsideControl = 0x3f;
|
|
gScreen.controls.window0HorizontalDimensions = 0xf0;
|
|
gScreen.controls.window0VerticalDimensions = 0x60;
|
|
gScreen.bg1.control = 0x1c4e;
|
|
gScreen.bg2.control = 0x1dc1;
|
|
SoundReq(BGM_STORY);
|
|
ResetSystemPriority();
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
}
|
|
|
|
void sub_08053800(void) {
|
|
u32 index;
|
|
const struct_080FCCB4* ptr;
|
|
if (gFadeControl.active == 0) {
|
|
index = gGenericMenu.unk10.a[0];
|
|
ptr = &gUnk_080FCCB4[index];
|
|
gGenericMenu.base.transitionTimer = ptr->transitionTimer;
|
|
gGenericMenu.base.field_0xa = 0x1e;
|
|
gGenericMenu.unk10.a[0]++;
|
|
gGenericMenu.base.overlayType++;
|
|
gGenericMenu.base.storyPanelIndex = 0;
|
|
LoadPaletteGroup(index + 0x8a);
|
|
LoadGfxGroup(index + 0x3a);
|
|
MemClear(&gBG1Buffer, 0x800);
|
|
ShowTextBox(TEXT_INDEX(TEXT_PICORI, 1) + index, ptr->font);
|
|
gScreen.bg1.updated = 1;
|
|
gScreen.controls.alphaBlend = 0x10;
|
|
gScreen.controls.window0HorizontalDimensions = ptr->width;
|
|
gScreen.controls.window0VerticalDimensions = ptr->height;
|
|
SetFade(FADE_INSTANT, ptr->fadeSpeed);
|
|
}
|
|
}
|
|
|
|
void sub_08053894(void) {
|
|
u32 tmp;
|
|
if (gFadeControl.active == 0) {
|
|
gMenu.transitionTimer--;
|
|
if (gMenu.field_0xa != 0) {
|
|
gMenu.field_0xa--;
|
|
} else {
|
|
if (((gRoomTransition.frameCount & 1) == 0) && (gMenu.storyPanelIndex < 0x10)) {
|
|
tmp = ++gMenu.storyPanelIndex << 0x18;
|
|
gScreen.controls.alphaBlend = (tmp >> 0x10) | (0x10 - ((tmp) >> 0x19));
|
|
}
|
|
}
|
|
if (gMenu.transitionTimer == 0) {
|
|
gMenu.overlayType++;
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_08053904(void) {
|
|
u32 tmp;
|
|
if (gFadeControl.active == 0) {
|
|
gMenu.transitionTimer--;
|
|
if (gMenu.field_0xa != 0) {
|
|
gMenu.field_0xa--;
|
|
} else {
|
|
if (((gRoomTransition.frameCount & 1) == 0) && (gMenu.storyPanelIndex < 0x10)) {
|
|
tmp = ++gMenu.storyPanelIndex << 0x18;
|
|
gScreen.controls.alphaBlend = (tmp >> 0x10) | (0x10 - (tmp >> 0x19));
|
|
}
|
|
}
|
|
if (gMenu.transitionTimer == 0) {
|
|
gMenu.overlayType++;
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
void sub_08053974(void) {
|
|
if (gFadeControl.active == 0) {
|
|
InitFade();
|
|
DispReset(1);
|
|
SetBGDefaults();
|
|
sub_08051F78();
|
|
LoadRoomEntityList(gUnk_080FCBC4);
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
gMenu.overlayType++;
|
|
}
|
|
}
|
|
|
|
void nullsub_482(void) {
|
|
}
|
|
|
|
void sub_080539BC(void) {
|
|
SetBGDefaults();
|
|
DeleteAllEntities();
|
|
sub_08051F9C(0x22, 0x11, 0, 0);
|
|
sub_0804B0B0(0x22, 0x11);
|
|
LoadRoomEntityList(gUnk_080FCC14);
|
|
gMenu.overlayType++;
|
|
}
|
|
|
|
void sub_080539F4(void) {
|
|
if (gFadeControl.active == 0) {
|
|
DispReset(1);
|
|
gMenu.overlayType++;
|
|
gMenu.transitionTimer = 60;
|
|
}
|
|
}
|
|
|
|
void sub_08053A1C(void) {
|
|
gMenu.transitionTimer--;
|
|
if (gMenu.transitionTimer == 0) {
|
|
gMenu.overlayType++;
|
|
gMenu.transitionTimer = 8;
|
|
MessageFromTarget(TEXT_INDEX(TEXT_PICORI, 0x07));
|
|
gMessage.textWindowPosX = 1;
|
|
gMessage.textWindowPosY = 8;
|
|
SetFade(FADE_INSTANT, 8);
|
|
}
|
|
}
|
|
|
|
void sub_08053A5C(void) {
|
|
if (((gMessage.doTextBox & 0x7f) == 0) && --gMenu.transitionTimer == 0) {
|
|
gMenu.overlayType++;
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 8);
|
|
}
|
|
}
|
|
|
|
void sub_08053A90(void) {
|
|
if (gFadeControl.active == 0) {
|
|
gUI.nextToLoad = 3; // Subtask_FadeOut
|
|
SetBGDefaults();
|
|
}
|
|
}
|
|
|
|
extern Script script_CutsceneOrchestratorMinishVaati;
|
|
extern Script script_MinishEzlo;
|
|
extern Script script_CutsceneMiscObjectMinishCap;
|
|
extern Script script_Vaati;
|
|
|
|
const EntityData gUnk_080FCD84[] = {
|
|
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x0, 0x0, (u32)&script_CutsceneOrchestratorMinishVaati },
|
|
{ NPC, 79, MINISH_EZLO, 0, 0, 0x78, 0xd8, (u32)&script_MinishEzlo },
|
|
{ OBJECT, 79, CUTSCENE_MISC_OBJECT, 1, 0, 0x78, 0x58, (u32)&script_CutsceneMiscObjectMinishCap },
|
|
{ NPC, 79, VAATI, 1, 0, 0x78, 0x68, (u32)&script_Vaati },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
void sub_08053ACC(void);
|
|
void sub_08053B00(void);
|
|
void sub_08053B10(void);
|
|
void (*const gUnk_080FCDD4[])(void) = {
|
|
sub_08053ACC,
|
|
sub_08053B00,
|
|
sub_08053B10,
|
|
};
|
|
|
|
void sub_08053AB0(void) {
|
|
gUnk_080FCDD4[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_08053ACC(void) {
|
|
gMenu.overlayType++;
|
|
gUpdateVisibleTiles = 1;
|
|
sub_08051FF0();
|
|
LoadRoomEntityList(gUnk_080FCD84);
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
}
|
|
|
|
void sub_08053B00(void) {
|
|
gMenu.overlayType++;
|
|
}
|
|
|
|
void sub_08053B10(void) {
|
|
if (CheckRoomFlag(1)) {
|
|
gMenu.menuType++;
|
|
DispReset(1);
|
|
SetFade(FADE_INSTANT, 0x100);
|
|
}
|
|
}
|
|
|
|
void sub_08053B3C(void) {
|
|
sub_080A71C4(5, 4, FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
}
|
|
|
|
extern Script script_CutsceneOrchestratorTakeoverCutscene;
|
|
extern Script script_KingDaltusTakeover;
|
|
extern Script script_VaatiTakeover;
|
|
extern Script script_ZeldaStoneTakeover;
|
|
const EntityData gUnk_080FCDE0[] = {
|
|
{ OBJECT, 79, CUTSCENE_ORCHESTRATOR, 0, 0, 0x0, 0x0, (u32)&script_CutsceneOrchestratorTakeoverCutscene },
|
|
{ NPC, 79, KING_DALTUS, 0, 0, 0x88, 0x58, (u32)&script_KingDaltusTakeover },
|
|
{ NPC, 79, VAATI, 1, 0, 0x88, 0xe0, (u32)&script_VaatiTakeover },
|
|
{ NPC, 79, ZELDA, 0, 0, 0xb8, 0x58, (u32)&script_ZeldaStoneTakeover },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
extern Script script_MinisterPothoTakeover;
|
|
extern Script script_GuardTakeover;
|
|
extern Script script_GuardTakeover;
|
|
const EntityData gUnk_080FCE30[] = {
|
|
{ NPC, 79, MINISTER_POTHO, 0, 0, 0x68, 0x58, (u32)&script_MinisterPothoTakeover },
|
|
{ NPC, 79, GUARD_1, 0, 0, 0x78, 0xe8, (u32)&script_GuardTakeover },
|
|
{ NPC, 79, GUARD_1, 1, 0, 0x78, 0x108, (u32)&script_GuardTakeover },
|
|
{ NPC, 79, GUARD_1, 2, 0, 0x78, 0x128, (u32)&script_GuardTakeover },
|
|
{ NPC, 79, GUARD_1, 3, 0, 0x98, 0xe8, (u32)&script_GuardTakeover },
|
|
{ NPC, 79, GUARD_1, 4, 0, 0x98, 0x108, (u32)&script_GuardTakeover },
|
|
{ NPC, 79, GUARD_1, 5, 0, 0x98, 0x128, (u32)&script_GuardTakeover },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
void sub_08053B74(void);
|
|
void sub_08053BAC(void);
|
|
void sub_08053BBC(void);
|
|
void (*const gUnk_080FCEB0[])(void) = {
|
|
sub_08053B74,
|
|
sub_08053BAC,
|
|
sub_08053BBC,
|
|
};
|
|
|
|
void sub_08053B58(void) {
|
|
gUnk_080FCEB0[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_08053B74(void) {
|
|
gMenu.overlayType++;
|
|
gUpdateVisibleTiles = 1;
|
|
LoadRoomEntityList(gUnk_080FCDE0);
|
|
ResetSystemPriority();
|
|
ResetEntityPriority();
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
}
|
|
|
|
void sub_08053BAC(void) {
|
|
gMenu.overlayType++;
|
|
}
|
|
|
|
void sub_08053BBC(void) {
|
|
if (CheckRoomFlag(0)) {
|
|
gMenu.menuType++;
|
|
DispReset(1);
|
|
SetFade(FADE_INSTANT, 0x100);
|
|
}
|
|
}
|
|
|
|
void sub_08053BE8(void) {
|
|
sub_080A71C4(5, 2, FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 0x100);
|
|
}
|
|
|
|
extern Script script_ZeldaStoneInDHC;
|
|
extern Script script_ZeldaStoneDHC;
|
|
const EntityData gUnk_080FCEBC[] = {
|
|
{ NPC, 79, ZELDA, 0, 0, 0x78, 0x68, (u32)&script_ZeldaStoneInDHC },
|
|
{ NPC, 79, VAATI, 1, 0, 0x78, 0x98, (u32)&script_ZeldaStoneDHC },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
void sub_08053C20(void);
|
|
void nullsub_483(void);
|
|
void sub_08053C60(void);
|
|
void (*const gUnk_080FCEEC[])(void) = {
|
|
sub_08053C20,
|
|
nullsub_483,
|
|
sub_08053C60,
|
|
};
|
|
|
|
void sub_08053C04(void) {
|
|
gUnk_080FCEEC[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_08053C20(void) {
|
|
gMenu.overlayType = 1;
|
|
gMenu.transitionTimer = 120; // Go to game over after 2 minutes.
|
|
gUpdateVisibleTiles = 1;
|
|
sub_08051FF0();
|
|
LoadStaticBackground(4);
|
|
LoadRoomEntityList(gUnk_080FCEBC);
|
|
SetFade(FADE_INSTANT, 0x10);
|
|
SoundReq(BGM_FIGHT_THEME2);
|
|
}
|
|
|
|
void nullsub_483(void) {
|
|
}
|
|
|
|
void sub_08053C60(void) {
|
|
SetFade(FADE_IN_OUT | FADE_INSTANT, 2);
|
|
SoundReq(SFX_SUMMON);
|
|
SoundReq(SONG_STOP_BGM);
|
|
SetTask(TASK_GAMEOVER);
|
|
}
|
|
|
|
void sub_08053C84(void) {
|
|
gMenu.overlayType = 2;
|
|
}
|
|
void sub_08053CAC(void);
|
|
void sub_08053CAC(void);
|
|
void sub_08053E58(void);
|
|
void (*const gUnk_080FCEF8[])(void) = {
|
|
sub_08053CAC,
|
|
sub_08053CAC,
|
|
sub_08053E58,
|
|
};
|
|
|
|
void CutsceneMain_Exit(void) {
|
|
gUnk_080FCEF8[gMenu.field_0x3]();
|
|
}
|
|
|
|
const EntityData gUnk_080FCF24[];
|
|
const EntityData gUnk_080FCF44[];
|
|
const EntityData gUnk_080FCF64[];
|
|
const EntityData gUnk_080FCF84[];
|
|
|
|
const struct_080FCF04 gUnk_080FCF04[] = {
|
|
{ gUnk_080FCF24, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_2F, 0, 0 },
|
|
{ gUnk_080FCF44, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_WEST_STAIRS_1F, 0, 0 },
|
|
{ gUnk_080FCF64, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_2F, 0, 0 },
|
|
{ gUnk_080FCF84, AREA_FORTRESS_OF_WINDS, ROOM_FORTRESS_OF_WINDS_EAST_STAIRS_1F, 0, 0 },
|
|
};
|
|
|
|
const EntityData gUnk_080FCF24[] = {
|
|
{ OBJECT, 15, GROUND_ITEM, 83, 512, 0x88, 0x68, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
const EntityData gUnk_080FCF44[] = {
|
|
{ OBJECT, 15, GROUND_ITEM, 83, 512, 0x68, 0x68, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
const EntityData gUnk_080FCF64[] = {
|
|
{ OBJECT, 15, GROUND_ITEM, 83, 512, 0x88, 0x68, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
const EntityData gUnk_080FCF84[] = {
|
|
{ OBJECT, 15, GROUND_ITEM, 83, 512, 0x68, 0x68, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
void sub_08053CC8(void);
|
|
void sub_08053D34(void);
|
|
void sub_08053D90(void);
|
|
void sub_08053DB4(void);
|
|
void sub_08053E30(void);
|
|
void (*const gUnk_080FCFA4[])(void) = {
|
|
sub_08053CC8, sub_08053D34, sub_08053D90, sub_08053DB4, sub_08053E30,
|
|
};
|
|
|
|
void sub_08053CAC(void) {
|
|
gUnk_080FCFA4[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_08053CC8(void) {
|
|
const struct_080FCF04* ptr;
|
|
ptr = gUnk_080FCF04 + gMenu.field_0x3 * 2;
|
|
gMenu.field_0xc = (void*)&ptr[1];
|
|
LoadRoomEntityList(ptr->entityData);
|
|
LoadRoomEntityList(GetRoomProperty(ptr->area, ptr->room, 1));
|
|
LoadRoomEntityList(GetRoomProperty(ptr->area, ptr->room, 2));
|
|
gMenu.overlayType = 1;
|
|
gScreen.lcd.displayControl &= 0xfeff;
|
|
gUpdateVisibleTiles = 1;
|
|
SetFade(FADE_INSTANT, 0x10);
|
|
if (ptr->room == 0x1d) { // TODO what room is this?
|
|
gMenu.field_0xa = 1;
|
|
}
|
|
}
|
|
|
|
void sub_08053D34(void) {
|
|
if (gMenu.field_0xa != 0) {
|
|
gMenu.field_0xa = 0;
|
|
if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3d)) {
|
|
SetMetaTileType(0x74, 0xc4, 1);
|
|
}
|
|
if (CheckLocalFlagByBank(FLAG_BANK_7, 0x3e)) {
|
|
SetMetaTileType(0x74, 0xcc, 1);
|
|
}
|
|
}
|
|
if (gFadeControl.active == 0) {
|
|
gMenu.transitionTimer = 120;
|
|
gMenu.overlayType++;
|
|
}
|
|
}
|
|
|
|
void sub_08053D90(void) {
|
|
gMenu.transitionTimer--;
|
|
if (gMenu.transitionTimer == 0) {
|
|
gMenu.overlayType++;
|
|
SetFadeInverted(0x10);
|
|
}
|
|
}
|
|
|
|
void sub_08053DB4(void) {
|
|
if (gFadeControl.active == 0) {
|
|
struct_080FCF04* ptr = (struct_080FCF04*)gMenu.field_0xc;
|
|
sub_08052FF4(gMenu.field_0xc[4], gMenu.field_0xc[5]);
|
|
InitializeCamera();
|
|
gUpdateVisibleTiles = 1;
|
|
gRoomControls.scroll_x = (s8)ptr->scrollX + gRoomControls.scroll_x;
|
|
gRoomControls.scroll_y = (s8)ptr->scrollY + gRoomControls.scroll_y;
|
|
LoadRoomEntityList(ptr->entityData);
|
|
LoadRoomEntityList((EntityData*)GetRoomProperty(ptr->area, ptr->room, 1));
|
|
LoadRoomEntityList((EntityData*)GetRoomProperty(ptr->area, ptr->room, 2));
|
|
gMenu.transitionTimer = 120;
|
|
gMenu.overlayType++;
|
|
SetFadeInverted(0x10);
|
|
}
|
|
}
|
|
|
|
void sub_08053E30(void) {
|
|
if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) {
|
|
gMenu.menuType++;
|
|
}
|
|
}
|
|
|
|
const EntityData gUnk_080FCFE8[];
|
|
const EntityData gUnk_080FD008[];
|
|
const EntityData gUnk_080FD028[];
|
|
const EntityData gUnk_080FD048[];
|
|
const EntityData gUnk_080FD078[];
|
|
const EntityData gUnk_080FD098[];
|
|
const EntityData gUnk_080FD0C8[];
|
|
const EntityData gUnk_080FD0E8[];
|
|
const struct_080FCFB8 gUnk_080FCFB8[] = {
|
|
{ gUnk_080FCFE8, gUnk_080FD008, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_TOP_LEFT_DARKNUT, 16, 16 },
|
|
{ gUnk_080FD028, gUnk_080FD048, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_TOP_RIGHT_DARKNUTS, 16, 16 },
|
|
{ gUnk_080FD078, gUnk_080FD098, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_LEFT_DARKNUTS, 16, 16 },
|
|
{ gUnk_080FD0C8, gUnk_080FD0E8, AREA_DARK_HYRULE_CASTLE, ROOM_DARK_HYRULE_CASTLE_2F_BOTTOM_RIGHT_DARKNUT, 16, 16 },
|
|
};
|
|
|
|
const EntityData gUnk_080FCFE8[] = {
|
|
{ OBJECT, 15, BOSS_DOOR, 8, 0, 0x88, 0x28, 65535 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
const EntityData gUnk_080FD008[] = {
|
|
{ ENEMY, 47, DARK_NUT, 2, 0, 0x88, 0x68, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
const EntityData gUnk_080FD028[] = {
|
|
{ OBJECT, 15, BOSS_DOOR, 8, 0, 0x88, 0x28, 65535 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
const EntityData gUnk_080FD048[] = {
|
|
{ ENEMY, 47, DARK_NUT, 1, 0, 0x70, 0x68, 0 },
|
|
{ ENEMY, 47, DARK_NUT, 0, 0, 0xa0, 0x68, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
const EntityData gUnk_080FD078[] = {
|
|
{ OBJECT, 15, BOSS_DOOR, 10, 0, 0x88, 0xa8, 65535 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
const EntityData gUnk_080FD098[] = {
|
|
{ ENEMY, 47, DARK_NUT, 0, 0, 0x70, 0x68, 0 },
|
|
{ ENEMY, 47, DARK_NUT, 1, 0, 0xa0, 0x68, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
const EntityData gUnk_080FD0C8[] = {
|
|
{ OBJECT, 15, BOSS_DOOR, 10, 0, 0x88, 0xa8, 65535 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
const EntityData gUnk_080FD0E8[] = {
|
|
{ ENEMY, 47, DARK_NUT, 2, 0, 0x88, 0x68, 0 },
|
|
{ 0xff, 0, 0, 0, 0, 0x0, 0x0, 0 },
|
|
};
|
|
|
|
void sub_08053E74(void);
|
|
void sub_08053EC4(void);
|
|
void sub_08053EFC(void);
|
|
void sub_08053F20(void);
|
|
void sub_08053EC4(void);
|
|
void sub_08053EFC(void);
|
|
void sub_08053F20(void);
|
|
void sub_08053EC4(void);
|
|
void sub_08053EFC(void);
|
|
void sub_08053F20(void);
|
|
void sub_08053EC4(void);
|
|
void sub_08053F88(void);
|
|
void (*const gUnk_080FD108[])(void) = {
|
|
sub_08053E74, sub_08053EC4, sub_08053EFC, sub_08053F20, sub_08053EC4, sub_08053EFC,
|
|
sub_08053F20, sub_08053EC4, sub_08053EFC, sub_08053F20, sub_08053EC4, sub_08053F88,
|
|
};
|
|
|
|
void sub_08053E58(void) {
|
|
gUnk_080FD108[gMenu.overlayType]();
|
|
}
|
|
|
|
void sub_08053E74(void) {
|
|
const struct_080FCFB8* ptr = gUnk_080FCFB8;
|
|
gMenu.field_0xc = (u8*)ptr;
|
|
LoadRoomEntityList(ptr->entityData1);
|
|
gMenu.transitionTimer = 120;
|
|
gMenu.field_0xa = 0x3c;
|
|
gMenu.overlayType++;
|
|
gScreen.lcd.displayControl &= 0xfeff;
|
|
gUpdateVisibleTiles = 1;
|
|
SetMinPriority(1);
|
|
SetFade(FADE_INSTANT, 8);
|
|
}
|
|
|
|
void sub_08053EC4(void) {
|
|
EntityData** data;
|
|
if ((gFadeControl.active == 0) && (--gMenu.field_0xa == 0)) {
|
|
data = (EntityData**)(gMenu.field_0xc + 4); // TODO entityData2 of struct_080FCFB8
|
|
gMenu.field_0xc += 0xc;
|
|
LoadRoomEntityList(*data);
|
|
gMenu.overlayType++;
|
|
}
|
|
}
|
|
|
|
void sub_08053EFC(void) {
|
|
if (--gMenu.transitionTimer == 0) {
|
|
gMenu.overlayType++;
|
|
SetFadeInverted(8);
|
|
}
|
|
}
|
|
|
|
void sub_08053F20(void) {
|
|
struct_080FCFB8* ptr;
|
|
if (gFadeControl.active == 0) {
|
|
DeleteAllEntities();
|
|
ptr = (struct_080FCFB8*)gMenu.field_0xc;
|
|
sub_08052FF4(ptr->area, ptr->room);
|
|
InitializeCamera();
|
|
gUpdateVisibleTiles = 1;
|
|
gRoomControls.scroll_x = (s8)ptr->scrollX + gRoomControls.scroll_x;
|
|
gRoomControls.scroll_y = (s8)ptr->scrollY + gRoomControls.scroll_y;
|
|
LoadRoomEntityList((ptr)->entityData1);
|
|
gMenu.transitionTimer = 120;
|
|
gMenu.field_0xa = 0x3c;
|
|
gMenu.overlayType++;
|
|
SetFadeInverted(8);
|
|
}
|
|
}
|
|
|
|
void sub_08053F88(void) {
|
|
if ((gFadeControl.active == 0) && --gMenu.transitionTimer == 0) {
|
|
gMenu.menuType++;
|
|
ResetEntityPriority();
|
|
}
|
|
}
|
|
|
|
void sub_080536D4(void);
|
|
void sub_08053B58(void);
|
|
void sub_0805373C(void);
|
|
void sub_08053AB0(void);
|
|
void sub_080536F0(void);
|
|
void sub_08053C04(void);
|
|
void (*const gUnk_080FD138[])(void) = {
|
|
sub_080536D4, sub_08053B58, sub_0805373C, sub_08053AB0, sub_080536F0, sub_08053C04,
|
|
};
|
|
|
|
void CutsceneMain_Update(void) {
|
|
gUnk_080FD138[gMenu.field_0x3]();
|
|
}
|