diff options
| author | robojumper <robojumper@gmail.com> | 2025-03-09 19:32:07 +0100 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-03-09 19:32:18 +0100 |
| commit | a507d8fc0ae4c1ec2cf86dc412efe2bf6fd4bac1 (patch) | |
| tree | bbb59e4d9f2ac0ddc0876cd8d13064e78e7ca1af /src/d | |
| parent | 39ff2c753b7ecccf49322b856b1e1954028b40e4 (diff) | |
Repair some room damage
Diffstat (limited to 'src/d')
| -rw-r--r-- | src/d/d_room.cpp | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/src/d/d_room.cpp b/src/d/d_room.cpp index 3bfd760f..359c4d32 100644 --- a/src/d/d_room.cpp +++ b/src/d/d_room.cpp @@ -10,6 +10,7 @@ #include "d/d_sc_game.h" #include "d/d_stage.h" #include "d/d_stage_mgr.h" +#include "d/d_stage_parse.h" #include "d/flag/sceneflag_manager.h" #include "d/flag/storyflag_manager.h" #include "d/t/d_t_mass_obj.h" @@ -45,8 +46,6 @@ SPECIAL_BASE_PROFILE(ROOM, dRoom_c, fProfile::ROOM, 0x9, 96); STATE_DEFINE(dRoom_c, Active); STATE_DEFINE(dRoom_c, NonActive); -extern "C" void parseRoomBzs(int roomid, void *bzs); - int dRoom_c::create() { roomid = params & 0x3F; mCanHavePastState = dStageMgr_c::GetInstance()->getSTIFunk1() == 0 && @@ -69,7 +68,7 @@ int dRoom_c::create() { dStage_c::bindStageResToFile(&mRoomRes); dStage_c::bindSkyCmnToResFile(&mRoomRes); - for (s32 i = 0; i < ARRAY_LENGTH(mModels); i++) { + for (s32 i = 0; i < ROOM_NUM_MODELS; i++) { model_c *mdl = &mModels[i]; if (i != 2 || roomid != 1 || dScGame_c::currentSpawnInfo.layer != 14 || !dScGame_c::isCurrentStage("F406")) { if (!mdl->create(mRoomRes, mAllocator, i, &mWaterThing)) { @@ -144,7 +143,7 @@ int dRoom_c::execute() { } executeBg(); - for (s32 i = 0; i < ARRAY_LENGTH(mModels); i++) { + for (s32 i = 0; i < ROOM_NUM_MODELS; i++) { mModels[i].execute(i, mCanHavePastState, val); } @@ -155,12 +154,33 @@ int dRoom_c::draw() { if ((mFlags & 2) != 0 || mSkipDrawing) { return SUCCEEDED; } - for (s32 i = 0; i < ARRAY_LENGTH(mModels); i++) { + for (s32 i = 0; i < ROOM_NUM_MODELS; i++) { mModels[i].draw(roomid); } return SUCCEEDED; } +const PLY *dRoom_c::getEntranceById(u8 entranceId) const { + s32 i = mPlyCount; + const PLY *ply = mpPly; + while (i > 0) { + if (ply->entranceId == entranceId) { + return ply; + } + ply++; + i--; + } + return mpPly; +} + +const CAM *dRoom_c::getCamForIndex(u32 idx) const { + return &mpCam[idx]; +} + +const EVNT *dRoom_c::getEventForIndex(u32 idx) const { + return &mpEvnt[idx]; +} + void deactivateUpdatesCb(dAcBase_c *ac) { if (!ac->checkActorProperty(0x400)) { return; @@ -220,7 +240,7 @@ static const BgData sRoomBg[] = { }; bool dRoom_c::setupBg() { - for (int i = 0; i < ARRAY_LENGTH(mBg); i++) { + for (int i = 0; i < ROOM_NUM_BG; i++) { dBgWKCol *bg = &mBg[i]; void *kcl = CurrentStageArcManager::sInstance->getDataFromRoomArc(roomid, sRoomBg[i].kcl); if (kcl != nullptr) { @@ -245,7 +265,7 @@ bool dRoom_c::setupBg() { } void dRoom_c::executeBg() { - for (int i = 0; i < ARRAY_LENGTH(mBg); i++) { + for (int i = 0; i < ROOM_NUM_BG; i++) { if (!mBg[i].ChkNotReady()) { dBgS::GetInstance()->Regist(&mBg[i], (dAcObjBase_c *)nullptr); } @@ -281,7 +301,7 @@ void dRoom_c::drawOnMapIfVisible(mMtx_c *mtx, int param) { } void dRoom_c::getBounds(mVec3_c *min, mVec3_c *max) const { - for (int i = 0; i < ARRAY_LENGTH(mModels); i++) { + for (int i = 0; i < ROOM_NUM_MODELS; i++) { mVec3_c tMin, tMax; mModels[i].getBounds(&tMin, &tMax); if (i == 0) { @@ -301,13 +321,13 @@ void dRoom_c::formatObj(int obj, SizedString<8> &str) { void dRoom_c::updateObjNodeInEachRoom(int obj, bool visible) { SizedString<8> objName; formatObj(obj, objName); - for (int i = 0; i < ARRAY_LENGTH(mModels); i++) { + for (int i = 0; i < ROOM_NUM_MODELS; i++) { mModels[i].updateObjNode(objName, visible); } } void dRoom_c::destroyModels() { - for (int i = 0; i < ARRAY_LENGTH(mModels); i++) { + for (int i = 0; i < ROOM_NUM_MODELS; i++) { mModels[i].destroy(); } } @@ -329,15 +349,12 @@ f32 dRoom_c::getFrame() const { return mModels[0].getFrame(); } -extern "C" void fn_800641D0(int roomid, void *roomBzs); -extern "C" void fn_80064160(int roomid, void *roomBzs); - void dRoom_c::initializeState_Active() { SceneflagManager::sInstance->unsetZoneflagsForRoom(roomid); executeBg(); - fn_800641D0(roomid, BZS); + parseRoomActivateBzs(roomid, BZS); if (mDidAlreadyInit) { - fn_80064160(roomid, BZS); + parseRoomReactivateBzs(roomid, BZS); } else { mFlags |= 8 | 2; mDidAlreadyInit = true; |
