switch to dtk setup (#2203)

* switch to dtk setup

* some cleanup / fixes

* cleanup d_a_alink literals

* Restore doxygen, update CI & README.md (#1)

* Fix build image ref (#2)

---------

Co-authored-by: Luke Street <luke@street.dev>
This commit is contained in:
TakaRikka
2024-10-10 07:29:58 -07:00
committed by GitHub
parent 2fd702c0ac
commit 12eb254d76
33438 changed files with 370506 additions and 3055930 deletions
@@ -0,0 +1,922 @@
//
// Generated By: dol2asm
// Translation Unit: J3DAnimation
//
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void init__12J3DFrameCtrlFs();
extern "C" void checkPass__12J3DFrameCtrlFf();
extern "C" void update__12J3DFrameCtrlFv();
extern "C" void __ct__15J3DAnmTransformFsPfPsPf();
extern "C" void getTransform__19J3DAnmTransformFullCFUsP16J3DTransformInfo();
extern "C" void getTransform__27J3DAnmTransformFullWithLerpCFUsP16J3DTransformInfo();
extern "C" void calcTransform__18J3DAnmTransformKeyCFfUsP16J3DTransformInfo();
extern "C" void __ct__19J3DAnmTextureSRTKeyFv();
extern "C" void calcTransform__19J3DAnmTextureSRTKeyCFfUsP17J3DTextureSRTInfo();
extern "C" void getWeight__17J3DAnmClusterFullCFUs();
extern "C" void getWeight__16J3DAnmClusterKeyCFUs();
extern "C" void __ct__14J3DAnmVtxColorFv();
extern "C" void __ct__18J3DAnmVtxColorFullFv();
extern "C" void getColor__18J3DAnmVtxColorFullCFUcUsP8_GXColor();
extern "C" void __ct__17J3DAnmVtxColorKeyFv();
extern "C" void getColor__17J3DAnmVtxColorKeyCFUcUsP8_GXColor();
extern "C" void __ct__11J3DAnmColorFv();
extern "C" void searchUpdateMaterialID__11J3DAnmColorFP16J3DMaterialTable();
extern "C" void __ct__15J3DAnmColorFullFv();
extern "C" void getColor__15J3DAnmColorFullCFUsP8_GXColor();
extern "C" void __ct__14J3DAnmColorKeyFv();
extern "C" void getColor__14J3DAnmColorKeyCFUsP8_GXColor();
extern "C" void __ct__15J3DAnmTevRegKeyFv();
extern "C" void __ct__16J3DAnmTexPatternFv();
extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs();
extern "C" void searchUpdateMaterialID__16J3DAnmTexPatternFP16J3DMaterialTable();
extern "C" void searchUpdateMaterialID__16J3DAnmTexPatternFP12J3DModelData();
extern "C" void searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP16J3DMaterialTable();
extern "C" void searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP12J3DModelData();
extern "C" void getTevColorReg__15J3DAnmTevRegKeyCFUsP11_GXColorS10();
extern "C" void getTevKonstReg__15J3DAnmTevRegKeyCFUsP8_GXColor();
extern "C" void searchUpdateMaterialID__15J3DAnmTevRegKeyFP16J3DMaterialTable();
extern "C" void searchUpdateMaterialID__15J3DAnmTevRegKeyFP12J3DModelData();
extern "C" void func_8032B8A0(void* _this, f32, J3DAnmKeyTableBase*, s16*);
extern "C" void func_8032BAD4(void* _this, f32, J3DAnmKeyTableBase*, f32*);
extern "C" void __dt__14J3DAnmVtxColorFv();
extern "C" void __dt__11J3DAnmColorFv();
extern "C" void __dt__16J3DAnmTexPatternFv();
extern "C" s32 getKind__16J3DAnmTexPatternCFv();
extern "C" void __dt__15J3DAnmTevRegKeyFv();
extern "C" s32 getKind__15J3DAnmTevRegKeyCFv();
extern "C" void __dt__14J3DAnmColorKeyFv();
extern "C" s32 getKind__14J3DAnmColorKeyCFv();
extern "C" void __dt__15J3DAnmColorFullFv();
extern "C" s32 getKind__15J3DAnmColorFullCFv();
extern "C" bool getKind__11J3DAnmColorCFv();
extern "C" void getColor__11J3DAnmColorCFUsP8_GXColor();
extern "C" void __dt__17J3DAnmVtxColorKeyFv();
extern "C" s32 getKind__17J3DAnmVtxColorKeyCFv();
extern "C" void __dt__18J3DAnmVtxColorFullFv();
extern "C" s32 getKind__18J3DAnmVtxColorFullCFv();
extern "C" s32 getKind__14J3DAnmVtxColorCFv();
extern "C" void getColor__14J3DAnmVtxColorCFUcUsP8_GXColor();
extern "C" void __dt__16J3DAnmClusterKeyFv();
extern "C" s32 getKind__16J3DAnmClusterKeyCFv();
extern "C" void __dt__13J3DAnmClusterFv();
extern "C" s32 getKind__13J3DAnmClusterCFv();
extern "C" void getWeight__13J3DAnmClusterCFUs();
extern "C" void __dt__17J3DAnmClusterFullFv();
extern "C" s32 getKind__17J3DAnmClusterFullCFv();
extern "C" void __dt__19J3DAnmTextureSRTKeyFv();
extern "C" s32 getKind__19J3DAnmTextureSRTKeyCFv();
extern "C" void __dt__27J3DAnmTransformFullWithLerpFv();
extern "C" s32 getKind__27J3DAnmTransformFullWithLerpCFv();
extern "C" void __dt__19J3DAnmTransformFullFv();
extern "C" s32 getKind__19J3DAnmTransformFullCFv();
//
// External References:
//
extern "C" void __dl__FPv();
extern "C" void __ct__10JUTNameTabFv();
extern "C" void getIndex__10JUTNameTabCFPCc();
extern "C" void getName__10JUTNameTabCFUs();
extern "C" void __cvt_fp2unsigned();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__10J3DAnmBase[4];
extern "C" extern void* __vt__15J3DAnmTransform[5];
extern "C" extern void* __vt__10JUTNameTab[3];
//
// Declarations:
//
/* ############################################################################################## */
/* 80456430-80456434 004A30 0004+00 6/6 0/0 0/0 .sdata2 @852 */
SECTION_SDATA2 static f32 lit_852 = 1.0f;
/* 80456434-80456438 004A34 0004+00 20/20 0/0 0/0 .sdata2 @853 */
SECTION_SDATA2 static u8 lit_853[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 803283FC-8032842C 322D3C 0030+00 0/0 25/25 285/285 .text init__12J3DFrameCtrlFs */
void J3DFrameCtrl::init(s16 i_end) {
mAttribute = 2;
mState = 0;
mStart = 0;
mEnd = i_end;
mLoop = 0;
mRate = lit_852;
mFrame = FLOAT_LABEL(lit_853);
}
/* ############################################################################################## */
/* 80456438-80456440 004A38 0004+04 2/2 0/0 0/0 .sdata2 @973 */
SECTION_SDATA2 static f32 lit_973[1 + 1 /* padding */] = {
0.0010000000474974513f,
/* padding */
0.0f,
};
/* 80456440-80456448 004A40 0008+00 4/4 0/0 0/0 .sdata2 @975 */
SECTION_SDATA2 static f64 lit_975 = 4503601774854144.0 /* cast s32 to float */;
/* 8032842C-803289CC 322D6C 05A0+00 0/0 92/92 382/382 .text checkPass__12J3DFrameCtrlFf
*/
int J3DFrameCtrl::checkPass(f32 pass_frame) {
f32 cur_frame = mFrame;
f32 next_frame = cur_frame + mRate;
switch (mAttribute) {
case 0:
case 1:
if (next_frame < mStart) {
next_frame = mStart;
}
if (next_frame >= mEnd) {
next_frame = mEnd - 0.001f;
}
if (cur_frame <= next_frame) {
if (cur_frame <= pass_frame && pass_frame < next_frame) {
return true;
} else {
return false;
}
}
if (next_frame <= pass_frame && pass_frame < cur_frame) {
return true;
}
return false;
case 2:
if (cur_frame < mStart) {
while (next_frame < mStart) {
if (mLoop - mStart <= 0.0f) {
break;
}
next_frame += mLoop - mStart;
}
if (next_frame <= pass_frame && pass_frame < mLoop) {
return true;
} else {
return false;
}
} else if (mEnd <= cur_frame) {
while (next_frame >= mEnd) {
if (mEnd - mLoop <= 0.0f) {
break;
}
next_frame -= mEnd - mLoop;
}
if (mLoop <= pass_frame && pass_frame < next_frame) {
return true;
} else {
return false;
}
} else if (next_frame < mStart) {
while (next_frame < mStart) {
if (mLoop - mStart <= 0.0f) {
break;
}
next_frame += mLoop - mStart;
}
if ((mStart <= pass_frame && pass_frame < cur_frame) || (next_frame <= pass_frame && pass_frame < mLoop)) {
return true;
} else {
return false;
}
} else if (mEnd <= next_frame) {
while (next_frame >= mEnd) {
if (mEnd - mLoop <= 0.0f) {
break;
}
next_frame -= mEnd - mLoop;
}
if ((cur_frame <= pass_frame && pass_frame < mEnd) || (mLoop <= pass_frame && pass_frame < next_frame)) {
return true;
} else {
return false;
}
} else if (cur_frame <= next_frame) {
if (cur_frame <= pass_frame && pass_frame < next_frame) {
return true;
} else {
return false;
}
} else if (next_frame <= pass_frame && pass_frame < cur_frame) {
return true;
}
return false;
case 3:
case 4:
if (next_frame >= mEnd) {
next_frame = mEnd - 0.001f;
}
if (next_frame < mStart) {
next_frame = mStart;
}
if (cur_frame <= next_frame) {
if (cur_frame <= pass_frame && pass_frame < next_frame) {
return true;
} else {
return false;
}
}
if (next_frame <= pass_frame && pass_frame < cur_frame) {
return true;
}
return false;
default:
return false;
}
}
/* 803289CC-80328E40 32330C 0474+00 0/0 3/3 0/0 .text update__12J3DFrameCtrlFv */
void J3DFrameCtrl::update() {
mState = 0;
mFrame += mRate;
switch (mAttribute) {
case 0:
if (mFrame < mStart) {
mFrame = mStart;
mRate = 0.0f;
mState |= 1;
}
if (mFrame >= mEnd) {
mFrame = mEnd - 0.001f;
mRate = 0.0f;
mState |= 1;
}
break;
case 1:
if (mFrame < mStart) {
mFrame = mStart;
mRate = 0.0f;
mState |= 1;
}
if (mFrame >= mEnd) {
mFrame = mStart;
mRate = 0.0f;
mState |= 1;
}
break;
case 2:
while (mFrame < mStart) {
mState |= 2;
if (mLoop - mStart <= 0.0f) {
break;
}
mFrame += mLoop - mStart;
}
while (mFrame >= mEnd) {
mState |= 2;
if (mEnd - mLoop <= 0.0f) {
break;
}
mFrame -= mEnd - mLoop;
}
break;
case 3:
if (mFrame >= mEnd) {
mFrame = mEnd - (mFrame - mEnd);
mRate = -mRate;
}
if (mFrame < mStart) {
mFrame = mStart - (mFrame - mStart);
mRate = 0.0f;
mState |= 1;
}
break;
case 4:
if (mFrame >= mEnd - 1.0f) {
mFrame = (mEnd - 1.0f) - (mFrame - (mEnd - 1.0f));
mRate = -mRate;
}
if (mFrame < mStart) {
mFrame = mStart - (mFrame - mStart);
mRate = -mRate;
mState |= 2;
}
break;
}
}
/* 80328E40-80328E90 323780 0050+00 0/0 3/3 0/0 .text __ct__15J3DAnmTransformFsPfPsPf */
J3DAnmTransform::J3DAnmTransform(s16 param_0, f32* param_1, s16* param_2, f32* param_3)
: J3DAnmBase(param_0) {
mScaleData = param_1;
mRotData = param_2;
mTransData = param_3;
field_0x18 = 0;
field_0x1a = 0;
field_0x1c = 0;
field_0x1e = 0;
}
/* ############################################################################################## */
/* 80456448-80456450 004A48 0004+04 4/4 0/0 0/0 .sdata2 @1092 */
SECTION_SDATA2 static f32 lit_1092[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 80328E90-803291F0 3237D0 0360+00 1/0 0/0 0/0 .text
* getTransform__19J3DAnmTransformFullCFUsP16J3DTransformInfo */
void J3DAnmTransformFull::getTransform(u16 param_0, J3DTransformInfo* param_1) const {
// NONMATCHING
}
/* ############################################################################################## */
/* 80456450-80456458 004A50 0008+00 2/2 0/0 0/0 .sdata2 @1223 */
SECTION_SDATA2 static f64 lit_1223 = 4503599627370496.0 /* cast u32 to float */;
/* 803291F0-80329A34 323B30 0844+00 1/0 0/0 0/0 .text
* getTransform__27J3DAnmTransformFullWithLerpCFUsP16J3DTransformInfo */
void J3DAnmTransformFullWithLerp::getTransform(u16 param_0, J3DTransformInfo* param_1) const {
// NONMATCHING
}
/* 80329A34-80329E5C 324374 0428+00 0/0 1/1 0/0 .text
* calcTransform__18J3DAnmTransformKeyCFfUsP16J3DTransformInfo */
void J3DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
J3DTransformInfo* param_2) const {
// NONMATCHING
}
/* ############################################################################################## */
/* 803CED50-803CED60 02BE70 0010+00 2/2 0/0 0/0 .data __vt__16J3DAnmTexPattern */
SECTION_DATA extern void* __vt__16J3DAnmTexPattern[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16J3DAnmTexPatternFv,
(void*)getKind__16J3DAnmTexPatternCFv,
};
/* 803CED60-803CED70 02BE80 0010+00 2/2 0/0 0/0 .data __vt__15J3DAnmTevRegKey */
SECTION_DATA extern void* __vt__15J3DAnmTevRegKey[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__15J3DAnmTevRegKeyFv,
(void*)getKind__15J3DAnmTevRegKeyCFv,
};
/* 803CED70-803CED84 02BE90 0014+00 2/2 0/0 0/0 .data __vt__14J3DAnmColorKey */
SECTION_DATA extern void* __vt__14J3DAnmColorKey[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14J3DAnmColorKeyFv,
(void*)getKind__14J3DAnmColorKeyCFv,
(void*)getColor__14J3DAnmColorKeyCFUsP8_GXColor,
};
/* 803CED84-803CED98 02BEA4 0014+00 2/2 0/0 0/0 .data __vt__15J3DAnmColorFull */
SECTION_DATA extern void* __vt__15J3DAnmColorFull[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__15J3DAnmColorFullFv,
(void*)getKind__15J3DAnmColorFullCFv,
(void*)getColor__15J3DAnmColorFullCFUsP8_GXColor,
};
/* 803CED98-803CEDAC 02BEB8 0014+00 4/4 0/0 0/0 .data __vt__11J3DAnmColor */
SECTION_DATA extern void* __vt__11J3DAnmColor[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11J3DAnmColorFv,
(void*)getKind__11J3DAnmColorCFv,
(void*)getColor__11J3DAnmColorCFUsP8_GXColor,
};
/* 803CEDAC-803CEDC0 02BECC 0014+00 2/2 0/0 0/0 .data __vt__17J3DAnmVtxColorKey */
SECTION_DATA extern void* __vt__17J3DAnmVtxColorKey[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__17J3DAnmVtxColorKeyFv,
(void*)getKind__17J3DAnmVtxColorKeyCFv,
(void*)getColor__17J3DAnmVtxColorKeyCFUcUsP8_GXColor,
};
/* 803CEDC0-803CEDD4 02BEE0 0014+00 2/2 0/0 0/0 .data __vt__18J3DAnmVtxColorFull */
SECTION_DATA extern void* __vt__18J3DAnmVtxColorFull[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__18J3DAnmVtxColorFullFv,
(void*)getKind__18J3DAnmVtxColorFullCFv,
(void*)getColor__18J3DAnmVtxColorFullCFUcUsP8_GXColor,
};
/* 803CEDD4-803CEDE8 02BEF4 0014+00 4/4 0/0 0/0 .data __vt__14J3DAnmVtxColor */
SECTION_DATA extern void* __vt__14J3DAnmVtxColor[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14J3DAnmVtxColorFv,
(void*)getKind__14J3DAnmVtxColorCFv,
(void*)getColor__14J3DAnmVtxColorCFUcUsP8_GXColor,
};
/* 803CEDE8-803CEDFC 02BF08 0014+00 1/1 1/1 0/0 .data __vt__16J3DAnmClusterKey */
SECTION_DATA extern void* __vt__16J3DAnmClusterKey[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16J3DAnmClusterKeyFv,
(void*)getKind__16J3DAnmClusterKeyCFv,
(void*)getWeight__16J3DAnmClusterKeyCFUs,
};
/* 803CEDFC-803CEE10 02BF1C 0014+00 3/3 1/1 0/0 .data __vt__13J3DAnmCluster */
SECTION_DATA extern void* __vt__13J3DAnmCluster[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__13J3DAnmClusterFv,
(void*)getKind__13J3DAnmClusterCFv,
(void*)getWeight__13J3DAnmClusterCFUs,
};
/* 803CEE10-803CEE24 02BF30 0014+00 1/1 1/1 0/0 .data __vt__17J3DAnmClusterFull */
SECTION_DATA extern void* __vt__17J3DAnmClusterFull[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__17J3DAnmClusterFullFv,
(void*)getKind__17J3DAnmClusterFullCFv,
(void*)getWeight__17J3DAnmClusterFullCFUs,
};
/* 803CEE24-803CEE34 02BF44 0010+00 2/2 0/0 0/0 .data __vt__19J3DAnmTextureSRTKey */
SECTION_DATA extern void* __vt__19J3DAnmTextureSRTKey[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__19J3DAnmTextureSRTKeyFv,
(void*)getKind__19J3DAnmTextureSRTKeyCFv,
};
/* 80329E5C-80329F14 32479C 00B8+00 0/0 2/2 0/0 .text __ct__19J3DAnmTextureSRTKeyFv */
J3DAnmTextureSRTKey::J3DAnmTextureSRTKey() : J3DAnmBase(0) {
mDecShift = 0;
mTransNum = 0;
mRotNum = 0;
mScaleNum = 0;
mTrackNum = 0;
mAnmTable = 0;
mTransData = 0;
mScaleData = 0;
mRotData = 0;
field_0x48 = 0;
field_0x46 = 0;
field_0x44 = 0;
field_0x4a = 0;
field_0x58 = 0;
field_0x54 = 0;
field_0x4c = 0;
field_0x50 = 0;
mTexMtxCalcType = 0;
}
/* 80329F14-8032A184 324854 0270+00 0/0 1/1 0/0 .text
* calcTransform__19J3DAnmTextureSRTKeyCFfUsP17J3DTextureSRTInfo */
void J3DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1,
J3DTextureSRTInfo* param_2) const {
// NONMATCHING
}
/* 8032A184-8032A218 324AC4 0094+00 1/0 0/0 0/0 .text getWeight__17J3DAnmClusterFullCFUs
*/
f32 J3DAnmClusterFull::getWeight(u16 param_0) const {
// NONMATCHING
}
/* 8032A218-8032A29C 324B58 0084+00 1/0 0/0 0/0 .text getWeight__16J3DAnmClusterKeyCFUs
*/
f32 J3DAnmClusterKey::getWeight(u16 param_0) const {
// NONMATCHING
}
/* 8032A29C-8032A30C 324BDC 0070+00 2/2 0/0 0/0 .text __ct__14J3DAnmVtxColorFv */
J3DAnmVtxColor::J3DAnmVtxColor() : J3DAnmBase(0) {
for (int i = 0; i < 2; i++) {
mAnmTableNum[i] = 0;
}
for (int i = 0; i < 2; i++) {
mAnmVtxColorIndexData[i] = 0;
}
}
/* 8032A30C-8032A368 324C4C 005C+00 0/0 1/1 0/0 .text __ct__18J3DAnmVtxColorFullFv */
J3DAnmVtxColorFull::J3DAnmVtxColorFull() {
for (int i = 0; i < 2; i++) {
mpTable[i] = 0;
}
}
/* 8032A368-8032A4E0 324CA8 0178+00 1/0 0/0 0/0 .text
* getColor__18J3DAnmVtxColorFullCFUcUsP8_GXColor */
void J3DAnmVtxColorFull::getColor(u8 param_0, u16 param_1, _GXColor* param_2) const {
// NONMATCHING
}
/* 8032A4E0-8032A53C 324E20 005C+00 0/0 1/1 0/0 .text __ct__17J3DAnmVtxColorKeyFv */
J3DAnmVtxColorKey::J3DAnmVtxColorKey() {
for (int i = 0; i < 2; i++) {
mpTable[i] = 0;
}
}
/* ############################################################################################## */
/* 80456458-8045645C 004A58 0004+00 3/3 0/0 0/0 .sdata2 @1499 */
SECTION_SDATA2 static f32 lit_1499 = 255.0f;
/* 8032A53C-8032A828 324E7C 02EC+00 1/0 0/0 0/0 .text
* getColor__17J3DAnmVtxColorKeyCFUcUsP8_GXColor */
void J3DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* param_2) const {
// NONMATCHING
}
/* 8032A828-8032A8A4 325168 007C+00 2/2 0/0 0/0 .text __ct__11J3DAnmColorFv */
J3DAnmColor::J3DAnmColor() : J3DAnmBase(0), field_0xc(0), field_0xe(0), field_0x10(0), field_0x12(0), mUpdateMaterialNum(0), mUpdateMaterialID(NULL) {}
/* 8032A8A4-8032A93C 3251E4 0098+00 0/0 1/1 0/0 .text
* searchUpdateMaterialID__11J3DAnmColorFP16J3DMaterialTable */
void J3DAnmColor::searchUpdateMaterialID(J3DMaterialTable* param_0) {
// NONMATCHING
}
/* 8032A93C-8032A990 32527C 0054+00 0/0 1/1 0/0 .text __ct__15J3DAnmColorFullFv */
J3DAnmColorFull::J3DAnmColorFull() {
mColorR = 0;
mColorG = 0;
mColorB = 0;
mColorA = 0;
mAnmTable = 0;
}
/* 8032A990-8032AB00 3252D0 0170+00 1/0 0/0 0/0 .text getColor__15J3DAnmColorFullCFUsP8_GXColor */
void J3DAnmColorFull::getColor(u16 param_0, _GXColor* param_1) const {
// NONMATCHING
}
/* 8032AB00-8032AB54 325440 0054+00 0/0 1/1 0/0 .text __ct__14J3DAnmColorKeyFv */
J3DAnmColorKey::J3DAnmColorKey() {
field_0x2c = 0;
field_0x30 = 0;
field_0x34 = 0;
field_0x38 = 0;
field_0x3c = 0;
}
/* 8032AB54-8032AE18 325494 02C4+00 1/0 0/0 0/0 .text getColor__14J3DAnmColorKeyCFUsP8_GXColor */
void J3DAnmColorKey::getColor(u16 param_0, _GXColor* param_1) const {
// NONMATCHING
}
/* 8032AE18-8032AED8 325758 00C0+00 0/0 1/1 0/0 .text __ct__15J3DAnmTevRegKeyFv */
J3DAnmTevRegKey::J3DAnmTevRegKey() : J3DAnmBase(0) {
mKRegUpdateMaterialNum = 0;
mCRegUpdateMaterialNum = 0;
mCRegDataCountA = 0;
mCRegDataCountB = 0;
mCRegDataCountG = 0;
mCRegDataCountR = 0;
mKRegDataCountA = 0;
mKRegDataCountB = 0;
mKRegDataCountG = 0;
mKRegDataCountR = 0;
mKRegUpdateMaterialID = 0;
mCRegUpdateMaterialID = 0;
mAnmCRegDataA = 0;
mAnmCRegDataB = 0;
mAnmCRegDataG = 0;
mAnmCRegDataR = 0;
mAnmKRegDataA = 0;
mAnmKRegDataB = 0;
mAnmKRegDataG = 0;
mAnmKRegDataR = 0;
}
/* 8032AED8-8032AF50 325818 0078+00 0/0 2/2 0/0 .text __ct__16J3DAnmTexPatternFv */
J3DAnmTexPattern::J3DAnmTexPattern() : J3DAnmBase(0), mTextureIndex(NULL), mAnmTable(NULL), field_0x14(0), mUpdateMaterialNum(0), mUpdateMaterialID(NULL) {}
/* 8032AF50-8032B004 325890 00B4+00 0/0 1/1 72/72 .text getTexNo__16J3DAnmTexPatternCFUsPUs */
void J3DAnmTexPattern::getTexNo(u16 param_0, u16* param_1) const {
// NONMATCHING
}
/* 8032B004-8032B09C 325944 0098+00 1/1 1/1 0/0 .text
* searchUpdateMaterialID__16J3DAnmTexPatternFP16J3DMaterialTable */
void J3DAnmTexPattern::searchUpdateMaterialID(J3DMaterialTable* param_0) {
for (u16 i = 0; i < mUpdateMaterialNum; i++) {
s32 r3 = param_0->getMaterialName()->getIndex(mUpdateMaterialName.getName(i));
if (r3 != -1) {
mUpdateMaterialID[i] = r3;
} else {
mUpdateMaterialID[i] = -1;
}
}
}
/* 8032B09C-8032B0C0 3259DC 0024+00 0/0 4/4 1/1 .text
* searchUpdateMaterialID__16J3DAnmTexPatternFP12J3DModelData */
void J3DAnmTexPattern::searchUpdateMaterialID(J3DModelData* param_0) {
searchUpdateMaterialID(&param_0->getMaterialTable());
}
/* 8032B0C0-8032B1D4 325A00 0114+00 1/1 1/1 0/0 .text
* searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP16J3DMaterialTable */
void J3DAnmTextureSRTKey::searchUpdateMaterialID(J3DMaterialTable* param_0) {
for (u16 i = 0; i < u16(mTrackNum / 3); i++) {
s32 r3 = param_0->getMaterialName()->getIndex(mUpdateMaterialName.getName(i));
if (r3 != -1) {
mUpdateMaterialID[i] = r3;
} else {
mUpdateMaterialID[i] = -1;
}
}
for (u16 i = 0; i < u16(field_0x4a / 3); i++) {
s32 r3 = param_0->getMaterialName()->getIndex(mPostUpdateMaterialName.getName(i));
if (r3 != -1) {
mPostUpdateMaterialID[i] = r3;
} else {
mPostUpdateMaterialID[i] = -1;
}
}
}
/* 8032B1D4-8032B1F8 325B14 0024+00 0/0 8/8 6/6 .text
* searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP12J3DModelData */
void J3DAnmTextureSRTKey::searchUpdateMaterialID(J3DModelData* param_0) {
searchUpdateMaterialID(&param_0->getMaterialTable());
}
/* ############################################################################################## */
/* 8045645C-80456460 004A5C 0004+00 1/1 0/0 0/0 .sdata2 @1817 */
SECTION_SDATA2 static f32 lit_1817 = -1024.0f;
/* 80456460-80456468 004A60 0004+04 1/1 0/0 0/0 .sdata2 @1818 */
SECTION_SDATA2 static f32 lit_1818[1 + 1 /* padding */] = {
1023.0f,
/* padding */
0.0f,
};
/* 8032B1F8-8032B4BC 325B38 02C4+00 0/0 2/2 1/1 .text
* getTevColorReg__15J3DAnmTevRegKeyCFUsP11_GXColorS10 */
void J3DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* param_1) const {
// NONMATCHING
}
/* 8032B4BC-8032B780 325DFC 02C4+00 0/0 1/1 1/1 .text
* getTevKonstReg__15J3DAnmTevRegKeyCFUsP8_GXColor */
void J3DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* param_1) const {
// NONMATCHING
}
/* 8032B780-8032B87C 3260C0 00FC+00 1/1 1/1 0/0 .text
* searchUpdateMaterialID__15J3DAnmTevRegKeyFP16J3DMaterialTable */
void J3DAnmTevRegKey::searchUpdateMaterialID(J3DMaterialTable* param_0) {
// NONMATCHING
}
/* 8032B87C-8032B8A0 3261BC 0024+00 0/0 9/9 4/4 .text
* searchUpdateMaterialID__15J3DAnmTevRegKeyFP12J3DModelData */
void J3DAnmTevRegKey::searchUpdateMaterialID(J3DModelData* param_0) {
searchUpdateMaterialID(&param_0->getMaterialTable());
}
/* 8032B8A0-8032BAD4 3261E0 0234+00 6/6 0/0 0/0 .text
* J3DGetKeyFrameInterpolation<s>__FfP18J3DAnmKeyTableBasePs */
extern "C" void func_8032B8A0(void* _this, f32 param_0, J3DAnmKeyTableBase* param_1,
s16* param_2) {
// NONMATCHING
}
/* 8032BAD4-8032BC50 326414 017C+00 3/3 0/0 0/0 .text
* J3DGetKeyFrameInterpolation<f>__FfP18J3DAnmKeyTableBasePf */
extern "C" void func_8032BAD4(void* _this, f32 param_0, J3DAnmKeyTableBase* param_1,
f32* param_2) {
// NONMATCHING
}
/* 8032BC50-8032BCAC 326590 005C+00 1/0 0/0 0/0 .text __dt__14J3DAnmVtxColorFv */
extern "C" void __dt__14J3DAnmVtxColorFv() {
// asm J3DAnmVtxColor::~J3DAnmVtxColor() {
// NONMATCHING
}
/* 8032BCAC-8032BD20 3265EC 0074+00 1/0 0/0 0/0 .text __dt__11J3DAnmColorFv */
extern "C" void __dt__11J3DAnmColorFv() {
// asm J3DAnmColor::~J3DAnmColor() {
// NONMATCHING
}
/* 8032BD20-8032BD94 326660 0074+00 1/0 0/0 0/0 .text __dt__16J3DAnmTexPatternFv */
extern "C" void __dt__16J3DAnmTexPatternFv() {
// asm J3DAnmTexPattern::~J3DAnmTexPattern() {
// NONMATCHING
}
/* 8032BD94-8032BD9C 3266D4 0008+00 1/0 0/0 0/0 .text getKind__16J3DAnmTexPatternCFv */
s32 J3DAnmTexPattern::getKind() const {
return 2;
}
/* 8032BD9C-8032BE24 3266DC 0088+00 1/0 0/0 0/0 .text __dt__15J3DAnmTevRegKeyFv */
extern "C" void __dt__15J3DAnmTevRegKeyFv() {
// asm J3DAnmTevRegKey::~J3DAnmTevRegKey() {
// NONMATCHING
}
/* 8032BE24-8032BE2C 326764 0008+00 1/0 0/0 0/0 .text getKind__15J3DAnmTevRegKeyCFv */
s32 J3DAnmTevRegKey::getKind() const {
return 5;
}
/* 8032BE2C-8032BEB0 32676C 0084+00 1/0 0/0 0/0 .text __dt__14J3DAnmColorKeyFv */
extern "C" void __dt__14J3DAnmColorKeyFv() {
// asm J3DAnmColorKey::~J3DAnmColorKey() {
// NONMATCHING
}
/* 8032BEB0-8032BEB8 3267F0 0008+00 1/0 0/0 0/0 .text getKind__14J3DAnmColorKeyCFv */
s32 J3DAnmColorKey::getKind() const {
return 11;
}
/* 8032BEB8-8032BF3C 3267F8 0084+00 1/0 0/0 0/0 .text __dt__15J3DAnmColorFullFv */
extern "C" void __dt__15J3DAnmColorFullFv() {
// asm J3DAnmColorFull::~J3DAnmColorFull() {
// NONMATCHING
}
/* 8032BF3C-8032BF44 32687C 0008+00 1/0 0/0 0/0 .text getKind__15J3DAnmColorFullCFv */
s32 J3DAnmColorFull::getKind() const {
return 10;
}
/* 8032BF44-8032BF4C 326884 0008+00 1/0 0/0 0/0 .text getKind__11J3DAnmColorCFv */
s32 J3DAnmColor::getKind() const {
return 1;
}
/* 8032BF4C-8032BF50 32688C 0004+00 1/0 0/0 0/0 .text getColor__11J3DAnmColorCFUsP8_GXColor */
void J3DAnmColor::getColor(u16 param_0, _GXColor* param_1) const {
/* empty function */
}
/* 8032BF50-8032BFBC 326890 006C+00 1/0 0/0 0/0 .text __dt__17J3DAnmVtxColorKeyFv */
extern "C" void __dt__17J3DAnmVtxColorKeyFv() {
// asm J3DAnmVtxColorKey::~J3DAnmVtxColorKey() {
// NONMATCHING
}
/* 8032BFBC-8032BFC4 3268FC 0008+00 1/0 0/0 0/0 .text getKind__17J3DAnmVtxColorKeyCFv */
s32 J3DAnmVtxColorKey::getKind() const {
return 15;
}
/* 8032BFC4-8032C030 326904 006C+00 1/0 0/0 0/0 .text __dt__18J3DAnmVtxColorFullFv */
extern "C" void __dt__18J3DAnmVtxColorFullFv() {
// asm J3DAnmVtxColorFull::~J3DAnmVtxColorFull() {
// NONMATCHING
}
/* 8032C030-8032C038 326970 0008+00 1/0 0/0 0/0 .text getKind__18J3DAnmVtxColorFullCFv */
s32 J3DAnmVtxColorFull::getKind() const {
return 14;
}
/* 8032C038-8032C040 326978 0008+00 1/0 0/0 0/0 .text getKind__14J3DAnmVtxColorCFv */
s32 J3DAnmVtxColor::getKind() const {
return 7;
}
/* 8032C040-8032C044 326980 0004+00 1/0 0/0 0/0 .text getColor__14J3DAnmVtxColorCFUcUsP8_GXColor
*/
void J3DAnmVtxColor::getColor(u8 param_0, u16 param_1, _GXColor* param_2) const {
/* empty function */
}
/* 8032C044-8032C0B0 326984 006C+00 1/0 0/0 0/0 .text __dt__16J3DAnmClusterKeyFv */
extern "C" void __dt__16J3DAnmClusterKeyFv() {
// asm J3DAnmClusterKey::~J3DAnmClusterKey() {
// NONMATCHING
}
/* 8032C0B0-8032C0B8 3269F0 0008+00 1/0 0/0 0/0 .text getKind__16J3DAnmClusterKeyCFv */
s32 J3DAnmClusterKey::getKind() const {
return 13;
}
/* 8032C0B8-8032C114 3269F8 005C+00 1/0 0/0 0/0 .text __dt__13J3DAnmClusterFv */
extern "C" void __dt__13J3DAnmClusterFv() {
// asm J3DAnmCluster::~J3DAnmCluster() {
// NONMATCHING
}
/* 8032C114-8032C11C 326A54 0008+00 1/0 0/0 0/0 .text getKind__13J3DAnmClusterCFv */
s32 J3DAnmCluster::getKind() const {
return 3;
}
/* 8032C11C-8032C124 326A5C 0008+00 1/0 0/0 0/0 .text getWeight__13J3DAnmClusterCFUs */
f32 J3DAnmCluster::getWeight(u16 param_0) const {
return lit_852;
}
/* 8032C124-8032C190 326A64 006C+00 1/0 0/0 0/0 .text __dt__17J3DAnmClusterFullFv */
extern "C" void __dt__17J3DAnmClusterFullFv() {
// asm J3DAnmClusterFull::~J3DAnmClusterFull() {
// NONMATCHING
}
/* 8032C190-8032C198 326AD0 0008+00 1/0 0/0 0/0 .text getKind__17J3DAnmClusterFullCFv */
s32 J3DAnmClusterFull::getKind() const {
return 12;
}
/* 8032C198-8032C220 326AD8 0088+00 1/0 0/0 0/0 .text __dt__19J3DAnmTextureSRTKeyFv */
extern "C" void __dt__19J3DAnmTextureSRTKeyFv() {
// asm J3DAnmTextureSRTKey::~J3DAnmTextureSRTKey() {
// NONMATCHING
}
/* 8032C220-8032C228 326B60 0008+00 1/0 0/0 0/0 .text getKind__19J3DAnmTextureSRTKeyCFv
*/
s32 J3DAnmTextureSRTKey::getKind() const {
return 4;
}
/* ############################################################################################## */
/* 803CEE34-803CEE48 02BF54 0014+00 1/1 1/1 0/0 .data __vt__27J3DAnmTransformFullWithLerp
*/
SECTION_DATA extern void* __vt__27J3DAnmTransformFullWithLerp[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__27J3DAnmTransformFullWithLerpFv,
(void*)getKind__27J3DAnmTransformFullWithLerpCFv,
(void*)getTransform__27J3DAnmTransformFullWithLerpCFUsP16J3DTransformInfo,
};
/* 803CEE48-803CEE60 02BF68 0014+04 2/2 1/1 0/0 .data __vt__19J3DAnmTransformFull */
SECTION_DATA extern void* __vt__19J3DAnmTransformFull[5 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__19J3DAnmTransformFullFv,
(void*)getKind__19J3DAnmTransformFullCFv,
(void*)getTransform__19J3DAnmTransformFullCFUsP16J3DTransformInfo,
/* padding */
NULL,
};
/* 8032C228-8032C2A4 326B68 007C+00 1/0 0/0 0/0 .text __dt__27J3DAnmTransformFullWithLerpFv */
extern "C" void __dt__27J3DAnmTransformFullWithLerpFv() {
// asm J3DAnmTransformFullWithLerp::~J3DAnmTransformFullWithLerp() {
// NONMATCHING
}
/* 8032C2A4-8032C2AC 326BE4 0008+00 1/0 0/0 0/0 .text getKind__27J3DAnmTransformFullWithLerpCFv */
s32 J3DAnmTransformFullWithLerp::getKind() const {
return 16;
}
/* 8032C2AC-8032C318 326BEC 006C+00 1/0 0/0 0/0 .text __dt__19J3DAnmTransformFullFv */
extern "C" void __dt__19J3DAnmTransformFullFv() {
// asm J3DAnmTransformFull::~J3DAnmTransformFull() {
// NONMATCHING
}
/* 8032C318-8032C320 326C58 0008+00 1/0 0/0 0/0 .text getKind__19J3DAnmTransformFullCFv
*/
s32 J3DAnmTransformFull::getKind() const {
return 9;
}
+212
View File
@@ -0,0 +1,212 @@
//
// Generated By: dol2asm
// Translation Unit: J3DCluster
//
#include "JSystem/J3DGraphAnimator/J3DCluster.h"
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "dol2asm.h"
#include "dolphin/os.h"
#ifdef DEBUG
#define J3D_ASSERT(COND) \
if ((COND) == 0) { \
JUTAssertion::showAssert(JUTAssertion::getSDevice(), __FILE__, __LINE__, \
"Error : null pointer"); \
OSPanic(__FILE__, __LINE__, "Halt"); \
}
#else
#define J3D_ASSERT(COND)
#endif
//
// Forward References:
//
extern "C" void __ct__13J3DDeformDataFv();
extern "C" void offAllFlag__13J3DDeformDataFUl();
extern "C" void deform__13J3DDeformDataFP8J3DModel();
extern "C" void deform__13J3DDeformDataFP15J3DVertexBuffer();
extern "C" void setAnm__13J3DDeformDataFP13J3DAnmCluster();
extern "C" void __ct__11J3DDeformerFP13J3DDeformData();
extern "C" void deform__11J3DDeformerFP15J3DVertexBufferUs();
extern "C" void deform_VtxPosF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf();
extern "C" void deform_VtxNrmF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf();
extern "C" void deform__11J3DDeformerFP15J3DVertexBufferUsPf();
extern "C" void normalizeWeight__11J3DDeformerFiPf();
//
// External References:
//
extern "C" void PPCSync();
extern "C" void __cvt_fp2unsigned();
extern "C" void _savegpr_21();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_21();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" f32 asinAcosTable___5JMath[1032];
//
// Declarations:
//
/* 8032E1F8-8032E230 328B38 0038+00 0/0 1/1 0/0 .text __ct__13J3DDeformDataFv */
J3DDeformData::J3DDeformData() {
mClusterNum = 0;
mClusterKeyNum = 0;
mClusterVertexNum = 0;
mClusterPointer = NULL;
mClusterKeyPointer = NULL;
mClusterVertex = NULL;
mVtxPosNum = 0;
mVtxNrmNum = 0;
mVtxPos = NULL;
mVtxNrm = NULL;
mClusterName = NULL;
mClusterKeyName = NULL;
}
/* 8032E230-8032E274 328B70 0044+00 0/0 1/1 0/0 .text offAllFlag__13J3DDeformDataFUl */
void J3DDeformData::offAllFlag(u32 i_flag) {
for (u16 i = 0; i < mClusterNum; i++) {
mClusterPointer[i].getDeformer()->offFlag(i_flag);
}
}
/* 8032E274-8032E298 328BB4 0024+00 0/0 1/1 0/0 .text deform__13J3DDeformDataFP8J3DModel
*/
void J3DDeformData::deform(J3DModel* model) {
J3D_ASSERT(model != NULL);
deform(model->getVertexBuffer());
}
/* 8032E298-8032E364 328BD8 00CC+00 1/1 0/0 0/0 .text deform__13J3DDeformDataFP15J3DVertexBuffer
*/
void J3DDeformData::deform(J3DVertexBuffer* buffer) {
J3D_ASSERT(buffer != NULL);
buffer->swapVtxPosArrayPointer();
buffer->swapVtxNrmArrayPointer();
for (u16 i = 0; i < mClusterNum; i++) {
mClusterPointer[i].getDeformer()->deform(buffer, i);
}
DCStoreRangeNoSync(buffer->getVtxPosArrayPointer(0),
buffer->getVertexData()->getVtxNum() * sizeof(Vec));
DCStoreRangeNoSync(buffer->getVtxNrmArrayPointer(0),
buffer->getVertexData()->getNrmNum() * sizeof(Vec));
PPCSync();
buffer->setCurrentVtxPos(buffer->getVtxPosArrayPointer(0));
buffer->setCurrentVtxNrm(buffer->getVtxNrmArrayPointer(0));
}
/* 8032E364-8032E39C 328CA4 0038+00 0/0 1/1 0/0 .text setAnm__13J3DDeformDataFP13J3DAnmCluster */
void J3DDeformData::setAnm(J3DAnmCluster* anm) {
for (u16 i = 0; i < mClusterNum; i++) {
mClusterPointer[i].getDeformer()->setAnmCluster(anm);
}
}
/* 8032E39C-8032E3BC 328CDC 0020+00 0/0 1/1 0/0 .text __ct__11J3DDeformerFP13J3DDeformData */
J3DDeformer::J3DDeformer(J3DDeformData* data) {
mDeformData = data;
mAnmCluster = NULL;
field_0x8 = NULL;
field_0xc = NULL;
mFlags = 3;
}
/* 8032E3BC-8032E4A4 328CFC 00E8+00 1/1 0/0 0/0 .text deform__11J3DDeformerFP15J3DVertexBufferUs
*/
void J3DDeformer::deform(J3DVertexBuffer* buffer, u16 param_1) {
J3D_ASSERT(buffer != 0);
u16 var_r31 = 0;
if (mAnmCluster != NULL) {
for (u16 i = 0; i < param_1; i++) {
var_r31 += mDeformData->getClusterPointer(i)->mKeyNum;
}
u16 num = mDeformData->getClusterPointer(param_1)->mKeyNum;
for (u16 i = 0; i < num; i++) {
field_0x8[i] = mAnmCluster->getWeight(var_r31++);
}
deform(buffer, param_1, field_0x8);
}
}
/* ############################################################################################## */
/* 80456470-80456474 004A70 0004+00 2/2 0/0 0/0 .sdata2 @830 */
SECTION_SDATA2 static f32 lit_830 = 1.0f;
/* 80456474-80456478 004A74 0004+00 1/1 0/0 0/0 .sdata2 @840 */
SECTION_SDATA2 static f32 lit_840 = 1.0f;
/* 80456478-8045647C 004A78 0004+00 1/1 0/0 0/0 .sdata2 None */
SECTION_SDATA2 static f32 data_80456478 = -1.0f;
/* 8045647C-80456480 004A7C 0004+00 3/3 0/0 0/0 .sdata2 @866 */
SECTION_SDATA2 static u8 lit_866[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 8032E4A4-8032E60C 328DE4 0168+00 1/1 0/0 0/0 .text
* deform_VtxPosF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf */
void J3DDeformer::deform_VtxPosF32(J3DVertexBuffer* param_0, J3DCluster* param_1,
J3DClusterKey* param_2, f32* param_3) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80456480-80456484 004A80 0004+00 1/1 0/0 0/0 .sdata2 @1020 */
SECTION_SDATA2 static f32 lit_1020 = -1.0f;
/* 80456484-80456488 004A84 0004+00 1/1 0/0 0/0 .sdata2 @1021 */
SECTION_SDATA2 static f32 lit_1021 = 3.1415927410125732f;
/* 80456488-8045648C 004A88 0004+00 1/1 0/0 0/0 .sdata2 @1022 */
SECTION_SDATA2 static f32 lit_1022 = 1023.5f;
/* 8045648C-80456490 004A8C 0004+00 1/1 0/0 0/0 .sdata2 @1023 */
SECTION_SDATA2 static f32 lit_1023 = 1.5707963705062866f;
/* 80456490-80456494 004A90 0004+00 1/1 0/0 0/0 .sdata2 @1024 */
SECTION_SDATA2 static f32 lit_1024 = 57.2957763671875f;
/* 80456494-80456498 004A94 0004+00 1/1 0/0 0/0 .sdata2 @1025 */
SECTION_SDATA2 static f32 lit_1025 = 180.0f;
/* 80456498-804564A0 004A98 0008+00 1/1 0/0 0/0 .sdata2 @1027 */
SECTION_SDATA2 static f64 lit_1027 = 4503599627370496.0 /* cast u32 to float */;
/* 8032E60C-8032EAB4 328F4C 04A8+00 1/1 0/0 0/0 .text
* deform_VtxNrmF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf */
void J3DDeformer::deform_VtxNrmF32(J3DVertexBuffer* param_0, J3DCluster* param_1,
J3DClusterKey* param_2, f32* param_3) {
// NONMATCHING
}
/* 8032EAB4-8032EBCC 3293F4 0118+00 1/1 0/0 0/0 .text deform__11J3DDeformerFP15J3DVertexBufferUsPf
*/
void J3DDeformer::deform(J3DVertexBuffer* param_0, u16 param_1, f32* param_2) {
// NONMATCHING
}
/* 8032EBCC-8032EC28 32950C 005C+00 1/1 0/0 0/0 .text normalizeWeight__11J3DDeformerFiPf
*/
void J3DDeformer::normalizeWeight(int param_0, f32* param_1) {
// NONMATCHING
}
+269
View File
@@ -0,0 +1,269 @@
#include "JSystem/J3DGraphAnimator/J3DJoint.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/JMath/JMath.h"
#include "dol2asm.h"
#include "m_Do/m_Do_mtx.h"
/* 8032EC28-8032ECAC 329568 0084+00 0/0 1/1 0/0 .text
* init__25J3DMtxCalcJ3DSysInitBasicFRC3VecRA3_A4_Cf */
void J3DMtxCalcJ3DSysInitBasic::init(Vec const& scale, Mtx const& mtx) {
J3DSys::mCurrentS = scale;
J3DSys::mParentS = (Vec){1.0f, 1.0f, 1.0f};
JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y,
J3DSys::mCurrentS.z);
}
/* 8032ECAC-8032ED30 3295EC 0084+00 0/0 2/2 2/2 .text
* init__24J3DMtxCalcJ3DSysInitMayaFRC3VecRA3_A4_Cf */
void J3DMtxCalcJ3DSysInitMaya::init(Vec const& scale, Mtx const& mtx) {
J3DSys::mParentS = (Vec){1.0f, 1.0f, 1.0f};
J3DSys::mCurrentS = scale;
JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y,
J3DSys::mCurrentS.z);
}
/* ############################################################################################## */
/* 804515F0-804515F4 000AF0 0004+00 3/3 1/1 0/0 .sbss mMtxBuffer__10J3DMtxCalc */
J3DMtxBuffer* J3DMtxCalc::mMtxBuffer;
/* 804515F4-804515F8 000AF4 0004+00 4/4 9/9 2/2 .sbss mJoint__10J3DMtxCalc */
J3DJoint* J3DMtxCalc::mJoint;
inline s32 checkScaleOne(const Vec& param_0) {
if (param_0.x == 1.0f && param_0.y == 1.0f && param_0.z == 1.0f) {
return true;
} else {
return false;
}
}
/* 8032ED30-8032EE50 329670 0120+00 0/0 1/1 0/0 .text
* calcTransform__28J3DMtxCalcCalcTransformBasicFRC16J3DTransformInfo */
void J3DMtxCalcCalcTransformBasic::calcTransform(J3DTransformInfo const& transInfo) {
J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer();
u16 jntNo = J3DMtxCalc::getJoint()->getJntNo();
MtxP anmMtx = mtxBuf->getAnmMtx(jntNo);
J3DSys::mCurrentS.x *= transInfo.mScale.x;
J3DSys::mCurrentS.y *= transInfo.mScale.y;
J3DSys::mCurrentS.z *= transInfo.mScale.z;
J3DGetTranslateRotateMtx(transInfo, anmMtx);
if (!checkScaleOne(J3DSys::mCurrentS)) {
mtxBuf->setScaleFlag(jntNo, 0);
JMAMTXApplyScale(anmMtx, anmMtx, transInfo.mScale.x, transInfo.mScale.y,
transInfo.mScale.z);
} else {
mtxBuf->setScaleFlag(jntNo, 1);
}
MTXConcat(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentMtx);
MTXCopy(J3DSys::mCurrentMtx, anmMtx);
}
/* 8032EE50-8032EFBC 329790 016C+00 0/0 1/1 0/0 .text
* calcTransform__32J3DMtxCalcCalcTransformSoftimageFRC16J3DTransformInfo */
void J3DMtxCalcCalcTransformSoftimage::calcTransform(J3DTransformInfo const& transInfo) {
J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer();
u16 jntNo = J3DMtxCalc::getJoint()->getJntNo();
MtxP anmMtx = mtxBuf->getAnmMtx(jntNo);
J3DGetTranslateRotateMtx(transInfo.mRotation.x, transInfo.mRotation.y, transInfo.mRotation.z,
transInfo.mTranslate.x * J3DSys::mCurrentS.x,
transInfo.mTranslate.y * J3DSys::mCurrentS.y,
transInfo.mTranslate.z * J3DSys::mCurrentS.z, anmMtx);
MTXConcat(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentMtx);
J3DSys::mCurrentS.x *= transInfo.mScale.x;
J3DSys::mCurrentS.y *= transInfo.mScale.y;
J3DSys::mCurrentS.z *= transInfo.mScale.z;
if (!checkScaleOne(J3DSys::mCurrentS)) {
mtxBuf->setScaleFlag(jntNo, 0);
JMAMTXApplyScale(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y,
J3DSys::mCurrentS.z);
anmMtx[0][3] = J3DSys::mCurrentMtx[0][3];
anmMtx[1][3] = J3DSys::mCurrentMtx[1][3];
anmMtx[2][3] = J3DSys::mCurrentMtx[2][3];
} else {
mtxBuf->setScaleFlag(jntNo, 1);
MTXCopy(J3DSys::mCurrentMtx, anmMtx);
}
}
/* 8032EFBC-8032F13C 3298FC 0180+00 0/0 6/6 2/2 .text
* calcTransform__27J3DMtxCalcCalcTransformMayaFRC16J3DTransformInfo */
void J3DMtxCalcCalcTransformMaya::calcTransform(J3DTransformInfo const& transInfo) {
J3DJoint* joint = J3DMtxCalc::getJoint();
J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer();
u16 jntNo = joint->getJntNo();
MtxP anmMtx = mtxBuf->getAnmMtx(jntNo);
J3DGetTranslateRotateMtx(transInfo, anmMtx);
if (transInfo.mScale.x == 1.0f && transInfo.mScale.y == 1.0f && transInfo.mScale.z == 1.0f) {
mtxBuf->setScaleFlag(jntNo, 1);
} else {
mtxBuf->setScaleFlag(jntNo, 0);
JMAMTXApplyScale(anmMtx, anmMtx, transInfo.mScale.x, transInfo.mScale.y,
transInfo.mScale.z);
}
if (joint->getScaleCompensate() == 1) {
f32 invX = JMath::fastReciprocal(J3DSys::mParentS.x);
f32 invY = JMath::fastReciprocal(J3DSys::mParentS.y);
f32 invZ = JMath::fastReciprocal(J3DSys::mParentS.z);
anmMtx[0][0] *= invX;
anmMtx[0][1] *= invX;
anmMtx[0][2] *= invX;
anmMtx[1][0] *= invY;
anmMtx[1][1] *= invY;
anmMtx[1][2] *= invY;
anmMtx[2][0] *= invZ;
anmMtx[2][1] *= invZ;
anmMtx[2][2] *= invZ;
}
MTXConcat(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentMtx);
MTXCopy(J3DSys::mCurrentMtx, anmMtx);
J3DSys::mParentS.x = transInfo.mScale.x;
J3DSys::mParentS.y = transInfo.mScale.y;
J3DSys::mParentS.z = transInfo.mScale.z;
}
/* 8032F13C-8032F170 329A7C 0034+00 0/0 1/1 0/0 .text appendChild__8J3DJointFP8J3DJoint
*/
void J3DJoint::appendChild(J3DJoint* pChild) {
if (mChild == NULL) {
mChild = pChild;
} else {
J3DJoint* curChild = mChild;
while (curChild->getYounger() != NULL) {
curChild = curChild->getYounger();
}
curChild->setYounger(pChild);
}
}
/* 8032F170-8032F254 329AB0 00E4+00 0/0 1/1 0/0 .text __ct__8J3DJointFv */
J3DJoint::J3DJoint() {
mCallBackUserData = NULL;
mCallBack = NULL;
field_0x8 = NULL;
mChild = NULL;
mYounger = NULL;
mJntNo = 0;
mKind = 1;
mScaleCompensate = false;
__memcpy(&mTransformInfo, &j3dDefaultTransformInfo, sizeof(J3DTransformInfo));
mBoundingSphereRadius = 0.0f;
mMtxCalc = NULL;
mMesh = NULL;
Vec init = {0.0f, 0.0f, 0.0f};
mMin = init;
Vec init2 = {0.0f, 0.0f, 0.0f};
mMax = init2;
}
/* 8032F254-8032F3F8 329B94 01A4+00 0/0 1/1 0/0 .text entryIn__8J3DJointFv */
void J3DJoint::entryIn() {
MtxP anmMtx = j3dSys.getModel()->getAnmMtx(mJntNo);
j3dSys.getDrawBuffer(0)->setZMtx(anmMtx);
j3dSys.getDrawBuffer(1)->setZMtx(anmMtx);
for (J3DMaterial* mesh = mMesh; mesh != NULL;) {
if (mesh->getShape()->checkFlag(1)) {
mesh = mesh->getNext();
} else {
J3DMatPacket* matPacket = j3dSys.getModel()->getMatPacket(mesh->getIndex());
J3DShapePacket* shapePacket =
j3dSys.getModel()->getShapePacket(mesh->getShape()->getIndex());
if (!matPacket->isLocked()) {
if (mesh->getMaterialAnm()) {
J3DMaterialAnm* piVar8 = mesh->getMaterialAnm();
piVar8->calc(mesh);
}
mesh->calc(anmMtx);
}
mesh->setCurrentMtx();
matPacket->setMaterialAnmID(mesh->getMaterialAnm());
matPacket->setShapePacket(shapePacket);
J3DDrawBuffer* drawBuffer = j3dSys.getDrawBuffer(mesh->isDrawModeOpaTexEdge());
if ((u8)matPacket->entry(drawBuffer)) {
j3dSys.setMatPacket(matPacket);
J3DDrawBuffer::entryNum++;
mesh->makeDisplayList();
}
mesh = mesh->getNext();
}
}
}
/* ############################################################################################## */
/* 804515F8-80451600 000AF8 0004+04 1/1 1/1 0/0 .sbss mCurrentMtxCalc__8J3DJoint */
J3DMtxCalc* J3DJoint::mCurrentMtxCalc;
/* 8032F3F8-8032F5A8 329D38 01B0+00 0/0 1/1 0/0 .text recursiveCalc__8J3DJointFv */
void J3DJoint::recursiveCalc() {
J3DMtxCalc* prevMtxCalc = NULL;
Mtx prevCurrentMtx;
mDoMtx_copy(J3DSys::mCurrentMtx, prevCurrentMtx);
f32 currentX = J3DSys::mCurrentS.x;
f32 currentY = J3DSys::mCurrentS.y;
f32 currentZ = J3DSys::mCurrentS.z;
f32 parentX = J3DSys::mParentS.x;
f32 parentY = J3DSys::mParentS.y;
f32 parentZ = J3DSys::mParentS.z;
if (getMtxCalc() != NULL) {
prevMtxCalc = getCurrentMtxCalc();
J3DMtxCalc* piVar2 = this->getMtxCalc();
setCurrentMtxCalc(piVar2);
J3DMtxCalc::setJoint(this);
piVar2->calc();
} else {
if (getCurrentMtxCalc() != NULL) {
J3DMtxCalc* uVar6 = getCurrentMtxCalc();
J3DMtxCalc::setJoint(this);
uVar6->calc();
}
}
J3DJointCallBack jointCallback = getCallBack();
if (jointCallback != NULL) {
(*jointCallback)(this, 0);
}
J3DJoint* child = getChild();
if (child != NULL) {
child->recursiveCalc();
}
mDoMtx_copy(prevCurrentMtx, J3DSys::mCurrentMtx);
J3DSys::mCurrentS.x = currentX;
J3DSys::mCurrentS.y = currentY;
J3DSys::mCurrentS.z = currentZ;
J3DSys::mParentS.x = parentX;
J3DSys::mParentS.y = parentY;
J3DSys::mParentS.z = parentZ;
if (prevMtxCalc != NULL) {
setCurrentMtxCalc(prevMtxCalc);
}
if (jointCallback != NULL) {
(*jointCallback)(this, 1);
}
J3DJoint* younger = getYounger();
if (younger != NULL) {
younger->recursiveCalc();
}
}
@@ -0,0 +1,137 @@
#include "JSystem/J3DGraphAnimator/J3DJointTree.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h"
#include "JSystem/J3DGraphAnimator/J3DShapeTable.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
/* 80325A18-80325A9C 320358 0084+00 0/0 1/1 0/0 .text __ct__12J3DJointTreeFv */
J3DJointTree::J3DJointTree()
: mHierarchy(NULL), mFlags(0), mModelDataType(0), mRootNode(NULL), mBasicMtxCalc(NULL),
mJointNodePointer(NULL), mJointNum(0), mWEvlpMtxNum(0), mWEvlpMixMtxNum(0), mWEvlpMixIndex(0),
mWEvlpMixWeight(0), mInvJointMtx(NULL), mWEvlpImportantMtxIdx(0), field_0x40(0),
mJointName(NULL) {}
/* 80325A9C-80325C00 3203DC 0164+00 1/0 2/2 0/0 .text
* makeHierarchy__12J3DJointTreeFP8J3DJointPPC17J3DModelHierarchyP16J3DMaterialTableP13J3DShapeTable
*/
void J3DJointTree::makeHierarchy(J3DJoint* pJoint, J3DModelHierarchy const** pHierarchy,
J3DMaterialTable* pMaterialTable, J3DShapeTable* pShapeTable) {
enum {
kTypeEnd = 0x00,
kTypeBeginChild = 0x01,
kTypeEndChild = 0x02,
kTypeJoint = 0x10,
kTypeMaterial = 0x11,
kTypeShape = 0x12,
};
J3DJoint * curJoint = pJoint;
while (true) {
J3DJoint * newJoint = NULL;
J3DMaterial * newMaterial = NULL;
J3DShape * newShape = NULL;
const J3DModelHierarchy * inf = *pHierarchy;
u16 val;
switch (inf->mType) {
case kTypeBeginChild:
*pHierarchy = inf + 1;
makeHierarchy(curJoint, pHierarchy, pMaterialTable, pShapeTable);
break;
case kTypeEndChild:
*pHierarchy = inf + 1;
return;
case kTypeEnd:
return;
case kTypeJoint:
{
J3DJoint ** jointNodePointer = mJointNodePointer;
*pHierarchy = inf + 1;
newJoint = jointNodePointer[inf->mValue];
}
break;
case kTypeMaterial:
*pHierarchy = inf + 1;
val = inf->mValue;
newMaterial = pMaterialTable->getMaterialNodePointer(val);
break;
case kTypeShape:
*pHierarchy = inf + 1;
val = inf->mValue;
newShape = pShapeTable->getShapeNodePointer(val);
break;
}
if (newJoint != NULL) {
curJoint = newJoint;
if (pJoint == NULL)
mRootNode = newJoint;
else
pJoint->appendChild(newJoint);
} else if (newMaterial != NULL) {
if (pJoint->getMesh() != NULL)
newMaterial->mNext = pJoint->getMesh();
pJoint->mMesh = newMaterial;
newMaterial->mJoint = pJoint;
} else if (newShape != NULL) {
newMaterial = pJoint->getMesh();
newMaterial->mShape = newShape;
newShape->mMaterial = newMaterial;
}
}
}
/* 80325C00-80325CAC 320540 00AC+00 0/0 2/2 0/0 .text findImportantMtxIndex__12J3DJointTreeFv */
void J3DJointTree::findImportantMtxIndex() {
const s32 wEvlpMtxNum = getWEvlpMtxNum();
u32 tableIdx = 0;
const u16 drawFullWgtMtxNum = getDrawFullWgtMtxNum();
const u16 * wEvlpMixIndex = getWEvlpMixIndex();
const f32 * wEvlpMixWeight = getWEvlpMixWeight();
u16 * wEvlpImportantMtxIdx = getWEvlpImportantMtxIndex();
// Rigid matrices are easy.
for (u16 i = 0; i < drawFullWgtMtxNum; i++)
wEvlpImportantMtxIdx[i] = mDrawMtxData.mDrawMtxIndex[i];
// For envelope matrices, we need to find the matrix with the most contribution.
for (s32 i = 0; i < wEvlpMtxNum; i++) {
s32 mixNum = getWEvlpMixMtxNum(i);
u16 bestIdx = 0;
f32 bestWeight = -0.1f;
for (s32 j = 0; j < mixNum; j++) {
if (bestWeight < wEvlpMixWeight[tableIdx]) {
bestWeight = wEvlpMixWeight[tableIdx];
bestIdx = wEvlpMixIndex[tableIdx];
}
tableIdx++;
}
wEvlpImportantMtxIdx[i + mDrawMtxData.mDrawFullWgtMtxNum] = bestIdx;
}
}
/* 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);
J3DMtxCalc::setMtxBuffer(pMtxBuffer);
J3DJoint* root = getRootNode();
if (root == NULL)
return;
root->setCurrentMtxCalc(getBasicMtxCalc());
root->recursiveCalc();
}
/* 80325D1C-80325D24 32065C 0008+00 1/1 0/0 0/0 .text setMtxBuffer__10J3DMtxCalcFP12J3DMtxBuffer
*/
void J3DMtxCalc::setMtxBuffer(J3DMtxBuffer* mtxBuffer) {
J3DMtxCalc::mMtxBuffer = mtxBuffer;
}
/* 80325D24-80325D88 320664 0064+00 1/0 0/0 0/0 .text __dt__12J3DJointTreeFv */
J3DJointTree::~J3DJointTree() {}
@@ -0,0 +1,128 @@
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void calc__14J3DMaterialAnmCFP11J3DMaterial();
//
// External References:
//
extern "C" void __dt__14J3DMaterialAnmFv();
//
// Declarations:
//
void J3DMaterialAnm::initialize() {
for (int i = 0; i < ARRAY_SIZE(mMatColorAnm); i++) {
mMatColorAnm[i].setAnmFlag(false);
}
for (int i = 0; i < ARRAY_SIZE(mTexNoAnm); i++) {
mTexNoAnm[i].setAnmFlag(false);
}
for (int i = 0; i < ARRAY_SIZE(mTevColorAnm); i++) {
mTevColorAnm[i].setAnmFlag(false);
}
for (int i = 0; i < ARRAY_SIZE(mTevKColorAnm); i++) {
mTevKColorAnm[i].setAnmFlag(false);
}
for (int i = 0; i < ARRAY_SIZE(mTexMtxAnm); i++) {
mTexMtxAnm[i].setAnmFlag(false);
}
}
void J3DMaterialAnm::calc(J3DMaterial* pMat) const {
for (u32 i = 0; i < ARRAY_SIZE(mMatColorAnm); i++) {
if (mMatColorAnm[i].getAnmFlag()) {
_GXColor* color = pMat->getColorBlock()->getMatColor(i);
mMatColorAnm[i].calc(color);
}
}
u16 tmp;
for (u32 i = 0; i < ARRAY_SIZE(mTexNoAnm); i++) {
if (mTexNoAnm[i].getAnmFlag()) {
mTexNoAnm[i].calc(&tmp);
pMat->getTevBlock()->setTexNo(i, tmp);
}
}
for (u32 i = 0; i < 3; i++) {
if (mTevColorAnm[i].getAnmFlag()) {
_GXColorS10* color = pMat->getTevBlock()->getTevColor(i);
mTevColorAnm[i].calc(color);
}
}
for (u32 i = 0; i < ARRAY_SIZE(mTevKColorAnm); i++) {
if (mTevKColorAnm[i].getAnmFlag()) {
_GXColor* color = pMat->getTevBlock()->getTevKColor(i);
mTevKColorAnm[i].calc(color);
}
}
for (u32 i = 0; i < ARRAY_SIZE(mTexMtxAnm); i++) {
if (mTexMtxAnm[i].getAnmFlag()) {
J3DTexMtx* texMtx = pMat->getTexGenBlock()->getTexMtx(i);
mTexMtxAnm[i].calc(&texMtx->getTexMtxInfo().mSRT);
}
}
}
void J3DMaterialAnm::setMatColorAnm(int idx, J3DMatColorAnm* p_matColorAnm) {
if (p_matColorAnm == NULL) {
mMatColorAnm[idx].setAnmFlag(false);
} else {
mMatColorAnm[idx] = *p_matColorAnm;
}
}
void J3DMaterialAnm::setTexMtxAnm(int idx, J3DTexMtxAnm* p_texMtxAnm) {
if (p_texMtxAnm == NULL) {
mTexMtxAnm[idx].setAnmFlag(false);
} else {
mTexMtxAnm[idx] = *p_texMtxAnm;
}
}
void J3DMaterialAnm::setTexNoAnm(int idx, J3DTexNoAnm* p_texNoAnm) {
if (p_texNoAnm == NULL) {
mTexNoAnm[idx].setAnmFlag(false);
} else {
mTexNoAnm[idx] = *p_texNoAnm;
}
}
void J3DMaterialAnm::setTevColorAnm(int idx, J3DTevColorAnm* p_tevColorAnm) {
if (p_tevColorAnm == NULL) {
mTevColorAnm[idx].setAnmFlag(false);
} else {
mTevColorAnm[idx] = *p_tevColorAnm;
}
}
void J3DMaterialAnm::setTevKColorAnm(int idx, J3DTevKColorAnm* p_tevKColorAnm) {
if (p_tevKColorAnm == NULL) {
mTevKColorAnm[idx].setAnmFlag(false);
} else {
mTevKColorAnm[idx] = *p_tevKColorAnm;
}
}
/* ############################################################################################## */
/* 803CEE60-803CEE70 02BF80 0010+00 0/0 10/10 74/74 .data __vt__14J3DMaterialAnm */
SECTION_DATA extern void* __vt__14J3DMaterialAnm[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14J3DMaterialAnmFv,
(void*)calc__14J3DMaterialAnmCFP11J3DMaterial,
};
@@ -0,0 +1,332 @@
//
// Generated By: dol2asm
// Translation Unit: J3DMaterialAttach
//
#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void clear__16J3DMaterialTableFv();
extern "C" void __ct__16J3DMaterialTableFv();
extern "C" void __dt__16J3DMaterialTableFv();
extern "C" void removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor();
extern "C" void removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern();
extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey();
extern "C" void createTexMtxForAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
extern "C" void entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor();
extern "C" void entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern();
extern "C" void entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
extern "C" void entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey();
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void __as__13J3DTexMtxInfoFRC13J3DTexMtxInfo();
extern "C" void setMatColorAnm__14J3DMaterialAnmFiP14J3DMatColorAnm();
extern "C" void setTexMtxAnm__14J3DMaterialAnmFiP12J3DTexMtxAnm();
extern "C" void setTexNoAnm__14J3DMaterialAnmFiP11J3DTexNoAnm();
extern "C" void setTevColorAnm__14J3DMaterialAnmFiP14J3DTevColorAnm();
extern "C" void setTevKColorAnm__14J3DMaterialAnmFiP15J3DTevKColorAnm();
extern "C" void _savegpr_22();
extern "C" void _savegpr_24();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _restgpr_22();
extern "C" void _restgpr_24();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" extern void* __vt__11J3DTexNoAnm[3];
/* 8032F5A8-8032F5D0 329EE8 0028+00 0/0 1/1 0/0 .text clear__16J3DMaterialTableFv */
void J3DMaterialTable::clear() {
mMaterialNum = 0;
mUniqueMatNum = 0;
mMaterialNodePointer = NULL;
mMaterialName = NULL;
field_0x10 = 0;
mTexture = NULL;
mTextureName = NULL;
field_0x1c = 0;
}
/* 8032F5D0-8032F604 329F10 0034+00 0/0 2/2 0/0 .text __ct__16J3DMaterialTableFv */
J3DMaterialTable::J3DMaterialTable() {
mMaterialNum = 0;
mUniqueMatNum = 0;
mMaterialNodePointer = NULL;
mMaterialName = NULL;
field_0x10 = 0;
mTexture = NULL;
mTextureName = NULL;
field_0x1c = 0;
}
/* 8032F604-8032F64C 329F44 0048+00 1/0 1/1 0/0 .text __dt__16J3DMaterialTableFv */
J3DMaterialTable::~J3DMaterialTable() {}
/* 8032F64C-8032F6F8 329F8C 00AC+00 0/0 1/1 5/5 .text
* removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */
int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnmColor) {
int ret = false;
u16 updateMatNum = pAnmColor->getUpdateMaterialNum();
for (u16 i = 0; i < updateMatNum; i++) {
if (pAnmColor->isValidUpdateMaterialID(i)) {
J3DMaterial* materialNode = getMaterialNodePointer(pAnmColor->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = materialNode->getMaterialAnm();
if (materialAnm == NULL) {
ret = true;
} else {
materialAnm->setMatColorAnm(0, NULL);
}
}
}
return ret;
}
/* 8032F6F8-8032F7B4 32A038 00BC+00 0/0 5/5 10/10 .text
* removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */
int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* anm) {
int ret = 0;
u16 materialNum = anm->getUpdateMaterialNum();
J3DAnmTexPatternFullTable* anm_table = anm->mAnmTable;
for (u16 i = 0; i < materialNum; i++) {
if (anm->isValidUpdateMaterialID(i)) {
u16 materialID = anm->getUpdateMaterialID(i);
J3DMaterialAnm* pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm();
u8 texNo = anm_table[i].mTexNo;
if (pMatAnm == NULL)
ret = 1;
else
pMatAnm->setTexNoAnm(texNo, NULL);
}
}
return ret;
}
/* 8032F7B4-8032F880 32A0F4 00CC+00 0/0 4/4 26/26 .text
* removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) {
s32 ret = 0;
u16 materialNum = pAnm->getUpdateMaterialNum();
for (u16 i = 0; i < materialNum; i++) {
u16 materialID = pAnm->getUpdateMaterialID(i);
if (materialID != 0xFFFF) {
J3DMaterial* pMaterial = getMaterialNodePointer(materialID);
J3DMaterialAnm* pMatAnm = pMaterial->getMaterialAnm();
u8 texMtxID = pAnm->getUpdateTexMtxID(i);
if (pMatAnm == NULL) {
ret = 1;
} else if (texMtxID != 0xFF) {
pMatAnm->setTexMtxAnm(texMtxID, NULL);
}
}
}
return ret;
}
/* 8032F880-8032F9C0 32A1C0 0140+00 0/0 7/7 24/24 .text
* removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */
int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey* pAnm) {
s32 ret = 0;
u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum();
u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum();
for (u16 i = 0; i < cRegMaterialNum; i++) {
if (pAnm->getCRegUpdateMaterialID(i) != 0xFFFF) {
J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getCRegUpdateMaterialID(i))->getMaterialAnm();
u32 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId;
if (pMatAnm == NULL)
ret = 1;
else
pMatAnm->setTevColorAnm(colorId, NULL);
}
}
for (u16 i = 0; i < kRegMaterialNum; i++) {
if (pAnm->getKRegUpdateMaterialID(i) != 0xFFFF) {
J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getKRegUpdateMaterialID(i))->getMaterialAnm();
u32 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId;
if (pMatAnm == NULL) {
ret = 1;
} else {
pMatAnm->setTevKColorAnm(colorId, NULL);
}
}
}
return ret;
}
/* 8032F9C0-8032FAF4 32A300 0134+00 1/1 0/0 0/0 .text
* createTexMtxForAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
int J3DMaterialTable::createTexMtxForAnimator(J3DAnmTextureSRTKey* param_1) {
int rv = 0;
u16 materialNum = param_1->getUpdateMaterialNum();
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < materialNum; i++) {
if (param_1->isValidUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
u8 mtxId = param_1->getUpdateTexMtxID(i);
if (material->getMaterialAnm() == 0) {
rv = 1;
} else {
u32 mtxId2 = mtxId;
if (mtxId2 != 0xff && material->getTexMtx(mtxId2) == 0) {
J3DTexMtx* mtx = new J3DTexMtx();
rv = 4;
material->setTexMtx(mtxId2, mtx);
JUT_WARN(420, "matNo<%d> : texMtx%d nothing !\n", i, mtxId);
}
}
}
}
return rv;
}
/* 8032FAF4-8032FBC8 32A434 00D4+00 0/0 1/1 0/0 .text
* entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */
int J3DMaterialTable::entryMatColorAnimator(J3DAnmColor* param_1) {
int rv = 0;
u16 materialNum = param_1->getUpdateMaterialNum();
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < materialNum; i++) {
if (param_1->isValidUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
if (materialAnm == 0) {
rv = 1;
} else {
J3DMatColorAnm matColorAnm(i, param_1);
materialAnm->setMatColorAnm(0, &matColorAnm);
}
}
}
return rv;
}
/* 8032FBC8-8032FCC4 32A508 00FC+00 0/0 7/7 1/1 .text
* entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */
int J3DMaterialTable::entryTexNoAnimator(J3DAnmTexPattern* param_1) {
int rv = 0;
u16 materialNum = param_1->getUpdateMaterialNum();
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < materialNum; i++) {
if (param_1->isValidUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
u8 texNo = param_1->getAnmTable()[i].mTexNo;
if (materialAnm == 0) {
rv = 1;
} else {
J3DTexNoAnm texNoAnm(i, param_1);
materialAnm->setTexNoAnm(texNo, &texNoAnm);
}
}
}
return rv;
}
/* 8032FCC4-8032FE70 32A604 01AC+00 0/0 14/14 6/6 .text
* entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
// getUpdateTexMtxID u8 issue / getSRTCenter
#ifdef NONMATCHING
int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_1) {
int rv = 0;
u16 materialNum = param_1->getUpdateMaterialNum();
rv = createTexMtxForAnimator(param_1);
if (rv != 0) {
return rv;
}
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < materialNum; i++) {
if (param_1->isValidUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
u8 texMtxID = param_1->getUpdateTexMtxID(i);
if (materialAnm == 0) {
rv = 1;
} else {
if (texMtxID != 0xff) {
if (material->getTexCoord(texMtxID) != NULL) {
material->getTexCoord(texMtxID)->setTexGenMtx(texMtxID * 3 + 30);
}
J3DTexMtxInfo& iVar3 = material->getTexMtx(texMtxID)->getTexMtxInfo();
iVar3.mInfo = (iVar3.mInfo & 0x3f)| (param_1->getTexMtxCalcType() << 7);
iVar3.mCenter.x = param_1->getSRTCenter(i)->x;
iVar3.mCenter.y = param_1->getSRTCenter(i)->y;
iVar3.mCenter.z = param_1->getSRTCenter(i)->z;
J3DTexMtxAnm texMtxAnm(i, param_1);
materialAnm->setTexMtxAnm(texMtxID, &texMtxAnm);
}
}
}
}
return rv;
}
#else
int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_0) {
// NONMATCHING
}
#endif
/* 8032FE70-8032FFEC 32A7B0 017C+00 0/0 10/10 4/4 .text
* entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */
int J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey* param_1) {
int rv = 0;
u16 cRegNum = param_1->getCRegUpdateMaterialNum();
u16 kRegNum = param_1->getKRegUpdateMaterialNum();
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < cRegNum; i++) {
if (param_1->isValidCRegUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getCRegUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
u8 colorId = param_1->getAnmCRegKeyTable()[i].mColorId;
if (materialAnm == NULL) {
rv = 1;
} else {
J3DTevColorAnm tevColorAnm(i, param_1);
materialAnm->setTevColorAnm(colorId, &tevColorAnm);
}
}
}
for (u16 i = 0; i < kRegNum; i++) {
if (param_1->isValidKRegUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getKRegUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
u32 colorId = param_1->getAnmKRegKeyTable()[i].mColorId;
if (materialAnm == NULL) {
rv = 1;
} else {
J3DTevKColorAnm tevKColorAnm(i, param_1);
materialAnm->setTevKColorAnm(colorId, &tevKColorAnm);
}
}
}
return rv;
}
+679
View File
@@ -0,0 +1,679 @@
//
// Generated By: dol2asm
// Translation Unit: J3DModel
//
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "dol2asm.h"
#include "dolphin/os.h"
//
// Forward References:
//
extern "C" void initialize__8J3DModelFv();
extern "C" void entryModelData__8J3DModelFP12J3DModelDataUlUl();
extern "C" void createShapePacket__8J3DModelFP12J3DModelData();
extern "C" void createMatPacket__8J3DModelFP12J3DModelDataUl();
extern "C" void newDifferedDisplayList__8J3DModelFUl();
extern "C" void lock__8J3DModelFv();
extern "C" void unlock__8J3DModelFv();
extern "C" void calcMaterial__8J3DModelFv();
extern "C" void calcDiffTexMtx__8J3DModelFv();
extern "C" void diff__8J3DModelFv();
extern "C" void setDeformData__8J3DModelFP13J3DDeformDataUl();
extern "C" void setSkinDeform__8J3DModelFP13J3DSkinDeformUl();
extern "C" void calcAnmMtx__8J3DModelFv();
extern "C" void calcWeightEnvelopeMtx__8J3DModelFv();
extern "C" void update__8J3DModelFv();
extern "C" void calc__8J3DModelFv();
extern "C" void entry__8J3DModelFv();
extern "C" void viewCalc__8J3DModelFv();
extern "C" void calcNrmMtx__8J3DModelFv();
extern "C" void calcBumpMtx__8J3DModelFv();
extern "C" void calcBBoardMtx__8J3DModelFv();
extern "C" void prepareShapePackets__8J3DModelFv();
extern "C" void __dt__8J3DModelFv();
extern "C" void __dt__12J3DMtxBufferFv();
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void* __nwa__FUl();
extern "C" void __dl__FPv();
extern "C" void setVertexData__15J3DVertexBufferFP13J3DVertexData();
extern "C" void __dt__15J3DVertexBufferFv();
extern "C" void copyLocalVtxArray__15J3DVertexBufferFUl();
extern "C" void allocTransformedVtxPosArray__15J3DVertexBufferFv();
extern "C" void allocTransformedVtxNrmArray__15J3DVertexBufferFv();
extern "C" void single_To_Double__17J3DDisplayListObjFv();
extern "C" void newDisplayList__13J3DDrawPacketFUl();
extern "C" void newSingleDisplayList__13J3DDrawPacketFUl();
extern "C" void __ct__12J3DMatPacketFv();
extern "C" void __dt__12J3DMatPacketFv();
extern "C" void addShapePacket__12J3DMatPacketFP14J3DShapePacket();
extern "C" void __ct__14J3DShapePacketFv();
extern "C" void __dt__14J3DShapePacketFv();
extern "C" void newDifferedDisplayList__14J3DShapePacketFUl();
extern "C" void calcNBTScale__8J3DShapeFRC3VecPA3_A3_fPA3_A3_f();
extern "C" void countDLSize__11J3DMaterialFv();
extern "C" void newSharedDisplayList__11J3DMaterialFUl();
extern "C" void newSingleSharedDisplayList__11J3DMaterialFUl();
extern "C" void syncJ3DSysFlags__12J3DModelDataCFv();
extern "C" void initialize__12J3DMtxBufferFv();
extern "C" void create__12J3DMtxBufferFP12J3DModelDataUl();
extern "C" void calcWeightEnvelopeMtx__12J3DMtxBufferFv();
extern "C" void calcDrawMtx__12J3DMtxBufferFUlRC3VecRA3_A4_Cf();
extern "C" void calcNrmMtx__12J3DMtxBufferFv();
extern "C" void calcBBoardMtx__12J3DMtxBufferFv();
extern "C" void J3DCalcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f();
extern "C" void initSkinInfo__13J3DSkinDeformFP12J3DModelData();
extern "C" void initMtxIndexArray__13J3DSkinDeformFP12J3DModelData();
extern "C" void changeFastSkinDL__13J3DSkinDeformFP12J3DModelData();
extern "C" void transformVtxPosNrm__13J3DSkinDeformFP12J3DModelData();
extern "C" void deform__13J3DSkinDeformFP8J3DModel();
extern "C" void calc__15J3DVtxColorCalcFP8J3DModel();
extern "C" void offAllFlag__13J3DDeformDataFUl();
extern "C" void deform__13J3DDeformDataFP8J3DModel();
extern "C" void entryIn__8J3DJointFv();
extern "C" void __construct_new_array();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_23();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* ############################################################################################## */
/* 80456428-80456430 004A28 0004+04 1/1 0/0 0/0 .sdata2 @896 */
SECTION_SDATA2 static f32 lit_896[1 + 1 /* padding */] = {
1.0f,
/* padding */
0.0f,
};
/* 80327100-80327184 321A40 0084+00 0/0 3/3 0/0 .text initialize__8J3DModelFv */
void J3DModel::initialize() {
mModelData = NULL;
mFlags = 0;
mDiffFlag = 0;
mCalcCallBack = NULL;
mUserArea = 0;
mBaseScale.x = 1.0f;
mBaseScale.y = 1.0f;
mBaseScale.z = 1.0f;
MTXIdentity(mBaseTransformMtx);
MTXIdentity(mInternalView);
mMtxBuffer = NULL;
mMatPacket = NULL;
mShapePacket = NULL;
mDeformData = NULL;
mSkinDeform = NULL;
mVtxColorCalc = NULL;
mUnkCalc1 = NULL;
mUnkCalc2 = NULL;
}
/* ############################################################################################## */
/* 803CED20-803CED44 02BE40 0024+00 1/1 3/3 0/0 .data __vt__8J3DModel */
SECTION_DATA extern void* __vt__8J3DModel[9] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)update__8J3DModelFv,
(void*)entry__8J3DModelFv,
(void*)calc__8J3DModelFv,
(void*)calcMaterial__8J3DModelFv,
(void*)calcDiffTexMtx__8J3DModelFv,
(void*)viewCalc__8J3DModelFv,
(void*)__dt__8J3DModelFv,
};
/* 803CED44-803CED50 02BE64 000C+00 2/2 0/0 0/0 .data __vt__12J3DMtxBuffer */
SECTION_DATA extern void* __vt__12J3DMtxBuffer[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__12J3DMtxBufferFv,
};
/* 80327184-80327300 321AC4 017C+00 0/0 3/3 0/0 .text
* entryModelData__8J3DModelFP12J3DModelDataUlUl */
s32 J3DModel::entryModelData(J3DModelData* p_modelData, u32 modelFlag, u32 mtxBufferFlag) {
mModelData = p_modelData;
mMtxBuffer = new J3DMtxBuffer();
if (mMtxBuffer == NULL) {
return 4;
}
s32 ret = mMtxBuffer->create(p_modelData, mtxBufferFlag);
if (ret) {
return ret;
}
ret = createShapePacket(p_modelData);
if (ret) {
return ret;
}
ret = createMatPacket(p_modelData, modelFlag);
if (ret) {
return ret;
}
mVertexBuffer.setVertexData(&p_modelData->getVertexData());
prepareShapePackets();
if (modelFlag & J3DMdlFlag_Unk00001) {
onFlag(J3DMdlFlag_Unk00001);
}
if (modelFlag & J3DMdlFlag_Unk00002) {
onFlag(J3DMdlFlag_Unk00002);
}
if (modelFlag & J3DMdlFlag_Unk00010) {
onFlag(J3DMdlFlag_Unk00010);
}
if (modelFlag & J3DMdlFlag_Unk20000) {
onFlag(J3DMdlFlag_Unk20000);
}
if (modelFlag & J3DMdlFlag_Unk40000) {
onFlag(J3DMdlFlag_Unk40000);
}
if (modelFlag & J3DMdlFlag_Unk80000) {
onFlag(J3DMdlFlag_Unk80000);
}
if (modelFlag & J3DMdlFlag_SkinPosCpu) {
onFlag(J3DMdlFlag_SkinPosCpu);
}
if (modelFlag & J3DMdlFlag_SkinNrmCpu) {
onFlag(J3DMdlFlag_SkinNrmCpu);
}
return 0;
}
/* 80327300-803273CC 321C40 00CC+00 1/1 0/0 0/0 .text createShapePacket__8J3DModelFP12J3DModelData
*/
s32 J3DModel::createShapePacket(J3DModelData* p_modelData) {
if (p_modelData->getShapeNum() != 0) {
u16 shapeNum = p_modelData->getShapeNum();
mShapePacket = new J3DShapePacket[shapeNum];
if (mShapePacket == NULL) {
return kJ3DError_Alloc;
}
for (int i = 0; i < p_modelData->getShapeNum(); i++) {
J3DShape* shapeNode = p_modelData->getShapeNodePointer(i);
mShapePacket[i].setShape(shapeNode);
mShapePacket[i].setModel(this);
}
}
return kJ3DError_Success;
}
/* 803273CC-803275FC 321D0C 0230+00 1/1 0/0 0/0 .text createMatPacket__8J3DModelFP12J3DModelDataUl
*/
s32 J3DModel::createMatPacket(J3DModelData* p_modelData, u32 flag) {
if (p_modelData->getMaterialNum() != 0) {
mMatPacket = new J3DMatPacket[p_modelData->getMaterialNum()];
if (mMatPacket == NULL) {
return kJ3DError_Alloc;
}
}
s32 ret;
u16 matNum = p_modelData->getMaterialNum();
u32 singleDLFlag = flag & 0x40000;
for (u16 i = 0; i < matNum; i++) {
J3DMaterial* materialNode = p_modelData->getMaterialNodePointer(i);
J3DMatPacket* pkt = mMatPacket + i;
u16 shapeIndex = materialNode->getShape()->getIndex();
J3DShapePacket* shapePacket = mShapePacket + shapeIndex;
pkt->setMaterial(materialNode);
pkt->setInitShapePacket(shapePacket);
pkt->addShapePacket(shapePacket);
pkt->setTexture(p_modelData->getTexture());
pkt->setMaterialID(materialNode->mDiffFlag);
if (p_modelData->getModelDataType() == 1) {
pkt->mFlags |= 0x01;
}
if (!!(flag & 0x80000)) {
pkt->mpDisplayListObj = materialNode->getSharedDisplayListObj();
} else {
if (p_modelData->getModelDataType() == 1) {
if (!!(flag & 0x40000)) {
pkt->mpDisplayListObj = materialNode->getSharedDisplayListObj();
} else {
J3DDisplayListObj* sharedDL = materialNode->getSharedDisplayListObj();
ret = sharedDL->single_To_Double();
if (ret != kJ3DError_Success)
return ret;
pkt->mpDisplayListObj = sharedDL;
}
} else if (!!(flag & 0x20000)) {
if (!!(flag & 0x40000)) {
ret = materialNode->newSingleSharedDisplayList(materialNode->countDLSize());
if (ret != kJ3DError_Success)
return ret;
pkt->mpDisplayListObj = materialNode->getSharedDisplayListObj();
} else {
ret = materialNode->newSharedDisplayList(materialNode->countDLSize());
if (ret != kJ3DError_Success)
return ret;
J3DDisplayListObj* sharedDL = materialNode->getSharedDisplayListObj();
ret = sharedDL->single_To_Double();
if (ret != kJ3DError_Success)
return ret;
pkt->mpDisplayListObj = sharedDL;
}
} else {
if (!!(flag & 0x40000)) {
ret = pkt->newSingleDisplayList(materialNode->countDLSize());
if (ret != kJ3DError_Success)
return ret;
} else {
ret = pkt->newDisplayList(materialNode->countDLSize());
if (ret != kJ3DError_Success)
return ret;
}
}
}
}
return kJ3DError_Success;
}
/* 803275FC-8032767C 321F3C 0080+00 0/0 1/1 0/0 .text newDifferedDisplayList__8J3DModelFUl */
s32 J3DModel::newDifferedDisplayList(u32 flag) {
mDiffFlag = flag;
u16 shapeNum = getModelData()->getShapeNum();
for (u16 i = 0; i < shapeNum; i++) {
s32 ret = mShapePacket[i].newDifferedDisplayList(flag);
if (ret != kJ3DError_Success)
return ret;
}
return kJ3DError_Success;
}
/* 8032767C-803276B4 321FBC 0038+00 0/0 4/4 0/0 .text lock__8J3DModelFv */
void J3DModel::lock() {
u16 matNum = mModelData->getMaterialNum();
for (int i = 0; i < matNum; i++) {
mMatPacket[i].lock();
}
}
/* 803276B4-803276EC 321FF4 0038+00 0/0 2/2 0/0 .text unlock__8J3DModelFv */
void J3DModel::unlock() {
u16 matNum = mModelData->getMaterialNum();
for (int i = 0; i < matNum; i++) {
mMatPacket[i].unlock();
}
}
/* 803276EC-80327858 32202C 016C+00 1/0 0/0 0/0 .text calcMaterial__8J3DModelFv */
void J3DModel::calcMaterial() {
j3dSys.setModel(this);
if (checkFlag(4)) {
j3dSys.onFlag(4);
} else {
j3dSys.offFlag(4);
}
if (checkFlag(8)) {
j3dSys.onFlag(8);
} else {
j3dSys.offFlag(8);
}
mModelData->syncJ3DSysFlags();
j3dSys.setTexture(mModelData->getTexture());
u16 matNum = mModelData->getMaterialNum();
for (u16 i = 0; i < matNum; i++) {
j3dSys.setMatPacket(&mMatPacket[i]);
J3DMaterial* material = mModelData->getMaterialNodePointer(i);
if (material->getMaterialAnm() != NULL) {
material->getMaterialAnm()->calc(material);
}
int jntNo = material->getJoint()->getJntNo();
material->calc(getAnmMtx(jntNo));
}
}
/* 80327858-803279A0 322198 0148+00 1/0 0/0 0/0 .text calcDiffTexMtx__8J3DModelFv */
#if defined NON_MATCHING
void J3DModel::calcDiffTexMtx() {
// regalloc
j3dSys.setModel(this);
u16 num;
num = getModelData()->getMaterialNum();
for (u16 i = 0; i < num; i++) {
j3dSys.setMatPacket(getMatPacket(i));
J3DMaterial* materialNode = getModelData()->getMaterialNodePointer(i);
materialNode->calcDiffTexMtx(getAnmMtx(materialNode->getJoint()->getJntNo()));
}
num = getModelData()->getShapeNum();
for (u16 i = 0; i < num; i++) {
J3DShapePacket* shapePacket = getShapePacket(i);
J3DTexGenBlock* texGenBlock =
getModelData()->getShapeNodePointer(i)->getMaterial()->getTexGenBlock();
for (u16 j = 0; (int)j < 8; j++) {
J3DTexMtx* texMtxNode = texGenBlock->getTexMtx(j);
J3DTexMtxObj* texMtxObj = shapePacket->getTexMtxObj();
if (texMtxNode != NULL && texMtxObj != NULL) {
MTXCopy(texMtxNode->getMtx(), texMtxObj->getMtx(j));
}
}
}
}
#else
void J3DModel::calcDiffTexMtx() {
// NONMATCHING
}
#endif
/* 803279A0-80327A2C 3222E0 008C+00 0/0 2/2 0/0 .text diff__8J3DModelFv */
void J3DModel::diff() {
for (u16 n = getModelData()->getMaterialNum(), i = 0; i < n; i++) {
j3dSys.setMatPacket(&mMatPacket[i]);
getModelData()->getMaterialNodePointer(i)->diff(mDiffFlag);
}
}
/* 80327A2C-80327AA0 32236C 0074+00 0/0 1/1 2/2 .text setDeformData__8J3DModelFP13J3DDeformDataUl
*/
s32 J3DModel::setDeformData(J3DDeformData* p_deformData, u32 param_1) {
mDeformData = p_deformData;
if (p_deformData == NULL) {
return 0;
}
s32 ret = mVertexBuffer.copyLocalVtxArray(param_1);
if (ret) {
return ret;
}
if (param_1 & 4) {
p_deformData->offAllFlag(1);
}
return 0;
}
/* 80327AA0-80327BD4 3223E0 0134+00 0/0 0/0 2/2 .text setSkinDeform__8J3DModelFP13J3DSkinDeformUl
*/
s32 J3DModel::setSkinDeform(J3DSkinDeform* p_skinDeform, u32 flags) {
mSkinDeform = p_skinDeform;
s32 ret = kJ3DError_Success;
if (p_skinDeform == NULL) {
offFlag(J3DMdlFlag_SkinPosCpu);
offFlag(J3DMdlFlag_SkinNrmCpu);
return 5;
} else {
mSkinDeform->initMtxIndexArray(mModelData);
ret = mModelData->checkFlag(0x100);
if (ret != kJ3DError_Success) {
mSkinDeform->changeFastSkinDL(mModelData);
flags &= ~2;
flags &= ~4;
mSkinDeform->transformVtxPosNrm(mModelData);
mSkinDeform->initSkinInfo(mModelData);
}
ret = 0;
if ((~flags & 2)) {
ret = mVertexBuffer.allocTransformedVtxPosArray();
if (ret != kJ3DError_Success) {
offFlag(J3DMdlFlag_SkinPosCpu);
return ret;
}
onFlag(J3DMdlFlag_SkinPosCpu);
} else {
offFlag(J3DMdlFlag_SkinPosCpu);
}
if ((~flags & 4)) {
ret = mVertexBuffer.allocTransformedVtxNrmArray();
if (ret != kJ3DError_Success) {
offFlag(J3DMdlFlag_SkinNrmCpu);
return ret;
}
onFlag(J3DMdlFlag_SkinNrmCpu);
} else {
offFlag(J3DMdlFlag_SkinNrmCpu);
}
}
return ret;
}
/* 80327BD4-80327C58 322514 0084+00 1/1 0/0 2/2 .text calcAnmMtx__8J3DModelFv */
void J3DModel::calcAnmMtx() {
j3dSys.setModel(this);
if (checkFlag(2)) {
getModelData()->getJointTree().calc(mMtxBuffer, j3dDefaultScale, j3dDefaultMtx);
} else {
getModelData()->getJointTree().calc(mMtxBuffer, mBaseScale, mBaseTransformMtx);
}
}
/* 80327C58-80327CA4 322598 004C+00 1/1 1/1 1/1 .text calcWeightEnvelopeMtx__8J3DModelFv
*/
void J3DModel::calcWeightEnvelopeMtx() {
if (getModelData()->getWEvlpMtxNum() != 0 && !checkFlag(0x10)) {
if (!getModelData()->checkFlag(0x100)) {
mMtxBuffer->calcWeightEnvelopeMtx();
}
}
}
/* 80327CA4-80327CF0 3225E4 004C+00 1/0 0/0 0/0 .text update__8J3DModelFv */
void J3DModel::update() {
calc();
entry();
}
/* 80327CF0-80327E4C 322630 015C+00 1/0 0/0 0/0 .text calc__8J3DModelFv */
void J3DModel::calc() {
j3dSys.setModel(this);
if (checkFlag(J3DMdlFlag_SkinPosCpu)) {
j3dSys.onFlag(J3DSysFlag_SkinPosCpu);
} else {
j3dSys.offFlag(J3DSysFlag_SkinPosCpu);
}
if (checkFlag(J3DMdlFlag_SkinNrmCpu)) {
j3dSys.onFlag(J3DSysFlag_SkinNrmCpu);
} else {
j3dSys.offFlag(J3DSysFlag_SkinNrmCpu);
}
getModelData()->syncJ3DSysFlags();
mVertexBuffer.frameInit();
if (mUnkCalc2 != NULL) {
mUnkCalc2->calc(getModelData());
}
if (mDeformData != NULL) {
mDeformData->deform(this);
}
if (mVtxColorCalc != NULL) {
mVtxColorCalc->calc(this);
}
if (mUnkCalc1 != NULL) {
mUnkCalc1->calc(this);
}
calcAnmMtx();
calcWeightEnvelopeMtx();
if (mSkinDeform != NULL) {
mSkinDeform->deform(this);
}
if (mCalcCallBack != NULL) {
mCalcCallBack(this, 0);
}
}
/* 80327E4C-80327F40 32278C 00F4+00 1/0 0/0 0/0 .text entry__8J3DModelFv */
void J3DModel::entry() {
j3dSys.setModel(this);
if (checkFlag(J3DMdlFlag_SkinPosCpu)) {
j3dSys.onFlag(J3DSysFlag_SkinPosCpu);
} else {
j3dSys.offFlag(J3DSysFlag_SkinPosCpu);
}
if (checkFlag(J3DMdlFlag_SkinNrmCpu)) {
j3dSys.onFlag(J3DSysFlag_SkinNrmCpu);
} else {
j3dSys.offFlag(J3DSysFlag_SkinNrmCpu);
}
getModelData()->syncJ3DSysFlags();
j3dSys.setTexture(getModelData()->getTexture());
for (u16 i = 0; i < getModelData()->getJointNum(); i++) {
J3DJoint* joint = getModelData()->getJointNodePointer(i);
if (joint->getMesh() != NULL) {
joint->entryIn();
}
}
}
/* 80327F40-80328190 322880 0250+00 1/0 0/0 0/0 .text viewCalc__8J3DModelFv */
void J3DModel::viewCalc() {
mMtxBuffer->swapDrawMtx();
mMtxBuffer->swapNrmMtx();
if (mModelData->checkFlag(0x10)) {
if (getMtxCalcMode() == 2) {
J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx,
(MtxP)&mInternalView);
}
} else if (isCpuSkinningOn()) {
if (getMtxCalcMode() == 2) {
J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx,
(MtxP)&mInternalView);
}
} else if (checkFlag(J3DMdlFlag_SkinPosCpu)) {
mMtxBuffer->calcDrawMtx(getMtxCalcMode(), mBaseScale, mBaseTransformMtx);
calcNrmMtx();
calcBumpMtx();
DCStoreRangeNoSync(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx));
DCStoreRange(getNrmMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx33));
} else if (checkFlag(J3DMdlFlag_SkinNrmCpu)) {
mMtxBuffer->calcDrawMtx(getMtxCalcMode(), mBaseScale, mBaseTransformMtx);
calcBBoardMtx();
DCStoreRange(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx));
} else {
mMtxBuffer->calcDrawMtx(getMtxCalcMode(), mBaseScale, mBaseTransformMtx);
calcNrmMtx();
calcBBoardMtx();
calcBumpMtx();
DCStoreRangeNoSync(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx));
DCStoreRange(getNrmMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx33));
}
prepareShapePackets();
}
/* 80328190-803281B4 322AD0 0024+00 1/1 0/0 0/0 .text calcNrmMtx__8J3DModelFv */
void J3DModel::calcNrmMtx() {
mMtxBuffer->calcNrmMtx();
}
/* 803281B4-803282B8 322AF4 0104+00 1/1 0/0 0/0 .text calcBumpMtx__8J3DModelFv */
void J3DModel::calcBumpMtx() {
if (getModelData()->checkBumpFlag() == 1) {
u32 bumpMtxIdx = 0;
u16 materialNum = getModelData()->getMaterialNum();
u16 i = 0;
for (; i < materialNum; i++) {
J3DMaterial* material = getModelData()->getMaterialNodePointer(i);
if (material->getNBTScale()->mbHasScale == 1) {
material->getShape()->calcNBTScale(*material->getNBTScale()->getScale(),
getNrmMtxPtr(), getBumpMtxPtr(bumpMtxIdx));
DCStoreRange(getBumpMtxPtr(bumpMtxIdx), getModelData()->getDrawMtxNum() * 0x24);
bumpMtxIdx++;
}
}
}
}
/* 803282B8-803282EC 322BF8 0034+00 1/1 0/0 0/0 .text calcBBoardMtx__8J3DModelFv */
void J3DModel::calcBBoardMtx() {
if (mModelData->checkBBoardFlag()) {
mMtxBuffer->calcBBoardMtx();
}
}
/* 803282EC-80328350 322C2C 0064+00 2/2 0/0 0/0 .text prepareShapePackets__8J3DModelFv */
void J3DModel::prepareShapePackets() {
u16 shapeNum = getModelData()->getShapeNum();
for (u16 i = 0; i < shapeNum; i++) {
J3DShape* xx = mModelData->getShapeNodePointer(i);
J3DShapePacket* pkt = getShapePacket(i);
pkt->setMtxBuffer(mMtxBuffer);
if (getMtxCalcMode() == 2) {
pkt->setBaseMtxPtr(&mInternalView);
} else {
pkt->setBaseMtxPtr(&j3dSys.mViewMtx);
}
}
}
/* 80328350-803283B4 322C90 0064+00 1/0 0/0 0/0 .text __dt__8J3DModelFv */
J3DModel::~J3DModel() {}
/* 803283B4-803283FC 322CF4 0048+00 1/0 0/0 0/0 .text __dt__12J3DMtxBufferFv */
extern "C" void __dt__12J3DMtxBufferFv() {
// asm J3DMtxBuffer::~J3DMtxBuffer() {
// NONMATCHING
}
@@ -0,0 +1,182 @@
//
// Generated By: dol2asm
// Translation Unit: J3DModelData
//
#include "JSystem/J3DGraphAnimator/J3DModelData.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "dol2asm.h"
#include "dolphin/os.h"
//
// Forward References:
//
extern "C" void clear__12J3DModelDataFv();
extern "C" void __ct__12J3DModelDataFv();
extern "C" void newSharedDisplayList__12J3DModelDataFUl();
extern "C" void indexToPtr__12J3DModelDataFv();
extern "C" void makeSharedDL__12J3DModelDataFv();
extern "C" void simpleCalcMaterial__12J3DModelDataFUsPA4_f();
extern "C" void syncJ3DSysPointers__12J3DModelDataCFv();
extern "C" void syncJ3DSysFlags__12J3DModelDataCFv();
extern "C" void __dt__13J3DShapeTableFv();
extern "C" void __dt__12J3DModelDataFv();
//
// External References:
//
extern "C" void __dl__FPv();
extern "C" void __ct__13J3DVertexDataFv();
extern "C" void __dt__14J3DDrawMtxDataFv();
extern "C" void countDLSize__11J3DMaterialFv();
extern "C" void newSharedDisplayList__11J3DMaterialFUl();
extern "C" void newSingleSharedDisplayList__11J3DMaterialFUl();
extern "C" void __ct__12J3DJointTreeFv();
extern "C" void __ct__16J3DMaterialTableFv();
extern "C" void __dt__16J3DMaterialTableFv();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__12J3DJointTree[4 + 1 /* padding */];
//
// Declarations:
//
/* 80325D88-80325DA0 3206C8 0018+00 1/1 2/2 0/0 .text clear__12J3DModelDataFv */
void J3DModelData::clear() {
mpRawData = 0;
mFlags = 0;
mbHasBumpArray = 0;
mbHasBillboard = 0;
}
/* ############################################################################################## */
/* 803CED08-803CED14 02BE28 000C+00 3/3 0/0 0/0 .data __vt__13J3DShapeTable */
SECTION_DATA extern void* __vt__13J3DShapeTable[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__13J3DShapeTableFv,
};
/* 803CED14-803CED20 02BE34 000C+00 2/2 0/0 0/0 .data __vt__12J3DModelData */
SECTION_DATA extern void* __vt__12J3DModelData[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__12J3DModelDataFv,
};
/* 80325DA0-80325E14 3206E0 0074+00 0/0 2/2 0/0 .text __ct__12J3DModelDataFv */
J3DModelData::J3DModelData() {
clear();
}
/* 80325E14-80325EC8 320754 00B4+00 0/0 2/2 0/0 .text newSharedDisplayList__12J3DModelDataFUl */
s32 J3DModelData::newSharedDisplayList(u32 flag) {
u16 matNum = getMaterialNum();
for (u16 i = 0; i < matNum; i++) {
if (!!(flag & 0x40000)) {
s32 ret = getMaterialNodePointer(i)->newSingleSharedDisplayList(getMaterialNodePointer(i)->countDLSize());
if (ret != kJ3DError_Success)
return ret;
} else {
s32 ret = getMaterialNodePointer(i)->newSharedDisplayList(getMaterialNodePointer(i)->countDLSize());
if (ret != kJ3DError_Success)
return ret;
}
}
return kJ3DError_Success;
}
/* ############################################################################################## */
/* 804515E8-804515EC 000AE8 0004+00 1/1 0/0 0/0 .sbss sInterruptFlag$965 */
static s32 sInterruptFlag;
/* 804515EC-804515F0 000AEC 0004+00 1/1 0/0 0/0 .sbss None */
static s8 sInitInterruptFlag;
/* 80325EC8-80325F94 320808 00CC+00 0/0 1/1 0/0 .text indexToPtr__12J3DModelDataFv */
void J3DModelData::indexToPtr() {
J3DTexture* tex = getTexture();
j3dSys.setTexture(tex);
if (!sInitInterruptFlag) {
sInterruptFlag = OSDisableInterrupts();
sInitInterruptFlag = true;
}
OSDisableScheduler();
GDLObj gdl_obj;
u16 matNum = getMaterialNum();
for (u16 i = 0; i < matNum; i++) {
J3DMaterial* matNode = getMaterialNodePointer(i);
J3DDisplayListObj* dl_obj = matNode->getSharedDisplayListObj();
GDInitGDLObj(&gdl_obj, dl_obj->getDisplayList(0), dl_obj->getDisplayListSize());
GDSetCurrent(&gdl_obj);
matNode->getTevBlock()->indexToPtr();
}
GDSetCurrent(NULL);
OSEnableScheduler();
OSRestoreInterrupts(sInterruptFlag);
}
/* 80325F94-8032600C 3208D4 0078+00 0/0 2/2 0/0 .text makeSharedDL__12J3DModelDataFv */
void J3DModelData::makeSharedDL() {
J3DTexture* tex = getTexture();
j3dSys.setTexture(tex);
u16 matNum = getMaterialNum();
for (u16 i = 0; i < matNum; i++) {
getMaterialNodePointer(i)->makeSharedDisplayList();
}
}
/* 8032600C-803260CC 32094C 00C0+00 0/0 3/3 7/7 .text simpleCalcMaterial__12J3DModelDataFUsPA4_f
*/
void J3DModelData::simpleCalcMaterial(u16 idx, Mtx param_1) {
syncJ3DSysFlags();
J3DJoint* jointNode = getJointNodePointer(idx);
for (J3DMaterial* mat = jointNode->getMesh(); mat != NULL; mat = mat->getNext()) {
if (mat->getMaterialAnm() != NULL) {
mat->getMaterialAnm()->calc(mat);
}
mat->calc(param_1);
}
}
/* 803260CC-803260F8 320A0C 002C+00 0/0 1/1 0/0 .text syncJ3DSysPointers__12J3DModelDataCFv */
void J3DModelData::syncJ3DSysPointers() const {
j3dSys.setTexture(getTexture());
j3dSys.setVtxPos(getVtxPosArray());
j3dSys.setVtxNrm(getVtxNrmArray());
j3dSys.setVtxCol(getVtxColorArray(0));
}
/* 803260F8-80326134 320A38 003C+00 1/1 5/5 0/0 .text syncJ3DSysFlags__12J3DModelDataCFv
*/
void J3DModelData::syncJ3DSysFlags() const {
if (checkFlag(0x20)) {
j3dSys.onFlag(J3DSysFlag_PostTexMtx);
} else {
j3dSys.offFlag(J3DSysFlag_PostTexMtx);
}
}
/* 80326134-8032617C 320A74 0048+00 1/0 0/0 0/0 .text __dt__13J3DShapeTableFv */
extern "C" void __dt__13J3DShapeTableFv() {
// asm J3DShapeTable::~J3DShapeTable() {
// NONMATCHING
}
/* 8032617C-80326214 320ABC 0098+00 1/0 0/0 0/0 .text __dt__12J3DModelDataFv */
J3DModelData::~J3DModelData() {
// NONMATCHING
}
@@ -0,0 +1,295 @@
//
// Generated By: dol2asm
// Translation Unit: J3DMtxBuffer
//
#include "JSystem/J3DGraphAnimator/J3DMtxBuffer.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void initialize__12J3DMtxBufferFv();
extern "C" void create__12J3DMtxBufferFP12J3DModelDataUl();
extern "C" void createAnmMtx__12J3DMtxBufferFP12J3DModelData();
extern "C" void createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData();
extern "C" void setNoUseDrawMtx__12J3DMtxBufferFv();
extern "C" void createDoubleDrawMtx__12J3DMtxBufferFP12J3DModelDataUl();
extern "C" void createBumpMtxArray__12J3DMtxBufferFP12J3DModelDataUl();
extern "C" void calcWeightEnvelopeMtx__12J3DMtxBufferFv();
extern "C" void calcDrawMtx__12J3DMtxBufferFUlRC3VecRA3_A4_Cf();
extern "C" void calcNrmMtx__12J3DMtxBufferFv();
extern "C" void calcBBoardMtx__12J3DMtxBufferFv();
extern "C" void J3DCalcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f();
extern "C" u8 sNoUseDrawMtx__12J3DMtxBuffer[48];
extern "C" u8 sNoUseNrmMtx__12J3DMtxBuffer[36 + 4 /* padding */];
extern "C" void* sNoUseDrawMtxPtr__12J3DMtxBuffer;
extern "C" void* sNoUseNrmMtxPtr__12J3DMtxBuffer;
//
// External References:
//
extern "C" void* __nwa__FUl();
extern "C" void* __nwa__FUli();
extern "C" void J3DCalcBBoardMtx__FPA4_f();
extern "C" void J3DCalcYBBoardMtx__FPA4_f();
extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
extern "C" void J3DPSMtxArrayConcat__FPA4_fPA4_fPA4_fUl();
extern "C" void countBumpMtxNum__8J3DShapeCFv();
extern "C" void _savegpr_19();
extern "C" void _savegpr_24();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_19();
extern "C" void _restgpr_24();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* 80326214-80326258 320B54 0044+00 0/0 1/1 0/0 .text initialize__12J3DMtxBufferFv */
void J3DMtxBuffer::initialize() {
mJointTree = NULL;
mpScaleFlagArr = NULL;
mpEvlpScaleFlagArr = NULL;
mpAnmMtx = NULL;
mpWeightEvlpMtx = NULL;
mpDrawMtxArr[0] = NULL;
mpDrawMtxArr[1] = NULL;
mpNrmMtxArr[0] = NULL;
mpNrmMtxArr[1] = NULL;
mpBumpMtxArr[0] = NULL;
mpBumpMtxArr[1] = NULL;
mFlags = 1;
mCurrentViewNo = 0;
mpUserAnmMtx = NULL;
}
/* 80326258-80326364 320B98 010C+00 0/0 1/1 0/0 .text create__12J3DMtxBufferFP12J3DModelDataUl */
enum {
J3DMdlDataFlag_ConcatView = 0x10,
J3DMdlDataFlag_NoAnimation = 0x100,
};
static inline u32 getMdlDataFlag_MtxLoadType(u32 flag) {
return flag & 0x10;
}
s32 J3DMtxBuffer::create(J3DModelData* p_modelData, u32 flag) {
s32 ret;
mFlags = flag;
mJointTree = &p_modelData->getJointTree();
ret = createAnmMtx(p_modelData);
if (ret != kJ3DError_Success)
return ret;
ret = createWeightEnvelopeMtx(p_modelData);
if (ret != kJ3DError_Success)
return ret;
if (p_modelData->checkFlag(J3DMdlDataFlag_NoAnimation)) {
setNoUseDrawMtx();
} else {
switch (getMdlDataFlag_MtxLoadType(p_modelData->getFlag())) {
case J3DMdlDataFlag_ConcatView:
ret = setNoUseDrawMtx();
break;
case 0:
default:
ret = createDoubleDrawMtx(p_modelData, flag);
break;
}
}
if (ret != kJ3DError_Success)
return ret;
if (p_modelData->getFlag() & J3DMdlDataFlag_ConcatView) {
p_modelData->setBumpFlag(0);
} else {
ret = createBumpMtxArray(p_modelData, flag);
if (ret != kJ3DError_Success)
return ret;
}
return ret;
}
/* 80326364-803263F0 320CA4 008C+00 1/1 0/0 0/0 .text createAnmMtx__12J3DMtxBufferFP12J3DModelData
*/
s32 J3DMtxBuffer::createAnmMtx(J3DModelData* p_modelData) {
if (p_modelData->getJointNum() != 0) {
mpScaleFlagArr = new u8[p_modelData->getJointNum()];
mpAnmMtx = new Mtx[p_modelData->getJointNum()];
mpUserAnmMtx = mpAnmMtx;
}
if (mpScaleFlagArr == NULL)
return kJ3DError_Alloc;
return mpAnmMtx == NULL ? kJ3DError_Alloc : kJ3DError_Success;
}
/* 803263F0-8032648C 320D30 009C+00 1/1 0/0 0/0 .text
* createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData */
s32 J3DMtxBuffer::createWeightEnvelopeMtx(J3DModelData* p_modelData) {
if (p_modelData->getWEvlpMtxNum() != 0) {
mpEvlpScaleFlagArr = new u8[p_modelData->getWEvlpMtxNum()];
mpWeightEvlpMtx = new Mtx[p_modelData->getWEvlpMtxNum()];
}
if (p_modelData->getWEvlpMtxNum() != 0 && mpEvlpScaleFlagArr == NULL)
return kJ3DError_Alloc;
if (p_modelData->getWEvlpMtxNum() != 0 && mpWeightEvlpMtx == NULL)
return kJ3DError_Alloc;
return kJ3DError_Success;
}
/* ############################################################################################## */
/* 804371C0-804371F0 063EE0 0030+00 1/0 0/0 0/0 .bss sNoUseDrawMtx__12J3DMtxBuffer */
Mtx J3DMtxBuffer::sNoUseDrawMtx;
/* 804371F0-80437218 063F10 0024+04 1/0 0/0 0/0 .bss sNoUseNrmMtx__12J3DMtxBuffer */
Mtx33 J3DMtxBuffer::sNoUseNrmMtx;
/* 80450970-80450974 -00001 0004+00 1/1 0/0 0/0 .sdata sNoUseDrawMtxPtr__12J3DMtxBuffer */
Mtx* J3DMtxBuffer::sNoUseDrawMtxPtr = &J3DMtxBuffer::sNoUseDrawMtx;
/* 80450974-80450978 -00001 0004+00 1/1 0/0 0/0 .sdata sNoUseNrmMtxPtr__12J3DMtxBuffer */
Mtx33* J3DMtxBuffer::sNoUseNrmMtxPtr = &J3DMtxBuffer::sNoUseNrmMtx;
/* 8032648C-803264B8 320DCC 002C+00 1/1 0/0 0/0 .text setNoUseDrawMtx__12J3DMtxBufferFv
*/
s32 J3DMtxBuffer::setNoUseDrawMtx() {
mpDrawMtxArr[1] = &sNoUseDrawMtxPtr;
mpDrawMtxArr[0] = &sNoUseDrawMtxPtr;
mpNrmMtxArr[1] = &sNoUseNrmMtxPtr;
mpNrmMtxArr[0] = &sNoUseNrmMtxPtr;
mpBumpMtxArr[1] = NULL;
mpBumpMtxArr[0] = NULL;
return kJ3DError_Success;
}
/* 803264B8-80326664 320DF8 01AC+00 1/1 0/0 0/0 .text
* createDoubleDrawMtx__12J3DMtxBufferFP12J3DModelDataUl */
s32 J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* p_modelData, u32 num) {
if (num != 0) {
for (s32 i = 0; i < 2; i++) {
mpDrawMtxArr[i] = new Mtx*[num];
mpNrmMtxArr[i] = new Mtx33*[num];
mpBumpMtxArr[i] = NULL;
}
}
if (num != 0) {
for (u32 i = 0; i < 2; i++) {
if (mpDrawMtxArr[i] == NULL)
return kJ3DError_Alloc;
if (mpNrmMtxArr[i] == NULL)
return kJ3DError_Alloc;
}
}
for (s32 i = 0; i < 2; i++) {
for (u32 j = 0; j < num; j++) {
if (p_modelData->getDrawMtxNum() != 0) {
mpDrawMtxArr[i][j] = new (0x20) Mtx[p_modelData->getDrawMtxNum()];
mpNrmMtxArr[i][j] = new (0x20) Mtx33[p_modelData->getDrawMtxNum()];
}
}
}
for (s32 i = 0; i < 2; i++) {
for (u32 j = 0; j < num; j++) {
if (p_modelData->getDrawMtxNum() != 0) {
if (mpDrawMtxArr[i][j] == NULL)
return kJ3DError_Alloc;
if (mpNrmMtxArr[i][j] == NULL)
return kJ3DError_Alloc;
}
}
}
return kJ3DError_Success;
}
/* 80326664-803268D4 320FA4 0270+00 1/1 0/0 0/0 .text
* createBumpMtxArray__12J3DMtxBufferFP12J3DModelDataUl */
s32 J3DMtxBuffer::createBumpMtxArray(J3DModelData* param_0, u32 param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80450978-80450980 0003F8 0008+00 1/1 0/0 0/0 .sdata J3DUnit01 */
SECTION_SDATA static u8 J3DUnit01[8] = {
0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00,
};
/* 803268D4-80326ACC 321214 01F8+00 0/0 1/1 0/0 .text calcWeightEnvelopeMtx__12J3DMtxBufferFv */
void J3DMtxBuffer::calcWeightEnvelopeMtx() {
// NONMATCHING
}
/* 80326ACC-80326D3C 32140C 0270+00 0/0 1/1 0/0 .text
* calcDrawMtx__12J3DMtxBufferFUlRC3VecRA3_A4_Cf */
void J3DMtxBuffer::calcDrawMtx(u32 param_0, Vec const& param_1, f32 const (&param_2)[3][4]) {
// NONMATCHING
}
extern void J3DPSCalcInverseTranspose(Mtx p1, Mtx33 p2);
/* 80326D3C-80326EF0 32167C 01B4+00 0/0 1/1 0/0 .text calcNrmMtx__12J3DMtxBufferFv */
void J3DMtxBuffer::calcNrmMtx() {
// NONMATCHING
}
/* ############################################################################################## */
/* 80456420-80456424 004A20 0004+00 1/1 0/0 0/0 .sdata2 @1320 */
SECTION_SDATA2 static f32 lit_1320 = 1.0f;
/* 80456424-80456428 004A24 0004+00 1/1 0/0 0/0 .sdata2 @1321 */
SECTION_SDATA2 static u8 lit_1321[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80326EF0-80327048 321830 0158+00 0/0 1/1 0/0 .text calcBBoardMtx__12J3DMtxBufferFv */
void J3DMtxBuffer::calcBBoardMtx() {
// NONMATCHING
}
/* 80327048-80327100 321988 00B8+00 1/1 1/1 0/0 .text
* J3DCalcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f */
void J3DCalcViewBaseMtx(Mtx view, Vec const& scale, const Mtx& base, Mtx dst) {
Mtx m;
m[0][0] = base[0][0] * scale.x;
m[0][1] = base[0][1] * scale.y;
m[0][2] = base[0][2] * scale.z;
m[0][3] = base[0][3];
m[1][0] = base[1][0] * scale.x;
m[1][1] = base[1][1] * scale.y;
m[1][2] = base[1][2] * scale.z;
m[1][3] = base[1][3];
m[2][0] = base[2][0] * scale.x;
m[2][1] = base[2][1] * scale.y;
m[2][2] = base[2][2] * scale.z;
m[2][3] = base[2][3];
MTXConcat(view, m, dst);
}
@@ -0,0 +1,38 @@
#include "JSystem/J3DGraphAnimator/J3DShapeTable.h"
void J3DShapeTable::hide() {
u16 shapeNum = mShapeNum;
for (u16 i = 0; i < shapeNum; i++) {
mShapeNodePointer[i]->onFlag(1);
}
}
void J3DShapeTable::show() {
u16 shapeNum = mShapeNum;
for (u16 i = 0; i < shapeNum; i++) {
mShapeNodePointer[i]->offFlag(1);
}
}
void J3DShapeTable::initShapeNodes(J3DDrawMtxData* pMtxData, J3DVertexData* pVtxData) {
u16 shapeNum = mShapeNum;
for (u16 i = 0; i < shapeNum; i++) {
J3DShape* shapeNode = mShapeNodePointer[i];
shapeNode->setDrawMtxDataPointer(pMtxData);
shapeNode->setVertexDataPointer(pVtxData);
shapeNode->makeVcdVatCmd();
}
}
void J3DShapeTable::sortVcdVatCmd() {
u16 shapeNum = mShapeNum;
for (u16 next = 0; next < shapeNum; next++) {
for (u16 prev = 0; prev < next; prev++) {
if (mShapeNodePointer[next]->isSameVcdVatCmd(mShapeNodePointer[prev])) {
void* nodeVatCmd = mShapeNodePointer[prev]->getVcdVatCmd();
mShapeNodePointer[next]->setVcdVatCmd(nodeVatCmd);
}
}
}
}
@@ -0,0 +1,770 @@
//
// Generated By: dol2asm
// Translation Unit: J3DSkinDeform
//
#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "dol2asm.h"
#include "dolphin/os.h"
#include "string.h"
//
// Types:
//
//
// Forward References:
//
extern "C" void __ct__12J3DSkinNListFv();
extern "C" static void J3DPSWeightMTXMultVec__FPA4_ffP3VecP3Vec();
extern "C" static void J3DPSWeightMTXMultVecSR__FPA4_ffP3VecP3Vec();
extern "C" void calcSkin_VtxPosF32__12J3DSkinNListFPA4_fPvPv();
extern "C" void calcSkin_VtxNrmF32__12J3DSkinNListFPA4_fPvPv();
extern "C" void __ct__13J3DSkinDeformFv();
extern "C" void initSkinInfo__13J3DSkinDeformFP12J3DModelData();
extern "C" void initMtxIndexArray__13J3DSkinDeformFP12J3DModelData();
extern "C" void changeFastSkinDL__13J3DSkinDeformFP12J3DModelData();
extern "C" void calcNrmMtx__13J3DSkinDeformFP12J3DMtxBuffer();
extern "C" void transformVtxPosNrm__13J3DSkinDeformFP12J3DModelData();
extern "C" void calcAnmInvJointMtx__13J3DSkinDeformFP12J3DMtxBuffer();
extern "C" void deformFastVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void deformFastVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void deformVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void deformVtxPos_S16__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void deformVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBuffer();
extern "C" void deformVtxNrm_S16__13J3DSkinDeformCFP15J3DVertexBuffer();
extern "C" void deform__13J3DSkinDeformFP8J3DModel();
extern "C" void deform__13J3DSkinDeformFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void calc__15J3DVtxColorCalcFP8J3DModel();
extern "C" void __dt__13J3DSkinDeformFv();
extern "C" extern char const* const J3DSkinDeform__stringBase0;
extern "C" u8 sWorkArea_WEvlpMixMtx__13J3DSkinDeform[4096];
extern "C" u8 sWorkArea_WEvlpMixWeight__13J3DSkinDeform[4096];
extern "C" u16 sWorkArea_MtxReg__13J3DSkinDeform[1024 + 4 /* padding */];
//
// External References:
//
extern "C" void* __nwa__FUl();
extern "C" void* __nwa__FUli();
extern "C" void __dl__FPv();
extern "C" void J3DGQRSetup7__FUlUlUlUl();
extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
extern "C" void makeVcdVatCmd__8J3DShapeFv();
extern "C" void __construct_new_array();
extern "C" void _savegpr_14();
extern "C" void _savegpr_17();
extern "C" void _savegpr_24();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_14();
extern "C" void _restgpr_17();
extern "C" void _restgpr_24();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern f32 PSMulUnit01[2];
//
// Declarations:
//
/* 8032C6E4-8032C704 327024 0020+00 1/1 0/0 0/0 .text __ct__12J3DSkinNListFv */
J3DSkinNList::J3DSkinNList() {
field_0x0 = NULL;
field_0x4 = NULL;
field_0x8 = NULL;
field_0xc = NULL;
field_0x10 = 0;
field_0x12 = 0;
}
/* 8032C704-8032C7BC 327044 00B8+00 1/1 0/0 0/0 .text J3DPSWeightMTXMultVec__FPA4_ffP3VecP3Vec */
static void J3DPSWeightMTXMultVec(f32 (*param_0)[4], f32 param_1, Vec* param_2, Vec* param_3) {
f32 f4 = param_0[0][3] + param_0[0][0] * param_2->x;
f32 f5 = param_0[1][3] + param_0[1][0] * param_2->x;
f32 f3 = param_0[2][3] + param_0[2][0] * param_2->x;
f4 += param_0[0][1] * param_2->y;
f5 += param_0[1][1] * param_2->y;
f3 += param_0[2][1] * param_2->y;
f4 += param_0[0][2] * param_2->z;
f5 += param_0[1][2] * param_2->z;
f3 += param_0[2][2] * param_2->z;
param_3->x += f4 * param_1;
param_3->y += f5 * param_1;
param_3->z += f3 * param_1;
}
/* 8032C7BC-8032C85C 3270FC 00A0+00 1/1 0/0 0/0 .text J3DPSWeightMTXMultVecSR__FPA4_ffP3VecP3Vec
*/
static void J3DPSWeightMTXMultVecSR(f32 (*param_0)[4], f32 param_1, Vec* param_2,
Vec* param_3) {
f32 f4 = param_0[0][0] * param_2->x;
f32 f5 = param_0[1][0] * param_2->x;
f32 f3 = param_0[2][0] * param_2->x;
f4 += param_0[0][1] * param_2->y;
f5 += param_0[1][1] * param_2->y;
f3 += param_0[2][1] * param_2->y;
f4 += param_0[0][2] * param_2->z;
f5 += param_0[1][2] * param_2->z;
f3 += param_0[2][2] * param_2->z;
param_3->x += f4 * param_1;
param_3->y += f5 * param_1;
param_3->z += f3 * param_1;
}
/* 8032C85C-8032C8E4 32719C 0088+00 1/1 0/0 0/0 .text calcSkin_VtxPosF32__12J3DSkinNListFPA4_fPvPv
*/
void J3DSkinNList::calcSkin_VtxPosF32(f32 (*param_0)[4], void* param_1, void* param_2) {
u16 r29 = field_0x10;
for (int i = 0; i < r29; i++) {
u16 ind = field_0x0[i];
J3DPSWeightMTXMultVec(param_0, field_0x8[i], ((Vec*)param_1 + ind), ((Vec*)param_2 + ind));
}
}
/* 8032C8E4-8032C96C 327224 0088+00 1/1 0/0 0/0 .text calcSkin_VtxNrmF32__12J3DSkinNListFPA4_fPvPv
*/
void J3DSkinNList::calcSkin_VtxNrmF32(f32 (*param_0)[4], void* param_1, void* param_2) {
u16 r29 = field_0x12;
for (int i = 0; i < r29; i++) {
u16 ind = field_0x4[i];
J3DPSWeightMTXMultVecSR(param_0, field_0xc[i], ((Vec*)param_1 + ind), ((Vec*)param_2 + ind));
}
}
/* ############################################################################################## */
/* 8032C96C-8032C9B0 3272AC 0044+00 0/0 0/0 2/2 .text __ct__13J3DSkinDeformFv */
J3DSkinDeform::J3DSkinDeform() {
mPosData = NULL;
mNrmData = NULL;
mPosMtx = NULL;
mNrmMtx = NULL;
mFlags = 3;
field_0x18 = 1;
field_0x19 = 0;
field_0x1c = 0;
field_0x20 = 0;
mSkinNList = NULL;
}
/* ############################################################################################## */
/* 80437218-80438218 063F38 1000+00 1/1 0/0 0/0 .bss sWorkArea_WEvlpMixMtx__13J3DSkinDeform */
u16* J3DSkinDeform::sWorkArea_WEvlpMixMtx[1024];
/* 80438218-80439218 064F38 1000+00 1/1 0/0 0/0 .bss sWorkArea_WEvlpMixWeight__13J3DSkinDeform */
f32* J3DSkinDeform::sWorkArea_WEvlpMixWeight[1024];
/* 8032C9B0-8032CF44 3272F0 0594+00 0/0 1/1 0/0 .text
* initSkinInfo__13J3DSkinDeformFP12J3DModelData */
void J3DSkinDeform::initSkinInfo(J3DModelData* param_0) {
u16 wevlpMtxNum = param_0->getWEvlpMtxNum();
u16* wevlpMtxIndex = param_0->getWEvlpMixMtxIndex();
f32* wevlpMixWeights = param_0->getWEvlpMixWeight();
int currentOffset = 0;
for (int i = 0; i < wevlpMtxNum; i++) {
sWorkArea_WEvlpMixMtx[i] = wevlpMtxIndex + currentOffset;
sWorkArea_WEvlpMixWeight[i] = wevlpMixWeights + currentOffset;
currentOffset += param_0->getWEvlpMixMtxNum(i);
}
if (param_0->getJointNum() != 0) {
mSkinNList = new J3DSkinNList[param_0->getJointNum()];
}
for (int i = 0; i < param_0->getVtxNum(); i++) {
u16 uVar8 = mPosData[i];
if (uVar8 != 0xffff) {
if (param_0->getDrawMtxFlag(uVar8) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
mSkinNList[drawMtxIndex].field_0x10++;
} else {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
for (int j = 0; j < wevlpMtxNum; j++) {
mSkinNList[indices[j]].field_0x10++;
}
}
}
}
for (int i = 0; i < param_0->getNrmNum(); i++) {
u16 uVar8 = mNrmData[i];
if (uVar8 != 0xffff) {
if (param_0->getDrawMtxFlag(uVar8) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
mSkinNList[drawMtxIndex].field_0x12++;
} else {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
for (int j = 0; j < wevlpMtxNum; j++) {
mSkinNList[indices[j]].field_0x12++;
}
}
}
}
for (u16 i = 0; i < param_0->getJointNum(); i++) {
if (mSkinNList[i].field_0x10) {
mSkinNList[i].field_0x0 = new u16[mSkinNList[i].field_0x10];
mSkinNList[i].field_0x8 = new f32[mSkinNList[i].field_0x10];
mSkinNList[i].field_0x10 = 0;
}
if (mSkinNList[i].field_0x12) {
mSkinNList[i].field_0x4 = new u16[mSkinNList[i].field_0x12];
mSkinNList[i].field_0xc = new f32[mSkinNList[i].field_0x12];
mSkinNList[i].field_0x12 = 0;
}
}
for (int i = 0; i < param_0->getVtxNum(); i++) {
u16 uVar8 = mPosData[i];
if (uVar8 != 0xffff) {
if (param_0->getDrawMtxFlag(uVar8) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
u16 uVar9 = mSkinNList[drawMtxIndex].field_0x10++;
mSkinNList[drawMtxIndex].field_0x0[uVar9] = i;
mSkinNList[drawMtxIndex].field_0x8[uVar9] = 1.0f;
} else {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
f32* weights = sWorkArea_WEvlpMixWeight[drawMtxIndex];
for (int j = 0; j < wevlpMtxNum; j++) {
u16 uVar9 = mSkinNList[indices[j]].field_0x10++;
mSkinNList[indices[j]].field_0x0[uVar9] = i;
mSkinNList[indices[j]].field_0x8[uVar9] = weights[j];
}
}
}
}
for (int i = 0; i < param_0->getNrmNum(); i++) {
u16 uVar8 = mNrmData[i];
if (uVar8 != 0xffff) {
if (param_0->getDrawMtxFlag(uVar8) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
u16 uVar9 = mSkinNList[drawMtxIndex].field_0x12++;
mSkinNList[drawMtxIndex].field_0x4[uVar9] = i;
mSkinNList[drawMtxIndex].field_0xc[uVar9] = 1.0f;
} else {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
f32* weights = sWorkArea_WEvlpMixWeight[drawMtxIndex];
for (int j = 0; j < wevlpMtxNum; j++) {
u16 uVar9 = mSkinNList[indices[j]].field_0x12++;
mSkinNList[indices[j]].field_0x4[uVar9] = i;
mSkinNList[indices[j]].field_0xc[uVar9] = weights[j];
}
}
}
}
}
/* ############################################################################################## */
/* 803A2008-803A2018 02E668 0010+00 1/1 0/0 0/0 .rodata @1142 */
SECTION_RODATA static u32 const lit_1142[4] = {
0, 1, 1, 2,
};
COMPILER_STRIP_GATE(0x803A2008, &lit_1142);
/* 803A2028-803A2028 02E688 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_803A2028 =
" Invlid Data : CPU Pipeline process GX_INDEX16 D"
"ata Only\n";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_803A2062 = "\0\0\0\0\0";
#pragma pop
/* 80439218-80439A20 065F38 0800+08 1/1 0/0 0/0 .bss sWorkArea_MtxReg__13J3DSkinDeform
*/
u16 J3DSkinDeform::sWorkArea_MtxReg[1024 + 4 /* padding */];
/* 8032CF44-8032D378 327884 0434+00 0/0 1/1 0/0 .text
* initMtxIndexArray__13J3DSkinDeformFP12J3DModelData */
// Several register order and regalloc issues
#ifdef NONMATCHING
int J3DSkinDeform::initMtxIndexArray(J3DModelData* param_0) {
if (mPosData != NULL && mNrmData != NULL) {
return 0;
}
mPosData = new u16[param_0->getVtxNum()];
if (mPosData == NULL) {
return 4;
}
for (int i = 0; i < param_0->getVtxNum(); i++) {
mPosData[i] = 0xffff;
}
if (param_0->getNrmNum()) {
mNrmData = new u16[param_0->getNrmNum()];
if (mNrmData == NULL) {
return 4;
}
for (int i = 0; i < param_0->getNrmNum(); i++) {
mNrmData[i] = 0;
}
} else {
mNrmData = NULL;
}
mPosMtx = new Mtx[param_0->getJointNum()];
mNrmMtx = new (32) Mtx33[param_0->getDrawMtxNum()];
if (mPosMtx == NULL) {
return 4;
}
if (mNrmMtx == NULL) {
return 4;
}
for (u16 local_6c = 0; local_6c < param_0->getShapeNum(); local_6c++) {
u32 local_28[4] = {0,1,1,2};
int r26 = -1;
int r25 = -1;
int r24 = -1;
int r23 = 0;
for (GXVtxDescList* local_4c = param_0->getShapeNodePointer(local_6c)->getVtxDesc(); local_4c->attr != 0xff; local_4c++) {
switch (local_4c->attr) {
case GX_VA_PNMTXIDX:
r26 = r23;
break;
case GX_VA_POS:
r25 = r23;
if (local_4c->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
return 6;
}
break;
case GX_VA_NRM:
r24 = r23;
if (local_4c->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
return 6;
}
break;
case GX_VA_TEX0:
if (local_4c->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
return 6;
}
break;
}
r23 += local_28[(int)local_4c->type];
}
for (u16 local_6e = 0; local_6e < param_0->getShapeNodePointer(local_6c)->getMtxGroupNum(); local_6e++) {
J3DShapeMtx* piVar8 = param_0->getShapeNodePointer(local_6c)->getShapeMtx(local_6e);
u8* pcVar10 = param_0->getShapeNodePointer(local_6c)->getShapeDraw(local_6e)->getDisplayList();
u16 uVar13;
for (u8* local_58 = pcVar10;
(int)local_58 - (int)pcVar10 < param_0->getShapeNodePointer(local_6c)->getShapeDraw(local_6e)->getDisplayListSize();
local_58 += r23 * uVar13, local_58 += 3) {
if (*local_58 != 0xA0 && *local_58 != 0x98) {
break;
}
uVar13 = *(u16*)(local_58 + 1);
for (int local_60 = 0; local_60 < uVar13; local_60++) {
u8* iVar5 = local_58;
iVar5 += r23 * local_60 + 3;
u8 bVar3 = *(iVar5 + r26) / 3U;
u16 uVar1 = *(u16*)(iVar5 + r25);
u16 uVar2 = *(u16*)(iVar5 + r24);
u32 local_76 = piVar8->getUseMtxIndex(bVar3);
if ((u16)local_76 == 0xffff) {
local_76 = sWorkArea_MtxReg[bVar3];
} else if (r26 != -1) {
sWorkArea_MtxReg[bVar3] = local_76;
}
mPosData[uVar1] = local_76;
if (r24 != -1) {
mNrmData[uVar2] = local_76;
}
}
}
if (r24 == -1) {
param_0->getShapeNodePointer(local_6c)->onFlag(0x100);
param_0->getShapeNodePointer(local_6c)->offFlag(8);
}
}
}
for (int local_68 = 0; local_68 < param_0->getVtxNum(); local_68++) {
if (mPosData[local_68] == 0xffff) {
field_0x18 = 0x0;
mPosData[local_68] = 0;
}
}
return 0;
}
#else
int J3DSkinDeform::initMtxIndexArray(J3DModelData* param_0) {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 803A2018-803A2028 02E678 0010+00 1/1 0/0 0/0 .rodata @1270 */
SECTION_RODATA static u8 const lit_1270[16] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
};
COMPILER_STRIP_GATE(0x803A2018, &lit_1270);
/* 8032D378-8032D5C4 327CB8 024C+00 0/0 1/1 0/0 .text
* changeFastSkinDL__13J3DSkinDeformFP12J3DModelData */
// regalloc, display list access issues
#ifdef NONMATCHING
void J3DSkinDeform::changeFastSkinDL(J3DModelData* param_0) {
for (u16 i = 0; i < param_0->getShapeNum(); i++) {
u32 local_28[4] = {0,1,1,2};
s32 local_30 = -1;
s32 local_34 = 0;
J3DShape* pShapeNode = param_0->getShapeNodePointer(i);
for (GXVtxDescList* local_3c = pShapeNode->getVtxDesc(); local_3c->attr != GX_VA_NULL; local_3c++) {
if (local_3c->attr == GX_VA_PNMTXIDX) {
local_30 = local_34;
}
local_34 += local_28[(int)local_3c->type];
}
if (local_30 != -1) {
for (u16 j = 0; j < pShapeNode->getMtxGroupNum(); j++) {
u8* puVar5 = pShapeNode->getShapeDraw(j)->getDisplayList();
u8* puVar10 = puVar5;
u8* local_44 = puVar5;
while ((int)local_44 - (int)puVar5 < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
u8 cVar1 = *(u8*)local_44;
*puVar10++ = cVar1;
if ((cVar1 != 0xA0) && (cVar1 != 0x98))
break;
u16 uVar9 = *(u16*)((int)local_44 + 1);
*(u16*)puVar10 = uVar9;
puVar10 += 2;
for (int local_4c = 0; local_4c < uVar9; local_4c++) {
u8* dst;
memcpy(puVar10, &local_44[(local_34 * local_4c) + 4], local_34 - 1);
puVar10 = (u8*)((int)puVar10 + local_34 - 1);
}
local_44 += local_34 * uVar9;
local_44 += 3;
}
int pcVar2 = ((int)puVar10 - (int)puVar5 + 0x1f) & ~0x1f;
while ((int)puVar10 - (int)puVar5 < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
*puVar10++ = 0;
}
pShapeNode->getShapeDraw(j)->setDisplayListSize(pcVar2);
DCStoreRange(puVar5, pShapeNode->getShapeDraw(j)->getDisplayListSize());
}
}
}
for (u16 i = 0; i < param_0->getShapeNum(); i++) {
J3DShape* pShape = param_0->getShapeNodePointer(i);
GXVtxDescList* local_60 = pShape->getVtxDesc();
for (GXVtxDescList*local_5c = local_60; local_5c->attr != GX_VA_NULL; local_5c++) {
if (local_5c->attr != GX_VA_PNMTXIDX) {
local_60->attr = local_5c->attr;
local_60->type = local_5c->type;
local_60++;
}
}
local_60->attr = GX_VA_NULL;
local_60->type = GX_NONE;
pShape->makeVcdVatCmd();
}
}
#else
void J3DSkinDeform::changeFastSkinDL(J3DModelData* param_0) {
// NONMATCHING
}
#endif
/* 8032D5C4-8032D738 327F04 0174+00 1/1 0/0 0/0 .text calcNrmMtx__13J3DSkinDeformFP12J3DMtxBuffer
*/
void J3DSkinDeform::calcNrmMtx(J3DMtxBuffer* param_0) {
J3DJointTree* jointTree = param_0->getJointTree();
u16 drawMtxNum = jointTree->getDrawMtxNum();
for (u16 i = 0; i < drawMtxNum; i++) {
if (jointTree->getDrawMtxFlag(i) == 0) {
if (param_0->getScaleFlag(jointTree->getDrawMtxIndex(i)) == 1) {
setNrmMtx(i, param_0->getAnmMtx(jointTree->getDrawMtxIndex(i)));
} else {
J3DPSCalcInverseTranspose(param_0->getAnmMtx(jointTree->getDrawMtxIndex(i)), getNrmMtx(i));
}
} else {
if (param_0->getEnvScaleFlag(jointTree->getDrawMtxIndex(i)) == 1) {
setNrmMtx(i, param_0->getWeightAnmMtx(jointTree->getDrawMtxIndex(i)));
} else {
J3DPSCalcInverseTranspose(param_0->getWeightAnmMtx(jointTree->getDrawMtxIndex(i)), getNrmMtx(i));
}
}
}
}
/* 8032D738-8032D87C 328078 0144+00 0/0 1/1 0/0 .text
* transformVtxPosNrm__13J3DSkinDeformFP12J3DModelData */
void J3DSkinDeform::transformVtxPosNrm(J3DModelData* param_0) {
if (param_0->getWEvlpMtxNum() != 0 && field_0x19 == 0) {
int vtmNum = param_0->getVtxNum();
int nrmNum = param_0->getNrmNum();
for (int i = 0; i < vtmNum; i++) {
u16 posIndex = mPosData[i];
if (param_0->getDrawMtxFlag(posIndex) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(posIndex);
Vec* pos = ((Vec*)param_0->getVtxPosArray()) + i;
Mtx invMtx;
MTXInverse(param_0->getInvJointMtx(drawMtxIndex), invMtx);
MTXMultVec(invMtx, pos, pos);
}
}
for (int i = 0; i < nrmNum; i++) {
u16 nrmIndex = mNrmData[i];
if (param_0->getDrawMtxFlag(nrmIndex) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(nrmIndex);
Vec* nrm = ((Vec*)param_0->getVtxNrmArray()) + i;
Mtx invMtx;
MTXInverse(param_0->getInvJointMtx(drawMtxIndex), invMtx);
MTXMultVecSR(invMtx, nrm, nrm);
}
}
field_0x19 = 1;
}
}
/* 8032D87C-8032D8F4 3281BC 0078+00 1/1 0/0 0/0 .text
* calcAnmInvJointMtx__13J3DSkinDeformFP12J3DMtxBuffer */
void J3DSkinDeform::calcAnmInvJointMtx(J3DMtxBuffer* param_0) {
if (param_0->getJointTree()->getWEvlpMtxNum() != 0) {
u16 jointNum = param_0->getJointTree()->getJointNum();
Mtx* anmMtx = (Mtx*)param_0->getAnmMtx(0);
Mtx* invJointMtx = &param_0->getJointTree()->getInvJointMtx(0);
Mtx* posMtx = mPosMtx;
for (int i = 0; i < jointNum; i++) {
MTXConcat(anmMtx[i], invJointMtx[i], posMtx[i]);
}
}
}
/* 8032D8F4-8032DA1C 328234 0128+00 1/1 0/0 0/0 .text
* deformFastVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
void J3DSkinDeform::deformFastVtxPos_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
param_0->swapTransformedVtxPos();
J3DJointTree* jointTree = param_1->getJointTree();
u32 vtxNum = param_0->getVertexData()->getVtxNum();
void* currentVtxPos = param_0->getCurrentVtxPos();
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
J3DFillZero32B(transformedVtxPos, (vtxNum * sizeof(Vec) + 0x1f) & ~0x1f);
if (jointTree->getWEvlpMtxNum() != 0) {
u16 jointNum = jointTree->getJointNum();
for (u16 i = 0; i < jointNum; i++) {
mSkinNList[i].calcSkin_VtxPosF32(mPosMtx[i], currentVtxPos, transformedVtxPos);
}
} else {
u16 jointNum = jointTree->getJointNum();
for (u16 i = 0; i < jointNum; i++) {
J3DSkinNList* skinList = mSkinNList + i;
skinList->calcSkin_VtxPosF32(param_1->getAnmMtx(i), currentVtxPos, transformedVtxPos);
}
}
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(Vec));
param_0->setCurrentVtxPos(transformedVtxPos);
}
/* ############################################################################################## */
/* 8032DA1C-8032DB50 32835C 0134+00 1/1 0/0 0/0 .text
* deformFastVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
void J3DSkinDeform::deformFastVtxNrm_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
param_0->swapTransformedVtxNrm();
J3DJointTree* jointTree = param_1->getJointTree();
int nrmNum = param_0->getVertexData()->getNrmNum();
void* currentVtxNrm = param_0->getCurrentVtxNrm();
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
for (int i = 0; i < nrmNum; i++) {
((Vec*)transformedVtxNrm)[i].x = 0.0f;
((Vec*)transformedVtxNrm)[i].y = 0.0f;
((Vec*)transformedVtxNrm)[i].z = 0.0f;
}
if (jointTree->getWEvlpMtxNum() != 0) {
u16 jointNum = jointTree->getJointNum();
for (u16 i = 0; i < jointNum; i++) {
mSkinNList[i].calcSkin_VtxNrmF32(mPosMtx[i], currentVtxNrm, transformedVtxNrm);
}
} else {
u16 jointNum = jointTree->getJointNum();
for (u16 i = 0; i < jointNum; i++) {
J3DSkinNList* skinList = mSkinNList + i;
skinList->calcSkin_VtxNrmF32(param_1->getAnmMtx(i), currentVtxNrm, transformedVtxNrm);
}
}
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(Vec));
param_0->setCurrentVtxNrm(transformedVtxNrm);
}
/* 8032DB50-8032DC74 328490 0124+00 1/1 0/0 0/0 .text
* deformVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
// J3DPSMulMtxVec regalloc
#ifdef NONMATCHING
void J3DSkinDeform::deformVtxPos_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
Mtx* anmMtxs[2];
anmMtxs[0] = (Mtx*)param_1->getAnmMtx(0);
anmMtxs[1] = (Mtx*)param_1->getWeightAnmMtx(0);
param_0->swapTransformedVtxPos();
J3DJointTree* jointTree = param_1->getJointTree();
int vtxNum = param_0->getVertexData()->getVtxNum();
void* currentVtxPos = param_0->getCurrentVtxPos();
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
for (int i = 0; i < vtxNum; i++) {
Mtx* anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
J3DPSMulMtxVec(anmMtx[jointTree->getDrawMtxIndex(mPosData[i])], ((Vec*)currentVtxPos) + i, ((Vec*)transformedVtxPos) + i);
}
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(Vec));
param_0->setCurrentVtxPos(transformedVtxPos);
}
#else
void J3DSkinDeform::deformVtxPos_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
// NONMATCHING
}
#endif
/* 8032DC74-8032DDB8 3285B4 0144+00 1/1 0/0 0/0 .text
* deformVtxPos_S16__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
// J3DPSMulMtxVec regalloc
#ifdef NONMATCHING
void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
Mtx* anmMtxs[2];
anmMtxs[0] = (Mtx*)param_1->getAnmMtx(0);
anmMtxs[1] = (Mtx*)param_1->getWeightAnmMtx(0);
u8 vtxPosFrac = param_0->getVertexData()->getVtxPosFrac();
J3DGQRSetup7(vtxPosFrac, 7, vtxPosFrac, 7);
param_0->swapTransformedVtxPos();
J3DJointTree* jointTree = param_1->getJointTree();
int vtxNum = param_0->getVertexData()->getVtxNum();
void* currentVtxPos = param_0->getCurrentVtxPos();
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
for (int i = 0; i < vtxNum; i++) {
Mtx* anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
J3DPSMulMtxVec(anmMtx[jointTree->getDrawMtxIndex(mPosData[i])], ((SVec*)currentVtxPos) + i, ((SVec*)transformedVtxPos) + i);
}
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(SVec));
param_0->setCurrentVtxPos(transformedVtxPos);
}
#else
void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
// NONMATCHING
}
#endif
/* 8032DDB8-8032DEBC 3286F8 0104+00 1/1 0/0 0/0 .text
* deformVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBuffer */
// J3DPSMulMtxVec regalloc
#ifdef NONMATCHING
void J3DSkinDeform::deformVtxNrm_F32(J3DVertexBuffer* param_0) const {
param_0->swapTransformedVtxNrm();
int nrmNum = param_0->getVertexData()->getNrmNum();
void* currentVtxNrm = param_0->getCurrentVtxNrm();
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
for (int i = 0; i < nrmNum; i++) {
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], ((Vec*)currentVtxNrm) + i, ((Vec*)transformedVtxNrm) + i);
}
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(Vec));
param_0->setCurrentVtxNrm(transformedVtxNrm);
}
#else
void J3DSkinDeform::deformVtxNrm_F32(J3DVertexBuffer* param_0) const {
// NONMATCHING
}
#endif
/* 8032DEBC-8032DFDC 3287FC 0120+00 1/1 0/0 0/0 .text
* deformVtxNrm_S16__13J3DSkinDeformCFP15J3DVertexBuffer */
// J3DPSMulMtxVec regalloc
#ifdef NONMATCHING
void J3DSkinDeform::deformVtxNrm_S16(J3DVertexBuffer* param_0) const {
u8 vtxNrmFrac = param_0->getVertexData()->getVtxNrmFrac();
J3DGQRSetup7(vtxNrmFrac, 7, vtxNrmFrac, 7);
param_0->swapTransformedVtxNrm();
int nrmNum = param_0->getVertexData()->getNrmNum();
void* currentVtxNrm = param_0->getCurrentVtxNrm();
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
for (int i = 0; i < nrmNum; i++) {
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], ((SVec*)currentVtxNrm) + i, ((SVec*)transformedVtxNrm) + i);
}
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(SVec));
param_0->setCurrentVtxNrm(transformedVtxNrm);
}
#else
void J3DSkinDeform::deformVtxNrm_S16(J3DVertexBuffer* param_0) const {
// NONMATCHING
}
#endif
/* 8032DFDC-8032E064 32891C 0088+00 0/0 1/1 0/0 .text deform__13J3DSkinDeformFP8J3DModel
*/
void J3DSkinDeform::deform(J3DModel* param_0) {
if (param_0->checkFlag(4)) {
onFlag(2);
} else {
offFlag(2);
}
if (param_0->checkFlag(8)) {
onFlag(1);
} else {
offFlag(1);
}
deform(param_0->getVertexBuffer(), param_0->getMtxBuffer());
}
/* 8032E064-8032E180 3289A4 011C+00 1/0 0/0 0/0 .text
* deform__13J3DSkinDeformFP15J3DVertexBufferP12J3DMtxBuffer */
void J3DSkinDeform::deform(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) {
if (param_1->getJointTree()->checkFlag(0x100)) {
calcAnmInvJointMtx(param_1);
}
if (checkFlag(2) != 0) {
if (param_1->getJointTree()->checkFlag(0x100)) {
deformFastVtxPos_F32(param_0, param_1);
} else {
if (param_0->getVertexData()->getVtxPosType() == 4) {
deformVtxPos_F32(param_0, param_1);
} else {
deformVtxPos_S16(param_0, param_1);
}
}
}
if (checkFlag(1) != 0) {
if (param_1->getJointTree()->checkFlag(0x100)) {
deformFastVtxNrm_F32(param_0, param_1);
} else {
calcNrmMtx(param_1);
if (param_0->getVertexData()->getVtxNrmType() == 4) {
deformVtxNrm_F32(param_0);
} else {
deformVtxNrm_S16(param_0);
}
}
}
}
/* 8032E180-8032E1B0 328AC0 0030+00 0/0 1/1 0/0 .text calc__15J3DVtxColorCalcFP8J3DModel
*/
void J3DVtxColorCalc::calc(J3DModel* param_0) {
calc(param_0->getVertexBuffer());
}
/* 8032E1B0-8032E1F8 328AF0 0048+00 1/0 0/0 0/0 .text __dt__13J3DSkinDeformFv */
J3DSkinDeform::~J3DSkinDeform() {}
/* 803A2028-803A2028 02E688 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */