summaryrefslogtreecommitdiff
path: root/src/REL
diff options
context:
space:
mode:
authorelijah-thomas774 <elijahthomas774@gmail.com>2026-04-01 20:47:48 -0400
committerelijah-thomas774 <elijahthomas774@gmail.com>2026-04-06 23:23:17 -0400
commit28df560cc5b30cdbbc7f5d637c3a71de9e015166 (patch)
tree297d1053f1cb0c41fd9b1b4add2650baa343b3d4 /src/REL
parent19ccd68a75ae7f9a2926d7c16402ee0844d5af8f (diff)
dAcEremly_c::StateWait
Diffstat (limited to 'src/REL')
-rw-r--r--src/REL/d/a/e/d_a_e_remly.cpp140
1 files changed, 138 insertions, 2 deletions
diff --git a/src/REL/d/a/e/d_a_e_remly.cpp b/src/REL/d/a/e/d_a_e_remly.cpp
index 7ad1addd..93b6133f 100644
--- a/src/REL/d/a/e/d_a_e_remly.cpp
+++ b/src/REL/d/a/e/d_a_e_remly.cpp
@@ -539,9 +539,125 @@ int dAcEremly_c::draw() {
return SUCCEEDED;
}
-void dAcEremly_c::initializeState_Wait() {}
-void dAcEremly_c::executeState_Wait() {}
+void dAcEremly_c::initializeState_Wait() {
+ field_0xB14 = 0;
+ mAcceleration = -3.f;
+
+ fn_177_8520(true);
+
+ if (field_0xB66 || field_0xB6A) {
+ mMdl.setAnm("RemlyWaitStand", m3d::PLAY_MODE_4, 4.f);
+ field_0xB60 = 0;
+
+ field_0xB48 = cM::rndF(48.f) + 48.f;
+ } else {
+ mMdl.setAnm("RemlyWaitSit", m3d::PLAY_MODE_4, 4.f);
+ field_0xB60 = 1;
+
+ field_0xB44 = cM::rndF(128.f) + 128.f;
+ }
+}
+void dAcEremly_c::executeState_Wait() {
+ const dAcPy_c *pPlayer = dAcPy_c::GetLink();
+ if (field_0xB6A == 0) {
+ fn_177_6EA0(false);
+ }
+ sLib::addCalcScaled(&mSpeed, 0.7f, 5.f);
+
+ if (fn_177_7330()) {
+ mStateMgr.changeState(StateID_EscapeDash);
+ return;
+ }
+
+ if (fn_177_86C0()) {
+ return;
+ }
+
+ if (field_0xB60 == 2) {
+ if (mMdl.getAnm().isStop()) {
+ mMdl.setAnm("RemlytWaitSit", m3d::PLAY_MODE_4, 10.f);
+ field_0xB60 = 1;
+ }
+ return;
+ }
+
+ if (fn_177_73C0()) {
+ if (field_0xB6E == 0) {
+ if (fn_800301b0(mPositionCopy2, mRotation.y + 0x8000, true, 140.f) != 0 /* TODO: Enum?*/) {
+ field_0xB6E = 1;
+ } else if (isWithinPlayerRadius(600.f) || mNearbyBombRef.isLinked()) {
+ mStateMgr.changeState(StateID_Escape);
+ field_0xB6A = 1;
+ } else {
+ fn_177_6B10(false, 0);
+ field_0xB48 = 48.f + cM::rndF(48.f);
+ field_0xB44 = 0x80;
+ if (isWithinPlayerRadius(250.f)) {
+ mStateMgr.changeState(StateID_Scared);
+ }
+ }
+ } else if (fn_177_6B10(0, 0)) {
+ mStateMgr.changeState(StateID_Escape);
+ field_0xB6A = 1;
+ field_0xB48 = 20;
+ field_0xB44 = 128;
+ } else if (isWithinPlayerRadius(250.f)) {
+ mStateMgr.changeState(StateID_Scared);
+ }
+ return;
+ }
+
+ field_0xB6E = 0;
+ fn_177_6B10(0, 0);
+ if (field_0xB56 != 0 || fn_177_8F90()) {
+ return;
+ }
+
+ if (0 == sLib::calcTimer(&field_0xB48) && field_0xB66 != 0) {
+ field_0xB66 = 0;
+ field_0xB6A = 0;
+ field_0xB6E = 0;
+ field_0xB44 = 128.f + cM::rndF(128.f);
+
+ mStateMgr.changeState(StateID_Wait);
+ return;
+ }
+
+ if (field_0xB61 == 1) {
+ return;
+ }
+ if (sLib::calcTimer(&field_0xB44)) {
+ return;
+ }
+
+ // Maybe Inline
+ bool coPlayer = false;
+ if (mSph.ChkCoHit()) {
+ coPlayer = true;
+ if (mSph.GetCoActor()->isActorPlayer()) {
+ coPlayer = false;
+ }
+ }
+
+ if (field_0xB50 == 0 && !coPlayer && !fn_177_8C20(getXZAngleToPlayer())) {
+ mAng a = (pPlayer->mRotation.y + 0x8000);
+ if (mAng::abs(getXZAngleToPlayer() - a) > 0x2000) {
+ field_0xB69 = 1;
+ field_0xB67 = 0;
+
+ mStateMgr.changeState(StateID_Walk);
+ return;
+ }
+ }
+
+ if (field_0xB60 == 1) {
+ mMdl.setAnm("RemlytWaitSitCry", m3d::PLAY_MODE_4, 10.f);
+ field_0xB60 = 2;
+ }
+ field_0xB44 = 128.f + cM::rndF(128.f);
+}
void dAcEremly_c::finalizeState_Wait() {}
+
void dAcEremly_c::initializeState_Walk() {}
void dAcEremly_c::executeState_Walk() {}
void dAcEremly_c::finalizeState_Walk() {}
@@ -611,3 +727,23 @@ void dAcEremly_c::finalizeState_NightJumpAttack() {}
void dAcEremly_c::initializeState_BirthWait() {}
void dAcEremly_c::executeState_BirthWait() {}
void dAcEremly_c::finalizeState_BirthWait() {}
+
+bool dAcEremly_c::fn_177_73C0() {
+ if (isState(StateID_Sleep) || fn_177_7330() || field_0xB68) {
+ return false;
+ }
+
+ dAcPy_c *pPlayer = dAcPy_c::GetLinkM();
+ if (pPlayer->isUsingSword() || pPlayer->checkActionFlagsCont(0x2) || pPlayer->checkActionFlagsCont(0x80) ||
+ pPlayer->isCarryingBomb() || pPlayer->isUsingWhip() || pPlayer->checkActionFlagsCont(0x4) ||
+ pPlayer->checkActionFlagsCont(0x100) || pPlayer->checkActionFlagsCont(0x10)) {
+ return true;
+ }
+
+ if (mNearbyBombRef.isLinked()) {
+ return true;
+ }
+
+ field_0xB6C = 0;
+ return false;
+}