summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-03-08 22:40:04 +0100
committerrobojumper <robojumper@gmail.com>2025-03-09 10:09:08 +0100
commit32b7ce138d86d862290909f7e9a23c703e0675e1 (patch)
tree8d311a4ac4072ec4cc0166e9fcb05d3b63b2c3a6 /src/d
parentc558c88f2534c699661671d41fcbd84633be74b3 (diff)
dStageMgr_c start, more splits
Diffstat (limited to 'src/d')
-rw-r--r--src/d/col/cc/d_cc_s.cpp3
-rw-r--r--src/d/d_room.cpp2
-rw-r--r--src/d/d_sc_game.cpp2
-rw-r--r--src/d/d_stage_mgr.cpp298
-rw-r--r--src/d/lyt/meter/d_lyt_meter.cpp2
5 files changed, 302 insertions, 5 deletions
diff --git a/src/d/col/cc/d_cc_s.cpp b/src/d/col/cc/d_cc_s.cpp
index 01f1d9e2..120ee9f0 100644
--- a/src/d/col/cc/d_cc_s.cpp
+++ b/src/d/col/cc/d_cc_s.cpp
@@ -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;
diff --git a/src/d/d_room.cpp b/src/d/d_room.cpp
index 8d486c1a..7b466eab 100644
--- a/src/d/d_room.cpp
+++ b/src/d/d_room.cpp
@@ -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"
diff --git a/src/d/d_sc_game.cpp b/src/d/d_sc_game.cpp
index ce809c76..c0948c6e 100644
--- a/src/d/d_sc_game.cpp
+++ b/src/d/d_sc_game.cpp
@@ -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>
diff --git a/src/d/d_stage_mgr.cpp b/src/d/d_stage_mgr.cpp
new file mode 100644
index 00000000..26dd73d9
--- /dev/null
+++ b/src/d/d_stage_mgr.cpp
@@ -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);
+}
diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp
index 302892bd..2f6bcfbc 100644
--- a/src/d/lyt/meter/d_lyt_meter.cpp
+++ b/src/d/lyt/meter/d_lyt_meter.cpp
@@ -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