diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2025-05-25 15:51:35 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-25 15:51:35 -0400 |
| commit | fd7d30d32283d03a412e8c401d04418351cf686a (patch) | |
| tree | e88bed25f474f06552cd7a7ea7067a0beead4414 /src/d/a/obj/d_a_obj_switch.cpp | |
| parent | 018ef1971cd53aa8e78154789bcf6cac2f19b603 (diff) | |
d_linkage is largely done (#176)
Diffstat (limited to 'src/d/a/obj/d_a_obj_switch.cpp')
| -rw-r--r-- | src/d/a/obj/d_a_obj_switch.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/d/a/obj/d_a_obj_switch.cpp b/src/d/a/obj/d_a_obj_switch.cpp index ffc58d74..fd5cd444 100644 --- a/src/d/a/obj/d_a_obj_switch.cpp +++ b/src/d/a/obj/d_a_obj_switch.cpp @@ -3,6 +3,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_linkage.h" #include "d/flag/sceneflag_manager.h" #include "nw4r/g3d/res/g3d_resfile.h" #include "s/s_Math.h" @@ -42,26 +43,29 @@ void dAcOsw_c::rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObjBase_c *in dAcPy_c *link = interactor->isActorPlayer() ? static_cast<dAcPy_c *>(interactor) : nullptr; dAcOsw_c *sw = static_cast<dAcOsw_c *>(actor); - // halp - if (!(link == nullptr || (!link->checkActionFlags(dAcPy_c::FLG0_IN_WATER) && - ((!link->checkFlags0x340(0x800000) || - ((link->getCurrentCarriedActor() != nullptr && - link->getCurrentCarriedActor()->mActorCarryInfo.testCarryFlag(0x04)))))))) { + if (link != nullptr) { + if (link->checkActionFlags(dAcPy_c::FLG0_IN_WATER)) { + return; + } + if (link->checkFlags0x340(0x800000) && + !(link->getCurrentCarriedActor() && link->getCurrentCarriedActor()->GetLinkage().checkFlag(0x04))) { + return; + } + } + + if (interactor->GetLinkage().checkState(dLinkage_c::STATE_ACTIVE)) { return; } - if (interactor->mActorCarryInfo.isCarried != 1) { - if (link == nullptr || (link->checkActionFlags(0xC70852)) == 0) { - if (!sw->someInteractCheck(link != nullptr)) { - bool needsOnFlag = sw->mOnSceneFlag < 0xFF && - !SceneflagManager::sInstance->checkBoolFlag(sw->roomid, sw->mOnSceneFlag); - if (!needsOnFlag && sw->mObjRef.get() == nullptr && link != nullptr && sw->field_0x5F1 == 0 && - sw->mStateMgr.isState(StateID_On)) { - link->onFlags_0x360(0x8000); - } + + if (!(link && link->checkActionFlags(0xC70852))) { + if (!sw->someInteractCheck(link != nullptr)) { + if (!sw->checkOnFlag() && sw->mObjRef.get() == nullptr && link != nullptr && sw->field_0x5F1 == 0 && + sw->mStateMgr.isState(StateID_On)) { + link->onFlags_0x360(0x8000); } } - interactor->setObjectProperty(0x40); } + interactor->setObjectProperty(0x40); } bool dAcOsw_c::createHeap() { |
