dStageMgr_c start, more splits

This commit is contained in:
robojumper
2025-03-08 22:40:04 +01:00
parent c558c88f25
commit 32b7ce138d
20 changed files with 593 additions and 109 deletions
+1 -2
View File
@@ -4,9 +4,9 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/c/c_cc_d.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/d_stage_mgr.h"
#include "f/f_base.h"
#include "rvl/MTX/mtx.h"
#include "toBeSorted/stage_manager.h"
dCcS *dCcS::sInstance;
@@ -168,7 +168,6 @@ void dCcS::ClearArea() {
mAreaCount = 0;
}
extern "C" bool fn_8019A7A0(void *stg, f32 *, f32 *);
void dCcS::AdjustHitPos() {
f32 x, z;
+1 -1
View File
@@ -9,6 +9,7 @@
#include "d/col/bg/d_bg_w_kcol.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/d_stage_mgr.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/t/d_t_mass_obj.h"
@@ -36,7 +37,6 @@
#include "nw4r/math/math_types.h"
#include "sized_string.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/stage_manager.h"
#include "toBeSorted/time_area_mgr.h"
#include "toBeSorted/unk_with_water.h"
+1 -1
View File
@@ -2,6 +2,7 @@
#include "common.h"
#include "d/d_base.h"
#include "d/d_stage_mgr.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "f/f_profile_name.h"
@@ -15,7 +16,6 @@
#include "toBeSorted/minigame_mgr.h"
#include "toBeSorted/music_mgrs.h"
#include "toBeSorted/some_gxf_thing.h"
#include "toBeSorted/stage_manager.h"
#include <cstring>
+298
View File
@@ -0,0 +1,298 @@
#include "d/d_stage_mgr.h"
#include "common.h"
#include "d/d_base.h"
#include "d/d_bzs_types.h"
#include "d/d_heap.h"
#include "d/d_last.h"
#include "d/d_sc_game.h"
#include "d/d_stage_parse.h"
#include "d/d_sys.h"
#include "d/flag/flag_managers.h"
#include "egg/core/eggHeap.h"
#include "f/f_base.h"
#include "f/f_profile_name.h"
#include "m/m_dvd.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
#include "toBeSorted/arc_managers/oarc_manager.h"
#include "toBeSorted/music_mgrs.h"
#include <cstddef>
SPECIAL_BASE_PROFILE(STAGE_MANAGER, dStageMgr_c, fProfile::STAGE_MANAGER, 0X5, 1536);
STATE_DEFINE(dStageMgr_c, ReadStageRes);
STATE_DEFINE(dStageMgr_c, ReadRoomRes);
STATE_DEFINE(dStageMgr_c, ReadObjectRes);
STATE_DEFINE(dStageMgr_c, ReadStageLayerRes);
STATE_DEFINE(dStageMgr_c, ReadLayerObjectRes);
STATE_DEFINE(dStageMgr_c, SoundLoadSceneData);
STATE_DEFINE(dStageMgr_c, CreateObject);
STATE_DEFINE(dStageMgr_c, ReadObjectSound);
STATE_DEFINE(dStageMgr_c, SceneChangeSave);
STATE_DEFINE(dStageMgr_c, RestartSceneWait);
STATE_DEFINE(dStageMgr_c, RestartScene);
dStageMgr_c::dStageMgr_c() : mStateMgr(*this, sStateID::null), mPhase(this, sCallbacks) {
sInstance = this;
}
dStageMgr_c::~dStageMgr_c() {
sInstance = nullptr;
}
void dStageMgr_c::initializeState_ReadStageRes() {
CurrentStageArcManager::sInstance->setStage(dScGame_c::currentSpawnInfo.stageName);
}
void dStageMgr_c::executeState_ReadStageRes() {
if (CurrentStageArcManager::sInstance->ensureAllEntriesLoaded() == 0) {
mStateMgr.changeState(StateID_ReadRoomRes);
}
}
void dStageMgr_c::finalizeState_ReadStageRes() {
void *stageBzs = CurrentStageArcManager::sInstance->getData("dat/stage.bzs");
if (stageBzs != nullptr) {
parseStageBzs(-1, stageBzs);
parseRoomStageBzs(-1, stageBzs);
}
fn_803618F0(ENEMY_SOUND_MGR);
}
void dStageMgr_c::initializeState_ReadRoomRes() {}
void dStageMgr_c::executeState_ReadRoomRes() {
if (CurrentStageArcManager::sInstance->ensureAllEntriesLoaded() == 0 &&
LayoutArcManager::sInstance->ensureAllEntriesLoaded() == 0) {
mStateMgr.changeState(StateID_ReadObjectRes);
}
}
void dStageMgr_c::finalizeState_ReadRoomRes() {
if (rmpl != nullptr) {
RMPL *itRmpl = rmpl;
for (int i = 0; i < mRmplCount; itRmpl++, i++) {
void *bzs = CurrentStageArcManager::sInstance->loadFromRoomArc(itRmpl->roomId, "dat/room.bzs");
parseRoomStageBzs(itRmpl->roomId, bzs);
}
} else {
u32 roomId = dScGame_c::currentSpawnInfo.room;
void *bzs =
CurrentStageArcManager::sInstance->loadFromRoomArc(dScGame_c::currentSpawnInfo.room, "dat/room.bzs");
parseRoomStageBzs(roomId, bzs);
}
}
void dStageMgr_c::initializeState_ReadObjectRes() {
mStageObjCtrl.doLoad();
}
void dStageMgr_c::executeState_ReadObjectRes() {
if (mStageObjCtrl.isLoaded()) {
mStateMgr.changeState(StateID_ReadStageLayerRes);
}
}
void dStageMgr_c::finalizeState_ReadObjectRes() {}
void dStageMgr_c::initializeState_ReadStageLayerRes() {
CurrentStageArcManager::sInstance->loadFileFromExtraLayerArc(dScGame_c::currentSpawnInfo.layer);
}
void dStageMgr_c::executeState_ReadStageLayerRes() {
if (CurrentStageArcManager::sInstance->ensureAllEntriesLoaded() == 0) {
mStateMgr.changeState(StateID_ReadLayerObjectRes);
}
}
void dStageMgr_c::finalizeState_ReadStageLayerRes() {}
const char demoName[] = "";
static const char *sSeekerStoneLayoutArcs[] = {
"SeekerStone",
};
void dStageMgr_c::initializeState_ReadLayerObjectRes() {
mDemoName = demoName;
void *bzs = CurrentStageArcManager::sInstance->getData("dat/stage.bzs");
if (bzs != nullptr) {
parseBzsStageRoom(-1, bzs);
}
if (rmpl != nullptr) {
RMPL *itRmpl = rmpl;
for (int i = 0; i < mRmplCount; itRmpl++, i++) {
void *bzs = CurrentStageArcManager::sInstance->loadFromRoomArc(itRmpl->roomId, "dat/room.bzs");
parseBzsStageRoom(itRmpl->roomId, bzs);
}
} else {
u32 roomId = dScGame_c::currentSpawnInfo.room;
void *bzs =
CurrentStageArcManager::sInstance->loadFromRoomArc(dScGame_c::currentSpawnInfo.room, "dat/room.bzs");
parseBzsStageRoom(roomId, bzs);
}
if (dScGame_c::isStateLayerWithSeekerStoneHintMenu()) {
mLayoutArcCtrl2.set(sSeekerStoneLayoutArcs, ARRAY_LENGTH(sSeekerStoneLayoutArcs));
mLayoutArcCtrl2.load(dHeap::work2Heap.heap);
addActorId(fProfile::LYT_SEEKER_STONE);
}
mLayerObjCtrl.doLoad();
}
void dStageMgr_c::executeState_ReadLayerObjectRes() {
if (mLayerObjCtrl.isLoaded() && LayoutArcManager::sInstance->ensureAllEntriesLoaded() == 0) {
mStateMgr.changeState(StateID_SoundLoadSceneData);
}
}
extern "C" void fn_800C85D0(void *, EGG::Heap *heap, bool, void *jpc, void *jpn);
extern "C" void *FOR_LOADED_PARTICLES;
void dStageMgr_c::finalizeState_ReadLayerObjectRes() {
if (mDemoName.len() != 0) {
const char *name = mDemoName;
void *jpc = OarcManager::sInstance->getSubEntryData(name, "dat/jparticle.jpc");
if (jpc != nullptr) {
void *jpn = OarcManager::sInstance->getSubEntryData(name, "dat/jparticle.jpn");
fn_800C85D0(FOR_LOADED_PARTICLES, dHeap::work2Heap.heap, true, jpc, jpn);
}
}
}
static void *soundCallback(void *arg) {
fn_80362730(ENEMY_SOUND_MGR);
return reinterpret_cast<void *>(true);
}
void dStageMgr_c::initializeState_SoundLoadSceneData() {
fn_803624F0(ENEMY_SOUND_MGR);
mpDvdCallback = mDvd_callback_c::createOrDie(soundCallback, nullptr);
}
void dStageMgr_c::executeState_SoundLoadSceneData() {
if (mpDvdCallback != nullptr && mpDvdCallback->mStatus != 0) {
mStateMgr.changeState(StateID_CreateObject);
}
}
void dStageMgr_c::finalizeState_SoundLoadSceneData() {
mpDvdCallback->do_delete();
mpDvdCallback = nullptr;
}
void dStageMgr_c::initializeState_CreateObject() {
// too much egg
}
void dStageMgr_c::executeState_CreateObject() {
if (!checkChildProcessCreateState()) {
mStateMgr.changeState(StateID_ReadObjectSound);
}
}
void dStageMgr_c::finalizeState_CreateObject() {}
static void *soundCallback2(void *arg) {
fn_80365D20(ENEMY_SOUND_MGR);
return reinterpret_cast<void *>(true);
}
void dStageMgr_c::initializeState_ReadObjectSound() {
mpDvdCallback2 = mDvd_callback_c::createOrDie(soundCallback2, nullptr);
}
void dStageMgr_c::executeState_ReadObjectSound() {
if (mpDvdCallback2 == nullptr) {
return;
}
if (mpDvdCallback2->mStatus == 0) {
return;
}
if (dScGame_c::sInstance != nullptr) {
if (dScGame_c::sInstance->savePromptFlag() == true) {
mStateMgr.changeState(StateID_SceneChangeSave);
} else {
mStateMgr.changeState(StateID_RestartSceneWait);
}
return;
}
mStateMgr.changeState(StateID_RestartSceneWait);
}
void dStageMgr_c::finalizeState_ReadObjectSound() {
mpDvdCallback2->do_delete();
// mpDvdCallback2 = nullptr;
clearProcControlFlag(ROOT_DISABLE_EXECUTE);
clearProcControlFlag(ROOT_DISABLE_DRAW);
dLast_c::setExecuteCallback(lastExecuteCallback);
}
extern "C" void *LYT_SAVE_MGR;
extern "C" void fn_80285600(void*, int, int);
void dStageMgr_c::initializeState_SceneChangeSave() {
dScGame_c::sInstance->setSavePromptFlag(false);
if (LYT_SAVE_MGR != nullptr) {
fn_80285600(LYT_SAVE_MGR, 3, 0);
}
dBase_c::s_NextExecuteControlFlags |= 1;
dSys::setFrameRate(2);
}
void dStageMgr_c::executeState_SceneChangeSave() {
if (LYT_SAVE_MGR != nullptr) {
// "isNotSaving???"
if (((u8*)LYT_SAVE_MGR)[0x119C] == true) {
mStateMgr.changeState(StateID_RestartSceneWait);
}
} else {
mStateMgr.changeState(StateID_RestartSceneWait);
}
}
void dStageMgr_c::finalizeState_SceneChangeSave() {
dBase_c::s_NextExecuteControlFlags &= ~1;
dBase_c::s_DrawControlFlags &= ~1;
}
void dStageMgr_c::initializeState_RestartSceneWait() {
dSys::setFrameRate(2);
}
void dStageMgr_c::executeState_RestartSceneWait() {
if (mFader.isSettled()) {
if (mFader.isStatus(mFaderBase_c::FADED_IN)) {
if (field_0x88BC) {
mStateMgr.changeState(StateID_RestartScene);
}
} else {
mFader.fadeIn();
}
// TODO
mFader.calc();
}
}
void dStageMgr_c::finalizeState_RestartSceneWait() {}
void dStageMgr_c::initializeState_RestartScene() {
triggerFade(dScGame_c::nextSpawnInfo.transitionType, dScGame_c::nextSpawnInfo.transitionFadeFrames);
mFader.setFadeInType(dScGame_c::nextSpawnInfo.transitionType);
fn_803625F0(ENEMY_SOUND_MGR, mFader.getFadeOutFrame());
}
void dStageMgr_c::executeState_RestartScene() {
if (mFader.isStatus(mFaderBase_c::FADED_OUT)) {
}
}
void dStageMgr_c::finalizeState_RestartScene() {
commitAllFlagManagers();
dSys::setFrameRate(1);
}
+1 -1
View File
@@ -2,11 +2,11 @@
#include "common.h"
#include "d/d_sc_game.h"
#include "d/d_sc_title.h"
#include "d/d_stage_mgr.h"
#include "d/lyt/d_lyt_area_caption.h"
#include "d/lyt/d_lyt_meter_configuration.h"
#include "d/lyt/d_window.h"
#include "d/lyt/meter/d_lyt_meter.h"
#include "toBeSorted/stage_manager.h"
#include "toBeSorted/arc_managers/layout_arc_manager.h"
// clang-format on