diff options
| author | Howard Luck <pheenoh@gmail.com> | 2025-06-08 12:01:18 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-08 21:01:18 +0300 |
| commit | 5ec7e42c2d72601ba1852e044222282bdf259141 (patch) | |
| tree | edad5adbaa787aede7597b604cdf1be38ad1ab27 /include | |
| parent | 1a7b14537c15fe1429fa924bd90f40a50db66dcd (diff) | |
d_a_npc_kn work (#2274)
* checkpoint
* checkpoint
* checkpoint
* checkpoint
* checkpoint
* fixups
* check
* fixes 2
* fixes 3
* fixes 4
* fixes 5
---------
Co-authored-by: pheenoh <pheenoh@macmini.local>
Co-authored-by: pheenoh <pheenoh@macmini.lan>
Diffstat (limited to 'include')
| -rw-r--r-- | include/SSystem/SComponent/c_cc_d.h | 1 | ||||
| -rw-r--r-- | include/d/actor/d_a_e_mk_bo.h | 2 | ||||
| -rw-r--r-- | include/d/actor/d_a_e_yk.h | 121 | ||||
| -rw-r--r-- | include/d/actor/d_a_npc.h | 4 | ||||
| -rw-r--r-- | include/d/actor/d_a_npc_gwolf.h | 7 | ||||
| -rw-r--r-- | include/d/actor/d_a_npc_kn.h | 485 | ||||
| -rw-r--r-- | include/d/actor/d_a_obj_knBullet.h | 6 | ||||
| -rw-r--r-- | include/d/actor/d_a_player.h | 9 | ||||
| -rw-r--r-- | include/d/d_cc_d.h | 1 | ||||
| -rw-r--r-- | include/d/d_particle_copoly.h | 15 | ||||
| -rw-r--r-- | include/f_op/f_op_actor_mng.h | 8 |
11 files changed, 464 insertions, 195 deletions
diff --git a/include/SSystem/SComponent/c_cc_d.h b/include/SSystem/SComponent/c_cc_d.h index c8c413edc8..72c2f633a8 100644 --- a/include/SSystem/SComponent/c_cc_d.h +++ b/include/SSystem/SComponent/c_cc_d.h @@ -13,6 +13,7 @@ class fopAc_ac_c; enum CcG_Tg_HitMark { CcG_Tg_UNK_MARK_0 = 0, + CcG_Tg_UNK_MARK_1 = 1, CcG_Tg_UNK_MARK_2 = 2, CcG_Tg_UNK_MARK_3 = 3, CcG_Tg_UNK_MARK_6 = 6, diff --git a/include/d/actor/d_a_e_mk_bo.h b/include/d/actor/d_a_e_mk_bo.h index 2dc06c055a..5283bf09a9 100644 --- a/include/d/actor/d_a_e_mk_bo.h +++ b/include/d/actor/d_a_e_mk_bo.h @@ -5,7 +5,7 @@ /** * @ingroup actors-enemies * @class e_mk_bo_class - * @brief Ook? + * @brief Ook's Boomerang * * @details * diff --git a/include/d/actor/d_a_e_yk.h b/include/d/actor/d_a_e_yk.h index d7a1038e1d..cd416db9ba 100644 --- a/include/d/actor/d_a_e_yk.h +++ b/include/d/actor/d_a_e_yk.h @@ -22,20 +22,21 @@ * */ enum daE_YK_Action { - ACT_ROOF, /**< Keese is on roof. */ - ACT_FIGHT_FLY, /**< Keese is transitioning from flying to aggro. */ - ACT_FIGHT, /**< Keese is aggroed. */ - ACT_ATTACK, /**< Keese is attacking. */ - ACT_RETURN, /**< Keese is returning to roof. */ - ACT_FLY, /**< Keese is flying around. */ - ACT_PATH_FLY, /**< Unconfirmed: Keese is flying along its path. */ - ACT_CHANCE = 10, /**< Keese is stunned/fell down. */ - ACT_WOLFBITE = 13, /**< Keese is being bitten by wolf. */ - ACT_WIND /**< Keese is in the gale boomerang. */ + ACT_ROOF, /**< Keese hangs from roof, enters combat if player gets close. */ + ACT_FIGHT_FLY, /**< Keese flies directly towards player to initiate combat. */ + ACT_FIGHT, /**< Keese circles around player at a distance, preparing to attack. */ + ACT_ATTACK, /**< Keese charges directly at player to deal damage. */ + ACT_RETURN, /**< Keese returns to its home position on the roof. */ + ACT_FLY, /**< Keese flies randomly around its home position. */ + ACT_PATH_FLY, /**< Keese follows predefined path points in the room. */ + ACT_CHANCE = 10, /**< Keese is stunned from shield attack, falls and bounces on ground. */ + ACT_WOLFBITE = 13, /**< Keese is caught in wolf Link's mouth, can be thrown. */ + ACT_WIND /**< Keese is caught in Gale Boomerang's wind, spins around it. */ }; /** - * @brief Shadow Keese Host Input Output class + * @class daE_YK_HIO_c + * @brief Shadow Keese Host Input Output class. * */ class daE_YK_HIO_c { @@ -43,13 +44,12 @@ public: /* 8080482C */ daE_YK_HIO_c(); /* 808077E0 */ virtual ~daE_YK_HIO_c() {} - /* 0x00 */ // vtable - /* 0x04 */ s8 field_0x04; // padding after this - /* 0x08 */ f32 field_0x08; - /* 0x0C */ f32 field_0x0c; - /* 0x10 */ f32 field_0x10; - /* 0x14 */ f32 field_0x14; - /* 0x18 */ f32 field_0x18; + /* 0x04 */ s8 field_0x04; ///< @brief Initialized to -1, appears unused. + /* 0x08 */ f32 mModelScale; ///< @brief Base model scale factor (default: 1.0). + /* 0x0C */ f32 mFlySpeed; ///< @brief Base flying speed (default: 15.0). + /* 0x10 */ f32 mAttackRange; ///< @brief Distance threshold for entering attack state (default: 250.0). + /* 0x14 */ f32 mCruiseSpeed; ///< @brief Speed when flying normally (default: 15.0). + /* 0x18 */ f32 mChargeSpeed; ///< @brief Speed when charging at player (default: 40.0). }; /** @@ -62,49 +62,48 @@ public: */ class e_yk_class : public fopEn_enemy_c { public: - /* 0x5AC */ request_of_phase_process_class mPhase; ///< @brief Actor phase process class. - /* 0x5B4 */ u8 mParam1; ///< @brief Actor parameter. Used to determine default action? - /* 0x5B5 */ u8 mPlayerTriggerBase; ///< @brief Actor parameter. Used to determine mPlayerTrigger value. @see mPlayerTrigeer - /* 0x5B6 */ u8 field_0x5b6; ///< @brief ??? - /* 0x5B7 */ u8 mPathIdx; ///< @brief Path index. Used to lookup/set mpPath based on the room. - /* 0x5B8 */ u8 field_0x5b8; ///< @brief ??? - /* 0x5B9 */ s8 mPathPntIdx; ///< @brief Path point index. Tracks the index of the points along the actor's path. - /* 0x5BA */ s8 field_0x5ba; ///< @brief ??? - /* 0x5BB */ u8 field_0x5bb; ///< @brief ??? - /* 0x5BC */ dPath* mpPath; ///< @brief Flight path. Flight path for the actor to follow? - /* 0x5C0 */ mDoExt_McaMorfSO* mpMorfSO; ///< @brief MorfSO pointer. Tracks the last resource loaded. - /* 0x5C4 */ Z2CreatureEnemy mCreature; ///< @brief Z2 Audio class. Used for playing actor noises. - /* 0x668 */ int mResIdx; ///< @brief Resource index. Tracks the index of the last resource loaded. - /* 0x66C */ s16 field_0x66c; ///< @brief ??? - /* 0x66E */ s16 mAction; ///< @brief Current action. Tracks the current action of the actor. @see daE_YK_Action - /* 0x670 */ s16 mActionPhase; ///< @brief Current action phase. Tracks the phase of the current action of the actor. @see daE_YK_Action - /* 0x674 */ cXyz mPathPntPos; ///< @brief Path point position. Tracks the position of the point the actor is along a path. - /* 0x680 */ s16 mAngleFromPlayer; ///< @brief Angle from player. Tracks the current actor angle from player. - /* 0x684 */ f32 mDistanceXZFromPlayer; ///< @brief Distance from player. Tracks the current distance the actor is from the player. - /* 0x688 */ f32 mPlayerTrigger; ///< @brief Trigger distance from player. Tracks how close to the actor the player has to be before it will begin to attack the player. - /* 0x68C */ f32 field_0x68c; ///< @brief ??? - /* 0x690 */ f32 field_0x690; ///< @brief ??? - /* 0x694 */ f32 field_0x694; ///< @brief ??? - /* 0x698 */ s16 field_0x698; ///< @brief ??? - /* 0x69A */ csXyz field_0x69a; ///< @brief ??? - /* 0x6A0 */ s8 field_0x6a0; ///< @brief ??? - /* 0x6A1 */ u8 field_0x6a1; ///< @brief ??? - /* 0x6A2 */ s16 field_0x6a2[4]; ///< @brief ??? - /* 0x6AA */ s16 field_0x6aa; ///< @brief ??? - /* 0x6AC */ s16 field_0x6ac[6]; ///< @brief ??? - /* 0x6B8 */ cXyz mBoomrangPosOffset; ///< @brief Boomerang position offset. Tracks the offset position when the actor is caught in the gale boomerang. - /* 0x6C4 */ s16 mBoomrangXRotOffset; ///< @brief Boomerang rotation offset. Tracks the offset x rotation when the actor is caught in the gale boomerang. - /* 0x6C8 */ dBgS_AcchCir field_0x6c8; ///< @brief ??? - /* 0x708 */ dBgS_ObjAcch field_0x708; ///< @brief ??? - /* 0x8E0 */ dCcD_Stts mCollisionStatus; ///< @brief Collision status. - /* 0x91C */ dCcD_Sph mCollisionSphere; ///< @brief Collision sphere. - /* 0xA54 */ dCcU_AtInfo mAtColliderInfo; ///< @brief Attack collider info. Used when actor gets hit. - /* 0xA78 */ u32 field_0xa78; ///< @brief ??? - /* 0xA7C */ u32 field_0xa7c; ///< @brief ??? - /* 0xA80 */ u32 field_0xa80; ///< @brief ??? - /* 0xA84 */ u32 mParticleEmitterIds[2]; ///< @brief ??? - /* 0xA8C */ u8 field_0xa8c; ///< @brief ??? + /* 0x5AC */ request_of_phase_process_class mPhase; ///< @brief Resource loading phase handler. + /* 0x5B4 */ u8 mBehaviorMode; ///< @brief Controls default behavior (0: return to roof, 1: free flying). + /* 0x5B5 */ u8 mPlayerTriggerBase; ///< @brief Base value used to calculate player detection range (multiplied by 100). + /* 0x5B6 */ u8 field_0x5b6; ///< @brief Appears unused. + /* 0x5B7 */ u8 mPathIdx; ///< @brief Path index for room path lookup. + /* 0x5B8 */ u8 mPathActive; ///< @brief Flag indicating if path following is active (pathIdx + 1). + /* 0x5B9 */ s8 mPathPntIdx; ///< @brief Current index in path point array. + /* 0x5BA */ s8 mPathDirection; ///< @brief Direction to traverse path (1: forward, -1: backward). + /* 0x5BC */ dPath* mpPath; ///< @brief Pointer to current flight path data. + /* 0x5C0 */ mDoExt_McaMorfSO* mpMorfSO; ///< @brief Model and animation handler. + /* 0x5C4 */ Z2CreatureEnemy mCreature; ///< @brief Sound effect and voice handler. + /* 0x668 */ s32 mResIdx; ///< @brief Current animation resource index. + /* 0x66C */ s16 mFrameCounter; ///< @brief Increments each frame, used for periodic events. + /* 0x66E */ s16 mAction; ///< @brief Current action state. @see daE_YK_Action + /* 0x670 */ s16 mActionPhase; ///< @brief Sub-phase within current action. + /* 0x674 */ cXyz mPathPntPos; ///< @brief Target position (path point or player). + /* 0x680 */ s16 mAngleFromPlayer; ///< @brief Angle between keese and player in XZ plane. + /* 0x684 */ f32 mDistanceXZFromPlayer; ///< @brief XZ distance between keese and player. + /* 0x688 */ f32 mPlayerTrigger; ///< @brief Distance threshold for player detection. + /* 0x68C */ f32 mMoveInterpolation; ///< @brief Movement interpolation factor (0.0-1.0). + /* 0x690 */ f32 mTurnSpeed; ///< @brief Angular velocity for turning. + /* 0x694 */ f32 mKnockbackSpeed; ///< @brief Speed when knocked back from damage. + /* 0x698 */ s16 mKnockbackAngle; ///< @brief Direction angle when knocked back. + /* 0x69A */ csXyz mStunRotation; ///< @brief Rotation angles during stun animation. + /* 0x6A0 */ s8 mDeathFlag; ///< @brief Set to 1 when keese is dying. + /* 0x6A2 */ s16 mActionTimers[4]; ///< @brief Timers for various action states (movement, attack, etc). + /* 0x6AA */ s16 mInvulnerabilityTimer; ///< @brief Frames of damage invulnerability remaining. + /* 0x6AC */ s16 field_0x6ac[6]; ///< @brief Reserved/unused timer array. + /* 0x6B8 */ cXyz mBoomrangPosOffset; ///< @brief Position offset when caught in Gale Boomerang. + /* 0x6C4 */ s16 mBoomrangXRotOffset; ///< @brief Rotation offset when caught in Gale Boomerang. + /* 0x6C8 */ dBgS_AcchCir mWallCollisionCircle; ///< @brief Circular collision volume for wall detection and response. + /* 0x708 */ dBgS_ObjAcch mActorCollisionHandler; ///< @brief Handles all collision types (ground/wall/roof/water) for this actor. + /* 0x8E0 */ dCcD_Stts mCollisionStatus; ///< @brief Collision state tracking. + /* 0x91C */ dCcD_Sph mCollisionSphere; ///< @brief Spherical collision shape. + /* 0xA54 */ dCcU_AtInfo mAtColliderInfo; ///< @brief Attack collision processor. + /* 0xA78 */ u32 mSmokeEffectId; ///< @brief ID for smoke particle effect. + /* 0xA7C */ u32 mSmokeEffectParams; ///< @brief Parameters for smoke effect. + /* 0xA80 */ u32 mShadowParticleId; ///< @brief ID for shadow trail particle effect. + /* 0xA84 */ u32 mWingParticleIds[2]; ///< @brief IDs for wing particle effects. + /* 0xA8C */ u8 mIsFirstSpawn; ///< @brief Set to 1 if this is the first keese spawned in room. }; -// size: 0xA90 + +STATIC_ASSERT(sizeof(e_yk_class) == 0xA90); #endif /* D_A_E_YK_H */ diff --git a/include/d/actor/d_a_npc.h b/include/d/actor/d_a_npc.h index da96b83fd0..5f6e1fbd02 100644 --- a/include/d/actor/d_a_npc.h +++ b/include/d/actor/d_a_npc.h @@ -48,6 +48,7 @@ private: public: daNpcT_MatAnm_c() { initialize(); } + /* 80145764 */ void initialize(); /* 8014D24C */ virtual ~daNpcT_MatAnm_c() {} /* 80145788 */ virtual void calc(J3DMaterial*) const; @@ -754,6 +755,7 @@ void daNpcT_offTmpBit(u32 i_idx); void daNpcT_onTmpBit(u32 i_idx); BOOL daNpcT_chkTmpBit(u32 i_idx); void daNpcT_onEvtBit(u32 i_idx); +BOOL daNpcT_chkTmpBit(u32 i_idx); BOOL daNpcT_getPlayerInfoFromPlayerList(int param_0, int i_roomNo, cXyz* o_spawnPos, csXyz* o_angle); @@ -1193,7 +1195,7 @@ private: /* 0x0FC */ f32 mNowOffsetX; /* 0x100 */ f32 mNowOffsetY; /* 0x104 */ u8 mEyeMoveFlag; - /* 0x105 */ u8 field_0x105; + /* 0x105 */ u8 mMorfFrm; public: daNpcF_MatAnm_c() { initialize(); } diff --git a/include/d/actor/d_a_npc_gwolf.h b/include/d/actor/d_a_npc_gwolf.h index c203e865a4..923af28f79 100644 --- a/include/d/actor/d_a_npc_gwolf.h +++ b/include/d/actor/d_a_npc_gwolf.h @@ -67,6 +67,13 @@ public: static u8 mEvtCutList[60]; private: + // /* 0xB48 */ Z2Creature mCreature; + // /* 0xBD8 */ daNpcF_MatAnm_c* mpMatAnm; + // /* 0xBDC */ daNpcF_Lookat_c mLookAt; + // /* 0xC78 */ daNpcF_ActorMngr_c mActorMng[2]; + // /* 0xC88 */ u8 field_0xc88[4]; + // /* 0xC8C */ dCcD_Cyl mCyl; + // /* 0xDC8 */ u8 field_0xdc8[0xE1C - 0xdc8]; /* 0x568 */ u8 field_0xb48[0xE1C - 0x568]; /* 0xE1C */ u8 field_0xe1c; }; diff --git a/include/d/actor/d_a_npc_kn.h b/include/d/actor/d_a_npc_kn.h index 7fde3293b8..0a005195ba 100644 --- a/include/d/actor/d_a_npc_kn.h +++ b/include/d/actor/d_a_npc_kn.h @@ -11,140 +11,266 @@ * @details * */ -class daNpc_Kn_c : public fopAc_ac_c { -public: +class daNpc_Kn_c : public fopEn_enemy_c { +public: + typedef int (daNpc_Kn_c::*cutFunc)(int); + typedef int (daNpc_Kn_c::*actionFunc)(void*); + class daNpc_Kn_prtclMngr_c { public: - /* 80A2AF98 */ ~daNpc_Kn_prtclMngr_c(); - /* 80A3C1C4 */ daNpc_Kn_prtclMngr_c(); + /* 80A2AF98 */ ~daNpc_Kn_prtclMngr_c() {}; + /* 80A3C1C4 */ daNpc_Kn_prtclMngr_c() {}; + + /* 0x00 */ bool mpModel; + /* 0x04 */ cXyz mPos; + /* 0x10 */ csXyz mAngle; + /* 0x18 */ cXyz mScale; + /* 0x24 */ dPaPo_c mManager; }; - /* 80A2AA0C */ ~daNpc_Kn_c(); - /* 80A2AFD4 */ void create(); - /* 80A2B278 */ void CreateHeap(); - /* 80A2B620 */ void Delete(); - /* 80A2B654 */ void Execute(); +public: + /* 0x05AC */ const daNpcT_faceMotionAnmData_c* mpFaceMotionAnmData; + /* 0x05B0 */ const daNpcT_motionAnmData_c* mpMotionAnmData; + /* 0x05B4 */ const daNpcT_evtData_c* mpEventData; + /* 0x05B8 */ char** field_0x5B8; + /* 0x05BC */ mDoExt_McaMorfSO* mpMorf[2]; + /* 0x05C4 */ Z2Creature mCreature; + /* 0x0654 */ mDoExt_bckAnm mBckAnm; + /* 0x0670 */ mDoExt_btpAnm mBtpAnm; + /* 0x0688 */ mDoExt_btkAnm mBtkAnm; + /* 0x06A0 */ mDoExt_brkAnm mBrkAnm; + /* 0x06B8 */ mDoExt_bpkAnm mBpkAnm; + /* 0x06D0 */ dBgS_ObjAcch mAcch; + /* 0x08A8 */ dCcD_Stts mCcStts; + /* 0x08E4 */ dBgS_AcchCir mAcchCir; + /* 0x0924 */ request_of_phase_process_class mPhase[8]; + /* 0x0964 */ cBgS_GndChk mGndChk; + /* 0x09A0 */ daNpcT_MatAnm_c* mpMatAnm; + /* 0x09A4 */ u8 field_0x9a4[4]; + /* 0x09A8 */ dMsgFlow_c mFlow; + /* 0x09F4 */ u8 field_0x9F4[0xa74 - 0x9f4]; + /* 0x0A74 */ dCcD_Stts mCcStts2; + /* 0x0AB0 */ u32 mFlowNodeNo; + /* 0x0AB4 */ f32 field_0xab4; + /* 0x0AB8 */ f32 field_0xab8; + /* 0x0ABC */ u8 field_0xABC; + /* 0x0ABD */ u8 field_0xABD; + /* 0x0ABE */ u8 field_0xABE[0xAC0 - 0xABE]; + /* 0x0AC0 */ dBgS_GndChk mGndChk2; + /* 0x0B14 */ dBgS_LinChk mLinChk; + /* 0x0B84 */ daNpcT_MotionSeqMngr_c mMotionSeqMngr1; + /* 0x0BA8 */ daNpcT_MotionSeqMngr_c mMotionSeqMngr2; + /* 0x0BCC */ daNpcT_ActorMngr_c mActorMngr1; + /* 0x0BD4 */ daNpcT_ActorMngr_c mActorMngr2; + /* 0x0BDC */ daNpcT_JntAnm_c mJntAnm; + /* 0x0D3C */ daNpcT_DmgStagger_c mDmgStagger; + /* 0x0D58 */ cXyz field_0xd58; + /* 0x0D64 */ cXyz field_0xD64; + /* 0x0D70 */ cXyz field_0xD70; + /* 0x0D7C */ cXyz field_0xD7C; + /* 0x0D88 */ cXyz field_0xD88; + /* 0x0D94 */ cXyz field_0xD94; + /* 0x0DA0 */ cXyz field_0xDA0; + /* 0x0DAC */ csXyz mTargetAngle; + /* 0x0DB2 */ csXyz field_0xDB2; + /* 0x0DB8 */ csXyz field_0xDB8; + /* 0x0DBE */ csXyz field_0xDBE; + /* 0x0DC4 */ s32 field_0xdc4; + /* 0x0DC8 */ u32 mShadowKey; + /* 0x0DCC */ u32 field_0xdcc; + /* 0x0DD0 */ u32 field_0xdd0; + /* 0x0DD4 */ s32 mStaffId; + /* 0x0DD8 */ int mCutType; + /* 0x0DDC */ int field_0xddc; + /* 0x0DE0 */ int field_0xde0; + /* 0x0DE4 */ int mTimer; + /* 0x0DE8 */ int field_0xde8; + /* 0x0DEC */ int field_0xdec; + /* 0x0DF0 */ s16 field_0xdf0; + /* 0x0DF2 */ u8 field_0xdf2[0xc]; + /* 0x0DFE */ s16 field_0xdfe; + /* 0x0E00 */ u8 field_0xe00[0xC]; + /* 0x0E0C */ f32 field_0xe0c; + /* 0x0E10 */ f32 mRadius; + /* 0x0E14 */ f32 mGroundHeight; + /* 0x0E18 */ u8 field_0xe18[0xe24 - 0xe18]; + /* 0x0E24 */ s16 field_0xe24; + /* 0x0E26 */ u16 field_0xe26; + /* 0x0E28 */ u16 field_0xe28; + /* 0x0E2A */ u16 field_0xe2a; + /* 0x0E2C */ u8 field_0xe2c; + /* 0x0E2D */ u8 field_0xe2d; + /* 0x0E2E */ u8 field_0xe2e[0xe30 - 0xe2e]; + /* 0x0E30 */ u8 field_0xe30; + /* 0x0E31 */ u8 field_0xe31; + /* 0x0E32 */ u8 field_0xe32; + /* 0x0E33 */ u8 field_0xe33; + /* 0x0E33 */ u8 field_0xe34[0xe36 - 0xe34]; + /* 0x0E36 */ u16 mEvtIdx; + /* 0x0E38 */ u8 field_0xe38; + /* 0x0E39 */ u8 field_0xe39; + /* 0x0E3A */ u8 field_0xe3a; + /* 0x0E3B */ u8 field_0xe3b; + /* 0x0E3C */ int field_0xe3c; + // /* 0x0E40 */ vtable + +public: + void initialize() { + memset(&field_0xd58, 0, (int)&field_0xe3c - (int)&field_0xd58); + + mMotionSeqMngr1.initialize(); + mMotionSeqMngr2.initialize(); + mActorMngr1.initialize(); + mActorMngr2.initialize(); + mJntAnm.initialize(); + mDmgStagger.initialize(); + field_0xdc4 = -1; + field_0xe2d = 1; + field_0x15a4 = 0; + } + + bool checkHide() { + bool ret = false; + + if (field_0xe2c != 0 || (!dComIfGs_wolfeye_effect_check() && field_0xABD != 0)) { + ret = true; + } + + return ret; + } + + int getHeadJointNo() { + return 4; + } + + int getNeckJointNo() { + return 3; + } + + int getBackboneJointNo() { + return 1; + } + + void setCutType(int i_type) { mCutType = i_type;} + + void setActionMode(s8 i_actionMode) { mActionMode = i_actionMode;} + s8 getActionMode() { return mActionMode; } + + /* 80A2AFD4 */ s32 create(); + /* 80A2B278 */ s32 CreateHeap(); + /* 80A2B620 */ s32 Delete(); + /* 80A2B654 */ s32 Execute(); /* 80A2B6B0 */ void Draw(); - /* 80A2B764 */ void createHeapCallBack(fopAc_ac_c*); - /* 80A2B784 */ void ctrlJointCallBack(J3DJoint*, int); - /* 80A2B7DC */ void getType(); - /* 80A2B844 */ void getDivideNo(); - /* 80A2B850 */ void getFlowNodeNo(); - /* 80A2B86C */ void getPath(); - /* 80A2B878 */ void isDelete(); + /* 80A2B764 */ static int createHeapCallBack(fopAc_ac_c*); + /* 80A2B784 */ static int ctrlJointCallBack(J3DJoint*, int); + /* 80A2B7DC */ u8 getType(); + /* 80A2B844 */ u8 getDivideNo(); + /* 80A2B850 */ u32 getFlowNodeNo(); + /* 80A2B86C */ u8 getPath(); + /* 80A2B878 */ BOOL isDelete(); /* 80A2B91C */ void resetCol(); /* 80A2B9E0 */ void reset(); /* 80A2BC5C */ void resetType(); /* 80A2BD30 */ void setParam(); - /* 80A2BFB0 */ void setParamTeach03(); - /* 80A2C044 */ void setParamTeach04(); - /* 80A2C0FC */ void setParamTeach05(); - /* 80A2C190 */ void setParamTeach06(); - /* 80A2C1B0 */ void setParamTeach07(); + /* 80A2BFB0 */ u32 setParamTeach03(); + /* 80A2C044 */ u32 setParamTeach04(); + /* 80A2C0FC */ u32 setParamTeach05(); + /* 80A2C190 */ u32 setParamTeach06(); + /* 80A2C1B0 */ u32 setParamTeach07(); /* 80A2C1D0 */ void setAfterTalkMotion(); /* 80A2C230 */ void srchActors(); - /* 80A2C234 */ void evtTalk(); - /* 80A2C318 */ void evtCutProc(); + /* 80A2C234 */ bool evtTalk(); + /* 80A2C318 */ bool evtCutProc(); /* 80A2C3FC */ void action(); /* 80A2C484 */ void beforeMove(); /* 80A2C4FC */ void afterMoved(); /* 80A2C56C */ void setAttnPos(); /* 80A2C77C */ void setCollision(); /* 80A2C984 */ void setCollisionSword(); - /* 80A2CB30 */ void checkCollisionSword(); + /* 80A2CB30 */ BOOL checkCollisionSword(); /* 80A2CBEC */ void setCollisionTeach03(); /* 80A2CC24 */ void setCollisionTeach04(); /* 80A2CD00 */ void setCollisionTeach05(); /* 80A2CD38 */ void setCollisionTeach06(); /* 80A2CD58 */ void setCollisionTeach07(); - /* 80A2CD78 */ bool drawDbgInfo(); + /* 80A2CD78 */ int drawDbgInfo(); /* 80A2CD80 */ void drawOtherMdl(); /* 80A2CF9C */ void drawGhost(); - /* 80A2D060 */ void afterSetMotionAnm(int, int, f32, int); - /* 80A2D198 */ void selectAction(); + /* 80A2D198 */ int selectAction(); /* 80A2D3A4 */ void teach03_selectAction(); /* 80A2D3FC */ void teach04_selectAction(); /* 80A2D4A0 */ void teach05_selectAction(); /* 80A2D4F8 */ void teach06_selectAction(); /* 80A2D600 */ void teach07_selectAction(); - /* 80A2D708 */ void chkAction(int (daNpc_Kn_c::*)(void*)); - /* 80A2D734 */ void setAction(int (daNpc_Kn_c::*)(void*)); - /* 80A2D7DC */ void wait(void*); - /* 80A2D9C4 */ void talk(void*); - /* 80A2DB94 */ void test(void*); + /* 80A2D708 */ BOOL chkAction(actionFunc); + /* 80A2D734 */ BOOL setAction(actionFunc); + /* 80A2D7DC */ int wait(void*); + /* 80A2D9C4 */ int talk(void*); + /* 80A2DB94 */ int test(void*); /* 80A2DCB4 */ void setSceneChange(int); - /* 80A2DD70 */ void ECut_noneEquipChangeTalk(int); - /* 80A2DF84 */ void ECut_noneEquipChangeTalkStand(int); - /* 80A2E26C */ void ECut_largeDamageTalk(int); - /* 80A2E528 */ void teach02_start(void*); - /* 80A2E664 */ void teach03_attackWait(void*); - /* 80A2EC04 */ void teach04_attackWait(void*); - /* 80A2EF8C */ void teach04_headBreakWait(void*); - /* 80A2F24C */ void teach04_finishWait(void*); - /* 80A2F600 */ void teach05_surpriseAttackWait(void*); - /* 80A2FC80 */ void teach06_superJumpWait(void*); - /* 80A30398 */ void teach06_divideMove(void*); - /* 80A305A8 */ void teach06_waitDivide(void*); - /* 80A30708 */ void teach06_superJumpWaitDivide(void*); - /* 80A30D44 */ void teach06_superJumpedDivide(void*); - /* 80A30EDC */ void teach06_warpDelete(void*); - /* 80A31028 */ void teach07_superTurnAttackWait(void*); - /* 80A315D0 */ void teach07_divideMove(void*); - /* 80A317F8 */ void teach07_waitDivide(void*); - /* 80A31958 */ void teach07_superTurnAttackWaitDivide(void*); - /* 80A31E24 */ void teach07_superTurnAttackedDivide(void*); - /* 80A31FBC */ void teach07_warpDelete(void*); - /* 80A3203C */ void ECut_secondEncount(int); - /* 80A324C4 */ void ECut_thirdSkillExplain(int); - /* 80A32D30 */ void ECut_thirdSkillGet(int); - /* 80A33358 */ void ECut_fourthSkillExplain(int); - /* 80A33D80 */ void ECut_fourthSkillGet(int); - /* 80A343A8 */ void ECut_fifthSkillExplain(int); - /* 80A34DB8 */ void ECut_fifthSkillGet(int); - /* 80A353E0 */ void ECut_sixthSkillExplain(int); - /* 80A35D88 */ void ECut_sixthSkillGet(int); - /* 80A363C0 */ void ECut_seventhSkillExplain(int); - /* 80A36C20 */ void ECut_seventhSkillGet(int); - /* 80A372D0 */ void setPrtcl(); - /* 80A37430 */ void setSlipPrtcl(); - /* 80A37558 */ void setLandingPrtcl(); + /* 80A2DD70 */ int ECut_noneEquipChangeTalk(int); + /* 80A2DF84 */ int ECut_noneEquipChangeTalkStand(int); + /* 80A2E26C */ int ECut_largeDamageTalk(int); + /* 80A2E528 */ int teach02_start(void*); + /* 80A2E664 */ int teach03_attackWait(void*); + /* 80A2EC04 */ int teach04_attackWait(void*); + /* 80A2EF8C */ int teach04_headBreakWait(void*); + /* 80A2F24C */ int teach04_finishWait(void*); + /* 80A2F600 */ int teach05_surpriseAttackWait(void*); + /* 80A2FC80 */ int teach06_superJumpWait(void*); + /* 80A30398 */ int teach06_divideMove(void*); + /* 80A305A8 */ int teach06_waitDivide(void*); + /* 80A30708 */ int teach06_superJumpWaitDivide(void*); + /* 80A30D44 */ int teach06_superJumpedDivide(void*); + /* 80A30EDC */ int teach06_warpDelete(void*); + /* 80A31028 */ int teach07_superTurnAttackWait(void*); + /* 80A315D0 */ int teach07_divideMove(void*); + /* 80A317F8 */ int teach07_waitDivide(void*); + /* 80A31958 */ int teach07_superTurnAttackWaitDivide(void*); + /* 80A31E24 */ int teach07_superTurnAttackedDivide(void*); + /* 80A31FBC */ int teach07_warpDelete(void*); + /* 80A3203C */ int ECut_secondEncount(int); + /* 80A324C4 */ int ECut_thirdSkillExplain(int); + /* 80A32D30 */ int ECut_thirdSkillGet(int); + /* 80A33358 */ int ECut_fourthSkillExplain(int); + /* 80A33D80 */ int ECut_fourthSkillGet(int); + /* 80A343A8 */ int ECut_fifthSkillExplain(int); + /* 80A34DB8 */ int ECut_fifthSkillGet(int); + /* 80A353E0 */ int ECut_sixthSkillExplain(int); + /* 80A35D88 */ int ECut_sixthSkillGet(int); + /* 80A363C0 */ int ECut_seventhSkillExplain(int); + /* 80A36C20 */ int ECut_seventhSkillGet(int); + /* 80A372D0 */ int setPrtcl(); + /* 80A37430 */ int setSlipPrtcl(); + /* 80A37558 */ int setLandingPrtcl(); /* 80A37598 */ void calcMagicBallPos(); /* 80A37670 */ void setSwordChargePtcl(); /* 80A37B08 */ void calcSlip(); /* 80A37D20 */ void calcSwordAttackMove(int); /* 80A3805C */ void setSe(); - /* 80A38520 */ void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); + /* 80A38520 */ static void tgHitCallBack(fopAc_ac_c*, dCcD_GObjInf*, fopAc_ac_c*, dCcD_GObjInf*); /* 80A38550 */ void getTrnsfrmAnmP(char const*, int); - /* 80A3858C */ void getTrnsfrmKeyAnmP(char const*, int); + /* 80A3858C */ void* getTrnsfrmKeyAnmP(char const*, int); /* 80A385C8 */ void getTexPtrnAnmP(char const*, int); /* 80A38604 */ void getTexSRTKeyAnmP(char const*, int); /* 80A38640 */ void setBckAnm(J3DAnmTransform*, f32, int, int, int, bool); - /* 80A38684 */ void setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int); + /* 80A38684 */ int setMcaMorfAnm(J3DAnmTransformKey*, f32, f32, int, int, int); /* 80A3877C */ void setBtpAnm(J3DAnmTexPattern*, J3DModelData*, f32, int); /* 80A387BC */ void setBtkAnm(J3DAnmTextureSRTKey*, J3DModelData*, f32, int); - /* 80A387FC */ void loadRes(s8 const*, char const**); + /* 80A387FC */ cPhs__Step loadRes(s8 const*, char const**); /* 80A388B0 */ void deleteRes(s8 const*, char const**); - /* 80A38930 */ void execute(); + /* 80A38930 */ s32 execute(); /* 80A38BB8 */ void draw(int, int, f32, _GXColorS10*, f32, int, int, int); /* 80A38FAC */ void setEnvTevColor(); /* 80A39008 */ void setRoomNo(); - /* 80A3904C */ void checkEndAnm(f32); - /* 80A390F8 */ void checkEndAnm(J3DFrameCtrl*, f32); + /* 80A3904C */ bool checkEndAnm(f32); + /* 80A390F8 */ BOOL checkEndAnm(J3DFrameCtrl*, f32); /* 80A3917C */ void playAllAnm(); - /* 80A3949C */ void ctrlBtk(); /* 80A39558 */ void setMtx(); /* 80A395DC */ void ctrlFaceMotion(); /* 80A39684 */ void ctrlMotion(); /* 80A39738 */ void ctrlMsgAnm(int*, int*, fopAc_ac_c*, int); - /* 80A3989C */ void ctrlJoint(J3DJoint*, J3DModel*); - /* 80A39BBC */ void evtProc(); - /* 80A39DBC */ void setFootPos(); - /* 80A39F84 */ void setFootPrtcl(cXyz*, f32); - /* 80A3A254 */ bool checkCullDraw(); - /* 80A3A25C */ void twilight(); - /* 80A3A2A8 */ void evtOrder(); /* 80A3A404 */ void evtChange(); - /* 80A3A504 */ void clrParam(); /* 80A3A568 */ bool setFaceMotionAnm(int, bool); /* 80A3A7C0 */ bool setMotionAnm(int, f32, int); /* 80A3AA58 */ void setPos(cXyz); @@ -153,70 +279,175 @@ public: /* 80A3AC24 */ void chkPointInArea(cXyz, cXyz, f32, f32, f32, s16); /* 80A3ACD4 */ void chkPointInArea(cXyz, cXyz, cXyz, s16); /* 80A3AD50 */ void chkFindPlayer(int, s16); - /* 80A3AF64 */ void srchPlayerActor(); - /* 80A3B000 */ void getAttnPos(fopAc_ac_c*); + /* 80A3AF64 */ BOOL srchPlayerActor(); + /* 80A3B000 */ cXyz getAttnPos(fopAc_ac_c*); /* 80A3B074 */ void turn(s16, int, int); - /* 80A3B220 */ void step(s16, int, int, int, int); - /* 80A3B3E8 */ void initTalk(int, fopAc_ac_c**); - /* 80A3B448 */ void talkProc(int*, int, fopAc_ac_c**, int); + /* 80A3B220 */ s32 step(s16, int, int, int, int); + /* 80A3B3E8 */ s32 initTalk(int, fopAc_ac_c**); + /* 80A3B448 */ BOOL talkProc(int*, int, fopAc_ac_c**, int); /* 80A3B5EC */ void setHitodamaPrtcl(); - /* 80A3B708 */ void decTmr(); - /* 80A3B720 */ void afterJntAnm(int); - /* 80A3B79C */ bool evtEndProc(); - /* 80A3B7A4 */ bool checkChangeEvt(); - /* 80A3B7AC */ s32 getFootRJointNo(); - /* 80A3B7B4 */ s32 getFootLJointNo(); - /* 80A3B7BC */ bool chkXYItems(); - /* 80A3B7C4 */ bool afterSetFaceMotionAnm(int, int, f32, int); - /* 80A3B7CC */ void getFaceMotionAnm(daNpcT_faceMotionAnmData_c); - /* 80A3B7FC */ void getMotionAnm(daNpcT_motionAnmData_c); /* 80A3B82C */ daNpc_Kn_c(daNpcT_faceMotionAnmData_c const*, daNpcT_motionAnmData_c const*, daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, daNpcT_MotionSeqMngr_c::sequenceStepData_c const*, int, daNpcT_evtData_c const*, char**); - /* 80A3BD14 */ s32 getEyeballMaterialNo(); - /* 80A3BD1C */ bool getEyeballLMaterialNo(); - /* 80A3BD24 */ bool getEyeballRMaterialNo(); - /* 80A3C998 */ void setParamTeach01(); + /* 80A3C998 */ u32 setParamTeach01(); /* 80A3CB14 */ void setCollisionTeach01(); /* 80A3CBFC */ void teach01_selectAction(); - /* 80A3CCC0 */ void teach01_start(void*); - /* 80A3CDFC */ void teach01_attackWait(void*); - /* 80A3CF78 */ void teach01_swordAttackWait(void*); - /* 80A3D32C */ void teach01_swordFinishWait(void*); - /* 80A3D6D8 */ void ctrlWarp(); - /* 80A3DCEC */ void ECut_firstEncount(int); - /* 80A3DEC4 */ void ECut_attackFailed(int); - /* 80A3E550 */ void ECut_firstSkillGet(int); - /* 80A3EB84 */ void setParamTeach02(); + /* 80A3CCC0 */ int teach01_start(void*); + /* 80A3CDFC */ int teach01_attackWait(void*); + /* 80A3CF78 */ int teach01_swordAttackWait(void*); + /* 80A3D32C */ int teach01_swordFinishWait(void*); + /* 80A3D6D8 */ int ctrlWarp(); + /* 80A3DCEC */ int ECut_firstEncount(int); + /* 80A3DEC4 */ int ECut_attackFailed(int); + /* 80A3E550 */ int ECut_firstSkillGet(int); + /* 80A3EB84 */ u32 setParamTeach02(); /* 80A3EE38 */ void setCollisionTeach02(); /* 80A3EF1C */ void teach02_selectAction(); - /* 80A3EFE0 */ void teach02_shieldBashWait(void*); - /* 80A3F358 */ void teach02_finishWait(void*); - /* 80A3F5A4 */ void teach02_shieldReflectWait(void*); - /* 80A3F99C */ void ECut_secondSkillExplain(int); - /* 80A3FFB4 */ void ECut_reflectExplain(int); - /* 80A403B8 */ void ECut_secondSkillGet(int); - + /* 80A3EFE0 */ int teach02_shieldBashWait(void*); + /* 80A3F358 */ int teach02_finishWait(void*); + /* 80A3F5A4 */ int teach02_shieldReflectWait(void*); + /* 80A3F99C */ int ECut_secondSkillExplain(int); + /* 80A3FFB4 */ int ECut_reflectExplain(int); + /* 80A403B8 */ int ECut_secondSkillGet(int); + /* 80A3949C */ virtual int ctrlBtk(); + /* 80A3B7B4 */ virtual s32 getFootLJointNo(); + /* 80A3B7AC */ virtual s32 getFootRJointNo(); + /* 80A3BD1C */ virtual int getEyeballLMaterialNo(); + /* 80A3BD24 */ virtual s32 getEyeballRMaterialNo(); + /* 80A3BD14 */ virtual s32 getEyeballMaterialNo(); + /* 80A3989C */ virtual int ctrlJoint(J3DJoint*, J3DModel*); + /* 80A3B720 */ virtual void afterJntAnm(int); + /* 80A3B7A4 */ virtual BOOL checkChangeEvt(); + /* 80A39BBC */ virtual int evtProc(); + /* 80A3B79C */ virtual BOOL evtEndProc(); + /* 80A39DBC */ virtual void setFootPos(); + /* 80A39F84 */ virtual void setFootPrtcl(cXyz*, f32); + /* 80A3A254 */ virtual bool checkCullDraw(); + /* 80A3A25C */ virtual void twilight(); + /* 80A3B7BC */ virtual BOOL chkXYItems(); + /* 80A3A2A8 */ virtual void evtOrder(); + /* 80A3B708 */ virtual void decTmr(); + /* 80A3A504 */ virtual void clrParam(); + /* 80A3B7C4 */ virtual bool afterSetFaceMotionAnm(int, int, f32, int); + /* 80A3B7CC */ virtual daNpcT_faceMotionAnmData_c getFaceMotionAnm(daNpcT_faceMotionAnmData_c); + /* 80A3B7FC */ virtual daNpcT_motionAnmData_c getMotionAnm(daNpcT_motionAnmData_c); + /* 80A2AA0C */ virtual ~daNpc_Kn_c(); + /* 80A2D060 */ virtual bool afterSetMotionAnm(int, int, f32, int); + static u8 const mCcDObjData[48]; - static u8 mCcDCyl[68]; - static u8 mCcDSph[64]; - static void* mCutNameList[21]; - static u8 mCutList[252]; - static u8 mFindActorPtrs[200]; + static dCcD_SrcCyl mCcDCyl; + static dCcD_SrcSph mCcDSph; + static char* mCutNameList[21]; + static cutFunc mCutList[21]; + static fopAc_ac_c* mFindActorPtrs[50]; static u8 mFindCount[4]; - + private: - /* 0x568 */ u8 field_0x568[0x1758 - 0x568]; + /* 0x0E44 */ J3DModel* mpModel; + /* 0x0E48 */ mDoExt_invisibleModel mInvisModel; + /* 0x0E50 */ dKy_tevstr_c mTevStr; + /* 0x11D8 */ u8 field_0x11D8[0x11DC - 0x11D8]; + /* 0x11DC */ dCcD_Cyl mCylCc; + /* 0x1318 */ dCcD_Sph mSphCc[2]; + /* 0x1588 */ mDoExt_bckAnm field_0x1588; + /* 0x15A4 */ u32 field_0x15a4; + /* 0x15A8 */ u32 field_0x15A8; + /* 0x15AC */ u8 mType; + /* 0x15AD */ u8 mDivideNo; + /* 0x15AE */ s8 mActionMode; + /* 0x15AF */ u8 field_0x15af; + /* 0x15B0 */ cXyz mTargetPos; + /* 0x15BC */ u8 field_0x15bc; + /* 0x15BD */ u8 field_0x15bd; + /* 0x15BE */ u16 field_0x15be; + /* 0x15C0 */ cXyz field_0x15c0; + /* 0x15CC */ u8 field_0x15cc; + /* 0x15CD */ u8 field_0x15cd; + /* 0x15CE */ u8 field_0x15ce; + /* 0x15CF */ u8 field_0x15cf; + /* 0x15D0 */ u16 field_0x15d0; + /* 0x15D4 */ s32 field_0x15d4[3]; + /* 0x15E0 */ daNpc_Kn_prtclMngr_c mParticleMngr[3]; + /* 0x16F4 */ cXyz field_0x16f4; + /* 0x1700 */ u8 field_0x1700[0x170c - 0x1700]; + /* 0x170C */ u8 field_0x170c; + /* 0x170D */ u8 field_0x170d; + /* 0x170E */ u8 field_0x170e; + /* 0x170F */ u8 field_0x170f; + /* 0x1710 */ u8 field_0x1710[4]; + /* 0x1714 */ actionFunc mpTeachAction; + /* 0x1720 */ actionFunc mpActionFunc; + /* 0x172C */ daNpcT_Path_c mPath; + /* 0x1754 */ u8 field_0x1754; }; STATIC_ASSERT(sizeof(daNpc_Kn_c) == 0x1758); class daNpc_Kn_Param_c { public: - /* 80A3C124 */ ~daNpc_Kn_Param_c(); + /* 80A3C124 */ virtual ~daNpc_Kn_Param_c(); + + struct param { + /* 0x00 */ f32 field_0x00; + /* 0x04 */ f32 mGravity; + /* 0x08 */ f32 mScale; + /* 0x0C */ f32 field_0x0c; + /* 0x10 */ f32 mWeight; + /* 0x14 */ f32 field_0x14; + /* 0x18 */ f32 mHeight; + /* 0x1C */ f32 mRadius; + /* 0x20 */ f32 field_0x20; + /* 0x24 */ f32 field_0x24; + /* 0x28 */ f32 field_0x28; + /* 0x2C */ f32 field_0x2c; + /* 0x30 */ f32 field_0x30; + /* 0x34 */ f32 field_0x34; + /* 0x38 */ f32 field_0x38; + /* 0x3C */ f32 field_0x3c; + /* 0x40 */ f32 field_0x40; + /* 0x44 */ f32 field_0x44; + /* 0x48 */ s16 field_0x48; + /* 0x4A */ s16 field_0x4a; + /* 0x4C */ s16 field_0x4c; + /* 0x4E */ s16 field_0x4e; + /* 0x50 */ s32 field_0x50; + /* 0x54 */ s32 field_0x54; + /* 0x58 */ s32 field_0x58; + /* 0x5C */ s32 field_0x5C; + /* 0x60 */ s16 field_0x60; + /* 0x62 */ s16 field_0x62; + /* 0x64 */ s16 field_0x64; + /* 0x66 */ s16 field_0x66; + /* 0x68 */ s16 field_0x68; + /* 0x6A */ u8 field_0x6a; + /* 0x6B */ s8 field_0x6b; + /* 0x6C */ f32 field_0x6C; + /* 0x70 */ s32 field_0x70; + /* 0x74 */ s32 field_0x74; + /* 0x78 */ s32 field_0x78; + /* 0x7C */ s32 field_0x7C; + /* 0x80 */ s32 field_0x80; + /* 0x84 */ s32 field_0x84; + /* 0x88 */ s32 field_0x88; + /* 0x8C */ s16 mAlpha; + /* 0x8E */ s16 field_0x8e; + /* 0x90 */ s16 field_0x90; + /* 0x92 */ s16 field_0x92; + /* 0x94 */ f32 field_0x94; + /* 0x98 */ f32 field_0x98; + /* 0x9C */ f32 field_0x9c; + /* 0xA0 */ f32 mSpeedF; + /* 0xA4 */ f32 mSpeedY; + /* 0xA8 */ f32 field_0xa8; + /* 0xAC */ s16 mMinRndVal; + /* 0xAE */ s16 mRndValRange; + /* 0xB0 */ s16 field_0xb0; + /* 0xB2 */ s16 field_0xb2; + /* 0xB4 */ f32 field_0xb4; + }; - static u8 const m[180]; + static param const m; }; #endif /* D_A_NPC_KN_H */ diff --git a/include/d/actor/d_a_obj_knBullet.h b/include/d/actor/d_a_obj_knBullet.h index c4bba9daba..3eb2f03604 100644 --- a/include/d/actor/d_a_obj_knBullet.h +++ b/include/d/actor/d_a_obj_knBullet.h @@ -22,8 +22,12 @@ public: /* 80C47558 */ void col_chk(); /* 80C477B4 */ void hitPrtclSet(); + u8 getActionMode() { return mActionMode; } + private: - /* 0x568 */ u8 field_0x568[0x71c - 0x568]; + /* 0x568 */ u8 field_0x568[0x70c - 0x568]; + /* 0x70C */ u8 mActionMode; + /* 0x70D */ u8 field_0x70d[0x71c - 0x70d]; }; STATIC_ASSERT(sizeof(daObjKnBullet_c) == 0x71c); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 9969d364e2..bb9cc27817 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -455,7 +455,7 @@ public: FLG3_UNK_100 = 0x100, FLG3_UNK_80 = 0x80, FLG3_UNK_40 = 0x40, - FLG3_UNK_20 = 0x20, + FL3_TRANING_CUT_BACK = 0x20, FLG3_UNK_10 = 0x10, FLG3_UNK_8 = 8, FLG3_UNK_4 = 4, @@ -500,7 +500,7 @@ public: ERFLG1_UNK_40000000 = 0x40000000, ERFLG1_UNK_20000000 = 0x20000000, ERFLG1_UNK_10000000 = 0x10000000, - ERFLG1_UNK_8000000 = 0x8000000, + ERFLG1_LARGE_DAMAGE_UP_STOP = 0x8000000, ERFLG1_UNK_4000000 = 0x4000000, ERFLG1_UNK_2000000 = 0x2000000, ERFLG1_UNK_1000000 = 0x1000000, @@ -572,7 +572,7 @@ public: }; enum daPy_RFLG1 { - RFLG1_UNK_400 = 0x400, + RFLG1_DAMAGE_IMPACT = 0x400, RFLG1_UNK_200 = 0x200, RFLG1_UNK_100 = 0x100, RFLG1_UNK_80 = 0x80, @@ -914,6 +914,7 @@ public: bool checkWolfAttackReverse() const { return checkResetFlg1(RFLG1_WOLF_ATTACK_REVERSE); } bool checkFreezeDamage() const { return checkNoResetFlg1(FLG1_ICE_FREEZE); } bool checkWolfTagLockJumpReady() const { return checkResetFlg0(RFLG0_UNK_20000); } + bool checkDamageImpact() const { return checkResetFlg1(RFLG1_DAMAGE_IMPACT); } bool getGrabUpEnd() const { return checkResetFlg0(RFLG0_GRAB_UP_END); } bool getGrabPutStart() const { return checkResetFlg0(RFLG0_GRAB_PUT_START); } bool checkSwimUp() const { return checkNoResetFlg0(FLG0_SWIM_UP); } @@ -1046,6 +1047,8 @@ public: void onDoExchangePutIn() { onEndResetFlg1(ERFLG1_UNK_4000000); } void onNsScream() { onEndResetFlg1(ERFLG1_UNK_1); } void onNsScreamAnm() { onEndResetFlg1(daPy_ERFLG1(ERFLG1_UNK_1 | ERFLG1_UNK_2)); } + void onLargeDamageUpStop() { onEndResetFlg1(ERFLG1_LARGE_DAMAGE_UP_STOP); } + void onTraningCutBack() { onNoResetFlg3(FL3_TRANING_CUT_BACK); } void onNeckSearchWide() { onEndResetFlg0(ERFLG0_UNK_400); } void offPressedDamage() { offNoResetFlg2(FLG2_PRESSED_DAMAGE); } void onForceSubjectCancel() { onEndResetFlg0(ERFLG0_FORCE_SUBJECT_CANCEL); } diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index 3f04104e2f..644a440267 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -409,6 +409,7 @@ public: cXyz* GetTgRVecP() { return mGObjTg.GetRVecP(); } bool ChkTgHookshotThrough() { return mGObjTg.ChkSPrm(0x80); } bool ChkTgShieldHit() { return mGObjTg.ChkRPrm(2); } + void OffTgNoAtHitInfSet() { mObjTg.OffSPrmBit(0x20); } bool ChkTgSpinnerReflect() { return mGObjTg.ChkSPrm(0x200); } static const Z2SoundID m_hitSeID[24]; diff --git a/include/d/d_particle_copoly.h b/include/d/d_particle_copoly.h index 78331cb4ce..2f7cde2587 100644 --- a/include/d/d_particle_copoly.h +++ b/include/d/d_particle_copoly.h @@ -7,6 +7,21 @@ class dBgS_Acch; class dKy_tevstr_c; class JPABaseEmitter; +/** + * @brief Particle effect management class for center-based effects + * + * This class handles particle effects, particularly those related to water interactions. + * It manages emitters, water offsets, and ripple effects with a center-based configuration. + * + * @details The class maintains: + * - Center-based particle emitters + * - Water and ripple offset values + * - Effect type information + * - Background collision checking capabilities + * + * @note This serves as the base class for dPaPoT_c and dPaPoF_c which extend the + * functionality to handle two and four particle emitters respectively. + */ class dPaPo_c { public: /* 80050C9C */ void init(dBgS_Acch*, f32, f32); diff --git a/include/f_op/f_op_actor_mng.h b/include/f_op/f_op_actor_mng.h index e09d4a77e5..a925772b4d 100644 --- a/include/f_op/f_op_actor_mng.h +++ b/include/f_op/f_op_actor_mng.h @@ -135,7 +135,13 @@ enum fopAcM_STATUS { /* 0x0040000 */ fopAcM_STATUS_UNK_400000 = 1 << 18, /* 0x0080000 */ fopAcM_STATUS_UNK_800000 = 1 << 19, /* 0x0100000 */ fopAcM_STATUS_HOOK_CARRY_NOW = 1 << 20, - /* 0x8000000 */ fopAcM_STATUS_UNK_8000000 = 1 << 27, + /* 0x0200000 */ fopAcM_STATUS_UNK_2000000 = 1 << 21, + /* 0x0400000 */ fopAcM_STATUS_UNK_4000000 = 1 << 22, + /* 0x0800000 */ fopAcM_STATUS_UNK_8000000 = 1 << 23, + /* 0x1000000 */ fopAcM_STATUS_UNK_10000000 = 1 << 24, + /* 0x2000000 */ fopAcM_STATUS_UNK_20000000 = 1 << 25, + /* 0x4000000 */ fopAcM_STATUS_UNK_40000000 = 1 << 26, + /* 0x8000000 */ fopAcM_STATUS_UNK_80000000 = 1 << 27, }; inline s8 fopAcM_GetRoomNo(const fopAc_ac_c* i_actor) { |
