mirror of
https://github.com/zeldaret/ss
synced 2026-06-11 21:18:40 -04:00
311 lines
9.3 KiB
C++
311 lines
9.3 KiB
C++
#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/col/bg/d_bg_s_acch.h"
|
|
#include "d/col/cc/d_cc_d.h"
|
|
#include "d/d_light_env.h"
|
|
#include "m/m3d/m_anmtexpat.h"
|
|
#include "m/m_mtx.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"
|
|
#include "toBeSorted/time_area_mgr.h"
|
|
|
|
class dTgKiesuTag_c;
|
|
class dAcEKs_c : public dAcEnBase_c {
|
|
public:
|
|
dAcEKs_c() : mStateMgr(*this) {}
|
|
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);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, WaitReady);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, Move);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, Chase);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, ChaseAttack);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, Fighting);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, AttackReady);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, Attack);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, Damage);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, Stun);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, WindBlow);
|
|
STATE_FUNC_DECLARE(dAcEKs_c, PathMove);
|
|
|
|
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcEKs_c);
|
|
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcEKs_c);
|
|
|
|
enum Type_e {
|
|
EKS_NORMAL,
|
|
EKS_FIRE,
|
|
EKS_ELECTRIC,
|
|
EKS_CURSED,
|
|
};
|
|
enum StartingStateParam_e {
|
|
EKS_STARTSTATE_Move = 0,
|
|
EKS_STARTSTATE_Wait = 1,
|
|
EKS_STARTSTATE_PathMove = 2,
|
|
};
|
|
enum State_e {
|
|
EKS_STATE_Move = 0,
|
|
EKS_STATE_Wait = 1,
|
|
EKS_STATE_PathMove = 2,
|
|
EKS_STATE_WakeUp = 4,
|
|
EKS_STATE_ReturnToWait = 5,
|
|
EKS_STATE_Chase = 6,
|
|
EKS_STATE_ChaseAttack = 7,
|
|
EKS_STATE_Fighting = 8,
|
|
EKS_STATE_AttackReady = 9,
|
|
EKS_STATE_Attack = 10,
|
|
EKS_STATE_Damage = 11,
|
|
EKS_STATE_Stun = 12,
|
|
EKS_STATE_WindBlow = 13,
|
|
};
|
|
enum AnmTexPat_e {
|
|
EKS_TEXPAT_BLINK1,
|
|
EKS_TEXPAT_BLINK2,
|
|
EKS_TEXPAT_BLINK3,
|
|
};
|
|
|
|
public:
|
|
void linkKiesuTag(dTgKiesuTag_c *pTgKs);
|
|
void setStartingState();
|
|
void setIdleState();
|
|
|
|
void fn_155_A60();
|
|
|
|
f32 getLineCrossYRange(const mVec3_c &pos, f32 range);
|
|
|
|
void kill(bool dropItem);
|
|
void chaseTargetY(f32, f32);
|
|
void playBlinkAnm();
|
|
void soundSqueak();
|
|
void soundStun();
|
|
void fn_155_1430();
|
|
|
|
void fn_155_1470();
|
|
|
|
// Move impl?
|
|
void fn_155_1C80();
|
|
|
|
/* 0 -> blink_1, 1 -> blink_2, 2 -> blink_3*/
|
|
void setBlink(u8 blink);
|
|
void setBlinkChecked(u8 blink);
|
|
|
|
void fn_155_2270();
|
|
/* p1 = 0 -> just LineCross return check, 1 -> increment field_0xDCB till 10 then return check*/
|
|
bool fn_155_29D0(s32 p1);
|
|
bool fn_155_2B80(bool b, s32 p1);
|
|
bool fn_155_2D60(bool b, s32 p1);
|
|
bool fn_155_2EA0();
|
|
bool isOutsideRange();
|
|
bool isNotWaitingNorDamage();
|
|
bool isTargeted();
|
|
bool checkWallCross();
|
|
void adjustTargetGnd();
|
|
void adjustTargetRoof();
|
|
bool ChkHit();
|
|
void fn_155_3460();
|
|
void fn_155_3480();
|
|
bool transitionToNextState();
|
|
void setAnim(char *, f32, f32, f32);
|
|
void fn_155_3720(f32, f32);
|
|
void fn_155_3750(u8 state);
|
|
void fn_155_37A0();
|
|
void fn_155_37F0();
|
|
void fn_155_3840();
|
|
void fn_155_3890();
|
|
void on_lbl_155_bss_389();
|
|
/* 0: Checks states to set AC_PROP_0x1 - 1: Unset AC_PROP_0x1*/
|
|
void fn_155_3900(s32 p0);
|
|
void setPitchYawToPoint(const mVec3_c &pnt);
|
|
void fn_155_3BD0(const mVec3_c &);
|
|
void fn_155_3BE0(const mVec3_c &);
|
|
void clampRotationX();
|
|
bool checkPathPntParam(u32 param);
|
|
void fn_155_3E30();
|
|
void fn_155_3E90();
|
|
void fn_155_3EC0();
|
|
|
|
/* Some Timestone Check */
|
|
bool fn_155_3EF0();
|
|
|
|
void fn_155_3F50();
|
|
|
|
private:
|
|
/* 0x378 */ dAcRef_c<dTgKiesuTag_c> mTgRef;
|
|
/* 0x384 */ nw4r::g3d::ResFile mResFile;
|
|
/* 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 */ TimeAreaStruct mTimeArea;
|
|
/* 0xAB4 */ mMtx_c mCenterWorldMtx;
|
|
/* 0xAE4 */ mMtx_c field_0xAE4;
|
|
/* 0xB14 */ mVec3_c mPnts[10];
|
|
/* 0xB8C */ mVec3_c field_0xB8C;
|
|
/* 0xB98 */ mVec3_c field_0xB98;
|
|
/* 0xBA4 */ mVec3_c field_0xBA4;
|
|
/* 0xBB0 */ mVec3_c mTargetPos;
|
|
/* 0xBBC */ mVec3_c field_0xBBC;
|
|
/* 0xBC8 */ mVec3_c field_0xBC8;
|
|
/* 0xBD4 */ mVec3_c field_0xBD4;
|
|
/* 0xBE0 */ mVec3_c field_0xBE0;
|
|
/* 0xBEC */ mVec3_c field_0xBEC;
|
|
/* 0xBF8 */ mVec3_c field_0xBF8;
|
|
/* 0xC04 */ mVec3_c field_0xC04;
|
|
/* 0xC10 */ mVec3_c field_0xC10;
|
|
/* 0xC1C */ mVec3_c field_0xC1C;
|
|
/* 0xC28 */ mVec3_c field_0xC28;
|
|
/* 0xC34 */ mAng mPitch_0xC34;
|
|
/* 0xC36 */ mAng mYaw_0xC36;
|
|
/* 0xC38 */ u8 _0xC38[0xC3C - 0xC38];
|
|
/* 0xC3C */ f32 field_0xC3C;
|
|
/* 0xC40 */ f32 field_0xC40;
|
|
/* 0xC44 */ f32 field_0xC44;
|
|
/* 0xC48 */ f32 field_0xC48;
|
|
/* 0xC4C */ u8 _0xC4C[0xC70 - 0xC4C];
|
|
/* 0xC70 */ f32 field_0xC70;
|
|
/* 0xC74 */ u8 _0xC74[0xC90 - 0xC74];
|
|
/* 0xC90 */ f32 field_0xC90;
|
|
/* 0xC94 */ u8 _0xC94[0xCE0 - 0xC94];
|
|
/* 0xCE0 */ f32 field_0xCE0;
|
|
/* 0xCE4 */ f32 field_0xCE4;
|
|
/* 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;
|
|
/* 0xD0C */ f32 field_0xD0C;
|
|
/* 0xD10 */ f32 field_0xD10;
|
|
/* 0xD14 */ f32 field_0xD14;
|
|
/* 0xD18 */ f32 field_0xD18;
|
|
/* 0xD1C */ f32 field_0xD1C;
|
|
/* 0xD20 */ f32 field_0xD20;
|
|
/* 0xD24 */ f32 field_0xD24;
|
|
/* 0xD28 */ f32 field_0xD28;
|
|
/* 0xD2C */ u32 mCenterNode;
|
|
/* 0xD30 */ u8 field_0xD30;
|
|
/* 0xD31 */ u8 field_0xD31;
|
|
/* 0xD32 */ u16 mTimer;
|
|
/* 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 */ s16 field_0xD56;
|
|
/* 0xD58 */ s16 field_0xD58;
|
|
/* 0xD5A */ s16 field_0xD5A;
|
|
/* 0xD5C */ s16 field_0xD5C;
|
|
/* 0xD5E */ s16 field_0xD5E;
|
|
/* 0xD60 */ s16 field_0xD60;
|
|
/* 0xD62 */ s16 field_0xD62;
|
|
/* 0xD64 */ s16 field_0xD64;
|
|
/* 0xD66 */ s16 field_0xD66;
|
|
/* 0xD68 */ s16 field_0xD68;
|
|
/* 0xD6A */ s16 field_0xD6A;
|
|
/* 0xD6C */ s16 field_0xD6C;
|
|
/* 0xD6E */ s16 field_0xD6E;
|
|
/* 0xD70 */ s16 field_0xD70;
|
|
/* 0xD72 */ s16 field_0xD72;
|
|
/* 0xD74 */ s16 field_0xD74;
|
|
/* 0xD76 */ s16 field_0xD76;
|
|
/* 0xD78 */ s16 mBlinkTimer;
|
|
/* 0xD7A */ u16 field_0xD7A;
|
|
/* 0xD7C */ s16 field_0xD7C;
|
|
/* 0xD7E */ s16 mSqueakSoundTimer;
|
|
/* 0xD80 */ s16 mStunSoundTimer;
|
|
/* 0xD82 */ s16 field_0xD82;
|
|
/* 0xD84 */ s16 field_0xD84;
|
|
/* 0xD86 */ s16 field_0xD86;
|
|
/* 0xD88 */ s16 field_0xD88;
|
|
/* 0xD8A */ s16 field_0xD8A;
|
|
/* 0xD8C */ s16 field_0xD8C;
|
|
/* 0xD8E */ u16 field_0xD8E;
|
|
/* 0xD90 */ s16 field_0xD90;
|
|
/* 0xD92 */ s16 field_0xD92;
|
|
/* 0xD94 */ s16 field_0xD94;
|
|
/* 0xD96 */ s16 field_0xD96;
|
|
/* 0xD98 */ s16 field_0xD98;
|
|
/* 0xD9A */ s16 field_0xD9A;
|
|
/* 0xD9C */ s16 field_0xD9C;
|
|
/* 0xD9E */ s16 field_0xD9E;
|
|
/* 0xDA0 */ s16 field_0xDA0;
|
|
/* 0xDA2 */ s16 field_0xDA2;
|
|
/* 0xDA4 */ u8 field_0xDA4;
|
|
/* 0xDA5 */ u8 field_0xDA5;
|
|
/* 0xDA6 */ u8 field_0xDA6;
|
|
/* 0xDA7 */ u8 field_0xDA7;
|
|
/* 0xDA8 */ u8 field_0xDA8;
|
|
/* 0xDA9 */ u8 field_0xDA9;
|
|
/* 0xDAA */ u8 field_0xDAA;
|
|
/* 0xDAB */ u8 field_0xDAB;
|
|
/* 0xDAC */ u8 field_0xDAC;
|
|
/* 0xDAD */ u8 field_0xDAD;
|
|
/* 0xDAE */ u8 field_0xDAE;
|
|
/* 0xDAF */ u8 field_0xDAF;
|
|
/* 0xDB0 */ u8 field_0xDB0;
|
|
/* 0xDB1 */ u8 field_0xDB1;
|
|
/* 0xDB2 */ u8 field_0xDB2;
|
|
/* 0xDB3 */ u8 field_0xDB3;
|
|
/* 0xDB4 */ u8 field_0xDB4;
|
|
/* 0xDB5 */ u8 field_0xDB5;
|
|
/* 0xDB6 */ u8 field_0xDB6;
|
|
/* 0xDB7 */ u8 field_0xDB7;
|
|
/* 0xDB8 */ u8 field_0xDB8;
|
|
/* 0xDB9 */ u8 field_0xDB9;
|
|
/* 0xDBA */ u8 field_0xDBA;
|
|
/* 0xDBB */ u8 field_0xDBB;
|
|
/* 0xDBC */ u8 mType;
|
|
/* 0xDBD */ u8 field_0xDBD;
|
|
/* 0xDBE */ u8 field_0xDBE;
|
|
/* 0xDBF */ u8 field_0xDBF;
|
|
/* 0xDC0 */ u8 mCurrentAnmTexPat; // blink
|
|
/* 0xDC1 */ u8 field_0xDC1;
|
|
/* 0xDC2 */ u8 mCurrentState;
|
|
/* 0xDC3 */ u8 mNextState;
|
|
/* 0xDC4 */ u8 field_0xDC4;
|
|
/* 0xDC5 */ u8 field_0xDC5;
|
|
/* 0xDC6 */ u8 field_0xDC6;
|
|
/* 0xDC7 */ u8 mStartingState;
|
|
/* 0xDC8 */ u8 field_0xDC8;
|
|
/* 0xDC9 */ u8 field_0xDC9;
|
|
/* 0xDCA */ u8 field_0xDCA;
|
|
/* 0xDCB */ u8 field_0xDCB;
|
|
/* 0xDCC */ u8 field_0xDCC;
|
|
/* 0xDCD */ u8 field_0xDCD;
|
|
/* 0xDCE */ u8 field_0xDCE;
|
|
/* 0xDCF */ u8 field_0xDCF;
|
|
/* 0xDD0 */ u8 field_0xDD0;
|
|
/* 0xDD4 */ LIGHT_INFLUENCE mLightInfluence;
|
|
|
|
// Controlled by dTgKiesuTag_c
|
|
static bool lbl_155_bss_388;
|
|
static bool lbl_155_bss_389;
|
|
};
|
|
|
|
#endif
|