d_a_daiocta and d_a_daiocta_eye matching (#934)

* Initial work; 25% matching in .text

* 27% matching in .text

* Match daDaiocta_c::modeProc

* 56% matching in .text

* 61% matching in .text

* 69% matching in .text

* 74% matching in .text

* 84% matching in .text

* daDaiocta_Eye_c 31%

* Match daDaiocta_Eye_c node callbacks

* daDaiocta_Eye_c 69%

* daDaiocta_Eye_c 85%

* daDaiocta_Eye_c 100% for retail and demo

* daDaiocta_c 96%

* daDaiocta_c 100% for retail and demo

* Field name cleanup

* More field naming

* Implement {is_, to_, to_dis}appear daObjAuzu inlines

* Misc code formatting changes

* Use JntHitType enum (d_a_daiocta)

* Apply suggestions from code review

Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>

* Use fopAcM_SetMtx inline

---------

Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>
This commit is contained in:
Roland
2026-02-27 13:04:36 -06:00
committed by GitHub
parent 1d96a4c988
commit 034b90bfdc
6 changed files with 2090 additions and 126 deletions
+150 -17
View File
@@ -1,7 +1,12 @@
#ifndef D_A_DAIOCTA_H
#define D_A_DAIOCTA_H
#include "d/d_bg_s_acch.h"
#include "d/d_cc_d.h"
#include "d/d_particle.h"
#include "f_op/f_op_actor.h"
#include "m_Do/m_Do_ext.h"
#include "m_Do/m_Do_hostIO.h"
class J3DNode;
class dCcD_SrcSph;
@@ -9,23 +14,44 @@ class dCcD_SrcCps;
class daDaiocta_c : public fopAc_ac_c {
public:
enum OctoType_e {
FOUR_EYED = 0,
EIGHT_EYED = 1,
TWELVE_EYED = 2
};
enum Proc_e {
PROC_INIT = 0,
PROC_EXEC = 1
};
enum Mode_e {
MODE_HIDE = 0,
MODE_APPEAR = 1,
MODE_WAIT = 2,
MODE_DAMAGE = 3,
MODE_DAMAGE_BOMB = 4,
MODE_DELETE = 5,
MODE_DEMO = 6,
MODE_NULL
};
struct ModeEntry {
typedef void (daDaiocta_c::*ModeProcFunc)(void);
ModeProcFunc mInitFunc;
ModeProcFunc mUpdFunc;
char* mModeName;
};
u8 getSw() { return mSwitchNo; }
void _coHit(fopAc_ac_c*);
void _nodeControl(J3DNode*, J3DModel*);
void _createHeap();
void createAwaHeap();
void createSuikomiHeap();
void createBodyHeap();
void createArrowHitHeap();
BOOL _createHeap();
BOOL createAwaHeap();
BOOL createSuikomiHeap();
BOOL createBodyHeap();
BOOL createArrowHitHeap();
void setMtx();
void setSuikomiMtx();
void setAwaMtx();
@@ -34,10 +60,10 @@ public:
void setAwaRandom(int);
void initAwa();
void execAwa();
void isLivingEye();
void isDead();
void isDamageEye();
void isDamageBombEye();
bool isLivingEye();
bool isDead();
bool isDamageEye();
bool isDamageBombEye();
void setRotEye();
void setCollision();
void modeHideInit();
@@ -67,20 +93,127 @@ public:
cPhs_State _create();
bool _delete();
static const s32 m_heapsize;
static const char m_arc_name[];
static const dCcD_SrcSph m_sph_src;
static const dCcD_SrcCps m_cps_src;
public:
/* 0x290 */ u8 field_0x290[0x574 - 0x290];
/* 0x574 */ u8 mSwitchNo;
};
// Offsets shown are for retail
/* 0x0290 */ cXyz mSphCenters[37];
/* 0x044C */ u8 m044C[0x04E0 - 0x044C];
/* 0x04E0 */ u32 mAnmMtxIndices[12];
/* 0x0510 */ u8 m0510[0x056C - 0x0510];
/* 0x056C */ s32 mMode;
/* 0x0570 */ s8 mAnmIdx;
/* 0x0571 */ s8 mPrmIdx;
/* 0x0572 */ s8 mOldPrmIdx;
/* 0x0573 */ u8 mOctoType;
/* 0x0574 */ u8 mSwitchNo;
/* 0x0575 */ u8 m575;
/* 0x0576 */ u8 m0576[0x0578 - 0x0576];
/* 0x0578 */ f32 mAppearRadius;
/* 0x057C */ u8 m057C;
/* 0x057D */ u8 m057D[0x0580 - 0x057D];
/* 0x0580 */ request_of_phase_process_class mPhs;
/* 0x0588 */ mDoExt_McaMorf* mpMorf;
/* 0x058C */ mDoExt_brkAnm mBrkAnm1;
/* 0x05A4 */ dCcD_Sph mSph[6];
/* 0x0CAC */ dCcD_Cps mCps[17];
/* 0x2164 */ dCcD_Stts mStts;
/* 0x21A0 */ cXyz m21A0;
/* 0x21AC */ cXyz m21AC;
/* 0x21B8 */ cXyz m21B8;
/* 0x21C4 */ cXyz m21C4;
/* 0x21D0 */ cXyz m21D0;
/* 0x21DC */ cXyz m21DC;
/* 0x21E8 */ cXyz m21E8;
/* 0x21F4 */ cXyz m21F4;
/* 0x2200 */ csXyz m2200;
/* 0x2206 */ u8 m2206[0x2208 - 0x2206];
/* 0x2208 */ f32 m2208;
/* 0x220C */ cXyz m220C;
/* 0x2218 */ dBgS_ObjAcch mAcch;
/* 0x23DC */ dBgS_AcchCir mAcchCir;
#if VERSION > VERSION_DEMO
/* 0x241C */ dPa_followEcallBack mParticleCallback;
#else
JPABaseEmitter* mpEmitter;
#endif
/* 0x2430 */ f32 mWaterY;
/* 0x2434 */ cXyz m2434;
/* 0x2440 */ fpc_ProcID mDaioctaEyePcId[12];
/* 0x2470 */ bool mEyeAlloc[12];
/* 0x247C */ u8 m247C[0x26BC - 0x247C];
/* 0x26BC */ int mRotEyeTimer;
/* 0x26C0 */ u8 m26C0;
/* 0x26C1 */ u8 m26C1;
/* 0x26C2 */ u8 m26C2[0x26C4 - 0x26C2];
/* 0x26C4 */ fpc_ProcID mpAuzu;
/* 0x26C8 */ JntHit_c* mpJntHit;
/* 0x26CC */ J3DModel* mpSuikomiModel;
/* 0x26D0 */ mDoExt_brkAnm mBrkAnm2;
/* 0x26E8 */ mDoExt_btkAnm mBtkAnm;
/* 0x26FC */ J3DModel* mpAwaModels[30];
/* 0x2774 */ mDoExt_bckAnm mAwaBckAnms[30];
/* 0x2954 */ mDoExt_btkAnm mAwaBtkAnms[30];
/* 0x2BAC */ mDoExt_brkAnm mAwaBrkAnms[30];
/* 0x2E7C */ int mAwaTimers[30];
/* 0x2EF4 */ cXyz mAwaTranslation[30];
/* 0x305C */ cXyz mAwaScale[30];
/* 0x31C4 */ u8 m31C4;
/* 0x31C5 */ u8 m31C5[0x31C8 - 0x31C5];
}; // Size: 0x31C8
STATIC_ASSERT(sizeof(daDaiocta_c) == DEMO_SELECT(0x31B8, 0x31C8));
class daDaiocta_HIO_c {
class daDaiocta_HIO_c : public mDoHIO_entry_c {
public:
daDaiocta_HIO_c();
public:
/* Place member variables here */
};
/* 0x004 */ u8 m004;
/* 0x005 */ u8 m005;
/* 0x006 */ u8 m006;
/* 0x007 */ u8 m007;
/* 0x008 */ u8 m008;
/* 0x009 */ u8 m009[0x00A - 0x009];
/* 0x00A */ s16 m00A;
/* 0x00C */ s16 mRotEyeTimerMin;
/* 0x00E */ s16 mRotEyeTimerAddMax;
/* 0x010 */ s16 m010;
/* 0x012 */ s16 m012;
/* 0x014 */ s16 m014;
/* 0x016 */ s16 m016;
/* 0x018 */ s16 m018;
/* 0x01A */ u8 m01A[0x01C - 0x01A];
/* 0x01C */ f32 mSphRadii[6];
/* 0x034 */ f32 mCpsRadii[10];
/* 0x05C */ f32 m05C;
/* 0x060 */ f32 m060;
/* 0x064 */ f32 m064;
/* 0x068 */ f32 m068;
/* 0x06C */ f32 m06C;
/* 0x070 */ f32 m070;
/* 0x074 */ f32 m074;
/* 0x078 */ f32 mDefaultAppearRadius;
/* 0x07C */ f32 mMinAppearRadius;
/* 0x080 */ f32 m080;
/* 0x084 */ f32 m084;
/* 0x088 */ f32 m088;
/* 0x08C */ f32 m08C;
/* 0x090 */ f32 m090;
/* 0x094 */ f32 m094;
/* 0x098 */ f32 m098[9];
/* 0x0BC */ f32 m0BC[9];
/* 0x0E0 */ f32 m0E0;
/* 0x0E4 */ f32 m0E4;
/* 0x0E8 */ f32 m0E8;
/* 0x0EC */ f32 m0EC;
/* 0x0F0 */ f32 m0F0;
/* 0x0F4 */ f32 m0F4;
/* 0x0F8 */ f32 m0F8;
/* 0x0FC */ cXyz m0FC;
}; // Size: 0x108
STATIC_ASSERT(sizeof(daDaiocta_HIO_c) == DEMO_SELECT(0x10C, 0x108));
#endif /* D_A_DAIOCTA_H */
+90 -7
View File
@@ -1,16 +1,47 @@
#ifndef D_A_DAIOCTA_EYE_H
#define D_A_DAIOCTA_EYE_H
#include "SSystem/SComponent/c_math.h"
#include "d/d_cc_d.h"
#include "d/d_jnt_hit.h"
#include "d/d_particle.h"
#include "f_op/f_op_actor.h"
#include "m_Do/m_Do_ext.h"
#include "m_Do/m_Do_hostIO.h"
class J3DNode;
class daDaiocta_c;
class daDaiocta_Eye_c : public fopAc_ac_c {
public:
void rndRotEye() {}
enum Mode_e {
MODE_WAIT = 0,
MODE_DAMAGE = 1,
MODE_DEATH = 2
};
typedef void (daDaiocta_Eye_c::*ModeProcFunc)(void);
public:
void rndRotEye() {
mEyeRotTargetX = cM_rndF(mEyeRndRotMaxX);
if (std::fabsf(mEyeRotTargetX - mCurEyeRot.x) < m2EC) {
mEyeRotTargetX += m2EC;
}
mEyeRotTargetY = cM_rndF(mEyeRndRotMaxY);
if (std::fabsf(mEyeRotTargetY - mCurEyeRot.y) < m2EE) {
mEyeRotTargetY += m2EE;
}
mEyeRotTargetZ = cM_rndF(mEyeRndRotMaxZ);
if (std::fabsf(mEyeRotTargetZ - mCurEyeRot.z) < m2F0) {
mEyeRotTargetZ += m2F0;
}
}
void _nodeControl(J3DNode*, J3DModel*);
void _createHeap();
BOOL _createHeap();
void _coHit(fopAc_ac_c*);
void setMtx();
void checkTgHit();
@@ -27,16 +58,68 @@ public:
cPhs_State _create();
bool _delete();
static const s32 m_heapsize;
static const char m_arc_name[];
static const s32 m_scale_damage_time;
public:
/* Place member variables here */
};
/* 0x290 */ s32 mEyeNo;
/* 0x294 */ bool mbIsDead;
/* 0x295 */ bool m295;
/* 0x296 */ bool mbIsDamaged;
/* 0x297 */ bool mbIsDamagedBomb;
/* 0x298 */ bool mbAppear;
/* 0x299 */ u8 m299[0x29C - 0x299];
/* 0x29C */ s32 mMode;
/* 0x2A0 */ request_of_phase_process_class mPhs;
/* 0x2A8 */ J3DModel* mpModel;
/* 0x2AC */ J3DAnmTevRegKey* mpBrk;
/* 0x2B0 */ mDoExt_brkAnm mBrkAnm;
/* 0x2C8 */ J3DAnmTextureSRTKey* mpBtk;
/* 0x2CC */ mDoExt_btkAnm mBtkAnm;
/* 0x2E0 */ s16 mEyeRotTargetX;
/* 0x2E2 */ s16 mEyeRotTargetY;
/* 0x2E4 */ s16 mEyeRotTargetZ;
/* 0x2E6 */ csXyz mCurEyeRot;
/* 0x2EC */ s16 m2EC;
/* 0x2EE */ s16 m2EE;
/* 0x2F0 */ s16 m2F0;
/* 0x2F2 */ s16 mEyeRndRotMaxX;
/* 0x2F4 */ s16 mEyeRndRotMaxY;
/* 0x2F6 */ s16 mEyeRndRotMaxZ;
/* 0x2F8 */ dCcD_Sph mSph;
/* 0x424 */ dCcD_Stts mStts;
/* 0x460 */ cXyz mEyeScale;
/* 0x46C */ int mScaleAnimeIdx;
/* 0x470 */ JntHit_c* mpJntHit;
/* 0x474 */ daDaiocta_c* mpParentActor;
/* 0x478 */ dPa_followEcallBack mParticleCallback;
/* 0x48C */ cXyz mParticlePos;
/* 0x48C */ csXyz m498;
/* 0x49E */ u8 m49E[0x4A0 - 0x49E];
}; // Size: 0x4A0
STATIC_ASSERT(sizeof(daDaiocta_Eye_c) == 0x4A0);
class daDaiocta_Eye_HIO_c {
class daDaiocta_Eye_HIO_c : public mDoHIO_entry_c {
public:
daDaiocta_Eye_HIO_c();
public:
/* Place member variables here */
s16 m04;
u8 m06[0x08 - 0x06];
f32 m08;
f32 m0C;
f32 mParticleTranslationX;
f32 mParticleTranslationY;
f32 mParticleTranslationZ;
f32 mSphRadius;
s16 mEyeRotStep;
s16 mEyeRotScale;
s16 m24;
s16 m26;
s16 m28;
s16 mEyeRndRotMaxX;
s16 mEyeRndRotMaxY;
s16 mEyeRndRotMaxZ;
JntHit_HIO_c m30;
};
#endif /* D_A_DAIOCTA_EYE_H */
+8 -5
View File
@@ -9,14 +9,14 @@ namespace daObjAuzu {
class Act_c : public fopAc_ac_c {
public:
void attr() const {}
void is_appear() const {}
bool is_appear() const { return field_0x2B4 > 0.999f; }
void prm_get_appear() const {}
void prm_get_linkID() const {}
void prm_get_swSave() const {}
void prm_get_type() const {}
void prm_make_squid() {}
void to_appear() {}
void to_disappear() {}
void to_appear() { field_0x2B8 = true; }
void to_disappear() { field_0x2B8 = false; }
void solidHeapCB(fopAc_ac_c*);
void create_heap();
@@ -33,8 +33,11 @@ namespace daObjAuzu {
bool _draw();
public:
/* Place member variables here */
};
/* 0x290 */ u8 field_0x290[0x2B4 - 0x290];
/* 0x2B4 */ f32 field_0x2B4;
/* 0x2B8 */ bool field_0x2B8;
/* 0x2B9 */ u8 field_0x2B9[0x2C0 - 0x2B9];
}; // Size: 0x2C0
};
#endif /* D_A_OBJ_AUZU_H */