summaryrefslogtreecommitdiff
path: root/src/d
diff options
context:
space:
mode:
authorelijah-thomas774 <elijahthomas774@gmail.com>2026-09-24 17:30:31 -0400
committerelijah-thomas774 <elijahthomas774@gmail.com>2026-09-24 17:30:31 -0400
commitc1a336a3b3feef2a258e7ec06fb90a37b58fa593 (patch)
tree45ec0ff5c7ad4fb9029db3673e32af00601ac4e3 /src/d
parent10e14b54f1deaf75295e75fee9529c2e533c8fa1 (diff)
parent7b3cec08716d9b0fc89d9d279d3b7ef6cb855570 (diff)
Merge remote-tracking branch 'upstream/HEAD' into d_a_obj_bomb
Diffstat (limited to 'src/d')
-rw-r--r--src/d/a/d_a_salbage_obj.cpp10
-rw-r--r--src/d/tg/d_t_alldie.cpp112
-rw-r--r--src/d/tg/d_t_view_clip.cpp93
3 files changed, 210 insertions, 5 deletions
diff --git a/src/d/a/d_a_salbage_obj.cpp b/src/d/a/d_a_salbage_obj.cpp
index 73232f06..6fef71f6 100644
--- a/src/d/a/d_a_salbage_obj.cpp
+++ b/src/d/a/d_a_salbage_obj.cpp
@@ -97,9 +97,9 @@ int dAcSalbageObj_c::preExecute() {
}
}
- getDowsingUnusedF32();
- field_0x95C.set(0.0f, getDowsingTargetYOffset(), 0.0f);
- mDowsingTarget.setOffset(field_0x95C);
+ (void)getDowsingUnusedF32();
+ mDowsingOffset.set(0.0f, getDowsingTargetYOffset(), 0.0f);
+ mDowsingTarget.setOffset(mDowsingOffset);
return result;
}
@@ -312,7 +312,7 @@ void dAcSalbageObj_c::loadBehaviorFromParams() {
}
void dAcSalbageObj_c::initializeState_Wait() {
- mDowsingTarget.initialize(getDowsingSlot(), 0, &field_0x95C, getDowsingUnusedF32());
+ mDowsingTarget.initialize(getDowsingSlot(), 0, &mDowsingOffset, getDowsingUnusedF32());
mDowsingTarget.doRegister();
mIsDowsingRegistered = true;
}
@@ -323,7 +323,7 @@ void dAcSalbageObj_c::executeState_Wait() {
dAcObjBase_c::create(fProfile::NPC_SLB, mRoomID, 0xFFFFFD01, &pos, nullptr, nullptr, -1);
}
- if (dSalvageMgr_c::sInstance->startedQuestForSalvageObj(this)) {
+ if (dSalvageMgr_c::sInstance->hasStartedQuestForSalvageObj(this)) {
addAttentionTargetIfNeeded();
}
}
diff --git a/src/d/tg/d_t_alldie.cpp b/src/d/tg/d_t_alldie.cpp
new file mode 100644
index 00000000..a205ce09
--- /dev/null
+++ b/src/d/tg/d_t_alldie.cpp
@@ -0,0 +1,112 @@
+#include "d/t/d_t_alldie.h"
+
+#include "common.h"
+#include "d/a/d_a_player.h"
+#include "d/a/e/d_a_en_base.h"
+#include "d/a/obj/d_a_obj_base.h"
+#include "d/d_stage.h"
+#include "d/flag/sceneflag_manager.h"
+#include "f/f_base.h"
+#include "f/f_manager.h"
+#include "f/f_profile_name.h"
+#include "s/s_Math.h"
+#include "toBeSorted/area_math.h"
+#include "toBeSorted/event_manager.h"
+
+SPECIAL_ACTOR_PROFILE(ALLDIE_TAG, dTgAllDie_c, fProfile::ALLDIE_TAG, 0x23, 0, 4);
+
+int dTgAllDie_c::create() {
+ mSceneflag = getFromParams(4, 0xFF);
+ mType = getFromParams(12, 0x3);
+ mTimer0x140 = getFromParams(22, 0xFF);
+ field_0x148 = 0;
+ field_0x144 = getFromParams(30, 0xFF);
+ mRotation.x.set(0);
+ matrixCreateFromPosRotYScale(mArea, mPosition, mRotation.y, mScale, nullptr, 0.0f);
+ return SUCCEEDED;
+}
+
+int dTgAllDie_c::doDelete() {
+ return SUCCEEDED;
+}
+
+int dTgAllDie_c::actorExecute() {
+ if (!dStage_c::GetInstance()->isRoomID(mRoomID)) {
+ return SUCCEEDED;
+ }
+
+ if (mType <= 1) {
+ if (dTimeAreaMgr_c::fn_800BBD40()) {
+ return SUCCEEDED;
+ }
+
+ mTimeArea.check(mRoomID, mPosition, 0, 10.0f, 0.1f);
+ f32 f = mTimeArea.getDistMaybe();
+ if (mType == 0 && f < 1.0f) {
+ return SUCCEEDED;
+ }
+ if (mType == 1 && 0.0f < f) {
+ return SUCCEEDED;
+ }
+ }
+
+ mNumEnemiesInArea = 0;
+ dAcEnBase_c *pEnemy = nullptr;
+ while ((pEnemy = dAcEnBase_c::GetNextEnemy(pEnemy))) {
+ if (pEnemy->mRoomID == mRoomID && !pEnemy->checkInteractionFlags(0x2)) {
+ if (pEnemy->checkProcControl(DISABLE_EXECUTE) == 0 && pEnemy->mLifecycleState != TO_BE_DELETED) {
+ if (checkAreaBox(mArea, pEnemy->mPosition)) {
+ mNumEnemiesInArea++;
+ }
+ }
+ }
+ }
+
+ if (mNumEnemiesInArea == 0) {
+ if (field_0x148 != 0 && EventManager::isInEvent()) {
+ return SUCCEEDED;
+ }
+
+ if (sLib::calcTimer(&mTimer0x13C) == 0) {
+ if (mSceneflag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(mRoomID, mSceneflag)) {
+ SceneflagManager::sInstance->setFlag(mRoomID, mSceneflag);
+ }
+ }
+ } else {
+ mTimer0x13C = (mTimer0x140 <= 128 ? mTimer0x140 + 40 : 40 - (256 - mTimer0x140));
+ if (mSceneflag < 0xFF && SceneflagManager::sInstance->checkBoolFlag(mRoomID, mSceneflag)) {
+ SceneflagManager::sInstance->unsetFlag(mRoomID, mSceneflag);
+ }
+ }
+ return SUCCEEDED;
+}
+
+int dTgAllDie_c::draw() {
+ return SUCCEEDED;
+}
+
+dTgAllDie_c *dTgAllDie_c::getNearestToPlayer(s32 roomId) {
+ fBase_c *pPrev = nullptr;
+ dTgAllDie_c *pReturn = nullptr;
+ const dAcPy_c *pPlayer = dAcPy_c::GetLink();
+ f32 minDist = 1e10f;
+
+ while (true) {
+ dTgAllDie_c *pTgAllDie =
+ static_cast<dTgAllDie_c *>(fManager_c::searchBaseByProfName(fProfile::ALLDIE_TAG, pPrev));
+ pPrev = pTgAllDie;
+
+ if (pTgAllDie == nullptr) {
+ break;
+ }
+
+ if (roomId == pTgAllDie->mRoomID) {
+ f32 dist = pPlayer->getPosition().squareDistanceToXZ(pTgAllDie->getPosition());
+ if (dist < minDist) {
+ pReturn = pTgAllDie;
+ minDist = dist;
+ }
+ }
+ }
+ return pReturn;
+}
diff --git a/src/d/tg/d_t_view_clip.cpp b/src/d/tg/d_t_view_clip.cpp
new file mode 100644
index 00000000..30ef9cba
--- /dev/null
+++ b/src/d/tg/d_t_view_clip.cpp
@@ -0,0 +1,93 @@
+#include "d/t/d_t_view_clip.h"
+
+#include "common.h"
+#include "d/d_camera.h"
+#include "d/d_sc_game.h"
+#include "f/f_base.h"
+#include "toBeSorted/area_math.h"
+#include "toBeSorted/area_utils.h"
+
+SPECIAL_ACTOR_PROFILE(VIEW_CLIP_TAG, dTgViewClip_c, fProfile::VIEW_CLIP_TAG, 0xB, 0, 0);
+
+u8 dTgViewClip_c::sViewClips[dTgViewClip_c::sNumEntries] = {};
+
+int dTgViewClip_c::create() {
+ mIndex = getFromParams(0, 0x3F);
+ mType = getFromParams(8, 0xF);
+ if (mType == 0xF) {
+ mType = TYPE_FORCE_OFF;
+ }
+
+ mAreaIndex = getFromParams(12, 0xFF);
+ matrixCreateFromPosRotYScale(mArea, mPosition, mRotation.y, mScale, nullptr, 0.0f);
+
+ return SUCCEEDED;
+}
+
+int dTgViewClip_c::doDelete() {
+ return SUCCEEDED;
+}
+
+int dTgViewClip_c::actorExecute() {
+ return SUCCEEDED;
+}
+
+int dTgViewClip_c::draw() {
+ dCamera_c *pCamera = dScGame_c::getCamera();
+ if (!checkAreaBox(mArea, pCamera->getPosition())) {
+ if (mAreaIndex == 0xFF) {
+ return SUCCEEDED;
+ }
+ if (!checkPosInArea(mAreaIndex, mRoomID, pCamera->getPosition(), nullptr)) {
+ return SUCCEEDED;
+ }
+ }
+
+ switch (mType) {
+ case TYPE_FORCE_ON: setViewClip(FLAG_FORCE_ON); break;
+ case TYPE_FORCE_OFF: setViewClip(FLAG_FORCE_OFF); break;
+ }
+
+ return SUCCEEDED;
+}
+
+void dTgViewClip_c::setViewClip(u8 setBit) {
+ setViewClipBit(mIndex, setBit);
+}
+
+void dTgViewClip_c::resetViewClip() {
+ for (int i = 0; i < sNumEntries - 1; ++i) {
+ setViewClip(i, 0);
+ }
+}
+
+f32 dTgViewClip_c::getCull(s32 idx, f32 cullDistance) {
+ if (idx > ARRAY_LENGTH(sViewClips) - 2) {
+ return cullDistance;
+ }
+
+ if (getViewClipBit(idx, FLAG_FORCE_ON)) {
+ return FLOAT_MAX;
+ } else if (getViewClipBit(idx, FLAG_FORCE_OFF)) {
+ return -1.0f;
+ }
+
+ return cullDistance;
+}
+bool dTgViewClip_c::checkForceOn(s32 idx) {
+ if (idx <= ARRAY_LENGTH(sViewClips) - 2) {
+ return getViewClipBit(idx, FLAG_FORCE_ON);
+ }
+ return false;
+}
+
+u8 dTgViewClip_c::getViewClipBit(s32 idx, u8 setBit) {
+ return sViewClips[idx] & setBit;
+}
+void dTgViewClip_c::setViewClipBit(s32 idx, u8 setBit) {
+ sViewClips[idx] |= setBit;
+}
+
+void dTgViewClip_c::setViewClip(s32 idx, u8 value) {
+ sViewClips[idx] = value;
+}