diff --git a/include/d/a/e/d_a_e_remly.h b/include/d/a/e/d_a_e_remly.h index 64397db2..7419f7ea 100644 --- a/include/d/a/e/d_a_e_remly.h +++ b/include/d/a/e/d_a_e_remly.h @@ -93,10 +93,14 @@ public: private: void fn_177_6A40(); + bool fn_177_6B10(bool, mAng); + void fn_177_6EA0(bool); // Checks if Batreaux is Human bool fn_177_7330(); + bool fn_177_73C0(); + bool fn_177_75E0(); /** false -> comapres to camera @@ -111,8 +115,11 @@ private: bool fn_177_7B10(); void fn_177_8520(bool); + bool fn_177_86C0(); bool fn_177_8980(f32); bool fn_177_8AC0(); + bool fn_177_8C20(mAng); + bool fn_177_8F90(); private: /* 0x378 */ STATE_MGR_DECLARE(dAcEremly_c); @@ -147,7 +154,8 @@ private: /* 0xB08 */ f32 field_0xB08; /* 0xB0C */ f32 field_0xB0C; /* 0xB10 */ f32 field_0xB10; - /* 0xB14 */ u8 _B14[0xB1E - 0xB14]; + /* 0xB14 */ u32 field_0xB14; + /* 0xB18 */ u8 _B14[0xB1E - 0xB18]; /* 0xB1E */ mAng3_c field_0xB1E; /* 0xB24 */ s16 field_0xB24; /* 0xB26 */ s16 field_0xB26; @@ -155,11 +163,12 @@ private: /* 0xB38 */ f32 field_0xB38; /* 0xB3C */ f32 field_0xB3C; /* 0xB40 */ f32 field_0xB40; - /* */ u8 _B44[0xB48 - 0xB44]; + /* 0xB44 */ u16 field_0xB44; + /* 0xB46 */ u16 field_0xB46; /* 0xB48 */ u16 field_0xB48; /* */ u8 _B4A[0xB4E - 0xB4A]; /* 0xB4E */ u16 field_0xB4E; - /* */ u8 _B50[0xB52 - 0xB50]; + /* 0xB50 */ u16 field_0xB50; /* 0xB52 */ u16 field_0xB52; /* 0xB54 */ u16 field_0xB54; /* 0xB56 */ u16 field_0xB56; @@ -172,12 +181,14 @@ private: /* 0xB64 */ u8 field_0xB64; /* */ u8 _B65; /* 0xB66 */ u8 field_0xB66; - /* */ u8 _B67; + /* 0xB67 */ u8 field_0xB67; /* 0xB68 */ u8 field_0xB68; /* 0xB69 */ u8 field_0xB69; /* 0xB6A */ u8 field_0xB6A; /* 0xB6B */ u8 field_0xB6B; /* 0xB6C */ u8 field_0xB6C; + /* 0xB6D */ u8 field_0xB6D; + /* 0xB6E */ u8 field_0xB6E; }; #endif 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; +}