This commit is contained in:
Jcw87 2023-10-10 13:40:37 -07:00 committed by GitHub
parent a64921a519
commit 3fa422caac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 509 additions and 235 deletions

View File

@ -1,30 +0,0 @@
lbl_8000E7C0:
/* 8000E7C0 94 21 FF E0 */ stwu r1, -0x20(r1)
/* 8000E7C4 7C 08 02 A6 */ mflr r0
/* 8000E7C8 90 01 00 24 */ stw r0, 0x24(r1)
/* 8000E7CC 39 61 00 20 */ addi r11, r1, 0x20
/* 8000E7D0 48 35 3A 05 */ bl _savegpr_27
/* 8000E7D4 7C 7B 1B 78 */ mr r27, r3
/* 8000E7D8 7C 9C 23 78 */ mr r28, r4
/* 8000E7DC 3C 60 80 43 */ lis r3, j3dSys@ha /* 0x80434AC8@ha */
/* 8000E7E0 3B E3 4A C8 */ addi r31, r3, j3dSys@l /* 0x80434AC8@l */
/* 8000E7E4 83 DF 00 48 */ lwz r30, 0x48(r31)
/* 8000E7E8 83 BF 00 4C */ lwz r29, 0x4c(r31)
/* 8000E7EC 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */
/* 8000E7F0 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */
/* 8000E7F4 80 03 5F A8 */ lwz r0, 0x5fa8(r3)
/* 8000E7F8 90 1F 00 48 */ stw r0, 0x48(r31)
/* 8000E7FC 90 1F 00 4C */ stw r0, 0x4c(r31)
/* 8000E800 80 7B 00 00 */ lwz r3, 0(r27)
/* 8000E804 4B FF F5 61 */ bl mDoExt_modelEntryDL__FP8J3DModel
/* 8000E808 7F 63 DB 78 */ mr r3, r27
/* 8000E80C 7F 84 E3 78 */ mr r4, r28
/* 8000E810 4B FF FE B9 */ bl entryJoint__21mDoExt_invisibleModelFP4cXyz
/* 8000E814 93 DF 00 48 */ stw r30, 0x48(r31)
/* 8000E818 93 BF 00 4C */ stw r29, 0x4c(r31)
/* 8000E81C 39 61 00 20 */ addi r11, r1, 0x20
/* 8000E820 48 35 3A 01 */ bl _restgpr_27
/* 8000E824 80 01 00 24 */ lwz r0, 0x24(r1)
/* 8000E828 7C 08 03 A6 */ mtlr r0
/* 8000E82C 38 21 00 20 */ addi r1, r1, 0x20
/* 8000E830 4E 80 00 20 */ blr

View File

@ -1,69 +0,0 @@
lbl_8000E6C8:
/* 8000E6C8 94 21 FF C0 */ stwu r1, -0x40(r1)
/* 8000E6CC 7C 08 02 A6 */ mflr r0
/* 8000E6D0 90 01 00 44 */ stw r0, 0x44(r1)
/* 8000E6D4 39 61 00 40 */ addi r11, r1, 0x40
/* 8000E6D8 48 35 3A F5 */ bl _savegpr_25
/* 8000E6DC 7C 79 1B 78 */ mr r25, r3
/* 8000E6E0 7C 9A 23 79 */ or. r26, r4, r4
/* 8000E6E4 80 63 00 00 */ lwz r3, 0(r3)
/* 8000E6E8 83 A3 00 04 */ lwz r29, 4(r3)
/* 8000E6EC 83 F9 00 04 */ lwz r31, 4(r25)
/* 8000E6F0 40 82 00 78 */ bne lbl_8000E768
/* 8000E6F4 3B 60 00 00 */ li r27, 0
/* 8000E6F8 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */
/* 8000E6FC 3B C3 61 C0 */ addi r30, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */
/* 8000E700 3B 9E 5F 64 */ addi r28, r30, 0x5f64
/* 8000E704 48 00 00 50 */ b lbl_8000E754
lbl_8000E708:
/* 8000E708 80 79 00 00 */ lwz r3, 0(r25)
/* 8000E70C 80 63 00 84 */ lwz r3, 0x84(r3)
/* 8000E710 80 63 00 0C */ lwz r3, 0xc(r3)
/* 8000E714 57 60 04 3E */ clrlwi r0, r27, 0x10
/* 8000E718 1C 00 00 30 */ mulli r0, r0, 0x30
/* 8000E71C 7C 63 02 14 */ add r3, r3, r0
/* 8000E720 C0 43 00 2C */ lfs f2, 0x2c(r3)
/* 8000E724 C0 23 00 1C */ lfs f1, 0x1c(r3)
/* 8000E728 C0 03 00 0C */ lfs f0, 0xc(r3)
/* 8000E72C D0 01 00 08 */ stfs f0, 8(r1)
/* 8000E730 D0 21 00 0C */ stfs f1, 0xc(r1)
/* 8000E734 D0 41 00 10 */ stfs f2, 0x10(r1)
/* 8000E738 7F 83 E3 78 */ mr r3, r28
/* 8000E73C 80 9E 5F A8 */ lwz r4, 0x5fa8(r30)
/* 8000E740 7F E5 FB 78 */ mr r5, r31
/* 8000E744 38 C1 00 08 */ addi r6, r1, 8
/* 8000E748 48 04 7E A5 */ bl entryZSortXluDrawList__12dDlst_list_cFP13J3DDrawBufferP9J3DPacketR4cXyz
/* 8000E74C 3B FF 00 18 */ addi r31, r31, 0x18
/* 8000E750 3B 7B 00 01 */ addi r27, r27, 1
lbl_8000E754:
/* 8000E754 57 63 04 3E */ clrlwi r3, r27, 0x10
/* 8000E758 A0 1D 00 2C */ lhz r0, 0x2c(r29)
/* 8000E75C 7C 03 00 40 */ cmplw r3, r0
/* 8000E760 41 80 FF A8 */ blt lbl_8000E708
/* 8000E764 48 00 00 44 */ b lbl_8000E7A8
lbl_8000E768:
/* 8000E768 3B 60 00 00 */ li r27, 0
/* 8000E76C 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */
/* 8000E770 3B C3 61 C0 */ addi r30, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */
/* 8000E774 3B 9E 5F 64 */ addi r28, r30, 0x5f64
/* 8000E778 48 00 00 20 */ b lbl_8000E798
lbl_8000E77C:
/* 8000E77C 7F 83 E3 78 */ mr r3, r28
/* 8000E780 80 9E 5F A8 */ lwz r4, 0x5fa8(r30)
/* 8000E784 7F E5 FB 78 */ mr r5, r31
/* 8000E788 7F 46 D3 78 */ mr r6, r26
/* 8000E78C 48 04 7E 61 */ bl entryZSortXluDrawList__12dDlst_list_cFP13J3DDrawBufferP9J3DPacketR4cXyz
/* 8000E790 3B FF 00 18 */ addi r31, r31, 0x18
/* 8000E794 3B 7B 00 01 */ addi r27, r27, 1
lbl_8000E798:
/* 8000E798 57 63 04 3E */ clrlwi r3, r27, 0x10
/* 8000E79C A0 1D 00 2C */ lhz r0, 0x2c(r29)
/* 8000E7A0 7C 03 00 40 */ cmplw r3, r0
/* 8000E7A4 41 80 FF D8 */ blt lbl_8000E77C
lbl_8000E7A8:
/* 8000E7A8 39 61 00 40 */ addi r11, r1, 0x40
/* 8000E7AC 48 35 3A 6D */ bl _restgpr_25
/* 8000E7B0 80 01 00 44 */ lwz r0, 0x44(r1)
/* 8000E7B4 7C 08 03 A6 */ mtlr r0
/* 8000E7B8 38 21 00 40 */ addi r1, r1, 0x40
/* 8000E7BC 4E 80 00 20 */ blr

View File

@ -1,50 +0,0 @@
lbl_8000FC4C:
/* 8000FC4C 94 21 FF B0 */ stwu r1, -0x50(r1)
/* 8000FC50 7C 08 02 A6 */ mflr r0
/* 8000FC54 90 01 00 54 */ stw r0, 0x54(r1)
/* 8000FC58 DB E1 00 48 */ stfd f31, 0x48(r1)
/* 8000FC5C 39 61 00 48 */ addi r11, r1, 0x48
/* 8000FC60 48 35 25 59 */ bl _savegpr_20
/* 8000FC64 7C 74 1B 78 */ mr r20, r3
/* 8000FC68 7C 95 23 78 */ mr r21, r4
/* 8000FC6C 7C B6 2B 78 */ mr r22, r5
/* 8000FC70 7C D7 33 78 */ mr r23, r6
/* 8000FC74 7C F8 3B 78 */ mr r24, r7
/* 8000FC78 7D 19 43 78 */ mr r25, r8
/* 8000FC7C FF E0 08 90 */ fmr f31, f1
/* 8000FC80 7D 3A 4B 78 */ mr r26, r9
/* 8000FC84 7D 5B 53 78 */ mr r27, r10
/* 8000FC88 83 81 00 58 */ lwz r28, 0x58(r1)
/* 8000FC8C 83 A1 00 5C */ lwz r29, 0x5c(r1)
/* 8000FC90 83 C1 00 60 */ lwz r30, 0x60(r1)
/* 8000FC94 83 E1 00 64 */ lwz r31, 0x64(r1)
/* 8000FC98 4B FF FC B9 */ bl __ct__13mDoExt_morf_cFv
/* 8000FC9C 3C 60 80 3A */ lis r3, __vt__14mDoExt_McaMorf@ha /* 0x803A32FC@ha */
/* 8000FCA0 38 03 32 FC */ addi r0, r3, __vt__14mDoExt_McaMorf@l /* 0x803A32FC@l */
/* 8000FCA4 90 14 00 00 */ stw r0, 0(r20)
/* 8000FCA8 38 00 00 00 */ li r0, 0
/* 8000FCAC 98 14 00 50 */ stb r0, 0x50(r20)
/* 8000FCB0 98 14 00 51 */ stb r0, 0x51(r20)
/* 8000FCB4 98 14 00 52 */ stb r0, 0x52(r20)
/* 8000FCB8 93 81 00 08 */ stw r28, 8(r1)
/* 8000FCBC 93 A1 00 0C */ stw r29, 0xc(r1)
/* 8000FCC0 93 C1 00 10 */ stw r30, 0x10(r1)
/* 8000FCC4 93 E1 00 14 */ stw r31, 0x14(r1)
/* 8000FCC8 7E 83 A3 78 */ mr r3, r20
/* 8000FCCC 7E A4 AB 78 */ mr r4, r21
/* 8000FCD0 7E C5 B3 78 */ mr r5, r22
/* 8000FCD4 7E E6 BB 78 */ mr r6, r23
/* 8000FCD8 7F 07 C3 78 */ mr r7, r24
/* 8000FCDC 7F 28 CB 78 */ mr r8, r25
/* 8000FCE0 FC 20 F8 90 */ fmr f1, f31
/* 8000FCE4 7F 49 D3 78 */ mr r9, r26
/* 8000FCE8 7F 6A DB 78 */ mr r10, r27
/* 8000FCEC 48 00 00 A9 */ bl create__14mDoExt_McaMorfFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiiPvUlUl
/* 8000FCF0 7E 83 A3 78 */ mr r3, r20
/* 8000FCF4 CB E1 00 48 */ lfd f31, 0x48(r1)
/* 8000FCF8 39 61 00 48 */ addi r11, r1, 0x48
/* 8000FCFC 48 35 25 09 */ bl _restgpr_20
/* 8000FD00 80 01 00 54 */ lwz r0, 0x54(r1)
/* 8000FD04 7C 08 03 A6 */ mtlr r0
/* 8000FD08 38 21 00 50 */ addi r1, r1, 0x50
/* 8000FD0C 4E 80 00 20 */ blr

View File

@ -604,22 +604,23 @@ public:
void update();
virtual ~J3DFrameCtrl() {}
f32 getRate() const { return mRate; }
f32 getFrame() const { return mFrame; }
s16 getEnd() const { return mEnd; }
s16 getStart() const { return mStart; }
u8 getAttribute() const { return mAttribute; }
u8 getState() const { return mState; }
void setAttribute(u8 attr) { mAttribute = attr; }
void setEnd(s16 end) { mEnd = end; }
void setRate(f32 rate) { mRate = rate; }
u8 getState() const { return mState; }
bool checkState(u8 state) const { return mState & state; }
s16 getStart() const { return mStart; }
void setStart(s16 start) {
mStart = start;
mFrame = start;
}
void setFrame(f32 frame) { mFrame = frame; }
s16 getEnd() const { return mEnd; }
void setEnd(s16 end) { mEnd = end; }
s32 getLoop() { return mLoop; }
void setLoop(s16 loop) { mLoop = loop; }
bool checkState(u8 state) const { return mState & state; }
f32 getRate() const { return mRate; }
void setRate(f32 rate) { mRate = rate; }
f32 getFrame() const { return mFrame; }
void setFrame(f32 frame) { mFrame = frame; }
private:
/* 0x04 */ u8 mAttribute;

View File

@ -14,12 +14,12 @@ public:
/* 8000D948 */ virtual ~J3DMtxCalc();
/* 80014E90 */ virtual void setAnmTransform(J3DAnmTransform*);
/* 80014E9C */ virtual bool getAnmTransform();
/* 80014E9C */ virtual J3DAnmTransform* getAnmTransform();
/* 80014E8C */ virtual void setAnmTransform(u8, J3DAnmTransform*);
/* 80014E94 */ virtual bool getAnmTransform(u8);
/* 80014E94 */ virtual J3DAnmTransform* getAnmTransform(u8);
/* 80014EA4 */ virtual void setWeight(u8, f32);
/* 80014EA8 */ virtual void getWeight(u8) const;
virtual void init(Vec const& param_0, Mtx*) = 0;
virtual void init(const Vec& param_0, const Mtx&) = 0;
virtual void calc() = 0;
static J3DMtxBuffer* getMtxBuffer() { return mMtxBuffer; }
@ -36,11 +36,11 @@ public:
};
template <class A, class B>
class J3DMtxCalcNoAnm : public J3DMtxCalcNoAnmBase, public A, public B {
class J3DMtxCalcNoAnm : public J3DMtxCalcNoAnmBase {
public:
J3DMtxCalcNoAnm() {}
virtual ~J3DMtxCalcNoAnm() {}
virtual void init(Vec const& param_0, f32 const (&param_1)[3][4]);
virtual void init(const Vec& param_0, const Mtx& param_1);
virtual void calc();
};
@ -93,11 +93,11 @@ private:
}; // Size: 0x5C
struct J3DMtxCalcJ3DSysInitMaya {
/* 8032ECAC */ static void init(Vec const&, f32 const (&)[3][4]);
/* 8032ECAC */ static void init(const Vec&, const Mtx& param_1);
};
struct J3DMtxCalcJ3DSysInitBasic {
/* 8032EC28 */ static void init(Vec const&, f32 const (&)[3][4]);
/* 8032EC28 */ static void init(const Vec&, const Mtx& param_1);
};
struct J3DMtxCalcCalcTransformSoftimage {

View File

@ -81,6 +81,7 @@ public:
J3DMatPacket* getMatPacket(u16 idx) const { return &mMatPacket[idx]; }
J3DShapePacket* getShapePacket(u16 idx) const { return &mShapePacket[idx]; }
J3DMtxBuffer* getMtxBuffer() const { return mMtxBuffer; }
void setScaleFlag(int idx, u8 flag) { mMtxBuffer->setScaleFlag(idx, flag); }
Mtx33* getBumpMtxPtr(int idx) const { return mMtxBuffer->getBumpMtxPtr(idx); }
Mtx33* getNrmMtxPtr() const { return mMtxBuffer->getNrmMtxPtr(); }
Mtx* getDrawMtxPtr() const { return mMtxBuffer->getDrawMtxPtr(); }

View File

@ -99,6 +99,9 @@ struct J3DSys {
J3DMatPacket* getMatPacket() { return mMatPacket; }
void setMaterialMode(u32 mode) { mMaterialMode = mode; }
void setCurrentMtxCalc(J3DMtxCalc * pCalc) { mCurrentMtxCalc = pCalc; }
J3DMtxCalc * getCurrentMtxCalc() const { return mCurrentMtxCalc; }
void setTexture(J3DTexture* pTex) { mTexture = pTex; }
J3DTexture* getTexture() { return mTexture; }

View File

@ -5,6 +5,7 @@
void JMAMTXApplyScale(const Mtx, Mtx, f32, f32, f32);
void JMAEulerToQuat(s16 param_0, s16 param_1, s16 param_2, Quaternion* param_3);
void JMAQuatLerp(const Quaternion*, const Quaternion*, f32, Quaternion*);
inline f32 JMAFastReciprocal(f32 value) {
return __fres(value);

View File

@ -60,7 +60,9 @@ public:
/* 802BEBDC */ virtual void init(Vec*, u8);
/* 0x20 */ void* field_0x20; // JAUSoundAnimation*
void stopAnime() { animation_ = NULL; }
/* 0x20 */ void* animation_; // JAUSoundAnimation*
/* 0x24 */ int field_0x24;
/* 0x28 */ float field_0x28;
/* 0x2C */ float field_0x2c;
@ -68,7 +70,7 @@ public:
/* 0x34 */ int field_0x34;
/* 0x38 */ int field_0x38;
/* 0x3C */ int field_0x3c;
/* 0x40 */ int field_0x40;
/* 0x40 */ int curSoundIndex_;
/* 0x44 */ bool field_0x44;
};

View File

@ -3552,6 +3552,11 @@ inline void dComIfGd_setListIndScreen() {
g_dComIfG_gameInfo.drawlist.setXluListP0();
}
inline void dComIfGd_setListZxlu() {
g_dComIfG_gameInfo.drawlist.setOpaListZxlu();
g_dComIfG_gameInfo.drawlist.setXluListZxlu();
}
inline J3DDrawBuffer* dComIfGd_getOpaListBG() {
return g_dComIfG_gameInfo.drawlist.getOpaListBG();
}

View File

@ -333,6 +333,8 @@ public:
void setXluList2DScreen() { setXluDrawList(mDrawBuffers[DB_LIST_2D_SCREEN]); }
void setXluListP0() { setXluDrawList(mDrawBuffers[DB_LIST_P0]); }
void setOpaListP0() { setOpaDrawList(mDrawBuffers[DB_LIST_P0]); }
void setOpaListZxlu() { setOpaDrawList(mDrawBuffers[DB_LIST_Z_XLU]); }
void setXluListZxlu() { setXluDrawList(mDrawBuffers[DB_LIST_Z_XLU]); }
void peekZdata() { mPeekZ.peekData(); }
void entryZSortListZxlu(J3DPacket* i_packet, cXyz& param_1) {

View File

@ -247,18 +247,22 @@ public:
/* 0x4 */ mDoExt_invJntPacket* mpPackets;
};
class mDoExt_zelAnime : public Z2SoundObjAnime {};
class mDoExt_zelAnime : public Z2SoundObjAnime {
public:
void* field_0x48;
};
class mDoExt_McaMorfCallBack1_c {
public:
virtual void execute(u16, J3DTransformInfo*) = 0;
};
class mDoExt_McaMorfCallBack2_c {};
class mDoExt_McaMorfCallBack2_c {
public:
virtual void execute(u16) = 0;
};
class mDoExt_morf_c {
// : public J3DMtxCalcNoAnm<J3DMtxCalcCalcTransformMaya, J3DMtxCalcJ3DSysInitMaya>
// inheritance causing issues, fix later
class mDoExt_morf_c : public J3DMtxCalcNoAnm<J3DMtxCalcCalcTransformMaya, J3DMtxCalcJ3DSysInitMaya> {
public:
/* 8000F950 */ mDoExt_morf_c();
/* 8000FB7C */ void setMorf(f32 i_morf);
@ -266,20 +270,26 @@ public:
/* 8000FAE8 */ virtual ~mDoExt_morf_c();
void setPlaySpeed(f32 speed) { mFrameCtrl.setRate(speed); }
void setFrame(f32 frame) { mFrameCtrl.setFrame((s16)frame); }
f32 getPlaySpeed() { return mFrameCtrl.getRate(); }
f32 getFrame() { return mFrameCtrl.getFrame(); }
u8 getPlayMode() { return mFrameCtrl.getAttribute(); }
bool isLoop() { return mFrameCtrl.checkState(2); }
f32 getEndFrame() { return mFrameCtrl.getEnd(); }
BOOL checkFrame(f32 frame) { return mFrameCtrl.checkPass(frame); }
J3DAnmTransform* getAnm() { return mpAnm; }
void changeAnm(J3DAnmTransform* anm) { mpAnm = anm; }
u8 getPlayMode() { return mFrameCtrl.getAttribute(); }
void setPlayMode(int mode) { mFrameCtrl.setAttribute(mode); }
bool isStop() {
return mFrameCtrl.checkState(1) || mFrameCtrl.getRate() == 0.0f;
}
bool isLoop() { return mFrameCtrl.checkState(2); }
f32 getStartFrame() { return mFrameCtrl.getStart(); }
void setStartFrame(f32 frame) { mFrameCtrl.setStart(frame); }
f32 getEndFrame() { return mFrameCtrl.getEnd(); }
void setEndFrame(f32 frame) { mFrameCtrl.setEnd(frame); }
f32 getLoopFrame() { return mFrameCtrl.getLoop(); }
void setLoopFrame(f32 frame) { mFrameCtrl.setLoop(frame); }
f32 getPlaySpeed() { return mFrameCtrl.getRate(); }
void setPlaySpeed(f32 speed) { mFrameCtrl.setRate(speed); }
f32 getFrame() { return mFrameCtrl.getFrame(); }
void setFrame(f32 frame) { mFrameCtrl.setFrame((s16)frame); }
void setFrameF(f32 frame) { mFrameCtrl.setFrame(frame); }
BOOL checkFrame(f32 frame) { return mFrameCtrl.checkPass(frame); }
/* 0x04 */ J3DModel* mpModel;
/* 0x08 */ J3DAnmTransform* mpAnm;
@ -329,7 +339,7 @@ public:
/* 8000FC4C */ mDoExt_McaMorf(J3DModelData*, mDoExt_McaMorfCallBack1_c*,
mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, int,
int, void*, u32, u32);
/* 8000FD94 */ void create(J3DModelData*, mDoExt_McaMorfCallBack1_c*,
/* 8000FD94 */ int create(J3DModelData*, mDoExt_McaMorfCallBack1_c*,
mDoExt_McaMorfCallBack2_c*, J3DAnmTransform*, int, f32, int, int,
int, void*, u32, u32);
/* 8001037C */ void setAnm(J3DAnmTransform*, int, f32, f32, f32, f32, void*);
@ -386,9 +396,12 @@ public:
/* 8000F848 */ void initOldFrameMorf(f32, u16, u16);
/* 8000F8CC */ void decOldFrameMorfCounter();
bool getOldFrameFlg() { return mOldFrameFlg; }
void onOldFrameFlg() { mOldFrameFlg = true; }
f32 getOldFrameRate() { return mOldFrameRate; }
J3DTransformInfo* getOldFrameTransInfo(int i) { return &mOldFrameTransInfo[i]; }
u16 getOldFrameStartJoint() { return mOldFrameStartJoint; }
u16 getOldFrameEndJoint() { return mOldFrameEndJoint; }
Quaternion* getOldFrameQuaternion(int i_no) { return &mOldFrameQuaternion[i_no]; }
private:
@ -404,23 +417,39 @@ private:
/* 0x20 */ Quaternion* mOldFrameQuaternion;
}; // Size: 0x24
struct mDoExt_MtxCalcAnmBlendTblOld
: public J3DMtxCalcNoAnm<J3DMtxCalcCalcTransformMaya, J3DMtxCalcJ3DSysInitMaya> {
/* 80014EB0 */ virtual ~mDoExt_MtxCalcAnmBlendTblOld();
/* 8000F4B0 */ virtual void calc();
struct mDoExt_MtxCalcAnmBlendTbl : public J3DMtxCalcNoAnm<J3DMtxCalcCalcTransformMaya, J3DMtxCalcJ3DSysInitMaya> {
mDoExt_MtxCalcAnmBlendTbl(int num, mDoExt_AnmRatioPack* anmRatio) {
mNum = num;
mAnmRatio = anmRatio;
for (int i = 0; i < mNum; i++) {
if (!mAnmRatio[i].getAnmTransform()) {
mAnmRatio[i].setRatio(0.0f);
}
}
}
/* 0x4 */ int mNum;
/* 0x8 */ mDoExt_AnmRatioPack* mAnmRatio;
}; // Size: 0xC
struct mDoExt_MtxCalcAnmBlendTbl : public mDoExt_MtxCalcAnmBlendTblOld {
/* 800D00BC */ J3DAnmTransform* getAnm(int);
/* 80014F3C */ virtual ~mDoExt_MtxCalcAnmBlendTbl();
/* 8000F26C */ virtual void calc();
/* 0x4 */ int mNum;
/* 0x8 */ mDoExt_AnmRatioPack* mAnmRatio;
}; // Size: 0x0C
STATIC_ASSERT(sizeof(mDoExt_MtxCalcAnmBlendTbl) == 0x0C);
struct mDoExt_MtxCalcAnmBlendTblOld : public mDoExt_MtxCalcAnmBlendTbl {
mDoExt_MtxCalcAnmBlendTblOld(mDoExt_MtxCalcOldFrame* oldFrame, int num, mDoExt_AnmRatioPack* anmRatio) : mDoExt_MtxCalcAnmBlendTbl(num, anmRatio) {
mOldFrame = oldFrame;
}
/* 80014EB0 */ virtual ~mDoExt_MtxCalcAnmBlendTblOld();
/* 8000F4B0 */ virtual void calc();
/* 0xC */ mDoExt_MtxCalcOldFrame* mOldFrame;
};
}; // Size: 0x10
STATIC_ASSERT(sizeof(mDoExt_MtxCalcAnmBlendTblOld) == 0x10);
class mDoExt_3Dline_c {
public:

View File

@ -122,7 +122,7 @@ void J3DJointTree::findImportantMtxIndex() {
/* 80325CAC-80325D1C 3205EC 0070+00 1/0 0/0 0/0 .text
* calc__12J3DJointTreeFP12J3DMtxBufferRC3VecRA3_A4_Cf */
void J3DJointTree::calc(J3DMtxBuffer* pMtxBuffer, Vec const& scale, f32 const (&mtx)[3][4]) {
getBasicMtxCalc()->init(scale, (Mtx*)mtx);
getBasicMtxCalc()->init(scale, mtx);
J3DMtxCalc::setMtxBuffer(pMtxBuffer);
J3DJoint* root = getRootNode();

View File

@ -537,7 +537,7 @@ asm Z2Creature::~Z2Creature() {
/* 802C04E8-802C0530 2BAE28 0048+00 4/2 2/2 0/0 .text deleteObject__10Z2CreatureFv */
void Z2Creature::deleteObject() {
mSoundObjAnime.field_0x20 = NULL;
mSoundObjAnime.animation_ = NULL;
mSoundObjAnime.deleteObject();
mSoundObjSimple1.deleteObject();
mSoundObjSimple2.deleteObject();

View File

@ -3094,13 +3094,13 @@ void J3DMtxCalc::setAnmTransform(J3DAnmTransform* param_0) {
}
/* 80844B94-80844B9C 00CD54 0008+00 3/0 0/0 0/0 .text getAnmTransform__10J3DMtxCalcFUc */
bool J3DMtxCalc::getAnmTransform(u8 param_0) {
return false;
J3DAnmTransform* J3DMtxCalc::getAnmTransform(u8 param_0) {
return NULL;
}
/* 80844B9C-80844BA4 00CD5C 0008+00 3/0 0/0 0/0 .text getAnmTransform__10J3DMtxCalcFv */
bool J3DMtxCalc::getAnmTransform() {
return false;
J3DAnmTransform* J3DMtxCalc::getAnmTransform() {
return NULL;
}
/* 80844BA4-80844BA8 00CD64 0004+00 3/0 0/0 0/0 .text setWeight__10J3DMtxCalcFUcf */

View File

@ -54,14 +54,35 @@ struct J3DMtxCalcNoAnm__template0 {
/* 80015084 */ void func_80015084(void* _this);
};
struct J3DMtxCalcAnmBase {
struct J3DMtxCalcAnimationAdaptorBase {
J3DMtxCalcAnimationAdaptorBase() {}
void change() {}
};
template <typename A0>
struct J3DMtxCalcAnimationAdaptorDefault : public J3DMtxCalcAnimationAdaptorBase {
J3DMtxCalcAnimationAdaptorDefault(J3DAnmTransform* param_0) {}
};
struct J3DMtxCalcAnmBase /* : public J3DMtxCalc */ {
J3DMtxCalcAnmBase(J3DAnmTransform* param_0) { mAnmTransform = param_0; }
/* 8000D8EC */ ~J3DMtxCalcAnmBase();
/* 80014FB8 */ void getAnmTransform();
/* 80014FB8 */ J3DAnmTransform* getAnmTransform();
/* 80014FC0 */ void setAnmTransform(J3DAnmTransform*);
J3DAnmTransform* mAnmTransform;
};
template <typename A0, typename B0>
struct J3DMtxCalcAnimation {};
struct J3DMtxCalcAnimation : public J3DMtxCalcAnmBase {
J3DMtxCalcAnimation(J3DAnmTransform* param_0) : J3DMtxCalcAnmBase(param_0), field_0x8(param_0) {}
~J3DMtxCalcAnimation() {}
void setAnmTransform(J3DAnmTransform*) {}
void init(const Vec&, const Mtx&) {}
void calc() {}
A0 field_0x8;
};
/* J3DMtxCalcAnimation<J3DMtxCalcAnimationAdaptorDefault<J3DMtxCalcCalcTransformMaya>,
* J3DMtxCalcJ3DSysInitMaya> */
struct J3DMtxCalcAnimation__template0 {
@ -440,14 +461,62 @@ SECTION_SDATA2 static f32 lit_3847 = 1.0f;
/* 8000D0AC-8000D320 0079EC 0274+00 5/5 0/0 0/0 .text
* mDoExt_setJ3DData__FPA4_fPC16J3DTransformInfoUs */
// matches with literals
#ifdef NONMATCHING
static void mDoExt_setJ3DData(Mtx mtx, const J3DTransformInfo* transformInfo, u16 param_2) {
bool local_28;
if (cM3d_IsZero(transformInfo->mScale.x - 1.0f) && cM3d_IsZero(transformInfo->mScale.y - 1.0f) && cM3d_IsZero(transformInfo->mScale.z - 1.0f)) {
j3dSys.getModel()->setScaleFlag(param_2, 1);
local_28 = true;
} else {
j3dSys.getModel()->setScaleFlag(param_2, 0);
local_28 = false;
}
mtx[0][3] = transformInfo->mTranslate.x;
mtx[1][3] = transformInfo->mTranslate.y;
mtx[2][3] = transformInfo->mTranslate.z;
if (!local_28) {
mtx[0][0] *= transformInfo->mScale.x;
mtx[0][1] *= transformInfo->mScale.y;
mtx[0][2] *= transformInfo->mScale.z;
mtx[1][0] *= transformInfo->mScale.x;
mtx[1][1] *= transformInfo->mScale.y;
mtx[1][2] *= transformInfo->mScale.z;
mtx[2][0] *= transformInfo->mScale.x;
mtx[2][1] *= transformInfo->mScale.y;
mtx[2][2] *= transformInfo->mScale.z;
}
if (j3dSys.getModel()->getModelData()->getJointNodePointer(param_2)->getScaleCompensate() == 1) {
f32 x = 1.0f / J3DSys::mParentS.x;
f32 y = 1.0f / J3DSys::mParentS.y;
f32 z = 1.0f / J3DSys::mParentS.z;
mtx[0][0] *= x;
mtx[0][1] *= x;
mtx[0][2] *= x;
mtx[1][0] *= y;
mtx[1][1] *= y;
mtx[1][2] *= y;
mtx[2][0] *= z;
mtx[2][1] *= z;
mtx[2][2] *= z;
}
mDoMtx_concat(J3DSys::mCurrentMtx, mtx, J3DSys::mCurrentMtx);
j3dSys.getModel()->setAnmMtx(param_2, J3DSys::mCurrentMtx);
J3DSys::mParentS.x = transformInfo->mScale.x;
J3DSys::mParentS.y = transformInfo->mScale.y;
J3DSys::mParentS.z = transformInfo->mScale.z;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
static asm void mDoExt_setJ3DData(f32 (*param_0)[4], J3DTransformInfo const* param_1, u16 param_2) {
static asm void mDoExt_setJ3DData(Mtx mtx, const J3DTransformInfo* transformInfo, u16 param_2) {
nofralloc
#include "asm/m_Do/m_Do_ext/mDoExt_setJ3DData__FPA4_fPC16J3DTransformInfoUs.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 80451B1C-80451B20 00011C 0004+00 22/22 0/0 0/0 .sdata2 @3876 */
@ -1370,6 +1439,27 @@ SECTION_DATA extern void* __vt__10J3DMtxCalc[11 + 1 /* padding */] = {
/* 8000D7DC-8000D8E4 00811C 0108+00 0/0 18/18 85/85 .text
* init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb */
// J3DMtxCalcAnimation inheritance
#ifdef NOTIMPLEMENTED
int mDoExt_bckAnm::init(J3DAnmTransform* i_bck, int i_play, int i_attr, f32 i_rate,
s16 i_startF, s16 i_endF, bool i_modify) {
JUT_ASSERT(614, (i_modify || isCurrentSolidHeap()) && i_bck != 0);
mAnm = i_bck;
if (!i_modify) {
mpMtxCalc = new J3DMtxCalcAnimation<J3DMtxCalcAnimationAdaptorDefault<J3DMtxCalcCalcTransformMaya>, J3DMtxCalcJ3DSysInitMaya>(mAnm);
if (!mpMtxCalc) {
return 0;
}
} else {
mpMtxCalc->setAnmTransform(mAnm);
}
if (i_play) {
i_attr = i_attr < 0 ? mAnm->getAttribute() : i_attr;
return initPlay(mAnm->getFrameMax(), i_attr, i_rate, i_startF, i_endF);
}
return 1;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -1379,6 +1469,7 @@ asm int mDoExt_bckAnm::init(J3DAnmTransform* i_bck, int i_play, int i_attr, f32
#include "asm/m_Do/m_Do_ext/init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb.s"
}
#pragma pop
#endif
/* 8000D8E4-8000D8EC -00001 0008+00 0/0 0/0 0/0 .text
* setAnmTransform__114J3DMtxCalcAnimation<64J3DMtxCalcAnimationAdaptorDefault<27J3DMtxCalcCalcTransformMaya>,24J3DMtxCalcJ3DSysInitMaya>FP15J3DAnmTransform
@ -2034,16 +2125,7 @@ extern "C" asm void __dt__9J3DPacketFv() {
/* 8000E6C8-8000E7C0 009008 00F8+00 1/1 0/0 0/0 .text entryJoint__21mDoExt_invisibleModelFP4cXyz
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void mDoExt_invisibleModel::entryJoint(cXyz* param_0) {
nofralloc
#include "asm/m_Do/m_Do_ext/entryJoint__21mDoExt_invisibleModelFP4cXyz.s"
}
#pragma pop
/* void mDoExt_invisibleModel::entryJoint(cXyz* param_0) {
void mDoExt_invisibleModel::entryJoint(cXyz* param_0) {
J3DModelData* modelData = mModel->getModelData();
mDoExt_invJntPacket* packet = mpPackets;
@ -2061,32 +2143,39 @@ asm void mDoExt_invisibleModel::entryJoint(cXyz* param_0) {
packet++;
}
}
} */
}
/* 8000E7C0-8000E834 009100 0074+00 0/0 0/0 17/17 .text entryDL__21mDoExt_invisibleModelFP4cXyz */
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void mDoExt_invisibleModel::entryDL(cXyz* param_0) {
nofralloc
#include "asm/m_Do/m_Do_ext/entryDL__21mDoExt_invisibleModelFP4cXyz.s"
void mDoExt_invisibleModel::entryDL(cXyz* param_0) {
J3DDrawBuffer* buffer0 = j3dSys.getDrawBuffer(0);
J3DDrawBuffer* buffer1 = j3dSys.getDrawBuffer(1);
dComIfGd_setListZxlu();
mDoExt_modelEntryDL(mModel);
entryJoint(param_0);
j3dSys.setDrawBuffer(buffer0, 0);
j3dSys.setDrawBuffer(buffer1, 1);
}
#pragma pop
/* 8000E834-8000EA80 009174 024C+00 0/0 0/0 7/7 .text
* mDoExt_setupShareTexture__FP12J3DModelDataP12J3DModelData */
#ifdef NONMATCHING
void mDoExt_setupShareTexture(J3DModelData* i_modelData, J3DModelData* i_shareModelData) {
JUT_ASSERT(1547, i_modelData != 0 && i_shareModelData != 0);
J3DTexture* texture = i_modelData->getTexture();
JUT_ASSERT(1549, texture != 0);
JUTNameTab* textureName = i_modelData->getTextureName();
JUT_ASSERT(1551, textureName != 0);
J3DTexture* shareTexture = i_shareModelData->getTexture();
JUT_ASSERT(1553, shareTexture != 0);
JUTNameTab* shareTextureName = i_shareModelData->getTextureName();
JUT_ASSERT(1555, shareTextureName != 0)
bool bvar = false;
for (u16 i = 0; i < texture->getNum(); i++) {
if (texture->getResTIMG(i)->imageOffset == 0) {
for (u16 j = 0; j < shareTexture->getNum(); j++) {
if (!strcmp(textureName->getName(i), shareTextureName->getName(j))) {
JUT_ASSERT(1564, shareTexture->getResTIMG(j)->imageOffset != 0);
texture->setResTIMG(i, *shareTexture->getResTIMG(j));
bvar = true;
}
@ -2100,6 +2189,7 @@ void mDoExt_setupShareTexture(J3DModelData* i_modelData, J3DModelData* i_shareMo
for (u16 i = 0; i < i_modelData->getMaterialNum(); i++) {
J3DMaterial* mat = i_modelData->getMaterialNodePointer(i);
J3DTevBlock* tevBlock = mat->getTevBlock();
JUT_ASSERT(1577, tevBlock != 0);
J3DDisplayListObj* dlObj = mat->getSharedDisplayListObj();
BOOL ret = OSDisableInterrupts();
@ -2463,6 +2553,47 @@ int mDoExt_resIDToIndex(JKRArchive* p_archive, u16 id) {
/* 8000F26C-8000F4B0 009BAC 0244+00 1/0 0/0 0/0 .text calc__25mDoExt_MtxCalcAnmBlendTblFv
*/
// matches with literals
#ifdef NONMATCHING
void mDoExt_MtxCalcAnmBlendTbl::calc() {
u16 jntNo = getJoint()->getJntNo();
j3dSys.setCurrentMtxCalc(this);
if (mNum == 1) {
J3DTransformInfo info1;
mAnmRatio->getAnmTransform()->getTransform(jntNo, &info1);
J3DMtxCalcCalcTransformMaya::calcTransform(info1);
return;
}
J3DTransformInfo info2;
Quaternion quat1;
Quaternion quat2;
Quaternion quat3;
mAnmRatio->getAnmTransform()->getTransform(jntNo, &info2);
JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat1);
quat3 = quat1;
for (int i = 1; i < mNum; i++) {
J3DAnmTransform* transform = mAnmRatio[i].getAnmTransform();
if (transform) {
J3DTransformInfo info3;
transform->getTransform(jntNo, &info3);
f32 ratio = mAnmRatio[i].getRatio();
f32 f30 = 1.0f - ratio;
JMAEulerToQuat(info3.mRotation.x, info3.mRotation.y, info3.mRotation.z, &quat2);
JMAQuatLerp(&quat1, &quat2, ratio, &quat3);
quat1 = quat3;
info2.mTranslate.x = info2.mTranslate.x * f30 + info3.mTranslate.x * ratio;
info2.mTranslate.y = info2.mTranslate.y * f30 + info3.mTranslate.y * ratio;
info2.mTranslate.z = info2.mTranslate.z * f30 + info3.mTranslate.z * ratio;
info2.mScale.x = info2.mScale.x * f30 + info3.mScale.x * ratio;
info2.mScale.y = info2.mScale.y * f30 + info3.mScale.y * ratio;
info2.mScale.z = info2.mScale.z * f30 + info3.mScale.z * ratio;
}
}
Mtx mtx;
MTXQuat(mtx, &quat3);
mDoExt_setJ3DData(mtx, &info2, jntNo);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -2471,8 +2602,68 @@ asm void mDoExt_MtxCalcAnmBlendTbl::calc() {
#include "asm/m_Do/m_Do_ext/calc__25mDoExt_MtxCalcAnmBlendTblFv.s"
}
#pragma pop
#endif
/* 8000F4B0-8000F848 009DF0 0398+00 1/0 0/0 0/0 .text calc__28mDoExt_MtxCalcAnmBlendTblOldFv */
// matches with literals
#ifdef NONMATCHING
void mDoExt_MtxCalcAnmBlendTblOld::calc() {
u16 jntNo = getJoint()->getJntNo();
j3dSys.setCurrentMtxCalc(this);
J3DModelData* modelData = j3dSys.getModel()->getModelData();
J3DTransformInfo info1;
Quaternion quat1;
Quaternion quat2;
Quaternion quat3;
mAnmRatio->getAnmTransform()->getTransform(jntNo, &info1);
JMAEulerToQuat(info1.mRotation.x, info1.mRotation.y, info1.mRotation.z, &quat1);
quat3 = quat1;
for (int i = 1; i < mNum; i++) {
if (mAnmRatio[i].getAnmTransform()) {
J3DAnmTransform* transform = mAnmRatio[i].getAnmTransform();
J3DTransformInfo info2;
transform->getTransform(jntNo, &info2);
f32 ratio = mAnmRatio[i].getRatio();
f32 f30 = 1.0f - ratio;
JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat2);
JMAQuatLerp(&quat1, &quat2, ratio, &quat3);
quat1 = quat3;
info1.mTranslate.x = info1.mTranslate.x * f30 + info2.mTranslate.x * ratio;
info1.mTranslate.y = info1.mTranslate.y * f30 + info2.mTranslate.y * ratio;
info1.mTranslate.z = info1.mTranslate.z * f30 + info2.mTranslate.z * ratio;
info1.mScale.x = info1.mScale.x * f30 + info2.mScale.x * ratio;
info1.mScale.y = info1.mScale.y * f30 + info2.mScale.y * ratio;
info1.mScale.z = info1.mScale.z * f30 + info2.mScale.z * ratio;
}
}
J3DTransformInfo* oldTransInfo = mOldFrame->getOldFrameTransInfo(jntNo);
Quaternion* oldQuat = mOldFrame->getOldFrameQuaternion(jntNo);
if (mOldFrame->getOldFrameFlg()) {
if (mOldFrame->getOldFrameRate() > 0.0f && mOldFrame->getOldFrameStartJoint() <= jntNo && mOldFrame->getOldFrameEndJoint() > jntNo) {
f32 oldFrameRate = mOldFrame->getOldFrameRate();
f32 f31 = 1.0f - oldFrameRate;
JMAQuatLerp(oldQuat, &quat1, f31, &quat3);
info1.mTranslate.x = info1.mTranslate.x * f31 + oldTransInfo->mTranslate.x * oldFrameRate;
info1.mTranslate.y = info1.mTranslate.y * f31 + oldTransInfo->mTranslate.y * oldFrameRate;
info1.mTranslate.z = info1.mTranslate.z * f31 + oldTransInfo->mTranslate.z * oldFrameRate;
info1.mScale.x = info1.mScale.x * f31 + oldTransInfo->mScale.x * oldFrameRate;
info1.mScale.y = info1.mScale.y * f31 + oldTransInfo->mScale.y * oldFrameRate;
info1.mScale.z = info1.mScale.z * f31 + oldTransInfo->mScale.z * oldFrameRate;
}
} else if (jntNo == modelData->getJointNum() - 1) {
mOldFrame->onOldFrameFlg();
}
Mtx mtx;
mDoMtx_quat(mtx, &quat3);
mDoExt_setJ3DData(mtx, &info1, jntNo);
*oldQuat = quat3;
*oldTransInfo = info1;
if (jntNo == modelData->getJointNum() - 1) {
mOldFrame->decOldFrameMorfCounter();
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -2481,6 +2672,7 @@ asm void mDoExt_MtxCalcAnmBlendTblOld::calc() {
#include "asm/m_Do/m_Do_ext/calc__28mDoExt_MtxCalcAnmBlendTblOldFv.s"
}
#pragma pop
#endif
/* 8000F848-8000F8CC 00A188 0084+00 0/0 26/26 8/8 .text
* initOldFrameMorf__22mDoExt_MtxCalcOldFrameFfUsUs */
@ -2614,17 +2806,15 @@ asm void mDoExt_morf_c::frameUpdate() {
/* 8000FC4C-8000FD10 00A58C 00C4+00 0/0 0/0 34/34 .text
* __ct__14mDoExt_McaMorfFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiiPvUlUl
*/
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm mDoExt_McaMorf::mDoExt_McaMorf(J3DModelData* param_0, mDoExt_McaMorfCallBack1_c* param_1,
mDoExt_McaMorfCallBack2_c* param_2, J3DAnmTransform* param_3,
mDoExt_McaMorf::mDoExt_McaMorf(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* callback1,
mDoExt_McaMorfCallBack2_c* callback2, J3DAnmTransform* anmTransform,
int param_4, f32 param_5, int param_6, int param_7, int param_8,
void* param_9, u32 param_10, u32 param_11) {
nofralloc
#include "asm/m_Do/m_Do_ext/func_8000FC4C.s"
field_0x50 = false;
field_0x51 = false;
field_0x52 = false;
create(modelData, callback1, callback2, anmTransform, param_4, param_5, param_6, param_7, param_8, param_9, param_10, param_11);
}
#pragma pop
/* 8000FD10-8000FD94 00A650 0084+00 1/0 0/0 0/0 .text __dt__14mDoExt_McaMorfFv */
#pragma push
@ -2644,10 +2834,89 @@ SECTION_SDATA2 static f32 lit_5939 = -1.0f;
/* 8000FD94-80010074 00A6D4 02E0+00 1/1 0/0 0/0 .text
* create__14mDoExt_McaMorfFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiiPvUlUl
*/
// matches with literals
#ifdef NONMATCHING
int mDoExt_McaMorf::create(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* callback1,
mDoExt_McaMorfCallBack2_c* callback2, J3DAnmTransform* anmTransform,
int param_4, f32 param_5, int param_6, int param_7, int param_8,
void* param_9, u32 param_10, u32 param_11) {
mpModel = NULL;
mpSound = NULL;
mpTransformInfo = NULL;
mpQuat = NULL;
if (!modelData) {
return 0;
}
if (modelData->getMaterialNodePointer(0)->getSharedDisplayListObj() && param_10 == 0) {
if (param_10 = modelData->isLocked()) {
param_10 = 0x20000;
} else {
param_10 = 0x80000;
}
}
mpModel = mDoExt_J3DModel__create(modelData, param_10, param_11);
if (!mpModel) {
return 0;
}
if (param_10 != 0x80000) {
mDoExt_changeMaterial(mpModel);
}
if (param_9 == NULL && anmTransform) {
param_9 = ((mDoExt_transAnmBas*)anmTransform)->getBas();
if (param_9) {
param_8 = 1;
}
}
if (param_8) {
mpSound = new mDoExt_zelAnime();
if (!mpSound) {
goto cleanup;
}
}
setAnm(anmTransform, param_4, 0.0f, param_5, param_6, param_7, param_9);
mPrevMorf = -1.0f;
mpTransformInfo = new J3DTransformInfo[modelData->getJointNum()];
if (!mpTransformInfo) {
goto cleanup;
}
mpQuat = new Quaternion[modelData->getJointNum()];
if (!mpQuat) {
goto cleanup;
}
J3DTransformInfo* info = mpTransformInfo;
Quaternion* quat = mpQuat;
J3DModelData* r23 = mpModel->getModelData();
u16 jointNum = r23->getJointNum();
for (int i = 0; i < jointNum; i++) {
*info = r23->getJointNodePointer(i)->getTransformInfo();
JMAEulerToQuat(info->mRotation.x, info->mRotation.y, info->mRotation.z, quat);
info++;
quat++;
}
mpCallback1 = callback1;
mpCallback2 = callback2;
return 1;
cleanup:
if (mpSound) {
mpSound->stopAnime();
mpSound = NULL;
}
if (mpTransformInfo) {
mpTransformInfo = NULL;
}
if (mpQuat) {
mpQuat = NULL;
}
if (mpModel) {
mpModel = NULL;
}
return 0;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void mDoExt_McaMorf::create(J3DModelData* param_0, mDoExt_McaMorfCallBack1_c* param_1,
asm int mDoExt_McaMorf::create(J3DModelData* param_0, mDoExt_McaMorfCallBack1_c* param_1,
mDoExt_McaMorfCallBack2_c* param_2, J3DAnmTransform* param_3,
int param_4, f32 param_5, int param_6, int param_7, int param_8,
void* param_9, u32 param_10, u32 param_11) {
@ -2655,8 +2924,76 @@ asm void mDoExt_McaMorf::create(J3DModelData* param_0, mDoExt_McaMorfCallBack1_c
#include "asm/m_Do/m_Do_ext/func_8000FD94.s"
}
#pragma pop
#endif
/* 80010074-8001037C 00A9B4 0308+00 1/0 0/0 0/0 .text calc__14mDoExt_McaMorfFv */
// matches with literals
#ifdef NONMATCHING
void mDoExt_McaMorf::calc() {
if (!mpModel) {
return;
}
u16 jntNo = getJoint()->getJntNo();
j3dSys.setCurrentMtxCalc(this);
J3DTransformInfo info1;
J3DTransformInfo* infoPtr;
if (mpTransformInfo == NULL) {
infoPtr = &info1;
} else {
infoPtr = &mpTransformInfo[jntNo];
}
Quaternion quat1;
Quaternion* quatPtr;
if (mpQuat == NULL) {
quatPtr = &quat1;
} else {
quatPtr = &mpQuat[jntNo];
}
if (!mpAnm) {
*infoPtr = mpModel->getModelData()->getJointNodePointer(jntNo)->getTransformInfo();
if (mpCallback1) {
mpCallback1->execute(jntNo, infoPtr);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
J3DMtxCalcCalcTransformMaya::calcTransform(*infoPtr);
} else if (mCurMorf >= 1.0f || !mpTransformInfo || !mpQuat) {
getTransform(jntNo, infoPtr);
if (mpCallback1) {
mpCallback1->execute(jntNo, infoPtr);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
J3DMtxCalcCalcTransformMaya::calcTransform(*infoPtr);
} else {
f32 f31;
if (field_0x52) {
f31 = 1.0f;
} else {
f31 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
}
f32 f30 = 1.0f - f31;
J3DTransformInfo info2;
Quaternion quat2;
getTransform(jntNo, &info2);
if (mpCallback1) {
mpCallback1->execute(jntNo, &info2);
}
JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat2);
JMAQuatLerp(quatPtr, &quat2, f31, quatPtr);
Mtx mtx;
mDoMtx_quat(mtx, quatPtr);
infoPtr->mTranslate.x = infoPtr->mTranslate.x * f30 + info2.mTranslate.x * f31;
infoPtr->mTranslate.y = infoPtr->mTranslate.y * f30 + info2.mTranslate.y * f31;
infoPtr->mTranslate.z = infoPtr->mTranslate.z * f30 + info2.mTranslate.z * f31;
infoPtr->mScale.x = infoPtr->mScale.x * f30 + info2.mScale.x * f31;
infoPtr->mScale.y = infoPtr->mScale.y * f30 + info2.mScale.y * f31;
infoPtr->mScale.z = infoPtr->mScale.z * f30 + info2.mScale.z * f31;
mDoExt_setJ3DData(mtx, infoPtr, jntNo);
}
if (mpCallback2) {
mpCallback2->execute(jntNo);
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -2665,9 +3002,50 @@ asm void mDoExt_McaMorf::calc() {
#include "asm/m_Do/m_Do_ext/calc__14mDoExt_McaMorfFv.s"
}
#pragma pop
#endif
/* 8001037C-800105C8 00ACBC 024C+00 1/1 1/1 29/29 .text
* setAnm__14mDoExt_McaMorfFP15J3DAnmTransformiffffPv */
// matches with literals
#ifdef NONMATCHING
void mDoExt_McaMorf::setAnm(J3DAnmTransform* param_0, int param_1, f32 param_2, f32 param_3,
f32 param_4, f32 param_5, void* param_6) {
mpAnm = param_0;
setStartFrame(param_4);
if (param_5 < 0.0f) {
if (!mpAnm) {
mFrameCtrl.init(0);
} else {
mFrameCtrl.init(mpAnm->getFrameMax());
}
} else {
mFrameCtrl.init(param_5);
}
if (param_0 && param_1 < 0) {
param_1 = param_0->getAttribute();
}
setPlayMode(param_1);
setPlaySpeed(param_3);
if (param_3 >= 0.0f) {
setFrame(param_4);
} else {
setFrame(getEndFrame());
}
setLoopFrame(getFrame());
setMorf(param_2);
if (mpSound) {
if (param_6 == NULL && param_0) {
param_6 = ((mDoExt_transAnmBas*)param_0)->getBas();
}
mpSound->field_0x48 = param_6;
if (mpSound->field_0x48) {
mpSound->initAnime(param_6, getPlaySpeed() >= 0.0f, getLoopFrame(), 0.0f);
} else {
mpSound->stopAnime();
}
}
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
@ -2677,6 +3055,7 @@ asm void mDoExt_McaMorf::setAnm(J3DAnmTransform* param_0, int param_1, f32 param
#include "asm/m_Do/m_Do_ext/setAnm__14mDoExt_McaMorfFP15J3DAnmTransformiffffPv.s"
}
#pragma pop
#endif
/* 800105C8-80010680 00AF08 00B8+00 0/0 1/1 37/37 .text play__14mDoExt_McaMorfFP3VecUlSc
*/
@ -3675,13 +4054,13 @@ void J3DMtxCalc::setAnmTransform(J3DAnmTransform* param_0) {
/* 80014E94-80014E9C 00F7D4 0008+00 11/0 2/0 0/0 .text getAnmTransform__10J3DMtxCalcFUc
*/
bool J3DMtxCalc::getAnmTransform(u8 param_0) {
return false;
J3DAnmTransform* J3DMtxCalc::getAnmTransform(u8 param_0) {
return NULL;
}
/* 80014E9C-80014EA4 00F7DC 0008+00 9/0 2/0 0/0 .text getAnmTransform__10J3DMtxCalcFv */
bool J3DMtxCalc::getAnmTransform() {
return false;
J3DAnmTransform* J3DMtxCalc::getAnmTransform() {
return NULL;
}
/* 80014EA4-80014EA8 00F7E4 0004+00 11/0 2/0 0/0 .text setWeight__10J3DMtxCalcFUcf */
@ -3726,7 +4105,7 @@ extern "C" asm void __dt__25mDoExt_MtxCalcAnmBlendTblFv() {
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void J3DMtxCalcAnmBase::getAnmTransform() {
asm J3DAnmTransform* J3DMtxCalcAnmBase::getAnmTransform() {
nofralloc
#include "asm/m_Do/m_Do_ext/getAnmTransform__17J3DMtxCalcAnmBaseFv.s"
}
@ -3773,7 +4152,7 @@ void J3DMtxCalcNoAnm<J3DMtxCalcCalcTransformMaya, J3DMtxCalcJ3DSysInitMaya>::ini
/* 80015084-800150AC 00F9C4 0028+00 2/0 0/0 0/0 .text
* calc__73J3DMtxCalcNoAnm<27J3DMtxCalcCalcTransformMaya,24J3DMtxCalcJ3DSysInitMaya>Fv */
void J3DMtxCalcNoAnm<J3DMtxCalcCalcTransformMaya, J3DMtxCalcJ3DSysInitMaya>::calc() {
calcTransform(getJoint()->getTransformInfo());
J3DMtxCalcCalcTransformMaya::calcTransform(getJoint()->getTransformInfo());
}
/* 800150AC-8001513C 00F9EC 0090+00 1/0 0/0 0/0 .text