Files
tmc/src/worldEvent/worldEvent5.c
T
octorock 67467fd831 Extract some data
And split up subtasks and world events.
2022-10-08 22:32:54 +02:00

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++;
}
}