mirror of
https://github.com/zeldaret/tww.git
synced 2026-09-02 17:53:06 -04:00
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:
+150
-17
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user