various matches / cleanup (#2271)

* cleanup various TUs

* checkpoint

* d_attention doc
This commit is contained in:
TakaRikka
2024-12-29 07:53:54 -08:00
committed by GitHub
parent c429ce21eb
commit 0e281cb975
62 changed files with 1865 additions and 2265 deletions
+628 -101
View File
@@ -16,6 +16,7 @@
#include "d/d_com_inf_game.h"
#include "dol2asm.h"
#include "dolphin/gx/GXDraw.h"
#include <dolphin/gf/GFPixel.h>
#include "global.h"
#include "m_Do/m_Do_mtx.h"
@@ -209,49 +210,8 @@ void mDoExt_brkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) {
i_matTable->entryTevRegAnimator(mpAnm);
}
/* ############################################################################################## */
/* 803A3020-803A30C0 000140 0085+1B 1/1 0/0 0/0 .data l_invisibleMat$7041 */
static u8 l_invisibleMat[133] ALIGN_DECL(32) = {
0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00,
0x00, 0x04, 0x00, 0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 0xFF, 0xFC, 0x61, 0xC1,
0x08, 0xFF, 0xF0, 0x61, 0xF3, 0x7F, 0x00, 0x00, 0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0x40,
0x00, 0x00, 0x17, 0x61, 0xEE, 0x00, 0x00, 0x00, 0x61, 0xEF, 0x00, 0x00, 0x00, 0x61, 0xF0,
0x00, 0x00, 0x00, 0x61, 0xF1, 0x00, 0x00, 0x00, 0x61, 0xF2, 0x00, 0x00, 0x00, 0x61, 0x41,
0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803A30C0-803A3160 0001E0 0084+1C 1/1 0/0 0/0 .data l_matDL */
static u8 l_matDL[132] ALIGN_DECL(32) = {
0x08, 0x30, 0x3C, 0xF3, 0xCF, 0x00, 0x10, 0x00, 0x00, 0x10, 0x18, 0x3C, 0xF3, 0xCF, 0x00,
0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x7F, 0x32, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00,
0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x38,
0x00, 0x00, 0x61, 0xC0, 0x28, 0xF6, 0xAF, 0x61, 0xC1, 0x08, 0xFF, 0xE0, 0x61, 0x43, 0x00,
0x00, 0x41, 0x61, 0x40, 0x00, 0x00, 0x17, 0x61, 0x41, 0x00, 0x00, 0x0C, 0x61, 0xF3, 0x7F,
0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10,
0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803A3160-803A31F0 000280 008D+03 1/1 0/0 0/0 .data l_mat1DL */
static u8 l_mat1DL[141] ALIGN_DECL(32) = {
0x10, 0x00, 0x00, 0x10, 0x40, 0xFF, 0xFF, 0x42, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xCF, 0x00, 0x10,
0x00, 0x00, 0x10, 0x18, 0x3C, 0xF3, 0xCF, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x7F,
0x32, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF,
0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x38, 0x00, 0x40, 0x61, 0xC0, 0x28, 0xFA, 0x8F, 0x61, 0xC1, 0x08,
0xFF, 0xF0, 0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0x40, 0x00, 0x00, 0x17, 0x61, 0x41, 0x00, 0x00,
0x0C, 0x61, 0xF3, 0x7F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x10,
0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 8000D7DC-8000D8E4 00811C 0108+00 0/0 18/18 85/85 .text
* init__13mDoExt_bckAnmFP15J3DAnmTransformiifssb */
// NONMATCHING J3DMtxCalcAnimation inheritance
int mDoExt_bckAnm::init(J3DAnmTransform* i_bck, int i_play, int i_attr, f32 i_rate,
s16 i_startF, s16 i_endF, bool i_modify) {
JUT_ASSERT(614, (i_modify || isCurrentSolidHeap()) && i_bck != 0);
@@ -1150,66 +1110,77 @@ int mDoExt_McaMorf::create(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* c
/* 80010074-8001037C 00A9B4 0308+00 1/0 0/0 0/0 .text calc__14mDoExt_McaMorfFv */
// NONMATCHING regalloc
void mDoExt_McaMorf::calc() {
if (!mpModel) {
if (mpModel == NULL) {
return;
}
u16 jntNo = getJoint()->getJntNo();
j3dSys.setCurrentMtxCalc(this);
J3DTransformInfo info1;
J3DTransformInfo* infoPtr;
Mtx sp68;
J3DTransformInfo sp48;
J3DTransformInfo sp28;
J3DTransformInfo* var_r29;
if (mpTransformInfo == NULL) {
infoPtr = &info1;
var_r29 = &sp48;
} else {
infoPtr = &mpTransformInfo[jntNo];
var_r29 = &mpTransformInfo[jntNo];
}
Quaternion quat1;
Quaternion* quatPtr;
Quaternion sp18;
Quaternion* var_r27;
if (mpQuat == NULL) {
quatPtr = &quat1;
var_r27 = &sp18;
} else {
quatPtr = &mpQuat[jntNo];
var_r27 = &mpQuat[jntNo];
}
if (!mpAnm) {
*infoPtr = mpModel->getModelData()->getJointNodePointer(jntNo)->getTransformInfo();
if (mpCallback1) {
mpCallback1->execute(jntNo, infoPtr);
if (mpAnm == NULL) {
*var_r29 = mpModel->getModelData()->getJointNodePointer(jntNo)->getTransformInfo();
if (mpCallback1 != NULL) {
mpCallback1->execute(jntNo, var_r29);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
J3DMtxCalcCalcTransformMaya::calcTransform(*infoPtr);
} else if (mCurMorf >= 1.0f || !mpTransformInfo || !mpQuat) {
getTransform(jntNo, infoPtr);
if (mpCallback1) {
mpCallback1->execute(jntNo, infoPtr);
JMAEulerToQuat(var_r29->mRotation.x, var_r29->mRotation.y, var_r29->mRotation.z, var_r27);
J3DMtxCalcCalcTransformMaya::calcTransform(*var_r29);
} else if (mCurMorf >= 1.0f || mpTransformInfo == NULL || mpQuat == NULL) {
getTransform(jntNo, var_r29);
if (mpCallback1 != NULL) {
mpCallback1->execute(jntNo, var_r29);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
J3DMtxCalcCalcTransformMaya::calcTransform(*infoPtr);
JMAEulerToQuat(var_r29->mRotation.x, var_r29->mRotation.y, var_r29->mRotation.z, var_r27);
J3DMtxCalcCalcTransformMaya::calcTransform(*var_r29);
} else {
f32 f31;
f32 var_f31;
if (field_0x52) {
f31 = 1.0f;
var_f31 = 1.0f;
} else {
f31 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
var_f31 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
}
f32 f30 = 1.0f - f31;
J3DTransformInfo info2;
Quaternion quat2;
getTransform(jntNo, &info2);
if (mpCallback1) {
mpCallback1->execute(jntNo, &info2);
f32 var_f30 = 1.0f - var_f31;
Quaternion sp8;
getTransform(jntNo, &sp28);
if (mpCallback1 != NULL) {
mpCallback1->execute(jntNo, &sp28);
}
JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat2);
JMAQuatLerp(quatPtr, &quat2, f31, quatPtr);
Mtx mtx;
mDoMtx_quat(mtx, quatPtr);
infoPtr->mTranslate.x = infoPtr->mTranslate.x * f30 + info2.mTranslate.x * f31;
infoPtr->mTranslate.y = infoPtr->mTranslate.y * f30 + info2.mTranslate.y * f31;
infoPtr->mTranslate.z = infoPtr->mTranslate.z * f30 + info2.mTranslate.z * f31;
infoPtr->mScale.x = infoPtr->mScale.x * f30 + info2.mScale.x * f31;
infoPtr->mScale.y = infoPtr->mScale.y * f30 + info2.mScale.y * f31;
infoPtr->mScale.z = infoPtr->mScale.z * f30 + info2.mScale.z * f31;
mDoExt_setJ3DData(mtx, infoPtr, jntNo);
JMAEulerToQuat(sp28.mRotation.x, sp28.mRotation.y, sp28.mRotation.z, &sp8);
JMAQuatLerp(var_r27, &sp8, var_f31, var_r27);
mDoMtx_quat(sp68, var_r27);
var_r29->mTranslate.x = var_r29->mTranslate.x * var_f30 + sp28.mTranslate.x * var_f31;
var_r29->mTranslate.y = var_r29->mTranslate.y * var_f30 + sp28.mTranslate.y * var_f31;
var_r29->mTranslate.z = var_r29->mTranslate.z * var_f30 + sp28.mTranslate.z * var_f31;
var_r29->mScale.x = var_r29->mScale.x * var_f30 + sp28.mScale.x * var_f31;
var_r29->mScale.y = var_r29->mScale.y * var_f30 + sp28.mScale.y * var_f31;
var_r29->mScale.z = var_r29->mScale.z * var_f30 + sp28.mScale.z * var_f31;
mDoExt_setJ3DData(sp68, var_r29, jntNo);
}
if (mpCallback2) {
if (mpCallback2 != NULL) {
mpCallback2->execute(jntNo);
}
}
@@ -1631,11 +1602,72 @@ mDoExt_McaMorf2::~mDoExt_McaMorf2() {
/* 80011464-800116B4 00BDA4 0250+00 1/1 0/0 0/0 .text
* create__15mDoExt_McaMorf2FP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformP15J3DAnmTransformifiiP10Z2CreatureUlUl
*/
void mDoExt_McaMorf2::create(J3DModelData* param_0, mDoExt_McaMorfCallBack1_c* param_1,
int mDoExt_McaMorf2::create(J3DModelData* param_0, mDoExt_McaMorfCallBack1_c* param_1,
mDoExt_McaMorfCallBack2_c* param_2, J3DAnmTransform* param_3,
J3DAnmTransform* param_4, int param_5, f32 param_6, int param_7,
int param_8, Z2Creature* param_9, u32 param_10, u32 param_11) {
// NONMATCHING
mpModel = NULL;
mpTransformInfo = NULL;
mpQuat = NULL;
mpSound = NULL;
if (param_0 == NULL) {
return 0;
}
if (param_0->getMaterialNodePointer(0)->getSharedDisplayListObj() != NULL && param_10 == 0) {
if (param_0->isLocked()) {
param_10 = 0x20000;
} else {
param_10 = 0x80000;
}
}
mpModel = mDoExt_J3DModel__create(param_0, param_10, param_11);
if (mpModel == NULL) {
return 0;
}
if (param_10 != 0x80000) {
mDoExt_changeMaterial(mpModel);
}
mpSound = param_9;
setAnm(param_3, param_4, 0.0f, param_5, 0.0f, param_6, param_7, param_8);
mPrevMorf = -1.0f;
mpTransformInfo = new J3DTransformInfo[param_0->getJointNum()];
if (mpTransformInfo == NULL) {
ERROR_EXIT();
return 0;
}
mpQuat = new Quaternion[param_0->getJointNum()];
if (mpQuat == NULL) {
ERROR_EXIT();
return 0;
}
J3DTransformInfo* var_r29 = mpTransformInfo;
Quaternion* var_r26 = mpQuat;
J3DModelData* model_data = mpModel->getModelData();
int sp3C = model_data->getJointNum();
for (int i = 0; i < sp3C; i++) {
J3DJoint* sp30 = model_data->getJointNodePointer(i);
J3DTransformInfo* sp2C = &sp30->getTransformInfo();
*var_r29 = *sp2C;
JMAEulerToQuat(var_r29->mRotation.x, var_r29->mRotation.y, var_r29->mRotation.z, var_r26);
var_r29++;
var_r26++;
}
mpCallback1 = param_1;
mpCallback2 = param_2;
return 1;
}
/* 800116B4-800116F4 00BFF4 0040+00 1/1 0/0 0/0 .text ERROR_EXIT__15mDoExt_McaMorf2Fv */
@@ -1654,15 +1686,217 @@ void mDoExt_McaMorf2::ERROR_EXIT() {
}
/* 800116F4-80011D70 00C034 067C+00 1/0 0/0 0/0 .text calc__15mDoExt_McaMorf2Fv */
// NONMATCHING - float regswap, equivalent
void mDoExt_McaMorf2::calc() {
// NONMATCHING
if (mpModel != NULL) {
u16 jnt_no = J3DMtxCalc::getJoint()->getJntNo();
j3dSys.setCurrentMtxCalc(this);
J3DTransformInfo spF0[2];
Mtx spC0;
J3DTransformInfo spA0;
J3DTransformInfo sp80;
J3DTransformInfo* var_r30;
if (mpTransformInfo == NULL) {
var_r30 = &spA0;
} else {
var_r30 = &mpTransformInfo[jnt_no];
}
Quaternion sp60[2];
Quaternion sp40[2];
Quaternion sp30;
Quaternion sp20;
Quaternion* var_r27;
if (mpQuat == NULL) {
var_r27 = &sp30;
} else {
var_r27 = &mpQuat[jnt_no];
}
if (mpAnm == NULL) {
*var_r30 = mpModel->getModelData()->getJointNodePointer(jnt_no)->getTransformInfo();
if (mpCallback1 != NULL) {
mpCallback1->execute(jnt_no, var_r30);
}
JMAEulerToQuat(var_r30->mRotation.x, var_r30->mRotation.y, var_r30->mRotation.z,
var_r27);
J3DMtxCalcCalcTransformMaya::calcTransform(*var_r30);
} else if (mCurMorf >= 1.0f || mpTransformInfo == NULL || mpQuat == NULL) {
mpAnm->getTransform(jnt_no, &spF0[0]);
if (field_0x40 == NULL) {
if (mpCallback1 != NULL) {
mpCallback1->execute(jnt_no, &spF0[0]);
}
JMAEulerToQuat(spF0[0].mRotation.x, spF0[0].mRotation.y, spF0[0].mRotation.z,
var_r27);
J3DMtxCalcCalcTransformMaya::calcTransform(spF0[0]);
*var_r30 = spF0[0];
} else {
field_0x40->getTransform(jnt_no, &spF0[1]);
f32 sp1C;
f32 sp18;
sp18 = 1.0f - field_0x44;
sp1C = field_0x44;
var_r30->mScale.x = spF0[0].mScale.x * sp18
+ spF0[1].mScale.x * sp1C;
var_r30->mScale.y = spF0[0].mScale.y * sp18
+ spF0[1].mScale.y * sp1C;
var_r30->mScale.z = spF0[0].mScale.z * sp18
+ spF0[1].mScale.z * sp1C;
var_r30->mTranslate.x = spF0[0].mTranslate.x * sp18
+ spF0[1].mTranslate.x * sp1C;
var_r30->mTranslate.y = spF0[0].mTranslate.y * sp18
+ spF0[1].mTranslate.y * sp1C;
var_r30->mTranslate.z = spF0[0].mTranslate.z * sp18
+ spF0[1].mTranslate.z * sp1C;
for (int i = 0; i < 2; i++) {
JMAEulerToQuat(spF0[i].mRotation.x, spF0[i].mRotation.y, spF0[i].mRotation.z, &sp60[i]);
}
f32 var_f29 = sp1C / (sp18 + sp1C);
JMAQuatLerp(&sp60[0], &sp60[1], var_f29, var_r27);
mDoMtx_quat(spC0, var_r27);
mDoExt_setJ3DData(spC0, var_r30, jnt_no);
}
} else if (field_0x40 == NULL) {
f32 var_f31 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
f32 var_f30 = 1.0f - var_f31;
mpAnm->getTransform(jnt_no, &sp80);
if (mpCallback1 != NULL) {
mpCallback1->execute(jnt_no, &sp80);
}
JMAEulerToQuat(sp80.mRotation.x, sp80.mRotation.y, sp80.mRotation.z, &sp20);
JMAQuatLerp(var_r27, &sp20, var_f31, var_r27);
mDoMtx_quat(spC0, var_r27);
var_r30->mTranslate.x = var_r30->mTranslate.x * var_f30
+ sp80.mTranslate.x * var_f31;
var_r30->mTranslate.y = var_r30->mTranslate.y * var_f30
+ sp80.mTranslate.y * var_f31;
var_r30->mTranslate.z = var_r30->mTranslate.z * var_f30
+ sp80.mTranslate.z * var_f31;
var_r30->mScale.x = var_r30->mScale.x * var_f30
+ sp80.mScale.x * var_f31;
var_r30->mScale.y = var_r30->mScale.y * var_f30
+ sp80.mScale.y * var_f31;
var_r30->mScale.z = var_r30->mScale.z * var_f30
+ sp80.mScale.z * var_f31;
mDoExt_setJ3DData(spC0, var_r30, jnt_no);
} else {
mpAnm->getTransform(jnt_no, &spF0[0]);
field_0x40->getTransform(jnt_no, &spF0[1]);
f32 sp14, sp10;
sp10 = 1.0f - field_0x44;
sp14 = field_0x44;
sp80.mScale.x = spF0[0].mScale.x * sp10
+ spF0[1].mScale.x * sp14;
sp80.mScale.y = spF0[0].mScale.y * sp10
+ spF0[1].mScale.y * sp14;
sp80.mScale.z = spF0[0].mScale.z * sp10
+ spF0[1].mScale.z * sp14;
sp80.mTranslate.x = spF0[0].mTranslate.x * sp10
+ spF0[1].mTranslate.x * sp14;
sp80.mTranslate.y = spF0[0].mTranslate.y * sp10
+ spF0[1].mTranslate.y * sp14;
sp80.mTranslate.z = spF0[0].mTranslate.z * sp10
+ spF0[1].mTranslate.z * sp14;
for (int i = 0; i < 2; i++) {
JMAEulerToQuat(spF0[i].mRotation.x, spF0[i].mRotation.y, spF0[i].mRotation.z, &sp40[i]);
}
f32 var_f31 = sp14 / (sp10 + sp14);
JMAQuatLerp(&sp40[0], &sp40[1], var_f31, &sp20);
var_f31 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
f32 var_f30 = 1.0f - var_f31;
JMAQuatLerp(var_r27, &sp20, var_f31, var_r27);
var_r30->mTranslate.x = var_r30->mTranslate.x * var_f30
+ sp80.mTranslate.x * var_f31;
var_r30->mTranslate.y = var_r30->mTranslate.y * var_f30
+ sp80.mTranslate.y * var_f31;
var_r30->mTranslate.z = var_r30->mTranslate.z * var_f30
+ sp80.mTranslate.z * var_f31;
var_r30->mScale.x = var_r30->mScale.x * var_f30
+ sp80.mScale.x * var_f31;
var_r30->mScale.y = var_r30->mScale.y * var_f30
+ sp80.mScale.y * var_f31;
var_r30->mScale.z = var_r30->mScale.z * var_f30
+ sp80.mScale.z * var_f31;
mDoMtx_quat(spC0, var_r27);
mDoExt_setJ3DData(spC0, var_r30, jnt_no);
}
if (mpCallback2 != NULL) {
mpCallback2->execute(jnt_no);
}
}
}
/* 80011D70-80011FCC 00C6B0 025C+00 1/1 0/0 2/2 .text
* setAnm__15mDoExt_McaMorf2FP15J3DAnmTransformP15J3DAnmTransformfiffff */
void mDoExt_McaMorf2::setAnm(J3DAnmTransform* param_0, J3DAnmTransform* param_1, f32 param_2,
int param_3, f32 param_4, f32 param_5, f32 param_6, f32 param_7) {
// NONMATCHING
int i_attr, f32 i_morf, f32 i_speed, f32 i_start, f32 i_end) {
mpAnm = param_0;
field_0x40 = param_1;
field_0x44 = param_2;
setStartFrame(i_start);
if (i_end < 0.0f) {
if (mpAnm == NULL) {
mFrameCtrl.init(0);
} else {
mFrameCtrl.init(mpAnm->getFrameMax());
}
} else {
mFrameCtrl.init(i_end);
}
if (i_attr < 0) {
i_attr = param_0->getAttribute();
}
setPlayMode(i_attr);
setPlaySpeed(i_speed);
if (i_speed >= 0.0f) {
setFrame(i_start);
} else {
setFrame(mFrameCtrl.getEnd());
}
setLoopFrame(getFrame());
setMorf(i_morf);
if (mpSound != NULL) {
if (param_2 < 0.5f) {
mpBas = ((mDoExt_transAnmBas*)param_0)->getBas();
} else {
mpBas = ((mDoExt_transAnmBas*)param_1)->getBas();
}
if (mpBas != NULL) {
mpSound->initAnime(mpBas, getPlaySpeed() >= 0.0f, getLoopFrame(), getFrame());
}
}
}
/* 80011FCC-800120A0 00C90C 00D4+00 0/0 0/0 2/2 .text setAnmRate__15mDoExt_McaMorf2Ff */
@@ -1735,26 +1969,187 @@ void mDoExt_McaMorf2::stopZelAnime() {
}
/* 80012220-800123D0 00CB60 01B0+00 1/0 0/0 0/0 .text draw__19mDoExt_invJntPacketFv */
// void mDoExt_invJntPacket::draw() {
extern "C" void draw__19mDoExt_invJntPacketFv() {
// NONMATCHING
void mDoExt_invJntPacket::draw() {
J3DShape::resetVcdVatCache();
if (field_0x16) {
J3DModelData* sp20 = field_0x10->getModelData();
J3DJoint* sp1C = sp20->getJointNodePointer(field_0x14);
for (J3DMaterial* mesh = sp1C->getMesh(); mesh != NULL; mesh = mesh->getNext()) {
mesh->load();
J3DMatPacket* sp18 = field_0x10->getMatPacket(mesh->getIndex());
sp18->callDL();
GFSetZMode(1, GX_LEQUAL, 1);
GFSetBlendModeEtc(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_CLEAR, 0, 0, 1);
J3DShapePacket* shapePkt = sp18->getShapePacket();
JUT_ASSERT(0x1393, shapePkt != 0);
shapePkt->getShape()->loadPreDrawSetting();
do {
if (!shapePkt->getShape()->checkFlag(1)) {
if (shapePkt->getDisplayListObj() != NULL) {
shapePkt->getDisplayListObj()->callDL();
}
shapePkt->drawFast();
}
shapePkt = (J3DShapePacket*)shapePkt->getNextPacket();
} while (shapePkt != NULL);
}
} else {
static u8 l_invisibleMat[] ALIGN_DECL(32) = {
0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00,
0x00, 0x04, 0x00, 0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 0xFF, 0xFC, 0x61, 0xC1,
0x08, 0xFF, 0xF0, 0x61, 0xF3, 0x7F, 0x00, 0x00, 0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0x40,
0x00, 0x00, 0x17, 0x61, 0xEE, 0x00, 0x00, 0x00, 0x61, 0xEF, 0x00, 0x00, 0x00, 0x61, 0xF0,
0x00, 0x00, 0x00, 0x61, 0xF1, 0x00, 0x00, 0x00, 0x61, 0xF2, 0x00, 0x00, 0x00, 0x61, 0x41,
0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
GXCallDisplayList(l_invisibleMat, 0x80);
J3DModelData* sp14 = field_0x10->getModelData();
J3DJoint* sp10 = sp14->getJointNodePointer(field_0x14);
J3DMaterial* mesh = sp10->getMesh();
sp14->getShapeNodePointer(0)->loadPreDrawSetting();
for (; mesh != NULL; mesh = mesh->getNext()) {
J3DShape* spC = mesh->getShape();
if (!spC->checkFlag(1)) {
J3DShapePacket* shapePkt = field_0x10->getShapePacket(spC->getIndex());
shapePkt->drawFast();
}
}
}
J3DShape::resetVcdVatCache();
GFSetBlendModeEtc(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_CLEAR, 1, 0, 1);
}
/* 800123D0-800125DC 00CD10 020C+00 2/2 0/0 0/0 .text init__15mDoExt_3Dline_cFUsii */
void mDoExt_3Dline_c::init(u16 param_0, int param_1, int param_2) {
// NONMATCHING
// NONMATCHING - regalloc, probably some types are wrong
int mDoExt_3Dline_c::init(u16 param_0, int param_1, int param_2) {
field_0x0 = new cXyz[param_0];
if (field_0x0 == NULL) {
return 0;
}
if (param_1 != 0) {
field_0x4 = new f32[param_1];
if (field_0x4 == NULL) {
return 0;
}
} else {
field_0x4 = NULL;
}
int sp20 = param_0 * 2;
field_0x8 = new cXyz[sp20];
if (field_0x8 == NULL) {
return 0;
}
field_0xc = new cXyz[sp20];
if (field_0xc == NULL) {
return 0;
}
field_0x10 = new u8[param_0 * 3];
if (field_0x10 == NULL) {
return 0;
}
field_0x14 = new u8[param_0 * 3];
if (field_0x14 == NULL) {
return 0;
}
if (param_2 != 0) {
field_0x18 = new f32[sp20];
if (field_0x18 == NULL) {
return 0;
}
field_0x1c = new f32[sp20];
if (field_0x1c == NULL) {
return 0;
}
f32* var_r28 = field_0x18;
f32* var_r27 = field_0x1c;
for (int i = 0; i < param_0; i++) {
var_r28[0] = 0.0f;
var_r27[0] = 0.0f;
var_r28[2] = 1.0f;
var_r27[2] = 1.0f;
var_r28 += 4;
var_r27 += 4;
}
}
return 1;
}
/* 800125E0-800126BC 00CF20 00DC+00 0/0 0/0 12/12 .text init__19mDoExt_3DlineMat0_cFUsUsi
*/
int mDoExt_3DlineMat0_c::init(u16 param_0, u16 param_1, int param_2) {
// NONMATCHING
field_0x10 = param_0;
field_0x12 = param_1;
field_0x18 = new mDoExt_3Dline_c[param_0];
if (field_0x18 == NULL) {
return 0;
}
for (int i = 0; i < param_0; i++) {
if (!field_0x18[i].init(param_1, param_2, 0)) {
return 0;
}
}
field_0x4 = NULL;
field_0x16 = 0;
return 1;
}
/* 800126BC-800126C0 00CFFC 0004+00 2/2 0/0 0/0 .text __ct__15mDoExt_3Dline_cFv */
mDoExt_3Dline_c::mDoExt_3Dline_c() {
/* empty function */
}
mDoExt_3Dline_c::mDoExt_3Dline_c() {}
/* 803A30C0-803A3160 0001E0 0084+1C 1/1 0/0 0/0 .data l_matDL */
static u8 l_matDL[132] ALIGN_DECL(32) = {
0x08, 0x30, 0x3C, 0xF3, 0xCF, 0x00, 0x10, 0x00, 0x00, 0x10, 0x18, 0x3C, 0xF3, 0xCF, 0x00,
0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x7F, 0x32, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00,
0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x38,
0x00, 0x00, 0x61, 0xC0, 0x28, 0xF6, 0xAF, 0x61, 0xC1, 0x08, 0xFF, 0xE0, 0x61, 0x43, 0x00,
0x00, 0x41, 0x61, 0x40, 0x00, 0x00, 0x17, 0x61, 0x41, 0x00, 0x00, 0x0C, 0x61, 0xF3, 0x7F,
0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10,
0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803A3160-803A31F0 000280 008D+03 1/1 0/0 0/0 .data l_mat1DL */
static u8 l_mat1DL[141] ALIGN_DECL(32) = {
0x10, 0x00, 0x00, 0x10, 0x40, 0xFF, 0xFF, 0x42, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xCF, 0x00, 0x10,
0x00, 0x00, 0x10, 0x18, 0x3C, 0xF3, 0xCF, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x7F,
0x32, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF,
0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x38, 0x00, 0x40, 0x61, 0xC0, 0x28, 0xFA, 0x8F, 0x61, 0xC1, 0x08,
0xFF, 0xF0, 0x61, 0x43, 0x00, 0x00, 0x41, 0x61, 0x40, 0x00, 0x00, 0x17, 0x61, 0x41, 0x00, 0x00,
0x0C, 0x61, 0xF3, 0x7F, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x10,
0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x01, 0x61, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 800126C0-80012774 00D000 00B4+00 1/0 0/0 0/0 .text setMaterial__19mDoExt_3DlineMat0_cFv */
void mDoExt_3DlineMat0_c::setMaterial() {
@@ -1773,21 +2168,151 @@ void mDoExt_3DlineMat0_c::setMaterial() {
}
/* 80012774-80012874 00D0B4 0100+00 1/0 0/0 0/0 .text draw__19mDoExt_3DlineMat0_cFv */
// NONMATCHING - issues with the iterators
void mDoExt_3DlineMat0_c::draw() {
// NONMATCHING
GXSetTevColor(GX_TEVREG2, field_0x8);
if (field_0xc != NULL) {
dKy_Global_amb_set(field_0xc);
}
mDoExt_3Dline_c* var_r28 = field_0x18;
int var_r26 = (field_0x14 & 0x7FFF) << 1;
for (int i = 0; i < field_0x10; i++) {
GXSetArray(GX_VA_POS, var_r28[field_0x16].field_0x8, sizeof(cXyz));
GXSetArray(GX_VA_NRM, var_r28[field_0x16].field_0x10, 3);
GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, var_r26);
for (u16 j = 0; j < (u16)var_r26;) {
GXPosition1x16(j);
GXNormal1x16(j);
j++;
GXPosition1x16(j);
GXNormal1x16(j);
j++;
}
GXEnd();
var_r28++;
}
field_0x16 ^= 1;
}
/* 80012874-80012E3C 00D1B4 05C8+00 0/0 0/0 2/2 .text
* update__19mDoExt_3DlineMat0_cFifR8_GXColorUsP12dKy_tevstr_c */
void mDoExt_3DlineMat0_c::update(int param_0, f32 param_1, _GXColor& param_2, u16 param_3,
void mDoExt_3DlineMat0_c::update(int param_0, f32 param_1, GXColor& param_2, u16 param_3,
dKy_tevstr_c* param_4) {
// NONMATCHING
}
/* 80012E3C-80013360 00D77C 0524+00 0/0 0/0 9/9 .text
* update__19mDoExt_3DlineMat0_cFiR8_GXColorP12dKy_tevstr_c */
void mDoExt_3DlineMat0_c::update(int param_0, _GXColor& param_1, dKy_tevstr_c* param_2) {
// NONMATCHING
// NONMATCHING
void mDoExt_3DlineMat0_c::update(int param_0, GXColor& param_1, dKy_tevstr_c* param_2) {
field_0x8 = param_1;
field_0xc = param_2;
if (param_0 < 0) {
field_0x14 = field_0x12;
} else if (param_0 > field_0x12) {
field_0x14 = field_0x12;
} else {
field_0x14 = param_0;
}
view_class* view_p = dComIfGd_getView();
mDoExt_3Dline_c* sp30 = field_0x18;
int sp2C = field_0x14 * 2;
int sp28 = field_0x14 * 12;
cXyz sp134;
cXyz sp128;
cXyz sp11C;
cXyz sp110;
for (int i = 0; i < field_0x10; i++) {
cXyz* pos_p = sp30->field_0x0;
f32* size_p = sp30->field_0x4;
JUT_ASSERT(0x1545, size_p != 0);
cXyz* sp20 = &sp30->field_0x8[field_0x16];
cXyz* sp24 = sp20;
u8* sp1C = &sp30->field_0x10[field_0x16];
u8* var_r30 = sp1C;
u8* var_r29 = var_r30 + 3;
sp128 = pos_p[1] - pos_p[0];
sp134 = pos_p[0] - view_p->lookat.eye;
sp128 = sp128.outprod(sp134);
sp128.normalizeZP();
var_r30[0] = sp128.x * 64.0f;
var_r30[1] = sp128.y * 64.0f;
var_r30[2] = sp128.z * 64.0f;
var_r29[0] = -sp1C[0];
var_r29[1] = -sp1C[1];
var_r29[2] = -sp1C[2];
sp128 *= *size_p;
sp20[0] = pos_p[0] + sp128;
sp20[1] = pos_p[0] - sp128;
pos_p++;
sp11C = pos_p[0] + sp128;
sp110 = pos_p[0] - sp128;
for (int sp10 = field_0x14 - 2; sp10 > 0; sp10--) {
sp128 = pos_p[1] - pos_p[0];
sp134 = pos_p[0] - view_p->lookat.eye;
sp128 = sp128.outprod(sp134);
sp128.normalizeZP();
var_r30 += 6;
var_r29 += 6;
var_r30[0] = sp128.x * 64.0f;
var_r30[1] = sp128.y * 64.0f;
var_r30[2] = sp128.z * 64.0f;
var_r29[0] = -sp1C[0];
var_r29[1] = -sp1C[1];
var_r29[2] = -sp1C[2];
sp128 *= *size_p;
sp11C += pos_p[0] + sp128;
sp110 += pos_p[0] - sp128;
*sp24 = sp11C * 0.5f;
*sp20 = sp110 * 0.5f;
pos_p++;
sp11C = pos_p[0] + sp128;
sp110 = pos_p[0] - sp128;
}
var_r29 += 3;
var_r29[0] = var_r30[0];
var_r29[1] = var_r30[1];
var_r29[2] = var_r30[2];
var_r30 += 3;
var_r29 += 3;
var_r29[0] = var_r30[0];
var_r29[1] = var_r30[1];
var_r29[2] = var_r30[2];
*sp24 = sp11C;
*sp20 = sp110;
DCStoreRangeNoSync(sp20, sp2C);
DCStoreRangeNoSync(sp1C, sp28);
}
}
/* 80013360-800134F8 00DCA0 0198+00 0/0 0/0 19/19 .text init__19mDoExt_3DlineMat1_cFUsUsP7ResTIMGi
@@ -1849,6 +2374,7 @@ void mDoExt_3DlineMatSortPacket::draw() {
J3DShape::resetVcdVatCache();
}
#ifdef DEBUG
void drawCube(MtxP mtx, cXyz* pos, const GXColor& color) {
GXSetArray(GX_VA_POS, pos, sizeof(cXyz));
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
@@ -1940,6 +2466,7 @@ void mDoExt_cylinderPacket::draw() {
GXSetCurrentMtx(0);
GXDrawCylinder(8);
}
#endif
/* 80014804-8001494C 00F144 0148+00 3/3 0/0 0/0 .text
* mDoExt_initFontCommon__FPP7JUTFontPP7ResFONTP7JKRHeapPCcP10JKRArchiveUcUlUl */