summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorelijah-thomas774 <elijahthomas774@gmail.com>2026-05-06 21:44:09 -0400
committerelijah-thomas774 <elijahthomas774@gmail.com>2026-05-24 20:33:44 -0400
commit7da9558daa9d376f9be9ab079706dd606ac1fef8 (patch)
tree9dc9e0c388520a292e55759da37148f12593eaa5 /src
parentb577f14b6c235d86ada8deb11002316c7b700448 (diff)
dAcEKs_c progess 5/6/26
Diffstat (limited to 'src')
-rw-r--r--src/REL/d/a/e/d_a_e_ks.cpp253
1 files changed, 252 insertions, 1 deletions
diff --git a/src/REL/d/a/e/d_a_e_ks.cpp b/src/REL/d/a/e/d_a_e_ks.cpp
index 5a22460c..c6667fcd 100644
--- a/src/REL/d/a/e/d_a_e_ks.cpp
+++ b/src/REL/d/a/e/d_a_e_ks.cpp
@@ -1,11 +1,21 @@
#include "d/a/e/d_a_e_ks.h"
+#include "c/c_lib.h"
#include "c/c_math.h"
#include "common.h"
+#include "d/a/d_a_base.h"
+#include "d/a/d_a_player.h"
+#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
+#include "d/col/bg/d_bg_s_gnd_chk.h"
#include "d/col/bg/d_bg_s_lin_chk.h"
+#include "d/col/bg/d_bg_s_roof_chk.h"
#include "d/t/d_t_ks.h"
+#include "f/f_profile_name.h"
+#include "m/m3d/m_fanm.h"
#include "m/m_vec.h"
+#include "nw4r/g3d/res/g3d_resanmtexpat.h"
+#include "toBeSorted/attention.h"
#include "toBeSorted/time_area_mgr.h"
SPECIAL_ACTOR_PROFILE(E_KS, dAcEKs_c, fProfile::E_KS, 0xFE, 0, 4099);
@@ -134,7 +144,248 @@ f32 dAcEKs_c::getLineCrossYRange(const mVec3_c &pos, f32 range) {
}
}
-// idk
+// idk.
+
+bool dAcEKs_c::isOutsideRange() {
+ return attackPlayerOrScrapper(0.f)->mPosition.squareDistanceToXZ(mPosition) > 360000.f;
+}
+
+bool dAcEKs_c::isNotWaitingNorDamage() {
+ if (!(mStateMgr.isState(StateID_Wait) || mStateMgr.isState(StateID_Damage))) {
+ return true;
+ }
+ return false;
+}
+
+bool dAcEKs_c::isTargeted() {
+ dAcObjBase_c *pTarget = AttentionManager::GetInstance()->getTargetedActor();
+ if (!pTarget) {
+ return false;
+ }
+
+ if (pTarget->mProfileName == fProfile::E_KS && pTarget == this) {
+ return true;
+ }
+ return false;
+}
+
+bool dAcEKs_c::ChkWall() {
+ field_0xDBB++;
+ if (field_0xDBB > 5) {
+ field_0xDBB = 0;
+ mVec3_c offset(0, 0, 200.f);
+ mVec3_c pos;
+ mWorldMtx.multVec(offset, pos);
+ if (dBgS_ObjLinChk::LineCross(&mPosition, &pos, nullptr) && dBgS_ObjLinChk::ChkWall()) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void dAcEKs_c::ChkGnd() {
+ dBgS_ObjGndChk gndChk;
+ mVec3_c pos = field_0xBB0;
+ pos.y += 150.f;
+ gndChk.SetPos(&pos);
+ f32 chk = dBgS::GetInstance()->GroundCross(&gndChk);
+ if (field_0xBB0.y < chk + 120.f) {
+ field_0xBB0.y = chk + 120.f;
+ }
+}
+
+void dAcEKs_c::ChkRoof() {
+ dBgS_ObjRoofChk roofChk;
+ mVec3_c pos = field_0xBB0;
+ pos.y -= 150.f;
+ roofChk.SetPos(&pos);
+ f32 chk = dBgS::GetInstance()->RoofChk(&roofChk);
+ if (field_0xBB0.y > chk - 120.f) {
+ field_0xBB0.y = chk - 120.f;
+ }
+}
+
+bool dAcEKs_c::ChkHit() {
+ if (mAcch.ChkWallHit(nullptr) || mAcch.ChkGndHit() || mAcch.ChkRoofHit()) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void dAcEKs_c::fn_155_3460() {
+ lbl_155_bss_388 = true;
+ field_0xDA7 = true;
+}
+
+void dAcEKs_c::fn_155_3480() {
+ if (field_0xDA7) {
+ lbl_155_bss_388 = 0;
+ field_0xDA7 = 0;
+ if (field_0xDA6) {
+ lbl_155_bss_389 = 0;
+ }
+ }
+}
+
+bool dAcEKs_c::transitionToNextState() {
+ if (mCurrentState != mNextState) {
+ switch (mNextState) {
+ case 0: mStateMgr.changeState(StateID_Move); break;
+ case 1: mStateMgr.changeState(StateID_Wait); break;
+ case 2: mStateMgr.changeState(StateID_PathMove); break;
+ case 4: mStateMgr.changeState(StateID_WakeUp); break;
+ case 5: mStateMgr.changeState(StateID_ReturnToWait); break;
+ case 6: mStateMgr.changeState(StateID_Chase); break;
+ case 7: mStateMgr.changeState(StateID_ChaseAttack); break;
+ case 8: mStateMgr.changeState(StateID_Fighting); break;
+ case 9: mStateMgr.changeState(StateID_AttackReady); break;
+ case 10: mStateMgr.changeState(StateID_Attack); break;
+ case 11: mStateMgr.changeState(StateID_Damage); break;
+ case 12: mStateMgr.changeState(StateID_Stun); break;
+ case 13: mStateMgr.changeState(StateID_WindBlow); break;
+ }
+ mCurrentState = mNextState;
+ return true;
+ }
+ return false;
+}
+
+void dAcEKs_c::setAnim(char *anm, f32 f0, f32 rate, f32 frame) {
+ mMdl.setAnm(anm, m3d::PLAY_MODE_4, f0);
+ mMdl.setRate(rate);
+ if (frame > 0.f) {
+ mMdl.setFrame(frame);
+ }
+}
+
+void dAcEKs_c::fn_155_3720(f32 scale, f32 rate) {
+ f32 a = rate + scale * 0.01f;
+ f32 endFrame = mMdl.getAnm().getEndFrame();
+ if (a > endFrame) {
+ a = endFrame;
+ }
+ mMdl.setRate(a);
+}
+
+void dAcEKs_c::fn_155_3750(u8 state) {
+ switch (state) {
+ case 0: mNextState = state; break;
+ case 1: mNextState = 5; break;
+ case 2: mNextState = state; break;
+ default: mNextState = 0; break;
+ }
+}
+
+void dAcEKs_c::fn_155_37A0() {
+ mSph.OnAtSet();
+ if (mType == 2) {
+ fn_155_3E90();
+ field_0xDA9 = 0;
+ field_0xD60 = 0;
+ }
+}
+
+void dAcEKs_c::fn_155_37F0() {
+ if (mType == 2) {
+ fn_155_3E90();
+ field_0xDA9 = 0;
+ field_0xD60 = 0;
+ }
+}
+
+void dAcEKs_c::fn_155_3840() {
+ mSph.ClrAtSet();
+ if (mType == 2) {
+ fn_155_3EC0();
+ field_0xDA9 = 1;
+ }
+}
+
+void dAcEKs_c::fn_155_3890() {
+ if (mType == 2) {
+ fn_155_3EC0();
+ field_0xDA9 = 1;
+ }
+}
+
+void dAcEKs_c::on_lbl_155_bss_389() {
+ lbl_155_bss_389 = true;
+}
+
+void dAcEKs_c::setBlinkChecked(u8 blink) {
+ if (blink == mCurrentAnmTexPat) {
+ return;
+ }
+ setBlink(blink);
+}
+
+void dAcEKs_c::fn_155_3900(s32 p0) {
+ switch (p0) {
+ case 0: {
+ if (!(mStateMgr.isState(StateID_Stun) || mStateMgr.isState(StateID_Damage) ||
+ mStateMgr.isState(StateID_ReturnToWait) || mStateMgr.isState(StateID_Chase) ||
+ mStateMgr.isState(StateID_ChaseAttack) || mStateMgr.isState(StateID_Fighting) ||
+ mStateMgr.isState(StateID_AttackReady) || mStateMgr.isState(StateID_Attack) ||
+ mStateMgr.isState(StateID_WindBlow))) {
+ setActorProperty(AC_PROP_0x1);
+ } else {
+ field_0xDB2 = 1;
+ }
+ } break;
+ case 1: {
+ unsetActorProperty(AC_PROP_0x1);
+ } break;
+ }
+}
+
+void dAcEKs_c::setPitchYawToPoint(const mVec3_c &pnt) {
+ mPitch_0xC34 = -cLib::targetAngleX(mPosition, pnt);
+ mYaw_0xC36 = cLib::targetAngleY(mPosition, pnt);
+}
+
+void dAcEKs_c::fn_155_3BD0(const mVec3_c &pnt) {
+ mWorldMtx.multVec(pnt, field_0xBB0);
+}
+
+void dAcEKs_c::fn_155_3BE0(const mVec3_c &pnt) {
+ if (mStateMgr.isState(StateID_AttackReady) || mStateMgr.isState(StateID_Attack)) {
+ dAcObjBase_c *pAttack = attackPlayerOrScrapper(0.f);
+ if (pAttack->isPlayer()) {
+ mVec3_c v = static_cast<dAcPy_c *>(pAttack)->getCenterTranslation();
+ pAttack->mWorldMtx.multVecSR(pnt, field_0xBBC);
+ field_0xBBC += v;
+ } else {
+ pAttack->mWorldMtx.multVec(pnt, field_0xBBC);
+ }
+ } else {
+ dAcObjBase_c *pAttack = attackPlayerOrScrapper(0.f);
+ pAttack->mWorldMtx.multVec(pnt, field_0xBB0);
+ }
+}
+
+void dAcEKs_c::setBlink(u8 blink) {
+ nw4r::g3d::ResAnmTexPat pat(nullptr);
+ mCurrentAnmTexPat = blink;
+ switch (mCurrentAnmTexPat) {
+ case 0: pat = mResFile.GetResAnmTexPat("blink_1"); break;
+ case 1: pat = mResFile.GetResAnmTexPat("blink_2"); break;
+ case 2: pat = mResFile.GetResAnmTexPat("blink_3"); break;
+ }
+ mAnmTexPat.setAnm(mMdl.getModel(), pat, 0, m3d::PLAY_MODE_4);
+}
+
+void dAcEKs_c::fn_155_3E90() {
+ mSph.OnTgElectric();
+ mSph.SetTg_0x50(2);
+ mSph.OnCo_0x8000();
+}
+
+void dAcEKs_c::fn_155_3EC0() {
+ mSph.ClrTgElectric();
+ mSph.SetTg_0x50(0);
+ mSph.ClrCo_0x8000();
+}
void dAcEKs_c::initializeState_Wait() {}
void dAcEKs_c::executeState_Wait() {}