diff options
| author | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-03-01 13:49:50 -0500 |
|---|---|---|
| committer | elijah-thomas774 <elijahthomas774@gmail.com> | 2026-03-01 13:49:50 -0500 |
| commit | e407be820c956dc2339aac116c2bf82a52c49aeb (patch) | |
| tree | 7c89f1839989292c5f81a5150ed7a9d611d4bc9a /src | |
| parent | 90e60e3341d82a6cf9faa84b532ab7d998ea9813 (diff) | |
d_t_scene_change OK
Diffstat (limited to 'src')
| -rw-r--r-- | src/REL/d/t/d_t_scene_change.cpp | 66 |
1 files changed, 34 insertions, 32 deletions
diff --git a/src/REL/d/t/d_t_scene_change.cpp b/src/REL/d/t/d_t_scene_change.cpp index 0ae26989..972d2406 100644 --- a/src/REL/d/t/d_t_scene_change.cpp +++ b/src/REL/d/t/d_t_scene_change.cpp @@ -3,7 +3,6 @@ #include "c/c_lib.h" #include "common.h" #include "d/a/d_a_player.h" -#include "d/a/npc/d_a_npc_salbage_robot.h" #include "d/a/npc/d_a_npc_volcano_f2_salbo.h" #include "d/flag/sceneflag_manager.h" #include "d/flag/storyflag_manager.h" @@ -13,8 +12,11 @@ #include "m/m_vec.h" #include "toBeSorted/area_math.h" #include "toBeSorted/d_path.h" +#include "toBeSorted/event.h" #include "toBeSorted/event_manager.h" +const char *ScrapperStopEvent = "HailToPlayerToStop"; + SPECIAL_ACTOR_PROFILE(SC_CHANGE_TAG, dTgSceneChange_c, fProfile::SC_CHANGE_TAG, 0x21, 0, 4); int dTgSceneChange_c::create() { @@ -57,12 +59,15 @@ int dTgSceneChange_c::actorExecute() { return SUCCEEDED; } - if (mEnableStoryflag == 0 || mEnableStoryflag >= 0x7FF || !StoryflagManager::sInstance->getFlag(mEnableStoryflag)) { - return SUCCEEDED; + if (mEnableStoryflag != 0 && mEnableStoryflag < 0x7FF) { + if (!StoryflagManager::sInstance->getFlag(mEnableStoryflag)) { + return SUCCEEDED; + } } - - if (mEnableSceneflag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(mRoomID, mEnableSceneflag)) { - return SUCCEEDED; + if (mEnableSceneflag < 0xFF) { + if (!SceneflagManager::sInstance->checkBoolFlag(mRoomID, mEnableSceneflag)) { + return SUCCEEDED; + } } dAcPy_c *pPlayer = dAcPy_c::GetLinkM(); @@ -83,36 +88,33 @@ int dTgSceneChange_c::actorExecute() { extern "C" dAcOrdinaryNpc_c *SCRAPPER_PTR; bool dTgSceneChange_c::checkScrapper() { - if (SCRAPPER_PTR == nullptr) { - return false; - } - - if (SCRAPPER_PTR->mProfileName != fProfile::NPC_SLB2) { - return false; - } - - if (!static_cast<dAcNpcSlb2_c*>(SCRAPPER_PTR)->fn_61_6A10()) { - return false; - } - - dPath_c path; - if (path.initWithPathIndex(mPathId, mRoomID, 0) && path.getNumPoints() > 1) { - if (EventManager::isInEvent(SCRAPPER_PTR, "HailToPlayerToStop")) { - mVec3_c p0, p1; - p0.copyFrom(path.getPoint(0)); - p1.copyFrom(path.getPoint(1)); - mAng a = cLib::targetAngleY(p0, p1); - - - + if (SCRAPPER_PTR != nullptr && SCRAPPER_PTR->mProfileName == fProfile::NPC_SLB2) { + dAcNpcSlb2_c *pScrapper = static_cast<dAcNpcSlb2_c *>(SCRAPPER_PTR); + if (!pScrapper->fn_61_6A10()) { + return false; + } + dPath_c path; + if (path.initWithPathIndex(mPathId, mRoomID, 0) && (u32)path.getNumPoints() >= 2) { + if (EventManager::isInEvent(pScrapper, ScrapperStopEvent)) { + mVec3_c p0, p1; + p0.copyFrom(path.getPoint(0)); + p1.copyFrom(path.getPoint(1)); + mAng a = cLib::targetAngleY(p0, p1); + pScrapper->fn_61_56C0(field_0x138, &mPosition, &a); + + return true; + } else { + void *zev = pScrapper->getOarcZev("DesertRobot"); + u32 flag1 = 0x100000; + Event e(ScrapperStopEvent, zev, 100, flag1 + 1, 0, 0); + EventManager::alsoSetAsCurrentEvent(pScrapper, &e, nullptr); + return true; + } } } - return false; - - -} +} void dTgSceneChange_c::savePlayerPosition() { if (SCRAPPER_PTR == nullptr) { |
