dAcEremly_c::StateWalk

This commit is contained in:
elijah-thomas774
2026-04-02 08:43:29 -04:00
parent 28df560cc5
commit df28d80c29
2 changed files with 134 additions and 25 deletions
+9 -1
View File
@@ -90,11 +90,15 @@ public:
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcEremly_c);
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcEremly_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcEremly_c);
private:
void fn_177_6A40();
bool fn_177_6B10(bool, mAng);
void fn_177_6EA0(bool);
void fn_177_6FC0(bool);
bool fn_177_7040(s32, f32);
// Checks if Batreaux is Human
bool fn_177_7330();
@@ -107,6 +111,8 @@ private:
* true -> compares to player */
bool fn_177_7650(bool comparePlayer);
void fn_177_77C0();
// Set Scary Face
void fn_177_78D0();
@@ -159,7 +165,9 @@ private:
/* 0xB1E */ mAng3_c field_0xB1E;
/* 0xB24 */ s16 field_0xB24;
/* 0xB26 */ s16 field_0xB26;
/* 0xB28 */ u8 _B28[0xB38 - 0xB28];
/* 0xB28 */ u8 _B28[0xB32 - 0xB28];
/* 0xB32 */ mAng field_0xB32;
/* 0xB34 */ mAng field_0xB34;
/* 0xB38 */ f32 field_0xB38;
/* 0xB3C */ f32 field_0xB3C;
/* 0xB40 */ f32 field_0xB40;
+125 -24
View File
@@ -181,7 +181,7 @@ int dAcEremly_c::actorCreate() {
if (!fn_177_7330()) {
setBattleBgmRelated(0);
mStateMgr.changeState(StateID_Sleep);
changeState(StateID_Sleep);
mMdl.setAnm("RemlySleep", m3d::PLAY_MODE_4, 0.f);
mAcchCir.SetWall(30.f, 50.f);
return SUCCEEDED;
@@ -200,15 +200,15 @@ int dAcEremly_c::actorCreate() {
field_0xB48 = 24.f + cM::rndF(24.f);
if (mSleepDemoPlayedSceneflag == 0xFF ||
SceneflagManager::sInstance->checkBoolFlag(mRoomID, mSleepDemoPlayedSceneflag)) {
mStateMgr.changeState(StateID_NightWait);
changeState(StateID_NightWait);
} else {
mStateMgr.changeState(StateID_NightSleepDemo);
changeState(StateID_NightSleepDemo);
}
} else if (field_0xB61 == 1) {
setBattleBgmRelated(0);
mStateMgr.changeState(StateID_Sleep);
changeState(StateID_Sleep);
} else {
mStateMgr.changeState(StateID_Run);
changeState(StateID_Run);
}
return SUCCEEDED;
}
@@ -229,11 +229,11 @@ int dAcEremly_c::actorPostCreate() {
updateMatrix();
mMdl.getModel().setLocalMtx(mWorldMtx);
mMdl.getModel().calc(false);
mStateMgr.changeState(StateID_Wait);
changeState(StateID_Wait);
return SUCCEEDED;
}
mStateMgr.changeState(StateID_Sleep);
changeState(StateID_Sleep);
return SUCCEEDED;
}
@@ -266,7 +266,7 @@ int dAcEremly_c::actorExecute() {
field_0xB66 = 1;
field_0xB48 = 48.f + cM::rndF(48.f);
field_0xB6A = 1;
mStateMgr.changeState(StateID_Wait);
changeState(StateID_Wait);
}
if (!isState(StateID_Hold)) {
@@ -289,7 +289,7 @@ int dAcEremly_c::actorExecute() {
deleteRequest();
return SUCCEEDED;
}
mStateMgr.changeState(StateID_BirthWait);
changeState(StateID_BirthWait);
}
}
@@ -309,7 +309,7 @@ int dAcEremly_c::actorExecute() {
field_0xB60 = 8;
} else {
mSph.ClrAtSet();
mStateMgr.changeState(StateID_Wind);
changeState(StateID_Wind);
}
}
} break;
@@ -318,7 +318,7 @@ int dAcEremly_c::actorExecute() {
if (mSph.ChkCoHit() && mSph.ChkTgAtHitType(AT_TYPE_0x80000 | AT_TYPE_SLINGSHOT)) {
mAngle.y = getXZAngleToPlayer();
mSpeed = -15.f;
mStateMgr.changeState(StateID_Stun);
changeState(StateID_Stun);
break;
}
}
@@ -355,7 +355,7 @@ int dAcEremly_c::actorExecute() {
field_0xB6B = 1;
}
mStateMgr.changeState(StateID_Damage);
changeState(StateID_Damage);
}
}
} break;
@@ -416,12 +416,12 @@ int dAcEremly_c::actorExecute() {
mPosition.set(mStartingPos.x, mStartingPos.y, mStartingPos.z);
mRotation.y = mStartingRot.y;
mAngle.y = mStartingRot.y;
mStateMgr.changeState(StateID_Sleep);
changeState(StateID_Sleep);
}
field_0xB58++;
// Why cast?
if ((s32)field_0xB58 > 30) {
mStateMgr.changeState(StateID_Fly);
changeState(StateID_Fly);
}
}
@@ -483,7 +483,7 @@ int dAcEremly_c::actorExecute() {
&& !isState(StateID_Stun) && !isState(StateID_Jump)) {
AttentionManager::GetInstance()->addPickUpTarget(*this, 3.f * radius * field_0xB10);
if (mLinkage.checkConnection(dLinkage_c::CONNECTION_1)) {
mStateMgr.changeState(StateID_Hold);
changeState(StateID_Hold);
}
}
@@ -565,7 +565,7 @@ void dAcEremly_c::executeState_Wait() {
sLib::addCalcScaled(&mSpeed, 0.7f, 5.f);
if (fn_177_7330()) {
mStateMgr.changeState(StateID_EscapeDash);
changeState(StateID_EscapeDash);
return;
}
@@ -586,23 +586,23 @@ void dAcEremly_c::executeState_Wait() {
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);
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);
changeState(StateID_Scared);
}
}
} else if (fn_177_6B10(0, 0)) {
mStateMgr.changeState(StateID_Escape);
changeState(StateID_Escape);
field_0xB6A = 1;
field_0xB48 = 20;
field_0xB44 = 128;
} else if (isWithinPlayerRadius(250.f)) {
mStateMgr.changeState(StateID_Scared);
changeState(StateID_Scared);
}
return;
}
@@ -619,7 +619,7 @@ void dAcEremly_c::executeState_Wait() {
field_0xB6E = 0;
field_0xB44 = 128.f + cM::rndF(128.f);
mStateMgr.changeState(StateID_Wait);
changeState(StateID_Wait);
return;
}
@@ -645,7 +645,7 @@ void dAcEremly_c::executeState_Wait() {
field_0xB69 = 1;
field_0xB67 = 0;
mStateMgr.changeState(StateID_Walk);
changeState(StateID_Walk);
return;
}
}
@@ -658,9 +658,110 @@ void dAcEremly_c::executeState_Wait() {
}
void dAcEremly_c::finalizeState_Wait() {}
void dAcEremly_c::initializeState_Walk() {}
void dAcEremly_c::executeState_Walk() {}
void dAcEremly_c::initializeState_Walk() {
if (field_0xB67 != 0 && field_0xB6A == 0) {
mMdl.setAnm("RemlyCryWalk", m3d::PLAY_MODE_4, 10.f);
field_0xB60 = 3;
} else {
mMdl.setAnm("RemlyWalk", m3d::PLAY_MODE_4, 10.f);
field_0xB60 = 4;
}
field_0xB32 = 0;
field_0xB34 = 0;
if (field_0xB69 != 0) {
fn_177_77C0();
}
field_0xB14 = 0;
field_0xB66 = 1;
}
void dAcEremly_c::executeState_Walk() {
const dAcPy_c *pPlayer = dAcPy_c::GetLink();
fn_177_6FC0(true);
if (fn_177_86C0()) {
return;
}
if (!field_0xB6A && mAng::abs(getXZAngleToPlayer() - mRotation.y) < 0x4000 && fn_177_73C0() && field_0xB6E == 0) {
changeState(StateID_Escape);
field_0xB6A = 1;
return;
}
if (field_0xB69 != 0) {
mMtx_c m;
m.YrotS(field_0xB32);
mVec3_c in(0.f, 0.f, 180.f), out;
m.multVec(in, out);
out += mPosition;
field_0xA44.set(out);
if (fn_177_7040(2, 0.8f)) {
field_0xB32 += field_0xB34;
}
bool b0 = false;
if (mSph.ChkCoHit()) {
b0 = true;
if (mSph.GetCoActor()->isActorPlayer()) {
mAng a = (pPlayer->mRotation.y + 0x8000);
if (mAng::abs(getXZAngleToPlayer() - a) > mAng(1024.f + cM::rndF(1024.f))) {
b0 = false;
}
}
}
if (!b0) {
mAng a = (pPlayer->mRotation.y + 0x8000);
if (mAng::abs(getXZAngleToPlayer() - a) >= mAng(1024.f + cM::rndF(1024.f))) {
if (fn_177_8C20(mRotation.y)) {
field_0xB69 = 0;
changeState(StateID_Walk);
}
}
return;
}
}
if (field_0xB6A == 0) {
if (!fn_177_8C20(mRotation.y)) {
fn_177_6B10(false, 0);
if (fn_177_75E0()) {
field_0xA44.set(mNearbyBombRef.get()->mPosition);
fn_177_7040(2, 0.8f);
} else {
fn_177_7040(0, 0.8f);
}
}
return;
}
sLib::addCalcScaled(&mSpeed, 0.7f, 3.f + mAng(0));
fn_177_7040(0, 0.f);
if (mAng::abs(getXZAngleToPlayer() - mRotation.y) < 0x400) {
if (!fn_177_6B10(false, -1000)) {
changeState(StateID_Wait);
mMdl.setAnm("RemlyWaitSitCry", m3d::PLAY_MODE_4, 2.f);
field_0xB60 = 2;
}
return;
}
if (field_0xB60 == 3 && mMdl.getAnm().isStop()) {
field_0xB67 = 0;
mMdl.setAnm("RemlyWalk", m3d::PLAY_MODE_4, 2.f);
field_0xB60 = 4;
}
if (fn_177_8F90()) {
return;
}
}
void dAcEremly_c::finalizeState_Walk() {}
void dAcEremly_c::initializeState_Run() {}
void dAcEremly_c::executeState_Run() {}
void dAcEremly_c::finalizeState_Run() {}