Extract some data

And split up subtasks and world events.
This commit is contained in:
octorock
2022-09-05 22:50:19 +02:00
committed by anonymous
parent 756a8a89da
commit 67467fd831
224 changed files with 13873 additions and 28227 deletions
+103
View File
@@ -0,0 +1,103 @@
/**
* @file subtaskWorldEvent.c
*
* @brief World Event Subtask
*/
#include "area.h"
#include "asm.h"
#include "common.h"
#include "flags.h"
#include "functions.h"
#include "game.h"
#include "kinstone.h"
#include "main.h"
#include "menu.h"
#include "message.h"
#include "room.h"
#include "screen.h"
#include "subtask.h"
void Subtask_WorldEvent_Update(void);
extern void (*const gUnk_080FE2A0[])(void);
void Subtask_WorldEvent(void) {
#if !(defined(DEMO_USA) || defined(DEMO_JP))
gUnk_080FE2A0[gMenu.menuType]();
#endif
}
void Subtask_WorldEvent_Init(void) {
const WorldEvent* ptr = &gWorldEvents[gUI.field_0x3];
gMenu.field_0x0 = ptr->type;
gMenu.field_0x3 = ptr->entity_idx;
gMenu.field_0x4 = gUI.field_0x3;
gMenu.field_0xc = (u8*)ptr;
gMenu.menuType++;
gMenu.overlayType = 0;
gMenu.transitionTimer = 300;
DispReset(0);
sub_08054974(gUI.field_0x3, 1);
sub_0806F364();
ClearRoomFlag(0xff);
Subtask_WorldEvent_Update();
}
extern void (*const gWorldEventFunctions[])(void);
void Subtask_WorldEvent_Update(void) {
gWorldEventFunctions[gMenu.field_0x0]();
FlushSprites();
UpdateEntities();
DrawEntities();
CopyOAM();
UpdateScroll();
UpdateBgAnimations();
UpdateScrollVram();
}
void Subtask_WorldEvent_End(void) {
MessageInitialize();
sub_0806F38C();
if (gKinstoneWorldEvents[gFuseInfo.kinstoneId].unk7 != 0) {
// Show the map hint.
MenuFadeIn(SUBTASK_LOCALMAPHINT, gUI.field_0x3);
} else {
gUI.nextToLoad = 3; // Subtask_FadeOut
SetFade(FADE_IN_OUT | FADE_BLACK_WHITE | FADE_INSTANT, 0x10);
}
}
void sub_08054968(void) {
gMenu.menuType = 2;
}
// Controls showing the world event cutscene?
void sub_08054974(u32 worldEventId, bool32 param_2) {
const WorldEvent* ptr = &gWorldEvents[worldEventId];
SetCurrentRoomPropertyList(ptr->area, ptr->room);
gRoomControls.area = ptr->area;
gRoomControls.room = ptr->room;
LoadGfxGroups();
gArea.localFlagOffset = GetFlagBankOffset(gRoomControls.area);
if (param_2) {
LoadAuxiliaryRoom(ptr->area, ptr->room);
} else {
sub_08052FF4(ptr->area, ptr->room);
InitializeCamera();
gUpdateVisibleTiles = 1;
}
gScreen.lcd.displayControl &= 0x1fff;
gRoomControls.scroll_x = gRoomControls.origin_x + ptr->offsetX;
gRoomControls.scroll_y = gRoomControls.origin_y + ptr->offsetY;
if (ptr->area == AREA_HYRULE_TOWN) {
TryLoadPrologueHyruleTown();
}
sub_08018710(gUI.field_0x3);
}
void sub_08054A14(s32 worldEventId) {
const WorldEvent* ptr = &gWorldEvents[worldEventId];
if (ptr->bank < 0xe) {
SetLocalFlagByBank(gLocalFlagBanks[ptr->bank], ptr->flag);
}
}