d_stage progress

This commit is contained in:
robojumper
2025-03-08 18:54:53 +01:00
parent 03c99fc37c
commit c558c88f25
37 changed files with 885 additions and 200 deletions
+2 -2
View File
@@ -2,9 +2,9 @@
#include "d/a/d_a_player.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "nw4r/types_nw4r.h"
#include "toBeSorted/area_utils.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_APPEAR_BRIDGE, dAcOappearBridge_c, fProfile::OBJ_APPEAR_BRIDGE, 0x01FC, 0, 6);
@@ -18,7 +18,7 @@ STATE_DEFINE(dAcOappearBridge_c, Disappear);
bool dAcOappearBridge_c::createHeap() {
mResFile = nw4r::g3d::ResFile(getOarcResFile("TongueStage"));
RoomManager::bindStageResToFile(&mResFile);
dStage_c::bindStageResToFile(&mResFile);
nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("TongueStage");
TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x128));
nw4r::g3d::ResAnmTexSrt srt = mResFile.GetResAnmTexSrt("TongueStage");
+3 -3
View File
@@ -1,9 +1,9 @@
#include "d/a/obj/d_a_obj_bamboo_island.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/room_manager.h"
const f32 dAcObambooIsland_c::unusedFloat1 = 100000.0f;
const f32 dAcObambooIsland_c::unusedFloat2 = 0.0f;
@@ -23,8 +23,8 @@ void dAcObambooIsland_c::rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObj
bool dAcObambooIsland_c::createHeap() {
mBrres = nw4r::g3d::ResFile(getOarcResFile("IslBamb"));
RoomManager::bindStageResToFile(&mBrres);
RoomManager::bindSkyCmnToResFile(&mBrres);
dStage_c::bindStageResToFile(&mBrres);
dStage_c::bindSkyCmnToResFile(&mBrres);
for (int i = 0; i < 2; i++) {
nw4r::g3d::ResMdl mdl = mBrres.GetResMdl(sBambooIslandNames[i]);
TRY_CREATE(mModels[i].create(mdl, &heap_allocator, 0x120));
+3 -3
View File
@@ -2,6 +2,7 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "m/m_vec.h"
@@ -10,7 +11,6 @@
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "nw4r/g3d/res/g3d_resnode.h"
#include "toBeSorted/room_manager.h"
const f32 dAcOislandNusi_c::someFloat = 100000.0f;
@@ -26,8 +26,8 @@ STATE_DEFINE(dAcOislandNusi_c, NusiFight);
bool dAcOislandNusi_c::createHeap() {
mRes = nw4r::g3d::ResFile(getOarcResFile("IslNusi"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
for (int i = 0; i < 2; i++) {
nw4r::g3d::ResMdl mdl = mRes.GetResMdl(sMdlNames[i]);
TRY_CREATE(mMdls[i].create(mdl, &heap_allocator, 0x160));
+2 -2
View File
@@ -1,13 +1,13 @@
#include "d/a/obj/d_a_obj_lava_F200.h"
#include "d/d_stage.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_LAVA_F200, dAcOlavaF200_c, fProfile::OBJ_LAVA_F200, 0x0214, 0, 0);
bool dAcOlavaF200_c::createHeap() {
mBrres = nw4r::g3d::ResFile(getOarcResFile("LavaF200"));
RoomManager::bindStageResToFile(&mBrres);
dStage_c::bindStageResToFile(&mBrres);
nw4r::g3d::ResMdl mdl0 = mBrres.GetResMdl("LavaF200");
TRY_CREATE(mModels[0].create(mdl0, &heap_allocator, 0x32C));
+3 -3
View File
@@ -3,12 +3,12 @@
#include "common.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resanmtexsrt.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "toBeSorted/room_manager.h"
static const char *const sResFiles[] = {
"F000Megami",
@@ -46,8 +46,8 @@ bool dAcOmegamiIsland_c::createHeap() {
mVariant = getVariant();
mRes = nw4r::g3d::ResFile(getOarcResFile(sResFiles[mVariant]));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl mdl1 = mRes.GetResMdl(sMdl1[mVariant]);
TRY_CREATE(mMdls[0].create(mdl1, &heap_allocator, 0x120));
+2 -2
View File
@@ -1,9 +1,9 @@
#include "d/a/obj/d_a_obj_pool_cock.h"
#include "d/a/obj/d_a_obj_vortex.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "s/s_Math.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_POOL_COCK, dAcOPoolCock_c, fProfile::OBJ_POOL_COCK, 0x024D, 0, 7);
@@ -11,7 +11,7 @@ STATE_DEFINE(dAcOPoolCock_c, Wait);
bool dAcOPoolCock_c::createHeap() {
mBrres = nw4r::g3d::ResFile(getOarcResFile("WaterD101"));
RoomManager::bindStageResToFile(&mBrres);
dStage_c::bindStageResToFile(&mBrres);
nw4r::g3d::ResMdl mdl = mBrres.GetResMdl("PoolCockD101");
for (int i = 0; i < 2; i++) {
TRY_CREATE(mModels[i].create(mdl, &heap_allocator, 0x120));
+3 -3
View File
@@ -1,9 +1,9 @@
#include "d/a/obj/d_a_obj_sun_light.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_SUN_LIGHT, dAcOsunLight_c, fProfile::OBJ_SUN_LIGHT, 0x0219, 0, 3);
@@ -11,8 +11,8 @@ STATE_DEFINE(dAcOsunLight_c, Wait);
bool dAcOsunLight_c::createHeap() {
mBrres = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->getData("g3d/stage.brres"));
RoomManager::bindStageResToFile(&mBrres);
RoomManager::bindSkyCmnToResFile(&mBrres);
dStage_c::bindStageResToFile(&mBrres);
dStage_c::bindSkyCmnToResFile(&mBrres);
nw4r::g3d::ResMdl mdl = mBrres.GetResMdl("StageF000Light");
TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x120));
nw4r::g3d::ResAnmTexSrt srt = mBrres.GetResAnmTexSrt("StageF000Light");
+2 -2
View File
@@ -4,12 +4,12 @@
#include "d/a/d_a_base.h"
#include "d/a/obj/d_a_obj_tower_D101.h"
#include "d/col/bg/d_bg_s_wtr_chk.h"
#include "d/d_stage.h"
#include "f/f_base.h"
#include "f/f_manager.h"
#include "f/f_profile_name.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_TOWER_GEAR_D101, dAcOTowerGearD101_c, fProfile::OBJ_TOWER_GEAR_D101, 0x17E, 0, 7);
@@ -20,7 +20,7 @@ extern "C" void fn_80067340(mVec3_c &, nw4r::g3d::ResMdl *, const char *);
bool dAcOTowerGearD101_c::createHeap() {
const char *name = "TowerGearD101";
mRes = nw4r::g3d::ResFile(getOarcResFile(name));
RoomManager::bindStageResToFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
nw4r::g3d::ResMdl mdl = mRes.GetResMdl(name);
if (!mMdl.create(mdl, &heap_allocator, 0x120, 1, nullptr)) {
return false;
+2 -2
View File
@@ -5,6 +5,7 @@
#include "d/a/d_a_player.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/bg/d_bg_w.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "f/f_base.h"
#include "m/m3d/m_fanm.h"
@@ -17,7 +18,6 @@
#include "s/s_Math.h"
#include "toBeSorted/actor_event.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_TOWER_HAND_D101, dAcOTowerHandD101_c, fProfile::OBJ_TOWER_HAND_D101, 0x180, 0, 6);
@@ -108,7 +108,7 @@ bool dAcOTowerHandD101_c::createHeap() {
if (!res.IsValid()) {
return false;
}
RoomManager::bindStageResToFile(&res);
dStage_c::bindStageResToFile(&res);
if (direction == 1) {
mMdl.getModel().setCullModeAll(GX_CULL_FRONT, false);
}
+3 -3
View File
@@ -1,12 +1,12 @@
#include "d/a/obj/d_a_obj_uta_demo_pedest.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/d_stage.h"
#include "f/f_base.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/room_manager.h"
static const char *const sMdlNames[] = {
"StageF010rPedest",
@@ -25,8 +25,8 @@ bool dAcOutaDemoPedest_c::createHeap() {
}
mRes = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->getData("g3d/stage.brres"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl mdl = mRes.GetResMdl(sMdlNames[mModelType]);
TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120));
+3 -3
View File
@@ -4,8 +4,8 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/col/c/c_m3d_g_aab.h"
#include "d/d_stage.h"
#include "d/flag/storyflag_manager.h"
#include "toBeSorted/room_manager.h"
static const char *const mMdlNames[] = {
"IslSon",
@@ -24,8 +24,8 @@ void dAcOutajima_c::rideCallback(dBgW *bg, dAcObjBase_c *o1, dAcObjBase_c *o2) {
bool dAcOutajima_c::createHeap() {
mRes = nw4r::g3d::ResFile(getOarcResFile("IslSon"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl m(nullptr);
+3 -3
View File
@@ -4,13 +4,13 @@
#include "d/a/obj/d_a_obj_base.h"
#include "d/a/obj/d_a_obj_utajima_main_mecha.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "f/f_base.h"
#include "f/f_manager.h"
#include "f/f_profile_name.h"
#include "m/m_angle.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "s/s_Math.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_UTAJIMA_ISLAND, dAcOutajimaIsland_c, fProfile::OBJ_UTAJIMA_ISLAND, 0x1D2, 0, 6);
@@ -25,8 +25,8 @@ const f32 dAcOutajimaIsland_c::floats[] = {
bool dAcOutajimaIsland_c::createHeap() {
mRes = nw4r::g3d::ResFile(getOarcResFile("IslPuzIslet00"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl m = mRes.GetResMdl("IslPuzIslet00");
TRY_CREATE(mMdl.create(m, &heap_allocator, 0x120));
+3 -3
View File
@@ -2,8 +2,8 @@
#include "common.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "m/m_vec.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(OBJ_UTAJIMA_LV2, dAcOutajimaLv2_c, fProfile::OBJ_UTAJIMA_LV2, 0x1D5, 0, 3);
@@ -11,8 +11,8 @@ const f32 dAcOutajimaLv2_c::someFloat = 100000.0f;
bool dAcOutajimaLv2_c::createHeap() {
mRes = nw4r::g3d::ResFile(getOarcResFile("IslCave"));
RoomManager::bindStageResToFile(&mRes);
RoomManager::bindSkyCmnToResFile(&mRes);
dStage_c::bindStageResToFile(&mRes);
dStage_c::bindSkyCmnToResFile(&mRes);
nw4r::g3d::ResMdl mdl = mRes.GetResMdl("IslCave");
TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120));
+3 -4
View File
@@ -2,9 +2,9 @@
#include "d/d_room.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(TAG_GENKI_DOWSING_TARGET, dTgGenkiDwsTgt_c, fProfile::TAG_GENKI_DOWSING_TARGET, 0x02A5, 0, 0);
@@ -50,9 +50,8 @@ int dTgGenkiDwsTgt_c::actorExecute() {
if (flag) {
deleteRequest();
} else {
RoomManager *mgr = RoomManager::m_Instance;
if (mgr != nullptr) {
dRoom_c *room = RoomManager::m_Instance->GetRoomByIndex(roomid);
if (dStage_c::GetInstance() != nullptr) {
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
if (room != nullptr) {
if (room->checkFlag(8)) {
mDowsingTarget.doRegister();
+9 -9
View File
@@ -5,13 +5,13 @@
#include "d/d_heap.h"
#include "d/d_room.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/flag/enemyflag_manager.h"
#include "f/f_list_nd.h"
#include "m/m_vec.h"
#include "toBeSorted/event.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/file_manager.h"
#include "toBeSorted/room_manager.h"
#include "toBeSorted/special_item_drop_mgr.h"
// .sdata
@@ -126,13 +126,13 @@ int dAcBase_c::initAllocator(int size, char *name, EGG::Heap *heap, int align) {
}
bool dAcBase_c::addActorToRoom(s32 roomId) {
dBase_c *room = RoomManager::getRoom(roomId);
dBase_c *room = dStage_c::getParentForRoom(roomId);
if (room == nullptr) {
return false;
}
if (setConnectChild(room)) {
if (roomId == -1) {
this->roomid = RoomManager::m_Instance->curr_room_id;
this->roomid = dStage_c::GetInstance()->getCurrRoomId();
} else {
this->roomid = roomId;
}
@@ -427,14 +427,14 @@ void dAcBase_c::updateRoomId(f32 yOffset) {
if (checkCollision(&actorPos)) {
roomid = collisionCheckGetRoom();
} else {
roomid = RoomManager::m_Instance->curr_room_id;
roomid = dStage_c::GetInstance()->getCurrRoomId();
}
}
}
// 8002d540
bool dAcBase_c::isRoomFlags_0x6_Set() {
dRoom_c *room = RoomManager::m_Instance->GetRoomByIndex(roomid);
dRoom_c *room = dStage_c::GetInstance()->getRoom(roomid);
return (room->checkFlag(0x4 | 0x2));
}
@@ -478,12 +478,12 @@ void dAcBase_c::setEnemyDefeatFlag() {
// 8002d940
void dAcBase_c::changeLoadedEntitiesWithSet() {
RoomManager::m_Instance->changeLoadedEntities(RoomManager::m_Instance, obj_id, true);
dStage_c::GetInstance()->changeLoadedEntities(obj_id, true);
}
// 8002d960
void dAcBase_c::changeLoadedEntitiesNoSet() {
RoomManager::m_Instance->changeLoadedEntities(RoomManager::m_Instance, obj_id, false);
dStage_c::GetInstance()->changeLoadedEntities(obj_id, false);
}
// spawns GroupType2 (ACTOR)
@@ -513,7 +513,7 @@ dAcBase_c *dAcBase_c::createActor(
setTempCreateParams(
actorPosition, actorRotation, actorScale, actorRoomid, newParams2, (dAcBase_c *)actorRef, 0, -1, 0xFF, nullptr
);
dBase_c *room = RoomManager::getRoom(roomid);
dBase_c *room = dStage_c::getParentForRoom(roomid);
return (dAcBase_c *)dBase_c::createBase(actorId, room, actorParams1, ACTOR);
}
@@ -544,7 +544,7 @@ dAcBase_c *dAcBase_c::createActorStage(
setTempCreateParams(
actorPosition, actorRotation, actorScale, actorRoomid, newParams2, (dAcBase_c *)actorRef, 0, -1, 0xFF, nullptr
);
dBase_c *room = RoomManager::getRoom(roomid);
dBase_c *room = dStage_c::getParentForRoom(roomid);
return (dAcBase_c *)dBase_c::createBase(actorId, room, actorParams1, STAGE);
}
+3 -3
View File
@@ -12,6 +12,7 @@
#include "d/col/cc/d_cc_d.h"
#include "d/col/cc/d_cc_s.h"
#include "d/d_room.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/flag/tboxflag_manager.h"
@@ -32,7 +33,6 @@
#include "toBeSorted/counters/goddess_chest_counter.h"
#include "toBeSorted/dowsing_target.h"
#include "toBeSorted/event_manager.h"
#include "toBeSorted/room_manager.h"
SPECIAL_ACTOR_PROFILE(TBOX, dAcTbox_c, fProfile::TBOX, 0x018D, 0, 6);
@@ -1192,7 +1192,7 @@ int dAcTbox_c::actorExecute() {
(this->*mRegisterDowsingTarget)();
}
dRoom_c *r = RoomManager::m_Instance->GetRoomByIndex(roomid);
dRoom_c *r = dStage_c::GetInstance()->getRoom(roomid);
bool hasFlags = r->checkFlag(0x1E);
if (hasFlags) {
setObjectProperty(0x200);
@@ -1328,7 +1328,7 @@ int dAcTbox_c::actorExecuteInEvent() {
(this->*mRegisterDowsingTarget)();
}
dRoom_c *r = RoomManager::m_Instance->GetRoomByIndex(roomid);
dRoom_c *r = dStage_c::GetInstance()->getRoom(roomid);
bool hasFlags = r->checkFlag(0x1E);
if (hasFlags) {
setObjectProperty(0x200);
+7 -7
View File
@@ -8,6 +8,7 @@
#include "d/col/bg/d_bg_w_base.h"
#include "d/col/bg/d_bg_w_kcol.h"
#include "d/d_sc_game.h"
#include "d/d_stage.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "d/t/d_t_mass_obj.h"
@@ -35,7 +36,6 @@
#include "nw4r/math/math_types.h"
#include "sized_string.h"
#include "toBeSorted/arc_managers/current_stage_arc_manager.h"
#include "toBeSorted/room_manager.h"
#include "toBeSorted/stage_manager.h"
#include "toBeSorted/time_area_mgr.h"
#include "toBeSorted/unk_with_water.h"
@@ -66,8 +66,8 @@ int dRoom_c::create() {
bool anyError = false;
mRoomRes = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->loadFromRoomArc(roomid, "g3d/room.brres"));
RoomManager::bindStageResToFile(&mRoomRes);
RoomManager::bindSkyCmnToResFile(&mRoomRes);
dStage_c::bindStageResToFile(&mRoomRes);
dStage_c::bindSkyCmnToResFile(&mRoomRes);
for (s32 i = 0; i < 8; i++) {
model_c *mdl = &mModels[i];
@@ -99,7 +99,7 @@ int dRoom_c::create() {
return FAILED;
}
RoomManager::m_Instance->setRoom(roomid, this);
dStage_c::GetInstance()->setRoom(roomid, this);
BZS = CurrentStageArcManager::sInstance->loadFromRoomArc(roomid, "dat/room.bzs");
parseRoomBzs(roomid, BZS);
mDidAlreadyInit = (params >> 6) & 1;
@@ -123,7 +123,7 @@ int dRoom_c::doDelete() {
stageMr->destroyUnkWithWater(val, &mWaterThing);
}
RoomManager::m_Instance->setRoom(roomid, nullptr);
dStage_c::GetInstance()->setRoom(roomid, nullptr);
return SUCCEEDED;
}
@@ -265,7 +265,7 @@ void dRoom_c::drawOnMapIfVisible(mMtx_c *mtx, int param) {
// Visited rooms are shown filled out
bool drawFully = true;
if (dStageMgr_c::GetInstance()->isAreaTypeDungeonOrBoss()) {
drawFully = RoomManager::m_Instance->hasVisitedRoomId(roomid);
drawFully = dStage_c::GetInstance()->hasVisitedRoom(roomid);
if (!drawFully && !dAcItem_c::checkFlag(/* DUNGEON_MAP_FI */ 0x32)) {
return;
}
@@ -505,7 +505,7 @@ bool dRoom_c::model_c::create(nw4r::g3d::ResFile resFile, mAllocator_c &alloc, s
nw4r::g3d::ResAnmTexSrt anmSrt = resFile.GetResAnmTexSrt(mdlName);
if (!anmSrt.IsValid()) {
RoomManager::getMA0IndirectSrt(&anmSrt, mdl);
dStage_c::getMA0IndirectSrt(&anmSrt, mdl);
}
if (anmSrt.IsValid()) {
mpAnmSrt = new m3d::anmTexSrt_c();
-1
View File
@@ -14,7 +14,6 @@
#include "toBeSorted/file_manager.h"
#include "toBeSorted/minigame_mgr.h"
#include "toBeSorted/music_mgrs.h"
#include "toBeSorted/room_manager.h"
#include "toBeSorted/some_gxf_thing.h"
#include "toBeSorted/stage_manager.h"
+392
View File
@@ -0,0 +1,392 @@
#include "d/d_stage.h"
#include "common.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_base.h"
#include "d/d_room.h"
#include "d/d_sc_game.h"
#include "d/d_sc_title.h"
#include "d/flag/dungeonflag_manager.h"
#include "d/flag/sceneflag_manager.h"
#include "d/flag/storyflag_manager.h"
#include "f/f_base.h"
#include "f/f_profile.h"
#include "f/f_profile_name.h"
#include "m/m_fader_base.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "nw4r/g3d/res/g3d_resmat.h"
#include "nw4r/g3d/res/g3d_resmdl.h"
#include "nw4r/math/math_types.h"
#include "s/s_FPhase.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/event_manager.h"
#include "toBeSorted/music_mgrs.h"
#include "toBeSorted/time_area_mgr.h"
#include <cstring>
SPECIAL_BASE_PROFILE(STAGE, dStage_c, fProfile::STAGE, 6, 0x4E0);
sFPhase<dStage_c>::phaseCallback dStage_c::sCallbacks[] = {
&dStage_c::createRooms,
&dStage_c::waitForRooms,
nullptr,
};
extern "C" void fn_8001BE60(f32, f32);
extern "C" void *SCRAPPER_PTR;
dStage_c::dStage_c() : mPhase(this, sCallbacks) {
memset(loaded_entities, 0, sizeof(loaded_entities));
sInstance = this;
dScGame_c::resetUpdateFrameCount();
SCRAPPER_PTR = nullptr;
fn_8001BE60(2000.0f, 1700.0f);
}
extern "C" void *SCRAPPER_PICKUP_TARGET;
extern "C" void ScrapperPickupMgr__update(void *);
extern "C" void ScrapperPickupMgr__dtor();
extern "C" void fn_80028A80();
extern "C" void fn_80028EC0();
extern "C" void fn_80066D30(s32);
int dStage_c::create() {
if (mPhase.step() != sFPhaseBase::PHASE_ALL_DONE) {
return NOT_READY;
}
// dStageMgr_c *stageMgr = dStageMgr_c::GetInstance();
// for (int i = 0; i < dSta)
if (mapRelated.field_0x1EB == 0) {
mVec3_c min, max;
for (s32 i = 0; i < MAX_ROOM_NUMBER - 1; i++) {
dRoom_c *room = getRoom(i);
if (room != nullptr) {
mVec3_c tmin, tmax;
room->getBounds(&tmin, &tmax);
if (i == 0) {
min = tmin;
max = tmax;
} else {
nw4r::math::VEC3Minimize(min, min, tmin);
nw4r::math::VEC3Maximize(max, max, tmax);
}
}
}
max.y += 6000.0f;
mVec3_c size = max - min;
mVec3_c center = mVec3_c(min.x + size.x * 0.5f, min.y, min.z + size.z * 0.5f);
mapRelated.fn_801B4B80(0, center, size);
mVec3_c v = mVec3_c(10000.0f, 10000.0f, 100000.0f);
mapRelated.fn_801B4C70(v);
}
mapRelated.fn_801B50C0(0);
fn_80028A80();
return SUCCEEDED;
}
int dStage_c::doDelete() {
fn_80028EC0();
fn_80066D30(-1);
ScrapperPickupMgr__dtor();
return SUCCEEDED;
}
int dStage_c::execute() {
mFader.calc();
ScrapperPickupMgr__update(SCRAPPER_PICKUP_TARGET);
return SUCCEEDED;
}
extern "C" void resetViewClipVals();
int dStage_c::draw() {
resetViewClipVals();
return SUCCEEDED;
}
void dStage_c::deleteReady() {}
sFPhaseBase::sFPhaseState dStage_c::createRooms() {
// TODO
// if (dScGame_c::sCo)
mFader.create();
mFader.setTypes(1, 1);
mFader.setFadeInFrame(1);
mFader.fadeIn();
mFader.calc();
mFader.setFrames(15, 15);
mFader.initForLyt();
// TODO
if (dScTitle_c::sInstance != nullptr) {
dBase_c::createBase(fProfile::TITLE, this, 0, OTHER);
}
dTimeAreaMgr_c::sInstance->setField0x78(false);
return sFPhaseBase::PHASE_NEXT;
}
sFPhaseBase::sFPhaseState dStage_c::waitForRooms() {
if (checkChildProcessCreateState()) {
return sFPhaseBase::PHASE_RETRY;
}
return sFPhaseBase::PHASE_NEXT;
}
void dStage_c::setRoom(int roomid, dRoom_c *room) {
rooms.setRoom(roomid, room);
}
dRoom_c *dStage_c::getRoom(s32 idx) {
return rooms.getRoom(idx);
}
bool dStage_c::fadeIn(s32 fadeType, u16 frames) {
if (mFader.getStatus() != mFaderBase_c::FADED_OUT) {
return false;
}
mFader.setFadeInType(fadeType);
mFader.setFadeInFrame(frames);
mFader.fadeIn();
fn_80384570(ENEMY_BGM_RELATED_MGR, false);
return true;
}
bool dStage_c::fadeOut(s32 fadeType, u16 frames) {
if (mFader.getStatus() != mFaderBase_c::FADED_IN) {
return false;
}
mFader.setFadeOutType(fadeType);
mFader.setFadeOutFrame(frames);
mFader.fadeOut();
fn_80384570(ENEMY_BGM_RELATED_MGR, true);
return true;
}
void dStage_c::forceFadeOut() {
mFader.setStatus(mFaderBase_c::FADED_OUT);
fn_80384570(ENEMY_BGM_RELATED_MGR, true);
}
void dStage_c::forceFadeIn() {
mFader.setStatus(mFaderBase_c::FADED_IN);
fn_80384570(ENEMY_BGM_RELATED_MGR, false);
}
void dStage_c::drawMap(mMtx_c *mtx, int param) {
dBgS::GetInstance()->UpdateScrollTex();
for (s32 i = 0; i < MAX_ROOM_NUMBER - 1; i++) {
dRoom_c *room = getRoom(i);
if (room != nullptr) {
room->drawOnMapIfVisible(mtx, param);
}
}
dBgS::GetInstance()->DrawSkyKeepMap(mtx, param);
}
static void getFlagPositionForRoomVisit(int roomid, u16 *o_flag, u16 *o_shift) {
*o_flag = (roomid / 16) + 8;
*o_shift = 1 << (roomid % 16);
}
bool dStage_c::hasVisitedRoom(int roomid) const {
u16 flag, shift;
getFlagPositionForRoomVisit(roomid, &flag, &shift);
DungeonflagManager *mg = DungeonflagManager::sInstance;
return (mg->getCounterOrFlag(flag, 8) & shift) != 0;
}
void dStage_c::setRoomVisited(int roomid) {
// TODO this is probably an inline but inline bools cause extra instructions
if (EventManager::getCurrentEventName() != nullptr &&
std::strncmp(EventManager::getCurrentEventName(), "Save", 0x20) == 0) {
return;
}
if (dScGame_c::sInstance == nullptr || dScGame_c::sInstance->profile_name == fProfile::GAME) {
u16 flag, shift;
getFlagPositionForRoomVisit(roomid, &flag, &shift);
DungeonflagManager *mg = DungeonflagManager::sInstance;
u16 newVal = shift | mg->getCounterOrFlag(flag, 8);
mg->setToValue(flag, newVal);
}
}
dRoom_c *dStage_c::createRoom(int roomid, bool flag0x40) {
return static_cast<dRoom_c *>(
dBase_c::createBase(fProfile::ROOM, this, (roomid & 0x3F) | (flag0x40 ? 0x40 : 0), OTHER)
);
}
void dStage_c::createLytSeekerStone() {
dBase_c::createBase(fProfile::LYT_CONTROL_GAME, this, 0, OTHER);
if (LayoutArcManager::sInstance->hasEntry("SeekerStone")) {
dBase_c::createBase(fProfile::LYT_SEEKER_STONE, this, 0, OTHER);
}
}
dBase_c *dStage_c::getParentForRoom(s32 idx) {
if (idx == -1) {
return dStage_c::GetInstance();
}
return dStage_c::GetInstance()->getRoom(idx);
}
void dStage_c::bindStageResToFile(nw4r::g3d::ResFile *file) {
nw4r::g3d::ResFile f = nw4r::g3d::ResFile(CurrentStageArcManager::sInstance->getData("g3d/stage.brres"));
if (f.IsValid()) {
file->Bind(f);
}
}
void dStage_c::bindSkyCmnToResFile(nw4r::g3d::ResFile *file) {
nw4r::g3d::ResFile f = nw4r::g3d::ResFile(OarcManager::sInstance->getSubEntryData("SkyCmn", "g3d/model.brres"));
if (f.IsValid()) {
file->Bind(f);
}
}
static const char *sMatsToTry[] = {
"MA01",
"MA02",
"MA04",
};
bool dStage_c::getMA0AnmTexSrt(nw4r::g3d::ResAnmTexSrt *o_srt, const char *matName) {
const char **candidate = sMatsToTry;
for (int i = 0; i < ARRAY_LENGTH(sMatsToTry); i++, candidate++) {
if (!std::strncmp(matName, *candidate, std::strlen(*candidate))) {
nw4r::g3d::ResFile mdl = nw4r::g3d::ResFile(OarcManager::sInstance->getMdlFromArc2("Common"));
*o_srt = mdl.GetResAnmTexSrt(*candidate);
return true;
}
}
return false;
}
bool dStage_c::getMA0IndirectSrt(nw4r::g3d::ResAnmTexSrt *o_srt, const nw4r::g3d::ResMdl &mdl) {
for (u32 i = 0; i < mdl.GetResMatNumEntries(); i++) {
nw4r::g3d::ResMat mat = mdl.GetResMat(i);
const char *name = mat.GetName();
if (getMA0AnmTexSrt(o_srt, name)) {
return true;
}
}
return false;
}
dRoomTable_c::dRoomTable_c() {
// Okay
mRooms[0] = nullptr;
mRooms[1] = nullptr;
mRooms[2] = nullptr;
mRooms[3] = nullptr;
mRooms[4] = nullptr;
mRooms[5] = nullptr;
mRooms[6] = nullptr;
mRooms[7] = nullptr;
mRooms[8] = nullptr;
mRooms[9] = nullptr;
mRooms[10] = nullptr;
mRooms[11] = nullptr;
mRooms[12] = nullptr;
mRooms[13] = nullptr;
mRooms[14] = nullptr;
mRooms[15] = nullptr;
mRooms[16] = nullptr;
mRooms[17] = nullptr;
mRooms[18] = nullptr;
mRooms[19] = nullptr;
mRooms[20] = nullptr;
mRooms[21] = nullptr;
mRooms[22] = nullptr;
mRooms[23] = nullptr;
mRooms[24] = nullptr;
mRooms[25] = nullptr;
mRooms[26] = nullptr;
mRooms[27] = nullptr;
mRooms[28] = nullptr;
mRooms[29] = nullptr;
mRooms[30] = nullptr;
mRooms[31] = nullptr;
mRooms[32] = nullptr;
mRooms[33] = nullptr;
mRooms[34] = nullptr;
mRooms[35] = nullptr;
mRooms[36] = nullptr;
mRooms[37] = nullptr;
mRooms[38] = nullptr;
mRooms[39] = nullptr;
mRooms[40] = nullptr;
mRooms[41] = nullptr;
mRooms[42] = nullptr;
mRooms[43] = nullptr;
mRooms[44] = nullptr;
mRooms[45] = nullptr;
mRooms[46] = nullptr;
mRooms[47] = nullptr;
mRooms[48] = nullptr;
mRooms[49] = nullptr;
mRooms[50] = nullptr;
mRooms[51] = nullptr;
mRooms[52] = nullptr;
mRooms[53] = nullptr;
mRooms[54] = nullptr;
mRooms[55] = nullptr;
mRooms[56] = nullptr;
mRooms[57] = nullptr;
mRooms[58] = nullptr;
mRooms[59] = nullptr;
mRooms[60] = nullptr;
mRooms[61] = nullptr;
mRooms[62] = nullptr;
}
MapRelated::MapRelated()
: field_0x0FC(0.0f, 0.0f, 0.0f),
field_0x108(0.0f),
field_0x10C(0.0f),
field_0x110(0.0f),
field_0x114(0.0f),
field_0x118(0.0f),
field_0x11C(0.0f),
field_0x120(0.0f),
field_0x124(0.0f),
field_0x128(0.0f),
field_0x12C(0.0f),
field_0x1E0(0),
field_0x1E6(0),
field_0x1E8(0),
field_0x1E9(4),
field_0x1EA(-3),
field_0x1EB(0),
field_0x1EC(0),
field_0x1ED(0),
field_0x1EE(0),
field_0x1F0(0) {
mPostEffect.setField0x30(0.15f);
bool showPastVariant = true;
bool showDesertPast = dScGame_c::isCurrentStage("S300") ||
((dScGame_c::isCurrentStage("F300") || dScGame_c::isCurrentStage("F300_4")) &&
SceneflagManager::sInstance->checkTempOrSceneflag(3));
if (!showDesertPast) {
bool hideSeaPast = !(dScGame_c::isCurrentStage("F301_1") && StoryflagManager::sInstance->getCounterOrFlag(519));
if (hideSeaPast) {
showPastVariant = false;
}
}
field_0x1EF = showPastVariant;
}
extern "C" void fn_801B4AE0();
MapRelated::~MapRelated() {
fn_801B4AE0();
}
+1 -1
View File
@@ -146,7 +146,7 @@ bool SceneflagManager::checkSceneflagGlobal(u16 sceneIdx, u16 flag) {
u16 *pData = FileManager::sInstance->getSceneFlagsConst();
return mFlagHelper.checkFlag(getSceneflagSlotGlobal(sceneIdx, flag), flag % 16, pData, 0x800);
}
bool SceneflagManager::checkTempOrSceneflag(u16 flag) {
u16 SceneflagManager::checkTempOrSceneflag(u16 flag) {
if (flag >= 0x80) {
u16 tempflag = flag - 0x80;
const u16 *pData = FileManager::sInstance->getTempFlagsConst();
-3
View File
@@ -1,3 +0,0 @@
#include "toBeSorted/room_manager.h"
RoomManager* RoomManager::m_Instance;