summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelijah-thomas774 <elijahthomas774@gmail.com>2026-05-04 21:48:13 -0400
committerelijah-thomas774 <elijahthomas774@gmail.com>2026-05-24 20:32:35 -0400
commitb577f14b6c235d86ada8deb11002316c7b700448 (patch)
treeff0160367ca9a719f30b525874ac4edf6c59678b
parent59af442eac2a5312704d5b3b6e9e6d2469e0efec (diff)
dAcEKs_c start
-rw-r--r--config/SOUE01/rels/d_a_e_ksNP/symbols.txt10
-rw-r--r--include/d/a/e/d_a_e_ks.h68
-rw-r--r--src/REL/d/a/e/d_a_e_ks.cpp132
3 files changed, 203 insertions, 7 deletions
diff --git a/config/SOUE01/rels/d_a_e_ksNP/symbols.txt b/config/SOUE01/rels/d_a_e_ksNP/symbols.txt
index 0737e933..0df53838 100644
--- a/config/SOUE01/rels/d_a_e_ksNP/symbols.txt
+++ b/config/SOUE01/rels/d_a_e_ksNP/symbols.txt
@@ -12,12 +12,12 @@ __dt__76sStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDCh
__dt__46sFStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000490; // type:function size:0xA4
fn_155_540 = .text:0x00000540; // type:function size:0x5C
fn_155_5A0 = .text:0x000005A0; // type:function size:0x4
-fn_155_5B0 = .text:0x000005B0; // type:function size:0x134
-fn_155_6F0 = .text:0x000006F0; // type:function size:0x8
-fn_155_700 = .text:0x00000700; // type:function size:0x1A8
+restorePosRotFromCopy__8dAcEKs_cFv = .text:0x000005B0; // type:function size:0x134
+linkKiesuTag__8dAcEKs_cFP13dTgKiesuTag_c = .text:0x000006F0; // type:function size:0x8
+setStartingState__8dAcEKs_cFv = .text:0x00000700; // type:function size:0x1A8
changeState__76sStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x000008B0; // type:function size:0x10
-AcEKs__idleBasedOnSubtypeMaybe = .text:0x000008C0; // type:function size:0xCC
-fn_155_990 = .text:0x00000990; // type:function size:0xD0
+setIdleState__8dAcEKs_cFv = .text:0x000008C0; // type:function size:0xCC
+getLineCrossYRange__8dAcEKs_cFRC7mVec3_cf = .text:0x00000990; // type:function size:0xD0
fn_155_A60 = .text:0x00000A60; // type:function size:0x6B0
getStateID__76sStateMgr_c<8dAcEKs_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00001110; // type:function size:0x10
fn_155_1120 = .text:0x00001120; // type:function size:0x1C
diff --git a/include/d/a/e/d_a_e_ks.h b/include/d/a/e/d_a_e_ks.h
index 73fbc269..06629604 100644
--- a/include/d/a/e/d_a_e_ks.h
+++ b/include/d/a/e/d_a_e_ks.h
@@ -1,14 +1,34 @@
#ifndef D_A_E_KS_H
#define D_A_E_KS_H
+#include "common.h"
+#include "d/a/d_a_base.h"
#include "d/a/e/d_a_en_base.h"
+#include "d/a/obj/d_a_obj_base.h"
+#include "d/col/bg/d_bg_s_acch.h"
+#include "d/col/cc/d_cc_d.h"
+#include "m/m3d/m_anmtexpat.h"
+#include "m/m_color.h"
+#include "m/m_vec.h"
+#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
+#include "toBeSorted/d_emitter.h"
+#include "toBeSorted/d_path.h"
+class dTgKiesuTag_c;
class dAcEKs_c : public dAcEnBase_c {
public:
- dAcEKs_c() : mStateMgr(*this) {}
+ dAcEKs_c() : mStateMgr(*this), field_0xAA8(0.f), field_0xAB0(0) {}
virtual ~dAcEKs_c() {}
+ virtual int doDelete() override;
+ virtual int draw() override;
+ virtual bool createHeap() override;
+ virtual int actorCreate() override;
+ virtual int actorPostCreate() override;
+ virtual int actorExecute() override;
+ virtual bool restorePosRotFromCopy() override;
+
STATE_FUNC_DECLARE(dAcEKs_c, Wait);
STATE_FUNC_DECLARE(dAcEKs_c, WakeUp);
STATE_FUNC_DECLARE(dAcEKs_c, ReturnToWait);
@@ -24,8 +44,52 @@ public:
STATE_FUNC_DECLARE(dAcEKs_c, WindBlow);
STATE_FUNC_DECLARE(dAcEKs_c, PathMove);
+public:
+ void linkKiesuTag(dTgKiesuTag_c *pTgKs);
+ void setStartingState();
+ void setIdleState();
+
+ f32 getLineCrossYRange(const mVec3_c &pos, f32 range);
+
private:
- /* 0x??? */ STATE_MGR_DECLARE(dAcEKs_c);
+ /* 0x378 */ dAcRef_c<dTgKiesuTag_c> mTgRef;
+ /* 0x384 */ nw4r::g3d::ResFile mRres;
+ /* 0x388 */ d3d::AnmMdlWrapper mMdl;
+ /* 0x3F8 */ m3d::anmTexPat_c mAnmTexPat;
+ /* 0x324 */ dShadowCircle_c mShadow;
+ /* 0x42C */ dBgS_AcchCir mAcchCir;
+ /* 0x488 */ dBgS_ObjAcch mAcch;
+ /* 0x838 */ dCcD_Sph mSph;
+ /* 0x988 */ STATE_MGR_DECLARE(dAcEKs_c);
+ /* 0x9C4 */ dEmitter_c mEmitter1;
+ /* 0x9F8 */ dEmitter_c mEmitter2;
+ /* 0xA2C */ dWaterEffect_c mWaterEmitter;
+ /* 0xA74 */ ActorOnRail_Ext mRail;
+ /* 0xAA8 */ f32 field_0xAA8;
+ /* 0xAAC */ UNKWORD field_0xAAC;
+ /* 0xAA8 */ u8 field_0xAB0;
+ /* 0xAB1 */ u8 _0xAB1[0xB14 - 0xAB1];
+ /* 0xB14 */ mVec3_c mPnts[10];
+ /* 0xB8C */ u8 _0xB8C[0xD20 - 0xB8C];
+ /* 0xD20 */ f32 field_0xD20;
+ /* 0xD24 */ u8 _0xD24[0xD32 - 0xD24];
+ /* 0xD32 */ s16 mTimer;
+ /* 0xD34 */ u8 _0xD34[0xDB1 - 0xD34];
+ /* 0xDB1 */ u8 field_0xDB1;
+ /* 0xDB2 */ u8 _0xDB2[0xDBC - 0xDB2];
+ /* 0xDBC */ u8 mType;
+ /* 0xDBD */ u8 _0xDBD[0xDC2 - 0xDBD];
+ /* 0xDC2 */ u8 mCurrentState;
+ /* 0xDC3 */ u8 mNextState;
+ /* 0xDC4 */ u8 _0xDC4[0xDC7 - 0xDC4];
+ /* 0xDC7 */ u8 mStartingState;
+ /* 0xDC8 */ u8 _0xDC8[0xDCF - 0xDB8];
+ /* 0xDCF */ u8 field_0xDCF;
+ /* 0xDD0 */ u8 _0xDD0[0xDD4 - 0xDD0];
+ /* 0xDD4 */ mVec3_c mHomePos;
+ /* 0xDE0 */ mColor mColor;
+ /* 0xDE4 */ f32 field_0xDE4;
+ /* 0xDE8 */ u8 _0xDE8[0xDF0 - 0xDE8];
};
#endif
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 b9f2d8d1..5a22460c 100644
--- a/src/REL/d/a/e/d_a_e_ks.cpp
+++ b/src/REL/d/a/e/d_a_e_ks.cpp
@@ -1,5 +1,13 @@
#include "d/a/e/d_a_e_ks.h"
+#include "c/c_math.h"
+#include "common.h"
+#include "d/col/bg/d_bg_s.h"
+#include "d/col/bg/d_bg_s_lin_chk.h"
+#include "d/t/d_t_ks.h"
+#include "m/m_vec.h"
+#include "toBeSorted/time_area_mgr.h"
+
SPECIAL_ACTOR_PROFILE(E_KS, dAcEKs_c, fProfile::E_KS, 0xFE, 0, 4099);
STATE_DEFINE(dAcEKs_c, Wait);
@@ -17,45 +25,169 @@ STATE_DEFINE(dAcEKs_c, Stun);
STATE_DEFINE(dAcEKs_c, WindBlow);
STATE_DEFINE(dAcEKs_c, PathMove);
+bool dAcEKs_c::restorePosRotFromCopy() {
+ if (field_0xDCF == 0) {
+ if (dTimeAreaMgr_c::GetInstance()->fn_800B9B60(mRoomID, mPosition) != 0) {
+ field_0xAA8 = 0.f;
+ mSph.ClrCoSet();
+ mSph.ClrTgSet();
+ mSph.ClrAtSet();
+ fn_800306d0();
+ if (mType == 1 || mType == 2) {
+ field_0xD20 = 0.f;
+ field_0xDE4 = 0.f;
+ if (mEmitter1.hasEmitters()) {
+ mEmitter1.remove(true);
+ }
+ }
+ } else {
+ field_0xAA8 = 1.f;
+ fn_80030700();
+ mSph.OnCoSet();
+ mSph.OnTgSet();
+ }
+ mMdl.getModel().setScale(mScale * field_0xAA8);
+ }
+ return true;
+}
+
+void dAcEKs_c::linkKiesuTag(dTgKiesuTag_c *pTgKs) {
+ mTgRef.link(pTgKs);
+}
+
+void dAcEKs_c::setStartingState() {
+ mTimer = cM::rndInt(1000);
+ switch (mStartingState) {
+ case 0: {
+ mStateMgr.changeState(StateID_Move);
+ mCurrentState = mStartingState;
+ mAcch.ClrRoofNone();
+ mAcch.SetField_0xD4(55.f);
+ mAcch.SetGroundUpY(30.f);
+ mAcchCir.SetWall(20.f, 60.f);
+ } break;
+ case 1: {
+ mStateMgr.changeState(StateID_Wait);
+ mCurrentState = mStartingState;
+ if ((s32)getFromParams(30, 0x3) == 1) {
+ field_0xDB1 = 1;
+ }
+ mAcch.ClrRoofHit();
+ mAcch.SetGroundUpY(0.f);
+ mAcch.SetField_0xD4(0.f);
+ mAcchCir.SetWall(0.f, 5.f);
+
+ } break;
+ case 2: {
+ mCurrentState = mStartingState;
+ mAcch.ClrRoofNone();
+ mAcch.SetField_0xD4(55.f);
+ mAcch.SetGroundUpY(30.f);
+ mAcchCir.SetWall(20.f, 60.f);
+ mStateMgr.changeState(StateID_PathMove);
+ } break;
+ default: {
+ mStateMgr.changeState(StateID_Move);
+ mCurrentState = mStartingState;
+ } break;
+ }
+
+ mCurrentState = mNextState;
+}
+
+void dAcEKs_c::setIdleState() {
+ switch (mStartingState) {
+ case 0: {
+ mStateMgr.changeState(StateID_Move);
+ mCurrentState = 0;
+ } break;
+ case 1: {
+ mStateMgr.changeState(StateID_ReturnToWait);
+ mCurrentState = 5;
+ } break;
+ case 2: {
+ mStateMgr.changeState(StateID_PathMove);
+ mCurrentState = 2;
+ } break;
+ default: {
+ mStateMgr.changeState(StateID_Move);
+ mCurrentState = 0;
+ } break;
+ }
+}
+
+f32 dAcEKs_c::getLineCrossYRange(const mVec3_c &pos, f32 range) {
+ dBgS_ObjLinChk linChk;
+
+ mVec3_c start, end;
+ start.set(pos);
+ start.y -= range;
+
+ end.set(pos);
+ end.y += range;
+
+ linChk.Set(&start, &end, nullptr);
+ if (dBgS::GetInstance()->LineCross(&linChk)) {
+ return linChk.GetLinEnd().y;
+ } else {
+ return mStartingPos.y;
+ }
+}
+
+// idk
+
void dAcEKs_c::initializeState_Wait() {}
void dAcEKs_c::executeState_Wait() {}
void dAcEKs_c::finalizeState_Wait() {}
+
void dAcEKs_c::initializeState_WakeUp() {}
void dAcEKs_c::executeState_WakeUp() {}
void dAcEKs_c::finalizeState_WakeUp() {}
+
void dAcEKs_c::initializeState_ReturnToWait() {}
void dAcEKs_c::executeState_ReturnToWait() {}
void dAcEKs_c::finalizeState_ReturnToWait() {}
+
void dAcEKs_c::initializeState_WaitReady() {}
void dAcEKs_c::executeState_WaitReady() {}
void dAcEKs_c::finalizeState_WaitReady() {}
+
void dAcEKs_c::initializeState_Move() {}
void dAcEKs_c::executeState_Move() {}
void dAcEKs_c::finalizeState_Move() {}
+
void dAcEKs_c::initializeState_Chase() {}
void dAcEKs_c::executeState_Chase() {}
void dAcEKs_c::finalizeState_Chase() {}
+
void dAcEKs_c::initializeState_ChaseAttack() {}
void dAcEKs_c::executeState_ChaseAttack() {}
void dAcEKs_c::finalizeState_ChaseAttack() {}
+
void dAcEKs_c::initializeState_Fighting() {}
void dAcEKs_c::executeState_Fighting() {}
void dAcEKs_c::finalizeState_Fighting() {}
+
void dAcEKs_c::initializeState_AttackReady() {}
void dAcEKs_c::executeState_AttackReady() {}
void dAcEKs_c::finalizeState_AttackReady() {}
+
void dAcEKs_c::initializeState_Attack() {}
void dAcEKs_c::executeState_Attack() {}
void dAcEKs_c::finalizeState_Attack() {}
+
void dAcEKs_c::initializeState_Damage() {}
void dAcEKs_c::executeState_Damage() {}
void dAcEKs_c::finalizeState_Damage() {}
+
void dAcEKs_c::initializeState_Stun() {}
void dAcEKs_c::executeState_Stun() {}
void dAcEKs_c::finalizeState_Stun() {}
+
void dAcEKs_c::initializeState_WindBlow() {}
void dAcEKs_c::executeState_WindBlow() {}
void dAcEKs_c::finalizeState_WindBlow() {}
+
void dAcEKs_c::initializeState_PathMove() {}
void dAcEKs_c::executeState_PathMove() {}
void dAcEKs_c::finalizeState_PathMove() {}