mirror of
https://github.com/zeldaret/tmc
synced 2026-06-08 12:27:21 -04:00
67467fd831
And split up subtasks and world events.
95 lines
2.6 KiB
C
95 lines
2.6 KiB
C
/**
|
|
* @file worldEvent5.c
|
|
* @ingroup WorldEvents
|
|
*
|
|
* @brief World Event 5
|
|
*/
|
|
#include "common.h"
|
|
#include "fade.h"
|
|
#include "flags.h"
|
|
#include "menu.h"
|
|
#include "room.h"
|
|
#include "screen.h"
|
|
#include "sound.h"
|
|
#include "subtask.h"
|
|
|
|
const s16 gUnk_080FF1D4[] = { 19, 192, 224, //
|
|
18, 176, 216, //
|
|
18, 208, 216, //
|
|
18, 240, 216, //
|
|
19, 176, 224, //
|
|
0 };
|
|
|
|
void WorldEvent_5_0(void);
|
|
void WorldEvent_5_1(void);
|
|
void WorldEvent_5_2(void);
|
|
void WorldEvent_5_3(void);
|
|
void (*const WorldEvent_5_Functions[])(void) = {
|
|
WorldEvent_5_0,
|
|
WorldEvent_5_1,
|
|
WorldEvent_5_2,
|
|
WorldEvent_5_3,
|
|
};
|
|
|
|
const u16 gUnk_080FF204[] = { 0x10, 0x10f, 0x20e, 0x30d, 0x40c, 0x50b, 0x60a, 0x709, 0x808,
|
|
0x907, 0xa06, 0xb05, 0xc04, 0xd03, 0xe02, 0xf01, 0x1000, 0xffff };
|
|
|
|
void WorldEvent_5(void) {
|
|
WorldEvent_5_Functions[gMenu.overlayType]();
|
|
}
|
|
|
|
void WorldEvent_5_0(void) {
|
|
// Doesn't work when put into a packed struct?
|
|
const s16* ptr = &gUnk_080FF1D4[(gMenu.field_0xc[1] & 0xf) * 3];
|
|
LoadGfxGroup(ptr[0]);
|
|
gScreen.bg3.xOffset = ptr[1];
|
|
gScreen.bg3.yOffset = ptr[2];
|
|
gScreen.bg3.control = 0x1e05;
|
|
gScreen.controls.layerFXControl = 0x3648;
|
|
gScreen.controls.alphaBlend = 0x10;
|
|
gScreen.lcd.displayControl |= 0x800;
|
|
sub_0801876C(gMenu.field_0x4, 1);
|
|
sub_08055B70(gMenu.field_0x4, 0, 0, 0);
|
|
gMenu.overlayType++;
|
|
gMenu.storyPanelIndex = 0;
|
|
gMenu.transitionTimer = 60;
|
|
gMenu.field_0xa = 0;
|
|
gUpdateVisibleTiles = 1;
|
|
SetFade(FADE_INSTANT, 0x10);
|
|
}
|
|
|
|
void WorldEvent_5_1(void) {
|
|
if ((gFadeControl.active == 0) && CheckRoomFlag(0xff)) {
|
|
gMenu.overlayType++;
|
|
}
|
|
}
|
|
|
|
void WorldEvent_5_2(void) {
|
|
if (gMenu.storyPanelIndex == 0) {
|
|
gMenu.transitionTimer--;
|
|
if (gMenu.transitionTimer == 0) {
|
|
u32 tmp = gMenu.storyPanelIndex;
|
|
gMenu.storyPanelIndex = tmp + 1;
|
|
SoundReq(SFX_EVAPORATE);
|
|
}
|
|
} else if ((gRoomTransition.frameCount & 7U) == 0) {
|
|
if (gUnk_080FF204[gMenu.field_0xa] != 0xffff) {
|
|
gScreen.controls.alphaBlend = gUnk_080FF204[gMenu.field_0xa++];
|
|
} else {
|
|
gScreen.lcd.displayControl &= 0xf7ff;
|
|
gScreen.controls.alphaBlend = 0x1000;
|
|
gMenu.transitionTimer = 120;
|
|
gMenu.overlayType++;
|
|
#ifndef EU
|
|
SoundReq(SFX_SECRET_BIG);
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
void WorldEvent_5_3(void) {
|
|
if (--gMenu.transitionTimer == 0) {
|
|
gMenu.menuType++;
|
|
}
|
|
}
|