From 7d2f5d2e35abd38d02ec8191fab69f62235abecd Mon Sep 17 00:00:00 2001 From: elijah-thomas774 Date: Sat, 16 May 2026 12:50:40 -0400 Subject: [PATCH] dAcEKs_c State Wait --- config/SOUE01/rels/d_a_e_ksNP/symbols.txt | 2 +- include/d/a/e/d_a_e_ks.h | 16 +- src/REL/d/a/e/d_a_e_ks.cpp | 247 +++++++++++++++++++++- 3 files changed, 256 insertions(+), 9 deletions(-) diff --git a/config/SOUE01/rels/d_a_e_ksNP/symbols.txt b/config/SOUE01/rels/d_a_e_ksNP/symbols.txt index 97299607..1065fcf7 100644 --- a/config/SOUE01/rels/d_a_e_ksNP/symbols.txt +++ b/config/SOUE01/rels/d_a_e_ksNP/symbols.txt @@ -32,7 +32,7 @@ fn_155_1C80__8dAcEKs_cFv = .text:0x00001C80; // type:function size:0x5E4 fn_155_2270__8dAcEKs_cFv = .text:0x00002270; // type:function size:0x754 fn_155_29D0__8dAcEKs_cFl = .text:0x000029D0; // type:function size:0x1A8 fn_155_2B80__8dAcEKs_cFbl = .text:0x00002B80; // type:function size:0x1E0 -fn_155_2D60__8dAcEKs_cFv = .text:0x00002D60; // type:function size:0x138 +fn_155_2D60__8dAcEKs_cFbl = .text:0x00002D60; // type:function size:0x138 fn_155_2EA0__8dAcEKs_cFv = .text:0x00002EA0; // type:function size:0x118 isOutsideRange__8dAcEKs_cFv = .text:0x00002FC0; // type:function size:0x84 isNotWaitingNorDamage__8dAcEKs_cFv = .text:0x00003050; // type:function size:0xAC diff --git a/include/d/a/e/d_a_e_ks.h b/include/d/a/e/d_a_e_ks.h index 0df03993..589ec6d8 100644 --- a/include/d/a/e/d_a_e_ks.h +++ b/include/d/a/e/d_a_e_ks.h @@ -188,7 +188,9 @@ private: /* 0xC70 */ f32 field_0xC70; /* 0xC74 */ u8 _0xC74[0xCE4 - 0xC74]; /* 0xCE4 */ f32 field_0xCE4; - /* 0xCE8 */ u8 _0xCE8[0xD00 - 0xCE8]; + /* 0xCE8 */ u8 _0xCE8[0xCF8 - 0xCE8]; + /* 0xCF8 */ f32 field_0xCF8; + /* 0xCFC */ f32 field_0xCFC; /* 0xD00 */ f32 field_0xD00; /* 0xD04 */ f32 field_0xD04; /* 0xD08 */ f32 field_0xD08; @@ -204,7 +206,11 @@ private: /* 0xD30 */ u8 field_0xD30; /* 0xD31 */ u8 field_0xD31; /* 0xD32 */ u16 mTimer; - /* 0xD34 */ u8 _0xD34[0xD52 - 0xD34]; + /* 0xD34 */ u8 _0xD34[0xD4A - 0xD34]; + /* 0xD4A */ s16 field_0xD4A; + /* 0xD4C */ s16 field_0xD4C; + /* 0xD4E */ s16 field_0xD4E; + /* 0xD50 */ s16 field_0xD50; /* 0xD52 */ s16 field_0xD52; /* 0xD54 */ s16 field_0xD54; /* 0xD56 */ u8 _0xD56[0xD5E - 0xD56]; @@ -232,7 +238,7 @@ private: /* 0xD88 */ s16 field_0xD88; /* 0xD8A */ s16 field_0xD8A; /* 0xD8C */ s16 field_0xD8C; - /* 0xD8E */ s16 field_0xD8E; + /* 0xD8E */ u16 field_0xD8E; /* 0xD90 */ s16 field_0xD90; /* 0xD92 */ s16 field_0xD92; /* 0xD94 */ s16 field_0xD94; @@ -283,7 +289,9 @@ private: /* 0xDC9 */ u8 field_0xDC9; /* 0xDCA */ u8 field_0xDCA; /* 0xDCB */ u8 field_0xDCB; - /* 0xDCC */ u8 _0xDCC[0xDCF - 0xDCC]; + /* 0xDCC */ u8 field_0xDCC; + /* 0xDCD */ u8 field_0xDCD; + /* 0xDCE */ u8 field_0xDCE; /* 0xDCF */ u8 field_0xDCF; /* 0xDD0 */ u8 field_0xDD0; /* 0xDD4 */ LIGHT_INFLUENCE mLightInfluence; 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 5159967a..94f2ba8b 100644 --- a/src/REL/d/a/e/d_a_e_ks.cpp +++ b/src/REL/d/a/e/d_a_e_ks.cpp @@ -20,6 +20,7 @@ #include "d/d_pouch.h" #include "d/d_sc_game.h" #include "d/d_stage_mgr.h" +#include "d/flag/sceneflag_manager.h" #include "d/flag/storyflag_manager.h" #include "d/snd/d_snd_wzsound.h" #include "d/t/d_t_ks.h" @@ -28,6 +29,7 @@ #include "m/m3d/m_fanm.h" #include "m/m_angle.h" #include "m/m_color.h" +#include "m/m_mtx.h" #include "m/m_quat.h" #include "m/m_vec.h" #include "nw4r/g3d/res/g3d_resanmtexpat.h" @@ -1748,9 +1750,244 @@ int dAcEKs_c::draw() { return SUCCEEDED; } -void dAcEKs_c::initializeState_Wait() {} -void dAcEKs_c::executeState_Wait() {} -void dAcEKs_c::finalizeState_Wait() {} +void dAcEKs_c::initializeState_Wait() { + // Float Ordering + static const f32 __f[1] = {0.f}; + + mAcchCir.SetWall(0, 5); + setAnim("wait", 4, 1, 0); + setBlink(EKS_TEXPAT_BLINK1); + mAnmTexPat.setFrame(3, 0); + mStts.SetRank(11); + mSpeed = 0.f; + field_0xC10.y = -35.f; + field_0xD4A = 30; + field_0xDA5 = 0; + field_0xDAA = 0; + field_0xDC4 = cM::rndInt(35); + field_0xD90 = 3; + field_0xDCE = 0; + field_0xDB4 = 0; + if (field_0xDB0 != 0) { + field_0xDB1 = 1; + field_0xD8E = field_0xDCA * 30; + } else if ((s32)getFromParams(30, 3) == 1) { + field_0xDB1 = 1; + field_0xD8E = (cM::rndInt(20) + 10) * 30; + } + + mRotation.y = field_0xD8A; + mRotation.x = mAng(0); + mAcch.ClrRoofHit(); + mAcch.SetField_0xD4(0); + mAcch.SetGroundUpY(0); + setBattleBgmRelated(0); + + if (field_0xDA6 != 0) { + fn_155_3E30(); + } else { + setActorProperty(AC_PROP_0x1); + } + + if (mType == EKS_FIRE) { + mSph.ClrCo_0x8000(); + field_0xD20 = 0.f; + mLightInfluence.SetScale(0.f); + } else if (mType == EKS_ELECTRIC) { + fn_155_3EC0(); + field_0xD20 = 0.f; + mLightInfluence.SetScale(0.f); + } + mPosition.y = getLineCrossYRange(mPosition, 200); + setStartingPosition(mPosition); +} + +// NONMATCHING +void dAcEKs_c::executeState_Wait() { + mMdl.play(); + u16 flag = getFromParams(14, 0xFF); + if (flag < 0xFF) { + if (SceneflagManager::sInstance->checkBoolFlag(mRoomID, flag)) { + if (field_0xDCE == 0) { + bool b = false; + mStartingState = EKS_STARTSTATE_Move; + if (field_0xDA6 == 0) { + mMtx_c m; + m.YrotS(mRotation.y + 0x8000); + mVec3_c out, in(0, 0, 500); + m.multVecSR(in, out); + + mVec3_c start(getStartingPos() + out); + mVec3_c out2 = out * 2.f; + mVec3_c end(getStartingPos() + out2); + if (dBgS_ObjLinChk::LineCross(&start, &end, nullptr) && dBgS_ObjLinChk::ChkWall()) { + b = true; + } + if (!b) { + out *= 2.f; + } + setStartingPosition(getStartingPos() + out); + } + field_0xCF8 = 20.f; + field_0xDC8 = 150; + field_0xD04 = 0.9f; + field_0xD00 = 1.7f; + field_0xDCE = 1; + + } else if (field_0xDCE == 1) { + changeState(StateID_WakeUp); + return; + } + } else if (field_0xDB4 != 0 && --field_0xD4A < 0xF) { + mAnmTexPat.play(); + if (field_0xD4A < 0) { + mStartingState = EKS_STARTSTATE_Move; + field_0xDAA = 1; + dTgKiesuTag_c *pTg = mTgRef.get(); + if (pTg) { + pTg->setField_0x47A(); + } + changeState(StateID_WakeUp); + return; + } + } + + if (fn_155_2EA0()) { + playBlinkAnm(); + if (field_0xD62 > 0) { + field_0xD62--; + } else { + field_0xD62 = cM::rndInt(5) + 10; + f32 f = 800.f; + if (field_0xD1C < f * f && !dBgS_ObjLinChk::LineCross(&mPosition, &field_0xC28, nullptr)) { + field_0xDB4 = 1; + field_0xD4A = cM::rndInt(15); + } + } + } else if (field_0xDA5 == 0) { + mAnmTexPat.setFrame(3, 0); + } + return; + } + + if (field_0xDA6 != 0) { + if (field_0xDA5 == 0) { + if (field_0xDAD != 0) { + if (field_0xDC4 != 0) { + field_0xDC4--; + } else { + field_0xDA5 = 1; + field_0xD4C = cLib::targetAngleY(mPosition, targetPlayerOrScrapper(0)->mPosition) - 0x8000; + } + } + } else { + sLib::addCalcAngle(mRotation.y.ref(), field_0xD4C, 5, 0xAAB); + + if (--field_0xD4A < 15) { + mAnmTexPat.play(); + if (field_0xD4A < 0) { + field_0xD4C = field_0xD4C + 0x8000; + changeState(StateID_WakeUp); + return; + } + } + } + if (field_0xDB4 != 0 || field_0xDAA != 0) { + if (--field_0xD4A < 15) { + mAnmTexPat.play(); + if (field_0xD4A < 0) { + field_0xDAA = 1; + if (mTgRef.isLinked()) { + mTgRef.get()->setField_0x47A(); + } + changeState(StateID_WakeUp); + return; + } + } + } + } else { + fn_155_3E30(); + if (field_0xDA5 == 0) { + if (field_0xD90 > 0) { + field_0xD90--; + } else { + if (fn_155_2D60(true, 0)) { + field_0xDA5 = 1; + field_0xD4C = cLib::targetAngleY(mPosition, targetPlayerOrScrapper(0)->mPosition) - 0x8000; + } else { + field_0xD90 = 3; + } + } + } else { + sLib::addCalcAngle(mRotation.y.ref(), field_0xD4C, 5, 0xAAB); + + if (--field_0xD4A < 15) { + mAnmTexPat.play(); + if (field_0xD4A < 0) { + field_0xD4C = field_0xD4C + 0x8000; + changeState(StateID_WakeUp); + return; + } + } + } + if (field_0xDAA != 0 || field_0xDB4 != 0) { + if (--field_0xD4A < 15) { + mAnmTexPat.play(); + if (field_0xD4A < 0) { + changeState(StateID_WakeUp); + return; + } + } + } + if (field_0xDB1 != 0) { + if (field_0xD8E != 0) { + field_0xD8E--; + } else { + field_0xDAA = 1; + changeState(StateID_WakeUp); + return; + } + } + } + + if (dLightEnv_c::GetPInstance()->check_BPM8(&mPosition, nullptr) || field_0xDAE != 0) { + field_0xDAA = 1; + field_0xD4A = cM::rndInt(10); + } + if (fn_155_2EA0()) { + playBlinkAnm(); + if (field_0xD62 > 0) { + field_0xD62--; + } else { + field_0xD62 = cM::rndInt(5) + 10; + f32 f = 800.f; + if (field_0xD1C < f * f && !dBgS_ObjLinChk::LineCross(&mPosition, &field_0xC28, nullptr)) { + field_0xDB4 = 1; + field_0xD4A = cM::rndInt(15); + } + } + } else { + if (field_0xDA5 == 0) { + mAnmTexPat.setFrame(3, 0); + } + } +} +void dAcEKs_c::finalizeState_Wait() { + mStts.SetRank(2); + field_0xC10.y = 0.f; + setBattleBgmRelated(2); + + if (mType == EKS_FIRE) { + mSph.SetCo_0x8000(); + field_0xD20 = 400.f; + field_0xD24 = 1.f; + field_0xD28 = 40.f; + } else if (mType == EKS_ELECTRIC) { + field_0xD20 = 400.f; + field_0xD24 = 1.f; + field_0xD28 = 40.f; + } +} void dAcEKs_c::initializeState_WakeUp() {} void dAcEKs_c::executeState_WakeUp() {} @@ -1802,4 +2039,6 @@ void dAcEKs_c::finalizeState_WindBlow() {} void dAcEKs_c::initializeState_PathMove() {} void dAcEKs_c::executeState_PathMove() {} -void dAcEKs_c::finalizeState_PathMove() {} +void dAcEKs_c::finalizeState_PathMove() { + field_0xD30 = 0; +}