d_a_e_skytail OK

This commit is contained in:
elijah-thomas774
2026-09-24 17:21:34 -04:00
parent 93e4f12526
commit fe566ba5db
9 changed files with 1508 additions and 64 deletions
+21 -1
View File
@@ -2,6 +2,7 @@
#define D_A_BIRD_H
#include "d/a/obj/d_a_obj_base.h"
#include "m/m_vec.h"
#include "s/s_State.hpp"
class dBird_c : public dAcObjBase_c {
@@ -28,19 +29,38 @@ public:
// fn_129_8DD0, only referenced by d_a_obj_bird_sp
void accelerateTowards(mVec3_c &targetDirection);
void fn_129_C4A0(mVec3_c &out, u16);
bool fn_129_CFB0();
s16 getNumDashes() const {
return mNumDashes;
}
const mVec3_c &getField_0xFAC() const {
return field_0xFAC;
}
s16 getField_0xFCC() const {
return field_0xFCC;
}
static dBird_c *getInstance() {
return spInstance;
}
dAcObjRef_c &getRef_0xEB8() {
return field_0xEB8;
}
private:
static dBird_c *spInstance;
/* 0x??? */ STATE_MGR_DECLARE(dBird_c);
u8 _0x36C[0xF8E - 0x36C];
u8 _0x36C[0xEB8 - 0x36C];
/* 0xEB8 */ dAcObjRef_c field_0xEB8;
u8 _0xEC4[0xF8E - 0xEC4];
/* 0xF8E */ s16 mNumDashes;
/* 0xFB0 */ u8 _0xFB90[0xFAC - 0xF90];
/* 0xFAC */ mVec3_c field_0xFAC;
/* 0xFB8 */ u8 _0xFB8[0xFCC - 0xFB8];
/* 0xFCC */ s16 field_0xFCC;
};
#endif
+210 -1
View File
@@ -2,13 +2,121 @@
#define D_A_E_SKYTAIL_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_cc.h"
#include "m/m3d/m_mdl.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "s/s_State.hpp"
#include "toBeSorted/d_d3d.h"
class dAcESkytail_c : public dAcEnBase_c {
class callbackBody_c : public m3d::callback_c {
public:
callbackBody_c() {}
virtual ~callbackBody_c() {}
virtual void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override;
// Node Center -> then all spines
mVec3_c mPos[12];
mAng3_c mAng[12];
f32 mScaleSpine11;
s16 field_0x10DC;
s16 field_0x10DE;
s16 field_0x10E0;
};
enum BodyNode_e {
BODY_NODE_Center,
BODY_NODE_Head,
BODY_NODE_Hair,
BODY_NODE_LMouthBig,
BODY_NODE_LMouthSmall,
BODY_NODE_RMouthBig,
BODY_NODE_RMouthSmall,
BODY_NODE_Spine01,
BODY_NODE_Spine02,
BODY_NODE_Spine03,
BODY_NODE_L1wing01,
BODY_NODE_L1wing02,
BODY_NODE_L1wing03,
BODY_NODE_L1wing04,
BODY_NODE_L1wing05,
BODY_NODE_R1wing01,
BODY_NODE_R1wing02,
BODY_NODE_R1wing03,
BODY_NODE_R1wing04,
BODY_NODE_R1wing05,
BODY_NODE_Spine04,
BODY_NODE_Spine05,
BODY_NODE_L2wing01,
BODY_NODE_L2wing02,
BODY_NODE_L2wing03,
BODY_NODE_L2wing04,
BODY_NODE_R2wing01,
BODY_NODE_R2wing02,
BODY_NODE_R2wing03,
BODY_NODE_R2wing04,
BODY_NODE_Spine06,
BODY_NODE_Spine07,
BODY_NODE_L3wing01,
BODY_NODE_L3wing02,
BODY_NODE_L3wing03,
BODY_NODE_L3wing04,
BODY_NODE_R3wing01,
BODY_NODE_R3wing02,
BODY_NODE_R3wing03,
BODY_NODE_R3wing04,
BODY_NODE_Spine08,
BODY_NODE_Spine09,
BODY_NODE_Spine10,
BODY_NODE_Spine11
};
class callbackAntenna_c : public m3d::callback_c {
public:
callbackAntenna_c() {}
virtual ~callbackAntenna_c() {}
virtual void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override;
// Corresponds to the AntennaNode_e
mVec3_c mPos[9];
mAng3_c mAng[9];
};
enum AntennaNode_e {
ANTENNA_NODE_AntennaCenter,
ANTENNA_NODE_Antenna01,
ANTENNA_NODE_Antenna02,
ANTENNA_NODE_Antenna03,
ANTENNA_NODE_Antenna04,
ANTENNA_NODE_Antenna05,
ANTENNA_NODE_Antenna06,
ANTENNA_NODE_Antenna07,
ANTENNA_NODE_Antenna08,
};
enum CollisionIdx_e {
COLLIDER_Head,
COLLIDER_Spine4,
COLLIDER_Spine6,
COLLIDER_Spine8,
COLLIDER_Rear,
};
public:
dAcESkytail_c() : mStateMgr(*this) {}
virtual ~dAcESkytail_c() {}
virtual int create() override;
virtual int doDelete() override;
virtual int draw() override;
virtual bool createHeap() override;
virtual int actorExecute() override;
STATE_FUNC_DECLARE(dAcESkytail_c, RandomMove);
STATE_FUNC_DECLARE(dAcESkytail_c, Move);
STATE_FUNC_DECLARE(dAcESkytail_c, ParallelMove);
@@ -17,8 +125,109 @@ public:
STATE_FUNC_DECLARE(dAcESkytail_c, Dead);
STATE_FUNC_DECLARE(dAcESkytail_c, Skytail);
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcESkytail_c);
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcESkytail_c);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcESkytail_c);
void fn_172_A40();
void fn_172_3CD0();
void fn_172_4240(s32);
void fn_172_45D0();
void fn_172_45E0();
void fn_172_45F0();
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcESkytail_c);
/* 0x0378 */ d3d::AnmMdlWrapper mBodyMdl;
/* 0x03E8 */ d3d::AnmMdlWrapper mAntennaMdl[2];
/* 0x04C8 */ dBgS_AcchCir mAcchCir;
/* 0x0524 */ dBgS_ObjAcch mAcch;
/* 0x08D4 */ dCcD_Linked<dCcD_Sph> mCc[5];
/* 0x0FB4 */ dColliderLinkedList mCollider;
/* 0x0FC0 */ STATE_MGR_DECLARE(dAcESkytail_c);
/* 0x0FFC */ callbackBody_c mBodyTransform;
/* 0x10E4 */ callbackAntenna_c mAntennaTransform[2];
/* 0x1234 */ mMtx_c field_0x1234;
/* 0x1264 */ mVec3_c field_0x1264;
/* 0x1270 */ mVec3_c field_0x1270;
/* 0x127C */ mVec3_c field_0x127C;
/* 0x1288 */ mVec3_c field_0x1288;
/* 0x1294 */ mVec3_c field_0x1294;
/* 0x12A0 */ mVec3_c field_0x12A0;
/* 0x12AC */ mVec3_c field_0x12AC;
/* 0x12B8 */ mVec3_c field_0x12B8;
/* 0x12C4 */ mVec3_c mBirdPosition;
/* 0x12D0 */ mVec3_c field_0x12D0;
/* 0x12DC */ mVec3_c field_0x12DC;
/* 0x12E8 */ mVec3_c field_0x12E8;
/* 0x12F4 */ mVec3_c field_0x12F4;
/* 0x1300 */ mAng3_c field_0x1300;
/* 0x1306 */ mAng3_c mBirdRotation;
/* 0x130C */ f32 field_0x130C;
/* 0x1310 */ f32 field_0x1310;
/* 0x1314 */ f32 mScaleF;
/* 0x1318 */ f32 field_0x1318;
/* 0x131C */ f32 field_0x131C;
/* 0x1310 */ f32 field_0x1320;
/* 0x1324 */ f32 mDistanceToBird;
/* 0x1328 */ f32 field_0x1328;
/* 0x132C */ f32 field_0x132C;
/* 0x1330 */ f32 field_0x1330;
/* 0x1334 */ f32 field_0x1334;
/* 0x1338 */ f32 field_0x1338;
/* 0x133C */ f32 field_0x133C;
/* 0x1340 */ f32 field_0x1340;
/* 0x1344 */ f32 field_0x1344;
/* 0x1348 */ f32 field_0x1348;
/* 0x134C */ f32 field_0x134C;
/* 0x1350 */ u8 _0x1350[0x135C - 0x1350];
/* 0x135C */ s32 field_0x135C;
/* 0x1360 */ s32 field_0x1360;
/* 0x1364 */ s32 field_0x1364;
/* 0x1368 */ s16 field_0x1368;
/* 0x136A */ s16 field_0x136A;
/* 0x136C */ s16 field_0x136C;
/* 0x136E */ s16 field_0x136E;
/* 0x1370 */ s16 field_0x1370;
/* 0x1372 */ s16 field_0x1372;
/* 0x1376 */ s16 field_0x1374;
/* 0x1376 */ s16 field_0x1376;
/* 0x1378 */ s16 field_0x1378;
/* 0x137A */ s16 field_0x137A;
/* 0x137C */ s16 field_0x137C;
/* 0x137E */ s16 field_0x137E;
/* 0x1380 */ s16 field_0x1380;
/* 0x1382 */ s16 field_0x1382;
/* 0x1384 */ s16 field_0x1384;
/* 0x1386 */ s16 field_0x1386;
/* 0x1388 */ s16 field_0x1388;
/* 0x1388 */ s16 field_0x138A;
/* 0x138C */ s16 field_0x138C;
/* 0x138E */ s16 field_0x138E;
/* 0x1390 */ s16 field_0x1390;
/* 0x1392 */ s16 field_0x1392;
/* 0x1394 */ s16 field_0x1394;
/* 0x1394 */ s16 field_0x1396;
/* 0x1398 */ s16 field_0x1398;
/* 0x139A */ s16 field_0x139A;
/* 0x139A */ s16 field_0x139C;
/* 0x139E */ s16 field_0x139E;
/* 0x13A0 */ s16 field_0x13A0;
/* 0x13A2 */ s16 field_0x13A2;
/* 0x13A4 */ u16 field_0x13A4[3];
/* 0x13AA */ u16 field_0x13AA;
/* 0x13AC */ u8 field_0x13AC;
/* 0x13AD */ u8 field_0x13AD;
/* 0x13AE */ u8 field_0x13AE;
/* 0x13AF */ u8 field_0x13AF;
/* 0x13B0 */ u8 field_0x13B0;
/* 0x13B1 */ u8 field_0x13B1;
/* 0x13B2 */ u8 field_0x13B2;
/* 0x13B3 */ u8 field_0x13B3;
/* 0x13B4 */ u8 field_0x13B4;
/* 0x13B5 */ u8 field_0x13B5;
/* 0x13B6 */ u8 field_0x13B6;
/* 0x13B7 */ bool field_0x13B7; // Maybe Bird has Player?
/* 0x13B8 */ u8 field_0x13B8;
};
#endif
+1 -1
View File
@@ -88,7 +88,7 @@ public:
void fn_80030700();
dAcObjBase_c *targetPlayerOrScrapper(f32 biasToScrapper);
static void fn_80030980(m3d::mdl_c &, s32, bool markDirty);
bool isWithinCameraView(f32, f32);
void fn_80030c20(u32 flags, f32, f32, f32, f32);
s32 someEnemyDamageCollisionStuffMaybe(dColliderLinkedList &list, u16 *pOutFlags);