small mdl stuff

This commit is contained in:
robojumper
2025-05-17 13:19:40 +02:00
parent c6ea169814
commit 790fc7fda3
5 changed files with 159 additions and 55 deletions
+25 -25
View File
@@ -2640,7 +2640,7 @@ fn_8005D2D0 = .text:0x8005D2D0; // type:function size:0x8
fn_8005D2E0 = .text:0x8005D2E0; // type:function size:0x34
isAnimationWaitingMaybe = .text:0x8005D320; // type:function size:0x80
fn_8005D3A0 = .text:0x8005D3A0; // type:function size:0x8
fn_8005D3B0 = .text:0x8005D3B0; // type:function size:0x30
ExecCallbackC__27daPlBaseCalcWorldCallback_cFPQ34nw4r4math5MTX34Q34nw4r3g3d6ResMdlPQ34nw4r3g3d16FuncObjCalcWorld = .text:0x8005D3B0; // type:function size:0x30
fn_8005D3E0 = .text:0x8005D3E0; // type:function size:0x28
fn_8005D410 = .text:0x8005D410; // type:function size:0x60
InitLinkItemHeap = .text:0x8005D470; // type:function size:0x58
@@ -2665,22 +2665,22 @@ ActorLink__createModelAndSetDrawPriority = .text:0x8005E820; // type:function si
createModelAndSetPriorityDraw = .text:0x8005E890; // type:function size:0x68
fn_8005E900 = .text:0x8005E900; // type:function size:0x11C
fn_8005EA20 = .text:0x8005EA20; // type:function size:0xA0
fn_8005EAC0 = .text:0x8005EAC0; // type:function size:0x274
fn_8005ED40 = .text:0x8005ED40; // type:function size:0x4
fn_8005ED50 = .text:0x8005ED50; // type:function size:0xC
fn_8005ED60 = .text:0x8005ED60; // type:function size:0x7B0
fn_8005F510 = .text:0x8005F510; // type:function size:0x4
fn_8005F520 = .text:0x8005F520; // type:function size:0x24
fn_8005F550 = .text:0x8005F550; // type:function size:0x8
fn_8005F560 = .text:0x8005F560; // type:function size:0x8
fn_8005F570 = .text:0x8005F570; // type:function size:0x8
fn_8005EAC0__19daPlayerModelBase_cFv = .text:0x8005EAC0; // type:function size:0x274
someDivingHrabbingStuff__19daPlayerModelBase_cFv = .text:0x8005ED40; // type:function size:0x4
vt_0x308__19daPlayerModelBase_cFv = .text:0x8005ED50; // type:function size:0xC
fn_8005ED60__19daPlayerModelBase_cFv = .text:0x8005ED60; // type:function size:0x7B0
vt_0x2E0__19daPlayerModelBase_cFv = .text:0x8005F510; // type:function size:0x4
vt_0x30C__19daPlayerModelBase_cFR7mVec3_c = .text:0x8005F520; // type:function size:0x24
isMPPose__19daPlayerModelBase_cFv = .text:0x8005F550; // type:function size:0x8
isOnTightRope__19daPlayerModelBase_cFv = .text:0x8005F560; // type:function size:0x8
isOnVines__19daPlayerModelBase_cFv = .text:0x8005F570; // type:function size:0x8
fn_8005F580 = .text:0x8005F580; // type:function size:0x88
fn_8005F610 = .text:0x8005F610; // type:function size:0xD4
fn_8005F6F0 = .text:0x8005F6F0; // type:function size:0x194
fn_8005F890 = .text:0x8005F890; // type:function size:0x2C0
fn_8005FB50 = .text:0x8005FB50; // type:function size:0x8
fn_8005FB60 = .text:0x8005FB60; // type:function size:0xC
fn_8005FB70 = .text:0x8005FB70; // type:function size:0x14
fn_8005F890__19daPlayerModelBase_cFv = .text:0x8005F890; // type:function size:0x2C0
vt_0x2E8__19daPlayerModelBase_cFv = .text:0x8005FB50; // type:function size:0x8
vt_0x304__19daPlayerModelBase_cCFv = .text:0x8005FB60; // type:function size:0xC
isOnClawTargetMaybe__19daPlayerModelBase_cFiR4mAngR4mAng = .text:0x8005FB70; // type:function size:0x14
fn_8005FB90 = .text:0x8005FB90; // type:function size:0x220
fn_8005FDB0 = .text:0x8005FDB0; // type:function size:0x4
fn_8005FDC0 = .text:0x8005FDC0; // type:function size:0x78
@@ -2711,8 +2711,8 @@ fn_80060D50 = .text:0x80060D50; // type:function size:0x54
fn_80060DB0 = .text:0x80060DB0; // type:function size:0x29C
fn_80061050 = .text:0x80061050; // type:function size:0x1B0
fn_80061200 = .text:0x80061200; // type:function size:0x210
fn_80061410 = .text:0x80061410; // type:function size:0x6C
fn_80061480 = .text:0x80061480; // type:function size:0x8
fn_80061410__19daPlayerModelBase_cFv = .text:0x80061410; // type:function size:0x6C
alwaysRet0__19daPlayerModelBase_cFv = .text:0x80061480; // type:function size:0x8
fn_80061490 = .text:0x80061490; // type:function size:0x1C
fn_800614B0 = .text:0x800614B0; // type:function size:0xC
fn_800614C0 = .text:0x800614C0; // type:function size:0xC
@@ -2728,15 +2728,15 @@ ActorLink__getCenterTranslation = .text:0x80061560; // type:function size:0x8
fn_80061570 = .text:0x80061570; // type:function size:0x8
__dt__19daPlayerModelBase_cFv = .text:0x80061580; // type:function size:0x254
__dt__16daPlBaseAnmChr_cFv = .text:0x800617E0; // type:function size:0x58
fn_80061840 = .text:0x80061840; // type:function size:0x40
fn_80061880 = .text:0x80061880; // type:function size:0x40
fn_800618C0 = .text:0x800618C0; // type:function size:0x40
fn_80061900 = .text:0x80061900; // type:function size:0x58
fn_80061960 = .text:0x80061960; // type:function size:0x58
fn_800619C0 = .text:0x800619C0; // type:function size:0x6C
fn_80061A30 = .text:0x80061A30; // type:function size:0x58
fn_80061A90 = .text:0x80061A90; // type:function size:0x4
fn_80061AA0 = .text:0x80061AA0; // type:function size:0x4
__dt__24daPlBaseScnObjCallback_cFv = .text:0x80061840; // type:function size:0x40
__dt__27daPlBaseCalcWorldCallback_cFv = .text:0x80061880; // type:function size:0x40
__dt__Q34nw4r3g3d18ICalcWorldCallbackFv = .text:0x800618C0; // type:function size:0x40
__dt__19daPlBaseCallback2_cFv = .text:0x80061900; // type:function size:0x58
__dt__19daPlBaseCallback1_cFv = .text:0x80061960; // type:function size:0x58
__dt__13daPlBaseMdl_cFv = .text:0x800619C0; // type:function size:0x6C
__dt__21daPlBaseMdlCallback_cFv = .text:0x80061A30; // type:function size:0x58
ExecCallbackB__Q34nw4r3g3d18ICalcWorldCallbackFPQ34nw4r3g3d13WorldMtxManipQ34nw4r3g3d6ResMdlPQ34nw4r3g3d16FuncObjCalcWorld = .text:0x80061A90; // type:function size:0x4
ExecCallbackA__Q34nw4r3g3d18ICalcWorldCallbackFPQ34nw4r3g3d12ChrAnmResultQ34nw4r3g3d6ResMdlPQ34nw4r3g3d16FuncObjCalcWorld = .text:0x80061AA0; // type:function size:0x4
dPlayerModel__sinit = .text:0x80061AB0; // type:function size:0x5C
computeChecksumInner__FPvUl = .text:0x80061B10; // type:function size:0x88
computeChecksum__FPvUl = .text:0x80061BA0; // type:function size:0x34
+83 -27
View File
@@ -49,10 +49,16 @@ public:
virtual ~daPlBase_c() {}
};
class daPlBaseCallback1_c : m3d::callback_c {};
class daPlBaseCallback2_c : m3d::callback_c {};
class daPlBaseCallback1_c : m3d::callback_c {
u8 _0x__[4];
};
class daPlBaseCallback2_c : m3d::callback_c {
u8 _0x__[4];
};
class daPlBaseMdlCallback_c : m3d::mdl_c::mdlCallback_c {};
class daPlBaseMdlCallback_c : m3d::mdl_c::mdlCallback_c {
u8 _0x__[8];
};
class daPlBaseAnmChr_c : m3d::anmChr_c {
public:
@@ -74,22 +80,14 @@ private:
class daPlBaseCalcWorldCallback_c : public nw4r::g3d::ICalcWorldCallback {
public:
virtual void ExecCallbackA(
nw4r::g3d::ChrAnmResult *pResult, nw4r::g3d::ResMdl mdl,
nw4r::g3d::FuncObjCalcWorld *pFuncObj
) override; // at 0xC
virtual void ExecCallbackB(
nw4r::g3d::WorldMtxManip *pManip, nw4r::g3d::ResMdl mdl,
nw4r::g3d::FuncObjCalcWorld *pFuncObj
) override; // at 0x10
virtual void ExecCallbackC(
nw4r::math::MTX34 *pMtxArray, nw4r::g3d::ResMdl mdl,
nw4r::g3d::FuncObjCalcWorld *pFuncObj
) override; // at 0x14
};
class daPlBaseScnObjCallback_c : public nw4r::g3d::IScnObjCallback {};
class daPlBaseScnObjCallback_c : public nw4r::g3d::IScnObjCallback {
u8 _0x__[0x10];
};
class UnkPlayerClass {
public:
@@ -654,19 +652,72 @@ public:
FLG0_HANGING_ITEM | FLG0_HANGING_LEDGE | FLG0_UNK_0x10 | FLG0_IN_AIR,
};
// overriddes omitted
/* vt 0x2E0 */ virtual void vt_0x2E0();
/* vt 0x2E4 */ virtual void someDivingHrabbingStuff();
/* vt 0x2E8 */ virtual void vt_0x2E8();
/* vt 0x2EC */ virtual void isOnClawTargetMaybe();
/* vt 0x2F0 */ virtual void isMPPose();
/* vt 0x2F4 */ virtual void isOnTightRope();
/* vt 0x2F8 */ virtual void isOnVines();
/* vt 0x2FC */ virtual void alwaysRet0();
/* vt 0x300 */ virtual void canBlockAttack();
/* vt 0x304 */ virtual void vt_0x304();
/* vt 0x308 */ virtual void vt_0x308();
/* vt 0x30C */ virtual void vt_0x30C();
void fn_8005ED60();
void fn_8005EAC0();
void fn_8005F890();
void fn_80061410();
/* vt 0x114 */ virtual void somethingWithCarriedActorFlags() override {
// TODO
}
/* vt 0x118 */ virtual dAcObjBase_c *getCurrentCarriedActor() override {
// TODO
return nullptr;
}
/* vt 0x0E4 */ virtual const mVec3_c &getCenterTranslation() const override {
// TODO
return mVec3_c::Zero;
}
/* vt 0x0E8 */ virtual const mVec3_c &vt_0x0E8() const override {
return field_0x12F4;
}
/* vt 0x0EC */ virtual const mVec3_c &vt_0x0EC() const override {
// TODO
return mVec3_c::Zero;
}
/* vt 0x0F0 */ virtual const mVec3_c &vt_0x0F0() const override {
// TODO
return mVec3_c::Zero;
}
/* vt 0x0F4 */ virtual const mVec3_c &vt_0x0F4() const override {
// TODO
return mVec3_c::Zero;
}
/* vt 0x2E0 */ virtual void vt_0x2E0() {}
/* vt 0x2E4 */ virtual void someDivingHrabbingStuff() {}
/* vt 0x2E8 */ virtual bool vt_0x2E8() {
return true;
}
/* vt 0x2EC */ virtual void isOnClawTargetMaybe(UNKWORD, mAng &a1, mAng &a2) {
a1.setR(0);
a2.setR(0);
}
/* vt 0x2F0 */ virtual bool isMPPose() {
return false;
}
/* vt 0x2F4 */ virtual bool isOnTightRope() {
return false;
}
/* vt 0x2F8 */ virtual bool isOnVines() {
return false;
}
/* vt 0x2FC */ virtual bool alwaysRet0() {
return 0;
}
/* vt 0x300 */ virtual bool canBlockAttack() {
return false;
}
/* vt 0x304 */ virtual const mVec3_c &vt_0x304() const {
return mVec3_c::Zero;
}
/* vt 0x308 */ virtual mAng vt_0x308() {
return 0;
}
/* vt 0x30C */ virtual void vt_0x30C(mVec3_c &res) {
res = mVec3_c::Ex;
}
protected:
/* 0x370 */ mHeapAllocator_c mModelAllocator;
@@ -685,8 +736,11 @@ protected:
/* 0x46C */ daPlBaseCallback2_c mCallback2;
/* 0x474 */ m3d::smdl_c mFaceMdl;
/* 0x490 */ m3d::anmChr_c mFaceAnmChr;
/* 0x4C8 */ u8 _0x4C8[4];
/* 0x4CC */ m3d::anmTexPat_c mFaceTexPat;
/* 0x4F8 */ u8 _0x4F8[4];
/* 0x4FC */ m3d::anmTexSrt_c mFaceTexSrt;
/* 0x528 */ u8 _0x528[4];
/* 0x52C */ m3d::anmChr_c mHeadAnmChr;
/* 0x564 */ m3d::smdl_c mHandsMdl;
/* 0x580 */ daPlBaseCalcWorldCallback_c mCalcWorldCallback;
@@ -709,9 +763,11 @@ protected:
/* 0x878 */ dCcD_Cyl mCcCyls[3];
/* 0xC68 */ dCcD_Cps mCcCpss[3];
/* 0x10B8 */ dCcD_Cyl mCcCyl;
/* 0x1208 */ u8 _0x1208[0xA4];
/* 0x12AC */ mVec3_c mTranslationHand[2];
/* 0x12C4 */ mVec3_c mTranslationWeapon[2];
/* 0x12DC */ mVec3_c mToeTranslation[2];
/* 0x12F4 */ mVec3_c field_0x12F4;
/* 0x1300 */ UnkPlayerClass mUnk_0x1300[4];
/* 0x1340 */ mQuat_c mQuat1;
/* 0x1350 */ mQuat_c mQuat2;
+4
View File
@@ -36,6 +36,10 @@ struct mAng {
return &mVal;
}
void setR(const u32 &v) {
mVal = v;
}
mAng operator-() {
return mAng(-mVal);
}
+3 -3
View File
@@ -43,13 +43,13 @@ public:
virtual ~ICalcWorldCallback() {}; // at 0x8
virtual void ExecCallbackA(ChrAnmResult *pResult, ResMdl mdl,
FuncObjCalcWorld *pFuncObj) = 0; // at 0xC
FuncObjCalcWorld *pFuncObj) {}; // at 0xC
virtual void ExecCallbackB(WorldMtxManip *pManip, ResMdl mdl,
FuncObjCalcWorld *pFuncObj) = 0; // at 0x10
FuncObjCalcWorld *pFuncObj) {}; // at 0x10
virtual void ExecCallbackC(math::MTX34 *pMtxArray, ResMdl mdl,
FuncObjCalcWorld *pFuncObj) = 0; // at 0x14
FuncObjCalcWorld *pFuncObj) {}; // at 0x14
};
/******************************************************************************
+44
View File
@@ -1,4 +1,48 @@
#include "d/a/d_a_player.h"
#include "m/m_vec.h"
// TODO: This file contains the vtable and a bunch of weak functions
// for daPlayerModelBase_c. How do we generate the vtable here though?
// All virtual methods of daPlayerModelBase_c seem to be inline, so
// there's not much opportunity to get the vtable to be emitted here
// except for dtor hacks...
void daPlBaseCalcWorldCallback_c::ExecCallbackC(
nw4r::math::MTX34 *pMtxArray, nw4r::g3d::ResMdl mdl,
nw4r::g3d::FuncObjCalcWorld *pFuncObj
) {
}
void daPlayerModelBase_c::fn_8005EAC0() {
// Just getting weak functions to appear here
someDivingHrabbingStuff();
vt_0x308();
}
void daPlayerModelBase_c::fn_8005ED60() {
// Just getting weak functions to appear here
vt_0x2E0();
vt_0x308();
mVec3_c v;
vt_0x30C(v);
isMPPose();
isOnTightRope();
isOnVines();
}
void daPlayerModelBase_c::fn_8005F890() {
// Just getting weak functions to appear here
vt_0x2E8();
vt_0x304();
mAng a1, a2;
isOnClawTargetMaybe(0, a1, a2);
}
void daPlayerModelBase_c::fn_80061410() {
// Just getting weak functions to appear here
alwaysRet0();
}
void dummy_triggerDtor(daPlayerModelBase_c *pl) {
delete pl;