Files
tww/src/m_Do/m_Do_ext.cpp
T
LagoLunatic b6d0373644 m_Do_ext
2024-03-21 17:53:48 -04:00

2131 lines
76 KiB
C++

//
// Generated by dtk
// Translation Unit: m_Do_ext.cpp
//
#include "m_Do/m_Do_ext.h"
#include "JSystem/J3DGraphBase/J3DTransform.h"
#include "JSystem/JKernel/JKRArchive.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JMath/JMath.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "JSystem/JUtility/JUTCacheFont.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "SSystem/SComponent/c_m3d.h"
#include "d/d_com_inf_game.h"
#include "d/d_s_play.h"
#include "dolphin/gf/GFPixel.h"
#include "m_Do/m_Do_mtx.h"
#include "m_Do/m_Do_printf.h"
// Needed for the .data section to match.
static Vec dummy_2100 = {1.0f, 1.0f, 1.0f};
/* 8000DA70-8000DCF0 .text mDoExt_setJ3DData__FPA4_fPC16J3DTransformInfoUs */
void mDoExt_setJ3DData(Mtx mtx, const J3DTransformInfo* transformInfo, u16 param_2) {
bool local_28;
if (cM3d_IsZero(transformInfo->mScale.x - 1.0f) && cM3d_IsZero(transformInfo->mScale.y - 1.0f) && cM3d_IsZero(transformInfo->mScale.z - 1.0f)) {
j3dSys.getModel()->setScaleFlag(param_2, 1);
local_28 = true;
} else {
j3dSys.getModel()->setScaleFlag(param_2, 0);
local_28 = false;
}
mtx[0][3] = transformInfo->mTranslate.x;
mtx[1][3] = transformInfo->mTranslate.y;
mtx[2][3] = transformInfo->mTranslate.z;
if (!local_28) {
mtx[0][0] *= transformInfo->mScale.x;
mtx[0][1] *= transformInfo->mScale.y;
mtx[0][2] *= transformInfo->mScale.z;
mtx[1][0] *= transformInfo->mScale.x;
mtx[1][1] *= transformInfo->mScale.y;
mtx[1][2] *= transformInfo->mScale.z;
mtx[2][0] *= transformInfo->mScale.x;
mtx[2][1] *= transformInfo->mScale.y;
mtx[2][2] *= transformInfo->mScale.z;
}
if (j3dSys.getModel()->getModelData()->getJointNodePointer(param_2)->getScaleCompensate() == 1) {
f32 x = 1.0f / J3DSys::mParentS.x;
f32 y = 1.0f / J3DSys::mParentS.y;
f32 z = 1.0f / J3DSys::mParentS.z;
mtx[0][0] *= x;
mtx[0][1] *= x;
mtx[0][2] *= x;
mtx[1][0] *= y;
mtx[1][1] *= y;
mtx[1][2] *= y;
mtx[2][0] *= z;
mtx[2][1] *= z;
mtx[2][2] *= z;
}
mDoMtx_concat(J3DSys::mCurrentMtx, mtx, J3DSys::mCurrentMtx);
j3dSys.getModel()->setAnmMtx(param_2, J3DSys::mCurrentMtx);
J3DSys::mParentS.x = transformInfo->mScale.x;
J3DSys::mParentS.y = transformInfo->mScale.y;
J3DSys::mParentS.z = transformInfo->mScale.z;
}
/* 8000DCF4-8000DD4C .text isCurrentSolidHeap__Fv */
bool isCurrentSolidHeap() {
if (JKRGetCurrentHeap()->getHeapType() != 'SLID') {
OSReport_Error("ソリッドヒープちゃうがな!\n");
return false;
}
return true;
}
/* 8000DD4C-8000DF24 .text initPlay__14mDoExt_baseAnmFsifssb */
int mDoExt_baseAnm::initPlay(s16 i_frameMax, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify) {
JUT_ASSERT(421, i_modify || isCurrentSolidHeap());
if (!i_modify) {
mFrameCtrl = new J3DFrameCtrl();
if (!mFrameCtrl) {
return 0;
}
}
mFrameCtrl->setStart(i_startF);
if (i_endF < 0) {
mFrameCtrl->init(i_frameMax);
} else {
mFrameCtrl->init(i_endF);
}
mFrameCtrl->setAttribute(i_attribute);
mFrameCtrl->setRate(i_rate);
if (i_rate >= 0.0f) {
mFrameCtrl->setFrame(i_startF);
} else {
mFrameCtrl->setFrame(mFrameCtrl->getEnd());
}
mFrameCtrl->setLoop(mFrameCtrl->getFrame());
return 1;
}
/* 8000DF24-8000DFC4 .text play__14mDoExt_baseAnmFv */
int mDoExt_baseAnm::play() {
JUT_ASSERT(462, mFrameCtrl != 0);
mFrameCtrl->update();
return isStop();
}
/* 8000DFC4-8000DFF0 .text init__13mDoExt_bpkAnmFP12J3DModelDataP11J3DAnmColoriifssbi */
int mDoExt_bpkAnm::init(J3DModelData* i_modelData, J3DAnmColor* i_bpk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) {
return init(&i_modelData->getMaterialTable(), i_bpk, i_anmPlay, i_attribute, i_rate, i_startF, i_endF, i_modify, i_entry);
}
/* 8000DFF0-8000E014 .text entry__13mDoExt_bpkAnmFP12J3DModelDataf */
void mDoExt_bpkAnm::entry(J3DModelData* i_modelData, f32 param_1) {
entry(&i_modelData->getMaterialTable(), param_1);
}
/* 8000E014-8000E2A8 .text init__13mDoExt_bpkAnmFP16J3DMaterialTableP11J3DAnmColoriifssbi */
int mDoExt_bpkAnm::init(J3DMaterialTable* i_matTable, J3DAnmColor* i_bpk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) {
JUT_ASSERT(531, i_modify || isCurrentSolidHeap());
JUT_ASSERT(533, i_matTable != 0 && i_bpk != 0);
mpAnm = i_bpk;
mpAnm->searchUpdateMaterialID(i_matTable);
u16 updateMaterialNum = mpAnm->getUpdateMaterialNum();
if (!i_modify) {
mUpdateMaterialNum = updateMaterialNum;
JUT_ASSERT(541, mUpdateMaterialNum);
field_0xc = new J3DMatColorAnm[mUpdateMaterialNum];
if (!field_0xc) {
return 0;
}
}
JUT_ASSERT(548, updateMaterialNum <= mUpdateMaterialNum);
J3DMatColorAnm* matColorAnm = field_0xc;
for (u16 i = 0; i < updateMaterialNum; i++) {
matColorAnm->setAnmColor(mpAnm);
matColorAnm->setAnmIndex(i);
matColorAnm++;
}
if (!i_modify && i_entry) {
i_matTable->setMatColorAnimator(mpAnm, field_0xc);
}
if (i_anmPlay) {
if (initPlay(mpAnm->getFrameMax(), i_attribute, i_rate, i_startF, i_endF, i_modify) == 0) {
return 0;
}
}
return 1;
}
/* 8000E2F4-8000E32C .text entry__13mDoExt_bpkAnmFP16J3DMaterialTablef */
void mDoExt_bpkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) {
mpAnm->setFrame(i_frame);
i_matTable->setMatColorAnimator(mpAnm, field_0xc);
}
/* 8000E32C-8000E358 .text init__13mDoExt_btpAnmFP12J3DModelDataP16J3DAnmTexPatterniifssbi */
int mDoExt_btpAnm::init(J3DModelData* i_modelData, J3DAnmTexPattern* i_btp, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) {
return init(&i_modelData->getMaterialTable(), i_btp, i_anmPlay, i_attribute, i_rate, i_startF, i_endF, i_modify, i_entry);
}
/* 8000E358-8000E37C .text entry__13mDoExt_btpAnmFP12J3DModelDatas */
void mDoExt_btpAnm::entry(J3DModelData* i_modelData, s16 i_frame) {
entry(&i_modelData->getMaterialTable(), i_frame);
}
/* 8000E37C-8000E610 .text init__13mDoExt_btpAnmFP16J3DMaterialTableP16J3DAnmTexPatterniifssbi */
int mDoExt_btpAnm::init(J3DMaterialTable* i_matTable, J3DAnmTexPattern* i_btp, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) {
JUT_ASSERT(648, i_modify || isCurrentSolidHeap());
JUT_ASSERT(650, i_matTable != 0 && i_btp != 0);
mpAnm = i_btp;
mpAnm->searchUpdateMaterialID(i_matTable);
u16 updateMaterialNum = mpAnm->getUpdateMaterialNum();
if (!i_modify) {
mUpdateMaterialNum = updateMaterialNum;
JUT_ASSERT(658, mUpdateMaterialNum);
field_0xc = new J3DTexNoAnm[mUpdateMaterialNum];
if (!field_0xc) {
return 0;
}
}
JUT_ASSERT(665, updateMaterialNum <= mUpdateMaterialNum);
J3DTexNoAnm* texNoAnm = field_0xc;
for (u16 i = 0; i < updateMaterialNum; i++) {
texNoAnm->setAnmTexPattern(mpAnm);
texNoAnm->setAnmIndex(i);
texNoAnm++;
}
if (!i_modify && i_entry) {
i_matTable->setTexNoAnimator(mpAnm, field_0xc);
}
if (i_anmPlay) {
if (initPlay(mpAnm->getFrameMax(), i_attribute, i_rate, i_startF, i_endF, i_modify) == 0) {
return 0;
}
}
return 1;
}
/* 8000E674-8000E6CC .text entry__13mDoExt_btpAnmFP16J3DMaterialTables */
void mDoExt_btpAnm::entry(J3DMaterialTable* i_matTable, s16 i_frame) {
mpAnm->setFrame(i_frame);
i_matTable->setTexNoAnimator(mpAnm, field_0xc);
}
/* 8000E6CC-8000E6F8 .text init__13mDoExt_btkAnmFP12J3DModelDataP19J3DAnmTextureSRTKeyiifssbi */
int mDoExt_btkAnm::init(J3DModelData* i_modelData, J3DAnmTextureSRTKey* i_btk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) {
return init(&i_modelData->getMaterialTable(), i_btk, i_anmPlay, i_attribute, i_rate, i_startF, i_endF, i_modify, i_entry);
}
/* 8000E6F8-8000E71C .text entry__13mDoExt_btkAnmFP12J3DModelDataf */
void mDoExt_btkAnm::entry(J3DModelData* i_modelData, f32 i_frame) {
entry(&i_modelData->getMaterialTable(), i_frame);
}
/* 8000E71C-8000EAE4 .text init__13mDoExt_btkAnmFP16J3DMaterialTableP19J3DAnmTextureSRTKeyiifssbi */
int mDoExt_btkAnm::init(J3DMaterialTable* i_matTable, J3DAnmTextureSRTKey* i_btk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) {
JUT_ASSERT(781, i_modify || isCurrentSolidHeap());
JUT_ASSERT(783, i_matTable != 0 && i_btk != 0);
mpAnm = i_btk;
mpAnm->searchUpdateMaterialID(i_matTable);
u16 updateMaterialNum = mpAnm->getUpdateMaterialNum();
if (!i_modify) {
mUpdateMaterialNum = updateMaterialNum;
JUT_ASSERT(791, mUpdateMaterialNum);
for (u16 i = 0; i < mUpdateMaterialNum; i++) {
u16 materialId = mpAnm->getUpdateMaterialID(i);
if (materialId != 0xFFFF) {
J3DMaterial* material = i_matTable->getMaterialNodePointer(materialId);
u8 texMtxId = mpAnm->getUpdateTexMtxID(i);
if (texMtxId != 0xFF) {
J3DTexMtx* texMtx = material->getTexGenBlock()->getTexMtx(texMtxId);
if (!texMtx) {
texMtx = new J3DTexMtx();
}
}
}
}
mpTexMtxAnm = new J3DTexMtxAnm[mUpdateMaterialNum];
if (!mpTexMtxAnm) {
return 0;
}
}
JUT_ASSERT(811, updateMaterialNum <= mUpdateMaterialNum);
J3DTexMtxAnm* texMtxAnm = mpTexMtxAnm;
for (u16 i = 0; i < updateMaterialNum; i++) {
texMtxAnm->setAnmTransform(mpAnm);
texMtxAnm->setAnmIndex(i);
texMtxAnm++;
}
if (!i_modify && i_entry) {
i_matTable->setTexMtxAnimator(mpAnm, mpTexMtxAnm, NULL);
}
if (i_anmPlay) {
if (initPlay(mpAnm->getFrameMax(), i_attribute, i_rate, i_startF, i_endF, i_modify) == 0) {
return 0;
}
}
return 1;
}
/* 8000EB38-8000EB74 .text entry__13mDoExt_btkAnmFP16J3DMaterialTablef */
void mDoExt_btkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) {
mpAnm->setFrame(i_frame);
i_matTable->setTexMtxAnimator(mpAnm, mpTexMtxAnm, NULL);
}
/* 8000EB74-8000EBA0 .text init__13mDoExt_brkAnmFP12J3DModelDataP15J3DAnmTevRegKeyiifssbi */
int mDoExt_brkAnm::init(J3DModelData* i_modelData, J3DAnmTevRegKey* i_brk, BOOL i_anmPlay,
int i_attribute, f32 i_rate, s16 i_start, s16 i_end, bool i_modify, int i_entry) {
return init(&i_modelData->getMaterialTable(), i_brk, i_anmPlay, i_attribute, i_rate,
i_start, i_end, i_modify, i_entry);
}
/* 8000EBA0-8000EBC4 .text entry__13mDoExt_brkAnmFP12J3DModelDataf */
void mDoExt_brkAnm::entry(J3DModelData* i_modelData, f32 i_frame) {
entry(&i_modelData->getMaterialTable(), i_frame);
}
/* 8000EBC4-8000EEE8 .text init__13mDoExt_brkAnmFP16J3DMaterialTableP15J3DAnmTevRegKeyiifssbi */
int mDoExt_brkAnm::init(J3DMaterialTable* i_matTable, J3DAnmTevRegKey* i_brk, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) {
JUT_ASSERT(910, i_modify || isCurrentSolidHeap());
JUT_ASSERT(912, i_matTable != 0 && i_brk != 0);
mpAnm = i_brk;
mpAnm->searchUpdateMaterialID(i_matTable);
u16 CRegUpdateMaterialNum = mpAnm->getCRegUpdateMaterialNum();
if (!i_modify) {
mCRegUpdateMaterialNum = CRegUpdateMaterialNum;
mpCRegAnm = new J3DTevColorAnm[mCRegUpdateMaterialNum];
if (!mpCRegAnm) {
return 0;
}
}
JUT_ASSERT(926, CRegUpdateMaterialNum <= mCRegUpdateMaterialNum);
u16 KRegUpdateMaterialNum = mpAnm->getKRegUpdateMaterialNum();
if (!i_modify) {
mKRegUpdateMaterialNum = KRegUpdateMaterialNum;
mpKRegAnm = new J3DTevKColorAnm[mKRegUpdateMaterialNum];
if (!mpKRegAnm) {
return 0;
}
}
JUT_ASSERT(937, KRegUpdateMaterialNum <= mKRegUpdateMaterialNum);
J3DTevColorAnm* cRegAnm = mpCRegAnm;
for (u16 i = 0; i < CRegUpdateMaterialNum; i++) {
cRegAnm->setAnmIndex(i);
cRegAnm->setAnmTevReg(mpAnm);
cRegAnm++;
}
J3DTevKColorAnm* kRegAnm = mpKRegAnm;
for (u16 i = 0; i < KRegUpdateMaterialNum; i++) {
kRegAnm->setAnmIndex(i);
kRegAnm->setAnmTevReg(mpAnm);
kRegAnm++;
}
if (!i_modify && i_entry) {
i_matTable->setTevRegAnimator(mpAnm, mpCRegAnm, mpKRegAnm);
}
if (i_anmPlay) {
if (initPlay(mpAnm->getFrameMax(), i_attribute, i_rate, i_startF, i_endF, i_modify) == 0) {
return 0;
}
}
return 1;
}
/* 8000EF80-8000EFBC .text entry__13mDoExt_brkAnmFP16J3DMaterialTablef */
void mDoExt_brkAnm::entry(J3DMaterialTable* i_matTable, f32 i_frame) {
mpAnm->setFrame(i_frame);
i_matTable->setTevRegAnimator(mpAnm, mpCRegAnm, mpKRegAnm);
}
/* 8000EFBC-8000F178 .text init__13mDoExt_bvaAnmFP8J3DModelP20J3DAnmVisibilityFulliifssbi */
int mDoExt_bvaAnm::init(J3DModel* i_model, J3DAnmVisibilityFull* i_bva, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify, int i_entry) {
JUT_ASSERT(1002, i_modify || isCurrentSolidHeap());
JUT_ASSERT(1004, i_model != 0 && i_bva != 0);
mpAnm = i_bva;
if (!i_modify) {
field_0xc = new J3DVisibilityManager(mpAnm);
if (!field_0xc) {
return 0;
}
if (i_entry) {
i_model->setVisibilityManager(field_0xc);
}
} else {
field_0xc->mAnmVisibility = mpAnm;
}
if (i_anmPlay) {
if (initPlay(mpAnm->getFrameMax(), i_attribute, i_rate, i_startF, i_endF, i_modify) == 0) {
return 0;
}
}
return 1;
}
/* 8000F178-8000F1B4 .text entry__13mDoExt_bvaAnmFP8J3DModels */
void mDoExt_bvaAnm::entry(J3DModel* i_model, s16 i_frame) {
mpAnm->setFrame(i_frame);
i_model->setVisibilityManager(field_0xc);
}
/* 8000F1B4-8000F408 .text init__13mDoExt_bckAnmFP12J3DModelDataP15J3DAnmTransformiifssb */
int mDoExt_bckAnm::init(J3DModelData* i_modelData, J3DAnmTransform* i_bck, BOOL i_anmPlay, int i_attribute, f32 i_rate, s16 i_startF, s16 i_endF, bool i_modify) {
JUT_ASSERT(1065, i_modify || isCurrentSolidHeap());
JUT_ASSERT(1067, i_bck != 0);
mAnmTransform = i_bck;
if (!i_modify) {
mAnm = new J3DMtxCalcMayaAnm(mAnmTransform);
if (!mAnm) {
return 0;
}
} else {
mAnm->setAnmTransform(mAnmTransform);
}
if (i_anmPlay) {
if (initPlay(mAnmTransform->getFrameMax(), i_attribute, i_rate, i_startF, i_endF, i_modify) == 0) {
return 0;
}
}
return 1;
}
/* 8000F590-8000F610 .text changeBckOnly__13mDoExt_bckAnmFP15J3DAnmTransform */
void mDoExt_bckAnm::changeBckOnly(J3DAnmTransform* i_bck) {
mAnmTransform = i_bck;
JUT_ASSERT(1104, mAnm != 0);
mAnm->setAnmTransform(mAnmTransform);
}
/* 8000F610-8000F638 .text entry__13mDoExt_bckAnmFP12J3DModelDataf */
void mDoExt_bckAnm::entry(J3DModelData* i_modelData, f32 i_frame) {
mAnmTransform->setFrame(i_frame);
i_modelData->getJointNodePointer(0)->setMtxCalc(mAnm);
}
/* 8000F638-8000F6A0 .text mDoExt_changeMaterial__FP8J3DModel */
void mDoExt_changeMaterial(J3DModel* i_model) {
J3DModelData* model_data = i_model->getModelData();
for (u16 i = 0; i < model_data->getMaterialNum(); i++) {
model_data->getMaterialNodePointer(i)->change();
}
}
/* 8000F6A0-8000F758 .text mDoExt_modelTexturePatch__FP12J3DModelData */
void mDoExt_modelTexturePatch(J3DModelData* i_modelData) {
j3dSys.setTexture(i_modelData->getTexture());
for (u16 i = 0; i < i_modelData->getMaterialNum(); i++) {
J3DMaterial* mat = i_modelData->getMaterialNodePointer(i);
J3DTevBlock* tev = mat->getTevBlock();
J3DDisplayListObj* dlObj = mat->getSharedDisplayListObj();
BOOL ret = OSDisableInterrupts();
GDInitGDLObj(&J3DDisplayListObj::sGDLObj, dlObj->getDisplayList(0),
dlObj->getDisplayListSize());
GDSetCurrent(&J3DDisplayListObj::sGDLObj);
tev->patchTexNoAndTexCoordScale();
OSRestoreInterrupts(ret);
GDSetCurrent(NULL);
}
}
static void dummy(J3DTevBlock* tev, J3DColorBlock* color, J3DPEBlock* pe) {
tev->patch();
color->patchLight();
pe->patch();
}
/* 8000F768-8000F7BC .text mDoExt_modelDiff__FP8J3DModel */
void mDoExt_modelDiff(J3DModel* i_model) {
i_model->calcMaterial();
i_model->diff();
i_model->entry();
}
/* 8000F7BC-8000F84C .text mDoExt_modelUpdate__FP8J3DModel */
void mDoExt_modelUpdate(J3DModel* i_model) {
J3DModelData* model_data = i_model->getModelData();
if (model_data->getModelDataType() == 1 && !model_data->isLocked()) {
i_model->calc();
mDoExt_modelDiff(i_model);
} else {
i_model->update();
i_model->lock();
}
i_model->viewCalc();
}
/* 8000F84C-8000F8F8 .text mDoExt_modelUpdateDL__FP8J3DModel */
void mDoExt_modelUpdateDL(J3DModel* i_model) {
J3DModelData* model_data = i_model->getModelData();
if (model_data->getModelDataType() == 1 && !model_data->isLocked()) {
i_model->calc();
mDoExt_modelDiff(i_model);
} else {
if (g_regHIO.mChild[2].mShortRegs[9] == 0) {
i_model->unlock();
}
i_model->update();
i_model->lock();
}
i_model->viewCalc();
}
/* 8000F8F8-8000F974 .text mDoExt_modelEntry__FP8J3DModel */
void mDoExt_modelEntry(J3DModel* i_model) {
J3DModelData* model_data = i_model->getModelData();
if (model_data->getModelDataType() == 1 && !model_data->isLocked()) {
mDoExt_modelDiff(i_model);
} else {
i_model->entry();
i_model->lock();
}
i_model->viewCalc();
}
/* 8000F974-8000FA0C .text mDoExt_modelEntryDL__FP8J3DModel */
void mDoExt_modelEntryDL(J3DModel* i_model) {
J3DModelData* model_data = i_model->getModelData();
if (model_data->getModelDataType() == 1 && !model_data->isLocked()) {
mDoExt_modelDiff(i_model);
} else {
if (g_regHIO.mChild[2].mShortRegs[9] == 0) {
i_model->unlock();
}
i_model->entry();
i_model->lock();
}
i_model->viewCalc();
}
/* 8000FA0C-800100F0 .text store__23mDoExt_backupMatBlock_cFP11J3DMaterial */
void mDoExt_backupMatBlock_c::store(J3DMaterial* i_material) {
J3DColorBlock* colorBlock = i_material->getColorBlock();
mColorChanNum = colorBlock->getColorChanNum();
for (u32 i = 0; i < 2; i++) {
mMatColor[i] = *colorBlock->getMatColor(i);
}
for (u32 i = 0; i < 4; i++) {
mColorChan[i] = *colorBlock->getColorChan(i);
}
for (u32 i = 0; i < 2; i++) {
mAmbColor[i] = *colorBlock->getAmbColor(i);
}
J3DTexGenBlock* texGenBlock = i_material->getTexGenBlock();
mTexGenNum = texGenBlock->getTexGenNum();
u32 texGenMax = 8;
if (texGenBlock->getType() == 'TGB4') {
texGenMax = 4;
}
for (u32 i = 0; i < texGenMax; i++) {
mTexCoord[i] = *texGenBlock->getTexCoord(i);
}
for (u32 i = 0; i < texGenMax; i++) {
if (texGenBlock->getTexMtx(i)) {
memcpy(&mTexMtx[i], texGenBlock->getTexMtx(i), sizeof(J3DTexMtx));
DCStoreRange(&mTexMtx[i], sizeof(J3DTexMtx));
}
}
J3DTevBlock* tevBlock = i_material->getTevBlock();
mTevStageNum = tevBlock->getTevStageNum();
for (u32 i = 0; i < 4; i++) {
mTevColor[i] = *tevBlock->getTevColor(i);
}
for (u32 i = 0; i < 4; i++) {
mTevKColor[i] = *tevBlock->getTevKColor(i);
}
u32 texNoMax = 8;
if (tevBlock->getType() == 'TVB4') {
texNoMax = 4;
for (u32 i = 0; i < 4; i++) {
mTevOrder[i] = *tevBlock->getTevOrder(i);
mTevKColorSel[i] = tevBlock->getTevKColorSel(i);
mTevKAlphaSel[i] = tevBlock->getTevKAlphaSel(i);
}
for (u32 i = 0; i < 4; i++) {
mTevSwapModeTable[i] = *tevBlock->getTevSwapModeTable(i);
}
}
for (u32 i = 0; i < texNoMax; i++) {
mTexNo[i] = tevBlock->getTexNo(i);
}
for (u32 i = 0; i < texNoMax; i++) {
mTevStage[i] = *tevBlock->getTevStage(i);
mIndTevStage[i] = *tevBlock->getIndTevStage(i);
}
J3DIndBlock* indBlock = i_material->getIndBlock();
if (indBlock->getType() == 'IBLF') {
mIndTexStageNum = indBlock->getIndTexStageNum();
for (u32 i = 0; i < 4; i++) {
mIndTexOrder[i] = *indBlock->getIndTexOrder(i);
}
for (u32 i = 0; i < 3; i++) {
mIndTexMtx[i] = *indBlock->getIndTexMtx(i);
}
for (u32 i = 0; i < 4; i++) {
mIndTexCoordScale[i] = *indBlock->getIndTexCoordScale(i);
}
}
J3DPEBlock* peBlock = i_material->getPEBlock();
memcpy(&mFog, peBlock->getFog(), sizeof(J3DFog));
DCStoreRange(&mFog, sizeof(J3DFog));
mAlphaComp = *peBlock->getAlphaComp();
mBlend = *peBlock->getBlend();
mZMode = *peBlock->getZMode();
mZCompLoc = peBlock->getZCompLoc();
mMaterialAnm = i_material->getMaterialAnm();
mMaterialMode = i_material->getMaterialMode();
}
/* 800101BC-8001084C .text restore__23mDoExt_backupMatBlock_cFP11J3DMaterial */
void mDoExt_backupMatBlock_c::restore(J3DMaterial* i_material) {
J3DColorBlock* colorBlock = i_material->getColorBlock();
colorBlock->setColorChanNum(mColorChanNum);
for (u32 i = 0; i < 2; i++) {
colorBlock->setMatColor(i, mMatColor[i]);
}
for (u32 i = 0; i < 4; i++) {
colorBlock->setColorChan(i, mColorChan[i]);
}
for (u32 i = 0; i < 2; i++) {
colorBlock->setAmbColor(i, mAmbColor[i]);
}
J3DTexGenBlock* texGenBlock = i_material->getTexGenBlock();
texGenBlock->setTexGenNum(mTexGenNum);
u32 texGenMax = 8;
if (texGenBlock->getType() == 'TGB4') {
texGenMax = 4;
}
for (u32 i = 0; i < texGenMax; i++) {
texGenBlock->setTexCoord(i, &mTexCoord[i]);
}
for (u32 i = 0; i < texGenMax; i++) {
if (texGenBlock->getTexMtx(i)) {
memcpy(texGenBlock->getTexMtx(i), &mTexMtx[i], sizeof(J3DTexMtx));
DCStoreRange(texGenBlock->getTexMtx(i), sizeof(J3DTexMtx));
}
}
J3DTevBlock* tevBlock = i_material->getTevBlock();
tevBlock->setTevStageNum(mTevStageNum);
for (u32 i = 0; i < 4; i++) {
tevBlock->setTevColor(i, mTevColor[i]);
}
for (u32 i = 0; i < 4; i++) {
tevBlock->setTevKColor(i, mTevKColor[i]);
}
u32 texNoMax = 8;
if (tevBlock->getType() == 'TVB4') {
texNoMax = 4;
for (u32 i = 0; i < 4; i++) {
tevBlock->setTevOrder(i, mTevOrder[i]);
tevBlock->setTevKColorSel(i, mTevKColorSel[i]);
tevBlock->setTevKAlphaSel(i, mTevKAlphaSel[i]);
}
for (u32 i = 0; i < 4; i++) {
tevBlock->setTevSwapModeTable(i, mTevSwapModeTable[i]);
}
}
for (u32 i = 0; i < texNoMax; i++) {
tevBlock->setTexNo(i, mTexNo[i]);
}
for (u32 i = 0; i < texNoMax; i++) {
tevBlock->setTevStage(i, mTevStage[i]);
tevBlock->setIndTevStage(i, mIndTevStage[i]);
}
J3DIndBlock* indBlock = i_material->getIndBlock();
if (indBlock->getType() == 'IBLF') {
indBlock->setIndTexStageNum(mIndTexStageNum);
for (u32 i = 0; i < 4; i++) {
*indBlock->getIndTexOrder(i) = mIndTexOrder[i];
}
for (u32 i = 0; i < 3; i++) {
indBlock->setIndTexMtx(i, mIndTexMtx[i]);
}
for (u32 i = 0; i < 4; i++) {
indBlock->setIndTexCoordScale(i, mIndTexCoordScale[i]);
}
}
J3DPEBlock* peBlock = i_material->getPEBlock();
memcpy(peBlock->getFog(), &mFog, sizeof(J3DFog));
DCStoreRange(peBlock->getFog(), sizeof(J3DFog));
peBlock->setAlphaComp(mAlphaComp);
peBlock->setBlend(mBlend);
peBlock->setZMode(mZMode);
peBlock->setZCompLoc(mZCompLoc);
i_material->setMaterialAnm(mMaterialAnm);
i_material->setMaterialMode(mMaterialMode);
}
/* 80010920-800109F4 .text create__23mDoExt_backupMaterial_cFP12J3DModelData */
bool mDoExt_backupMaterial_c::create(J3DModelData* i_modelData) {
if (!mBackupMatBlock) {
mBackupMatBlock = new mDoExt_backupMatBlock_c[i_modelData->getMaterialNum()];
if (!mBackupMatBlock) {
return false;
}
}
for (u16 i = 0; i < i_modelData->getMaterialNum(); i++) {
J3DMaterial* material = i_modelData->getMaterialNodePointer(i);
mBackupMatBlock[i].store(material);
}
mTexture = i_modelData->getTexture();
mTextureName = i_modelData->getTextureName();
return true;
}
/* 800109F4-80010A88 .text __dt__23mDoExt_backupMatBlock_cFv */
mDoExt_backupMatBlock_c::~mDoExt_backupMatBlock_c() {}
/* 80010AC4-80010D44 .text __ct__23mDoExt_backupMatBlock_cFv */
mDoExt_backupMatBlock_c::mDoExt_backupMatBlock_c() {}
/* 80011294-80011300 .text create__23mDoExt_backupMaterial_cFUs */
bool mDoExt_backupMaterial_c::create(u16 param_0) {
mBackupMatBlock = new mDoExt_backupMatBlock_c[param_0];
return mBackupMatBlock != NULL;
}
/* 80011300-80011380 .text restore__23mDoExt_backupMaterial_cFP12J3DModelData */
void mDoExt_backupMaterial_c::restore(J3DModelData* i_modelData) {
for (u16 i = 0; i < i_modelData->getMaterialNum(); i++) {
J3DMaterial* material = i_modelData->getMaterialNodePointer(i);
mBackupMatBlock[i].restore(material);
}
i_modelData->setTexture(mTexture);
i_modelData->setTextureName(mTextureName);
}
/* 80011380-80011434 .text create__21mDoExt_invisibleModelFP8J3DModel */
BOOL mDoExt_invisibleModel::create(J3DModel* model) {
J3DModelData* modelData = model->getModelData();
mpPackets = new mDoExt_invJntPacket[modelData->getJointNum()];
if (!mpPackets) {
return false;
}
mModel = model;
mDoExt_invJntPacket* packet = mpPackets;
for (u16 i = 0; i < modelData->getJointNum(); i++) {
packet->setJoint(mModel, i);
packet++;
}
return true;
}
/* 80011504-800115AC .text entry__21mDoExt_invisibleModelFv */
void mDoExt_invisibleModel::entry() {
J3DModelData* modelData = mModel->getModelData();
mDoExt_invJntPacket* packet = mpPackets;
cXyz tmp;
for (u16 i = 0; i < modelData->getJointNum(); i++) {
MtxP anmMtx = mModel->getAnmMtx(i);
tmp.set(anmMtx[0][3], anmMtx[1][3], anmMtx[2][3]);
dComIfGd_entryZSortXluList(packet, tmp);
packet++;
}
}
/* 800115AC-80011654 .text entryMaskOff__21mDoExt_invisibleModelFv */
void mDoExt_invisibleModel::entryMaskOff() {
J3DModelData* modelData = mModel->getModelData();
mDoExt_invJntPacket* packet = mpPackets;
cXyz tmp;
for (u16 i = 0; i < modelData->getJointNum(); i++) {
MtxP anmMtx = mModel->getAnmMtx(i);
tmp.set(anmMtx[0][3], anmMtx[1][3], anmMtx[2][3]);
dComIfGd_entryZSortXluListMaskOff(packet, tmp);
packet++;
}
}
/* 80011654-800116C4 .text updateDL__21mDoExt_invisibleModelFP8J3DModel */
void mDoExt_invisibleModel::updateDL(J3DModel* model) {
J3DDrawBuffer* buffer0 = j3dSys.getDrawBuffer(0);
J3DDrawBuffer* buffer1 = j3dSys.getDrawBuffer(1);
dComIfGd_setList();
mDoExt_modelUpdateDL(model);
entry();
j3dSys.setDrawBuffer(buffer0, 0);
j3dSys.setDrawBuffer(buffer1, 1);
}
/* 800116C4-80011734 .text updateDL__21mDoExt_invisibleModelFP14mDoExt_McaMorf */
void mDoExt_invisibleModel::updateDL(mDoExt_McaMorf* param_0) {
J3DDrawBuffer* buffer0 = j3dSys.getDrawBuffer(0);
J3DDrawBuffer* buffer1 = j3dSys.getDrawBuffer(1);
dComIfGd_setList();
param_0->updateDL();
entry();
j3dSys.setDrawBuffer(buffer0, 0);
j3dSys.setDrawBuffer(buffer1, 1);
}
JKRExpHeap* gameHeap;
/* 80011734-800117E4 .text mDoExt_createGameHeap__FUlP7JKRHeap */
JKRExpHeap* mDoExt_createGameHeap(u32 heapSize, JKRHeap* i_heap) {
JUT_ASSERT(2050, gameHeap == 0 || heapSize == 0);
gameHeap = JKRExpHeap::create(heapSize, i_heap, true);
gameHeap->setAllocationMode(JKRExpHeap::ALLOC_MODE_1);
return gameHeap;
}
/* 800117E4-800117EC .text mDoExt_getGameHeap__Fv */
JKRExpHeap* mDoExt_getGameHeap() {
return gameHeap;
}
s32 safeGameHeapSize;
/* 800117EC-80011814 .text mDoExt_setSafeGameHeapSize__Fv */
void mDoExt_setSafeGameHeapSize() {
safeGameHeapSize = mDoExt_getGameHeap()->getTotalFreeSize();
}
/* 80011814-8001181C .text mDoExt_getSafeGameHeapSize__Fv */
s32 mDoExt_getSafeGameHeapSize() {
return safeGameHeapSize;
}
JKRExpHeap* zeldaHeap;
/* 8001181C-800118C0 .text mDoExt_createZeldaHeap__FUlP7JKRHeap */
JKRExpHeap* mDoExt_createZeldaHeap(u32 heapSize, JKRHeap* i_heap) {
JUT_ASSERT(2112, zeldaHeap == 0 || heapSize == 0);
return zeldaHeap = JKRExpHeap::create(heapSize, i_heap, true);
}
/* 800118C0-800118C8 .text mDoExt_getZeldaHeap__Fv */
JKRExpHeap* mDoExt_getZeldaHeap() {
return zeldaHeap;
}
s32 safeZeldaHeapSize;
/* 800118C8-800118F0 .text mDoExt_setSafeZeldaHeapSize__Fv */
void mDoExt_setSafeZeldaHeapSize() {
safeZeldaHeapSize = mDoExt_getZeldaHeap()->getTotalFreeSize();
}
/* 800118F0-800118F8 .text mDoExt_getSafeZeldaHeapSize__Fv */
s32 mDoExt_getSafeZeldaHeapSize() {
return safeZeldaHeapSize;
}
JKRExpHeap* commandHeap;
/* 800118F8-8001199C .text mDoExt_createCommandHeap__FUlP7JKRHeap */
JKRExpHeap* mDoExt_createCommandHeap(u32 heapSize, JKRHeap* i_heap) {
JUT_ASSERT(2173, commandHeap == 0 || heapSize == 0);
return commandHeap = JKRExpHeap::create(heapSize, i_heap, true);
}
/* 8001199C-800119A4 .text mDoExt_getCommandHeap__Fv */
JKRExpHeap* mDoExt_getCommandHeap() {
return commandHeap;
}
s32 safeCommandHeapSize;
/* 800119A4-800119CC .text mDoExt_setSafeCommandHeapSize__Fv */
void mDoExt_setSafeCommandHeapSize() {
safeCommandHeapSize = mDoExt_getCommandHeap()->getTotalFreeSize();
}
/* 800119CC-800119D4 .text mDoExt_getSafeCommandHeapSize__Fv */
s32 mDoExt_getSafeCommandHeapSize() {
return safeCommandHeapSize;
}
JKRExpHeap* archiveHeap;
/* 800119D4-80011A84 .text mDoExt_createArchiveHeap__FUlP7JKRHeap */
JKRExpHeap* mDoExt_createArchiveHeap(u32 heapSize, JKRHeap* i_heap) {
JUT_ASSERT(2237, archiveHeap == 0 || heapSize == 0);
archiveHeap = JKRExpHeap::create(heapSize, i_heap, true);
archiveHeap->setAllocationMode(JKRExpHeap::ALLOC_MODE_1);
return archiveHeap;
}
s32 safeArchiveHeapSize;
/* 80011A84-80011AAC .text mDoExt_setSafeArchiveHeapSize__Fv */
void mDoExt_setSafeArchiveHeapSize() {
safeArchiveHeapSize = mDoExt_getArchiveHeap()->getTotalFreeSize();
}
/* 80011AAC-80011AB4 .text mDoExt_getSafeArchiveHeapSize__Fv */
s32 mDoExt_getSafeArchiveHeapSize() {
return safeArchiveHeapSize;
}
/* 80011AB4-80011ABC .text mDoExt_getArchiveHeap__Fv */
JKRExpHeap* mDoExt_getArchiveHeap() {
return archiveHeap;
}
/* 80011ABC-80011B54 .text mDoExt_createSolidHeap__FUlP7JKRHeapUl */
JKRSolidHeap* mDoExt_createSolidHeap(u32 i_size, JKRHeap* i_heap, u32 i_alignment) {
if (i_heap == NULL) {
i_heap = JKRHeap::getCurrentHeap();
}
JKRSolidHeap* createdHeap;
if (i_size == 0 || i_size == 0xFFFFFFFF) {
createdHeap = JKRSolidHeap::create(0xFFFFFFFFFF, i_heap, false);
} else {
i_size = ALIGN_NEXT(i_size, 0x10);
i_size += 0x80;
if (0x10 < i_alignment) {
i_size = (i_alignment - 0x10 + i_size);
}
createdHeap = JKRSolidHeap::create(i_size, i_heap, false);
}
if (createdHeap != NULL) {
createdHeap->setErrorFlag(true);
}
return createdHeap;
}
/* 80011B54-80011B9C .text mDoExt_createSolidHeapFromGame__FUlUl */
JKRSolidHeap* mDoExt_createSolidHeapFromGame(u32 i_size, u32 i_alignment) {
return mDoExt_createSolidHeap(i_size, mDoExt_getGameHeap(), i_alignment);
}
/* 80011B9C-80011BE4 .text mDoExt_createSolidHeapFromSystem__FUlUl */
JKRSolidHeap* mDoExt_createSolidHeapFromSystem(u32 i_size, u32 i_alignment) {
return mDoExt_createSolidHeap(i_size, mDoExt_getZeldaHeap(), i_alignment);
}
static void dummy() {
OSReport("situationHeap == 0 || heapSize == 0");
OSReport("situationHeapLocked == 0");
OSReport("situationHeap");
OSReport("situationHeapLocked");
OSReport("heap == situationHeap");
}
JKRHeap* mDoExt_SaveCurrentHeap;
/* 80011BE4-80011CC0 .text mDoExt_createSolidHeapToCurrent__FUlP7JKRHeapUl */
JKRSolidHeap* mDoExt_createSolidHeapToCurrent(u32 i_size, JKRHeap* i_parent, u32 i_alignment) {
JKRSolidHeap* resultHeap = mDoExt_createSolidHeap(i_size, i_parent, i_alignment);
if (!resultHeap) {
return NULL;
}
JUT_ASSERT(2545, OSGetCurrentThread() == &mainThread);
JUT_ASSERT(2546, mDoExt_SaveCurrentHeap == 0);
mDoExt_SaveCurrentHeap = JKRGetCurrentHeap();
mDoExt_setCurrentHeap(resultHeap);
return resultHeap;
}
/* 80011CC0-80011D0C .text mDoExt_createSolidHeapFromGameToCurrent__FUlUl */
JKRSolidHeap* mDoExt_createSolidHeapFromGameToCurrent(u32 i_size, u32 i_alignment) {
mDoExt_getGameHeap();
return mDoExt_createSolidHeapToCurrent(i_size, mDoExt_getGameHeap(), i_alignment);
}
/* 80011D0C-80011D48 .text mDoExt_adjustSolidHeap__FP12JKRSolidHeap */
s32 mDoExt_adjustSolidHeap(JKRSolidHeap* i_heap) {
if (i_heap == NULL)
return 0;
s32 result = i_heap->adjustSize();
if (result >= 0x80u)
result -= 0x80;
return result;
}
/* 80011D48-80011D68 .text mDoExt_destroySolidHeap__FP12JKRSolidHeap */
void mDoExt_destroySolidHeap(JKRSolidHeap* i_heap) {
i_heap->destroy();
}
/* 80011D68-80011DD4 .text mDoExt_setCurrentHeap__FP7JKRHeap */
JKRHeap* mDoExt_setCurrentHeap(JKRHeap* heap) {
JUT_ASSERT(2684, heap != 0);
return heap->becomeCurrentHeap();
}
/* 80011DD4-80011DDC .text mDoExt_getCurrentHeap__Fv */
JKRHeap* mDoExt_getCurrentHeap() {
return JKRGetCurrentHeap();
}
/* 80011DDC-80011E98 .text mDoExt_restoreCurrentHeap__Fv */
void mDoExt_restoreCurrentHeap() {
JUT_ASSERT(2754, OSGetCurrentThread() == &mainThread);
JUT_ASSERT(2755, mDoExt_SaveCurrentHeap != 0);
mDoExt_SaveCurrentHeap->becomeCurrentHeap();
mDoExt_SaveCurrentHeap = NULL;
}
/* 80011E98-80011EE4 .text mDoExt_resIDToIndex__FP10JKRArchiveUs */
s32 mDoExt_resIDToIndex(JKRArchive* p_archive, u16 id) {
JKRArchive::SDIFileEntry* res = p_archive->findIdResource(id);
if (res == NULL) {
return -1;
}
return res - p_archive->mFiles;
}
/* 80011EE4-80012140 .text calc__25mDoExt_MtxCalcAnmBlendTblFUs */
void mDoExt_MtxCalcAnmBlendTbl::calc(u16 param_0) {
j3dSys.setCurrentMtxCalc(this);
if (mNum == 1) {
J3DTransformInfo info1;
mAnmRatio->getAnmTransform()->getTransform(param_0, &info1);
calcTransform(param_0, info1); // Doesn't match because J3DMtxCalcBasic's vtable is in the wrong order
return;
}
J3DTransformInfo info2;
Quaternion quat1;
Quaternion quat2;
Quaternion quat3;
mAnmRatio->getAnmTransform()->getTransform(param_0, &info2);
JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat1);
quat3 = quat1;
for (int i = 1; i < mNum; i++) {
J3DAnmTransform* transform = mAnmRatio[i].getAnmTransform();
if (transform) {
J3DTransformInfo info3;
transform->getTransform(param_0, &info3);
f32 ratio = mAnmRatio[i].getRatio();
f32 f30 = 1.0f - ratio;
JMAEulerToQuat(info3.mRotation.x, info3.mRotation.y, info3.mRotation.z, &quat2);
JMAQuatLerp(&quat1, &quat2, ratio, &quat3);
quat1 = quat3;
info2.mTranslate.x = info2.mTranslate.x * f30 + info3.mTranslate.x * ratio;
info2.mTranslate.y = info2.mTranslate.y * f30 + info3.mTranslate.y * ratio;
info2.mTranslate.z = info2.mTranslate.z * f30 + info3.mTranslate.z * ratio;
info2.mScale.x = info2.mScale.x * f30 + info3.mScale.x * ratio;
info2.mScale.y = info2.mScale.y * f30 + info3.mScale.y * ratio;
info2.mScale.z = info2.mScale.z * f30 + info3.mScale.z * ratio;
}
}
Mtx mtx;
MTXQuat(mtx, &quat3);
mDoExt_setJ3DData(mtx, &info2, param_0);
}
/* 80012140-80012548 .text calc__28mDoExt_MtxCalcAnmBlendTblOldFUs */
void mDoExt_MtxCalcAnmBlendTblOld::calc(u16 param_0) {
j3dSys.setCurrentMtxCalc(this);
J3DTransformInfo info1;
Quaternion quat1;
Quaternion quat2;
Quaternion quat3;
mAnmRatio->getAnmTransform()->getTransform(param_0, &info1);
JMAEulerToQuat(info1.mRotation.x, info1.mRotation.y, info1.mRotation.z, &quat1);
quat3 = quat1;
for (int i = 1; i < mNum; i++) {
if (mAnmRatio[i].getAnmTransform()) {
J3DAnmTransform* transform = mAnmRatio[i].getAnmTransform();
J3DTransformInfo info2;
transform->getTransform(param_0, &info2);
f32 ratio = mAnmRatio[i].getRatio();
f32 f30 = 1.0f - ratio;
JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat2);
JMAQuatLerp(&quat1, &quat2, ratio, &quat3);
quat1 = quat3;
info1.mTranslate.x = info1.mTranslate.x * f30 + info2.mTranslate.x * ratio;
info1.mTranslate.y = info1.mTranslate.y * f30 + info2.mTranslate.y * ratio;
info1.mTranslate.z = info1.mTranslate.z * f30 + info2.mTranslate.z * ratio;
info1.mScale.x = info1.mScale.x * f30 + info2.mScale.x * ratio;
info1.mScale.y = info1.mScale.y * f30 + info2.mScale.y * ratio;
info1.mScale.z = info1.mScale.z * f30 + info2.mScale.z * ratio;
}
}
J3DModel* model = j3dSys.getModel();
J3DTransformInfo* oldTransInfo = mOldFrame->getOldFrameTransInfo(param_0);
Quaternion* oldQuat = mOldFrame->getOldFrameQuaternion(param_0);
if (mOldFrame->getOldFrameFlg()) {
if (mOldFrame->getOldFrameRate() > 0.0f && mOldFrame->getOldFrameStartJoint() <= param_0 && mOldFrame->getOldFrameEndJoint() > param_0) {
f32 oldFrameRate = mOldFrame->getOldFrameRate();
f32 f31 = 1.0f - oldFrameRate;
JMAQuatLerp(oldQuat, &quat1, f31, &quat3);
info1.mTranslate.x = info1.mTranslate.x * f31 + oldTransInfo->mTranslate.x * oldFrameRate;
info1.mTranslate.y = info1.mTranslate.y * f31 + oldTransInfo->mTranslate.y * oldFrameRate;
info1.mTranslate.z = info1.mTranslate.z * f31 + oldTransInfo->mTranslate.z * oldFrameRate;
info1.mScale.x = info1.mScale.x * f31 + oldTransInfo->mScale.x * oldFrameRate;
info1.mScale.y = info1.mScale.y * f31 + oldTransInfo->mScale.y * oldFrameRate;
info1.mScale.z = info1.mScale.z * f31 + oldTransInfo->mScale.z * oldFrameRate;
}
} else if (param_0 == model->getModelData()->getJointNum() - 1) {
mOldFrame->onOldFrameFlg();
}
Mtx mtx;
if (mBeforeCallback) {
mBeforeCallback(mUserArea, param_0, &info1, &quat3);
}
mDoMtx_quat(mtx, &quat3);
mDoExt_setJ3DData(mtx, &info1, param_0);
if (mAfterCallback) {
mAfterCallback(mUserArea, param_0, &info1, &quat3);
}
*oldQuat = quat3;
*oldTransInfo = info1;
if (param_0 == model->getModelData()->getJointNum() - 1) {
mOldFrame->decOldFrameMorfCounter();
}
}
/* 80012548-800125CC .text initOldFrameMorf__22mDoExt_MtxCalcOldFrameFfUsUs */
void mDoExt_MtxCalcOldFrame::initOldFrameMorf(f32 param_0, u16 param_1, u16 param_2) {
if (param_0 > 0.0f) {
mOldFrameMorfCounter = param_0;
field_0x8 = 1.0f / param_0;
mOldFrameRate = 1.0f;
field_0x10 = 1.0f;
field_0x14 = 1.0f;
decOldFrameMorfCounter();
} else {
mOldFrameMorfCounter = 0.0f;
field_0x8 = 0.0f;
mOldFrameRate = 0.0f;
field_0x10 = 0.0f;
field_0x14 = 0.0f;
}
mOldFrameStartJoint = param_1;
mOldFrameEndJoint = param_2;
}
/* 800125CC-80012650 .text decOldFrameMorfCounter__22mDoExt_MtxCalcOldFrameFv */
void mDoExt_MtxCalcOldFrame::decOldFrameMorfCounter() {
if (!(mOldFrameMorfCounter > 0.0f)) {
return;
}
mOldFrameMorfCounter -= 1.0f;
if (mOldFrameMorfCounter <= 0.0f) {
mOldFrameMorfCounter = 0.0f;
field_0x8 = 0.0f;
mOldFrameRate = 0.0f;
}
field_0x14 = field_0x10;
field_0x10 = mOldFrameMorfCounter * field_0x8;
if (field_0x14 > 0.0f) {
mOldFrameRate = 1.0f - (field_0x14 - field_0x10) / field_0x14;
return;
}
mOldFrameRate = 0.0f;
}
/* 80012650-800129E4 .text __ct__14mDoExt_McaMorfFP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformifiiiPvUlUl */
mDoExt_McaMorf::mDoExt_McaMorf(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* callback1,
mDoExt_McaMorfCallBack2_c* callback2, J3DAnmTransform* anmTransform,
int loopMode, f32 param_5, int param_6, int param_7, int param_8,
void* basAnm, u32 modelFlag, u32 differedDlistFlag) {
mpModel = NULL;
mpSound = NULL;
mpTransformInfo = NULL;
mpQuat = NULL;
if (!modelData) {
return;
}
if (modelData->getModelDataType() == 1 && modelFlag == 0) {
if (modelFlag = modelData->isLocked()) {
modelFlag = 0x20000;
} else {
modelFlag = 0x80000;
}
}
mpModel = mDoExt_J3DModel__create(modelData, modelFlag, differedDlistFlag);
if (!mpModel) {
return;
}
if (modelFlag != 0x80000) {
mDoExt_changeMaterial(mpModel);
}
if (basAnm == NULL && anmTransform) {
basAnm = ((mDoExt_transAnmBas*)anmTransform)->getBas();
if (basAnm) {
param_8 = 1;
}
}
if (param_8) {
mpSound = new mDoExt_zelAnime();
if (!mpSound) {
goto ERROR_EXIT;
}
}
setAnm(anmTransform, loopMode, 0.0f, param_5, param_6, param_7, basAnm);
mPrevMorf = -1.0f;
mpTransformInfo = new J3DTransformInfo[modelData->getJointNum()];
if (!mpTransformInfo) {
goto ERROR_EXIT;
}
mpQuat = new Quaternion[modelData->getJointNum()];
if (!mpQuat) {
goto ERROR_EXIT;
}
{
J3DTransformInfo* info = mpTransformInfo;
Quaternion* quat = mpQuat;
J3DModelData* r23 = mpModel->getModelData();
u16 jointNum = r23->getJointNum();
for (int i = 0; i < jointNum; i++) {
*info = r23->getJointNodePointer(i)->getTransformInfo();
JMAEulerToQuat(info->mRotation.x, info->mRotation.y, info->mRotation.z, quat);
info++;
quat++;
}
mpCallback1 = callback1;
mpCallback2 = callback2;
return;
}
ERROR_EXIT:
if (mpSound) {
mpSound->stop();
mpSound = NULL;
}
if (mpTransformInfo) {
mpTransformInfo = NULL;
}
if (mpQuat) {
mpQuat = NULL;
}
if (mpModel) {
mpModel = NULL;
}
}
/* 80012A2C-80012D78 .text calc__14mDoExt_McaMorfFUs */
void mDoExt_McaMorf::calc(u16 param_0) {
/* Nonmatching - J3DMtxCalcBasic vtable order */
if (!mpModel) {
return;
}
j3dSys.setCurrentMtxCalc(this);
J3DTransformInfo info1;
J3DTransformInfo* infoPtr;
if (mpTransformInfo == NULL) {
infoPtr = &info1;
} else {
infoPtr = &mpTransformInfo[param_0];
}
Quaternion quat1;
Quaternion* quatPtr;
if (mpQuat == NULL) {
quatPtr = &quat1;
} else {
quatPtr = &mpQuat[param_0];
}
if (!mpAnm) {
*infoPtr = mpModel->getModelData()->getJointNodePointer(param_0)->getTransformInfo();
if (mpCallback1) {
mpCallback1->execute(param_0, infoPtr);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
calcTransform(param_0, *infoPtr);
} else if (mCurMorf >= 1.0f || !mpTransformInfo || !mpQuat) {
mpAnm->getTransform(param_0, infoPtr);
if (mpCallback1) {
mpCallback1->execute(param_0, infoPtr);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
calcTransform(param_0, *infoPtr);
} else {
f32 f31 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
f32 f30 = 1.0f - f31;
J3DTransformInfo info2;
Quaternion quat2;
mpAnm->getTransform(param_0, &info2);
if (mpCallback1) {
mpCallback1->execute(param_0, &info2);
}
JMAEulerToQuat(info2.mRotation.x, info2.mRotation.y, info2.mRotation.z, &quat2);
JMAQuatLerp(quatPtr, &quat2, f31, quatPtr);
Mtx mtx;
mDoMtx_quat(mtx, quatPtr);
infoPtr->mTranslate.x = infoPtr->mTranslate.x * f30 + info2.mTranslate.x * f31;
infoPtr->mTranslate.y = infoPtr->mTranslate.y * f30 + info2.mTranslate.y * f31;
infoPtr->mTranslate.z = infoPtr->mTranslate.z * f30 + info2.mTranslate.z * f31;
infoPtr->mScale.x = infoPtr->mScale.x * f30 + info2.mScale.x * f31;
infoPtr->mScale.y = infoPtr->mScale.y * f30 + info2.mScale.y * f31;
infoPtr->mScale.z = infoPtr->mScale.z * f30 + info2.mScale.z * f31;
mDoExt_setJ3DData(mtx, infoPtr, param_0);
}
if (mpCallback2) {
mpCallback2->execute(param_0);
}
}
/* 80012D78-80012FC8 .text setAnm__14mDoExt_McaMorfFP15J3DAnmTransformiffffPv */
void mDoExt_McaMorf::setAnm(J3DAnmTransform* bckAnm, int loopMode, f32 morf, f32 playSpeed, f32 startFrame, f32 endFrame, void* basAnm) {
mpAnm = bckAnm;
setStartFrame(startFrame);
if (endFrame < 0.0f) {
if (!mpAnm) {
mFrameCtrl.init(0);
} else {
mFrameCtrl.init(mpAnm->getFrameMax());
}
} else {
mFrameCtrl.init(endFrame);
}
if (bckAnm && loopMode < 0) {
loopMode = bckAnm->getAttribute();
}
setPlayMode(loopMode);
setPlaySpeed(playSpeed);
if (playSpeed >= 0.0f) {
setFrame(startFrame);
} else {
setFrame(getEndFrame());
}
setLoopFrame(getFrame());
setMorf(morf);
if (mpSound) {
if (basAnm == NULL && bckAnm) {
basAnm = ((mDoExt_transAnmBas*)bckAnm)->getBas();
}
mpSound->mpBasAnm = basAnm;
if (mpSound->mpBasAnm) {
mpSound->initActorAnimSound(basAnm, getPlaySpeed() >= 0.0f ? 1 : -1, getLoopFrame());
} else {
mpSound->stop();
}
}
}
/* 80012FC8-8001300C .text setMorf__14mDoExt_McaMorfFf */
void mDoExt_McaMorf::setMorf(f32 morf) {
if (mPrevMorf < 0.0f || morf <= 0.0f) {
mCurMorf = 1.0f;
} else {
mCurMorf = 0.0f;
mMorfStep = 1.0f / morf;
}
mPrevMorf = mCurMorf;
}
/* 8001300C-800130D0 .text play__14mDoExt_McaMorfFP3VecUlSc */
BOOL mDoExt_McaMorf::play(Vec* pos, u32 mtrlSndId, s8 reverb) {
if (mCurMorf < 1.0f) {
mPrevMorf = mCurMorf;
cLib_chaseF(&mCurMorf, 1.0f, mMorfStep);
}
mFrameCtrl.update();
if (mpSound && mpSound->mpBasAnm && pos) {
mpSound->setAnimSound(pos, getFrame(), getPlaySpeed(), mtrlSndId, reverb);
}
return isStop();
}
/* 800130D0-8001314C .text update__14mDoExt_McaMorfFv */
void mDoExt_McaMorf::update() {
if (mpModel) {
if (mpAnm) {
mpAnm->setFrame(mFrameCtrl.getFrame());
}
mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(this);
mDoExt_modelUpdate(mpModel);
mPrevMorf = mCurMorf;
}
}
/* 8001314C-800131C8 .text updateDL__14mDoExt_McaMorfFv */
void mDoExt_McaMorf::updateDL() {
if (mpModel) {
if (mpAnm) {
mpAnm->setFrame(mFrameCtrl.getFrame());
}
mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(this);
mDoExt_modelUpdateDL(mpModel);
mPrevMorf = mCurMorf;
}
}
/* 800131C8-8001322C .text updateDL__14mDoExt_McaMorfFP16J3DMaterialTable */
void mDoExt_McaMorf::updateDL(J3DMaterialTable* pMaterialTable) {
if (mpModel) {
J3DModelData* modelData = mpModel->getModelData();
J3DTexture* origTexture = modelData->getTexture();
JUTNameTab* origTextureName = modelData->getTextureName();
modelData->setMaterialTable(pMaterialTable, J3DMatCopyFlag_Texture);
updateDL();
modelData->setTexture(origTexture);
modelData->setTextureName(origTextureName);
}
}
/* 8001322C-80013258 .text entry__14mDoExt_McaMorfFv */
void mDoExt_McaMorf::entry() {
if (mpModel) {
mDoExt_modelEntry(mpModel);
}
}
/* 80013258-80013284 .text entryDL__14mDoExt_McaMorfFv */
void mDoExt_McaMorf::entryDL() {
if (mpModel) {
mDoExt_modelEntryDL(mpModel);
}
}
/* 80013284-800132E8 .text entryDL__14mDoExt_McaMorfFP16J3DMaterialTable */
void mDoExt_McaMorf::entryDL(J3DMaterialTable* pMaterialTable) {
if (mpModel) {
J3DModelData* modelData = mpModel->getModelData();
J3DTexture* origTexture = modelData->getTexture();
JUTNameTab* origTextureName = modelData->getTextureName();
modelData->setMaterialTable(pMaterialTable, J3DMatCopyFlag_Texture);
entryDL();
modelData->setTexture(origTexture);
modelData->setTextureName(origTextureName);
}
}
/* 800132E8-8001335C .text calc__14mDoExt_McaMorfFv */
void mDoExt_McaMorf::calc() {
if (mpModel == NULL) {
return;
}
if (mpAnm != NULL) {
mpAnm->setFrame(getFrame());
}
mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(this);
mpModel->calc();
}
/* 8001335C-80013388 .text stopZelAnime__14mDoExt_McaMorfFv */
void mDoExt_McaMorf::stopZelAnime() {
if (mpSound) {
mpSound->stop();
}
}
/* 80013388-800136F4 .text __ct__15mDoExt_McaMorf2FP12J3DModelDataP25mDoExt_McaMorfCallBack1_cP25mDoExt_McaMorfCallBack2_cP15J3DAnmTransformP15J3DAnmTransformifiiiPvUlUl */
mDoExt_McaMorf2::mDoExt_McaMorf2(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* callback1,
mDoExt_McaMorfCallBack2_c* callback2,
J3DAnmTransform* anmTransform1, J3DAnmTransform* anmTransform2,
int loopMode, f32 param_5, int param_6, int param_7, int param_8,
void* basAnm, u32 modelFlag, u32 differedDlistFlag) {
mpModel = NULL;
mpSound = NULL;
mpTransformInfo = NULL;
mpQuat = NULL;
if (!modelData) {
return;
}
if (modelData->getModelDataType() == 1 && modelFlag == 0) {
if (modelFlag = modelData->isLocked()) {
modelFlag = 0x20000;
} else {
modelFlag = 0x80000;
}
}
mpModel = mDoExt_J3DModel__create(modelData, modelFlag, differedDlistFlag);
if (!mpModel) {
return;
}
if (modelFlag != 0x80000) {
mDoExt_changeMaterial(mpModel);
}
if (basAnm == NULL && anmTransform1) {
basAnm = ((mDoExt_transAnmBas*)anmTransform1)->getBas();
if (basAnm) {
param_8 = 1;
}
}
if (param_8) {
mpSound = new mDoExt_zelAnime();
if (!mpSound) {
ERROR_EXIT();
return;
}
}
setAnm(anmTransform1, anmTransform2, 0.0f, loopMode, 0.0f, param_5, param_6, param_7, basAnm);
mpTransformInfo = new J3DTransformInfo[modelData->getJointNum()];
if (!mpTransformInfo) {
ERROR_EXIT();
return;
}
mpQuat = new Quaternion[modelData->getJointNum()];
if (!mpQuat) {
ERROR_EXIT();
return;
}
J3DTransformInfo* info = mpTransformInfo;
Quaternion* quat = mpQuat;
J3DModelData* r23 = mpModel->getModelData();
u16 jointNum = r23->getJointNum();
for (int i = 0; i < jointNum; i++) {
*info = r23->getJointNodePointer(i)->getTransformInfo();
JMAEulerToQuat(info->mRotation.x, info->mRotation.y, info->mRotation.z, quat);
info++;
quat++;
}
mpCallback1 = callback1;
mpCallback2 = callback2;
}
/* 800136F4-80013770 .text ERROR_EXIT__15mDoExt_McaMorf2Fv */
void mDoExt_McaMorf2::ERROR_EXIT() {
if (mpSound) {
mpSound->stop();
mpSound = NULL;
}
if (mpTransformInfo) {
mpTransformInfo = NULL;
}
if (mpQuat) {
mpQuat = NULL;
}
if (mpModel) {
mpModel = NULL;
}
}
/* 80013770-80013E50 .text calc__15mDoExt_McaMorf2FUs */
void mDoExt_McaMorf2::calc(u16 param_0) {
/* Nonmatching - J3DMtxCalcBasic vtable order, instruction swap on f30 = field_0x84 */
if (!mpModel) {
return;
}
j3dSys.setCurrentMtxCalc(this);
J3DTransformInfo spD8[2];
J3DTransformInfo sp88;
J3DTransformInfo sp68;
J3DTransformInfo* infoPtr;
if (mpTransformInfo == NULL) {
infoPtr = &sp88;
} else {
infoPtr = &mpTransformInfo[param_0];
}
Quaternion sp48[2];
Quaternion sp28[2];
Quaternion sp18;
Quaternion sp08;
Quaternion* quatPtr;
if (mpQuat == NULL) {
quatPtr = &sp18;
} else {
quatPtr = &mpQuat[param_0];
}
Mtx mtx;
if (!mpAnm1) {
*infoPtr = mpModel->getModelData()->getJointNodePointer(param_0)->getTransformInfo();
if (mpCallback1) {
mpCallback1->execute(param_0, infoPtr);
}
JMAEulerToQuat(infoPtr->mRotation.x, infoPtr->mRotation.y, infoPtr->mRotation.z, quatPtr);
calcTransform(param_0, *infoPtr);
} else if (mCurMorf >= 1.0f || !mpTransformInfo || !mpQuat) {
mpAnm1->getTransform(param_0, &spD8[0]);
if (!mpAnm2) {
if (mpCallback1) {
mpCallback1->execute(param_0, &spD8[0]);
}
JMAEulerToQuat(spD8[0].mRotation.x, spD8[0].mRotation.y, spD8[0].mRotation.z, quatPtr);
calcTransform(param_0, spD8[0]);
*infoPtr = spD8[0];
} else {
mpAnm2->getTransform(param_0, &spD8[1]);
f32 f30 = field_0x84;
f32 f31 = 1.0f - f30;
infoPtr->mScale.x = spD8[0].mScale.x * f31 + spD8[1].mScale.x * f30;
infoPtr->mScale.y = spD8[0].mScale.y * f31 + spD8[1].mScale.y * f30;
infoPtr->mScale.z = spD8[0].mScale.z * f31 + spD8[1].mScale.z * f30;
infoPtr->mTranslate.x = spD8[0].mTranslate.x * f31 + spD8[1].mTranslate.x * f30;
infoPtr->mTranslate.y = spD8[0].mTranslate.y * f31 + spD8[1].mTranslate.y * f30;
infoPtr->mTranslate.z = spD8[0].mTranslate.z * f31 + spD8[1].mTranslate.z * f30;
for (int i = 0; i < 2; i++) {
JMAEulerToQuat(spD8[i].mRotation.x, spD8[i].mRotation.y, spD8[i].mRotation.z, &sp48[i]);
}
JMAQuatLerp(&sp48[0], &sp48[1], f30 / (f31 + f30), quatPtr);
mDoMtx_quat(mtx, quatPtr);
mDoExt_setJ3DData(mtx, infoPtr, param_0);
}
} else if (!mpAnm2) {
f32 f30 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
f32 f31 = 1.0f - f30;
mpAnm1->getTransform(param_0, &sp68);
if (mpCallback1) {
mpCallback1->execute(param_0, &sp68);
}
JMAEulerToQuat(sp68.mRotation.x, sp68.mRotation.y, sp68.mRotation.z, &sp08);
JMAQuatLerp(quatPtr, &sp08, f30, quatPtr);
mDoMtx_quat(mtx, quatPtr);
infoPtr->mTranslate.x = infoPtr->mTranslate.x * f31 + sp68.mTranslate.x * f30;
infoPtr->mTranslate.y = infoPtr->mTranslate.y * f31 + sp68.mTranslate.y * f30;
infoPtr->mTranslate.z = infoPtr->mTranslate.z * f31 + sp68.mTranslate.z * f30;
infoPtr->mScale.x = infoPtr->mScale.x * f31 + sp68.mScale.x * f30;
infoPtr->mScale.y = infoPtr->mScale.y * f31 + sp68.mScale.y * f30;
infoPtr->mScale.z = infoPtr->mScale.z * f31 + sp68.mScale.z * f30;
mDoExt_setJ3DData(mtx, infoPtr, param_0);
} else {
mpAnm1->getTransform(param_0, &spD8[0]);
mpAnm2->getTransform(param_0, &spD8[1]);
f32 f30 = field_0x84;
f32 f31 = 1.0f - f30;
sp68.mScale.x = spD8[0].mScale.x * f31 + spD8[1].mScale.x * f30;
sp68.mScale.y = spD8[0].mScale.y * f31 + spD8[1].mScale.y * f30;
sp68.mScale.z = spD8[0].mScale.z * f31 + spD8[1].mScale.z * f30;
sp68.mTranslate.x = spD8[0].mTranslate.x * f31 + spD8[1].mTranslate.x * f30;
sp68.mTranslate.y = spD8[0].mTranslate.y * f31 + spD8[1].mTranslate.y * f30;
sp68.mTranslate.z = spD8[0].mTranslate.z * f31 + spD8[1].mTranslate.z * f30;
for (int i = 0; i < 2; i++) {
JMAEulerToQuat(spD8[i].mRotation.x, spD8[i].mRotation.y, spD8[i].mRotation.z, &sp28[i]);
}
f32 f1 = (f31 + f30);
f1 = f30 / f1;
JMAQuatLerp(&sp28[0], &sp28[1], f1, &sp08);
f31 = (mCurMorf - mPrevMorf) / (1.0f - mPrevMorf);
f30 = 1.0f - f31;
JMAQuatLerp(quatPtr, &sp08, f31, quatPtr);
infoPtr->mTranslate.x = infoPtr->mTranslate.x * f30 + sp68.mTranslate.x * f31;
infoPtr->mTranslate.y = infoPtr->mTranslate.y * f30 + sp68.mTranslate.y * f31;
infoPtr->mTranslate.z = infoPtr->mTranslate.z * f30 + sp68.mTranslate.z * f31;
infoPtr->mScale.x = infoPtr->mScale.x * f30 + sp68.mScale.x * f31;
infoPtr->mScale.y = infoPtr->mScale.y * f30 + sp68.mScale.y * f31;
infoPtr->mScale.z = infoPtr->mScale.z * f30 + sp68.mScale.z * f31;
mDoMtx_quat(mtx, quatPtr);
mDoExt_setJ3DData(mtx, infoPtr, param_0);
}
if (mpCallback2) {
mpCallback2->execute(param_0);
}
}
/* 80013E50-800140A0 .text setAnm__15mDoExt_McaMorf2FP15J3DAnmTransformP15J3DAnmTransformfiffffPv */
void mDoExt_McaMorf2::setAnm(J3DAnmTransform* bckAnm1, J3DAnmTransform* bckAnm2, f32 f1,
int loopMode, f32 morf, f32 playSpeed, f32 startFrame, f32 endFrame,
void* basAnm) {
mpAnm1 = bckAnm1;
mpAnm2 = bckAnm2;
field_0x84 = f1;
setStartFrame(startFrame);
if (endFrame < 0.0f) {
if (!mpAnm1) {
mFrameCtrl.init(0);
} else {
mFrameCtrl.init(mpAnm1->getFrameMax());
}
} else {
mFrameCtrl.init(endFrame);
}
if (loopMode < 0) {
loopMode = bckAnm1->getAttribute();
}
setPlayMode(loopMode);
setPlaySpeed(playSpeed);
if (playSpeed >= 0.0f) {
setFrame(startFrame);
} else {
setFrame(getEndFrame());
}
setLoopFrame(getFrame());
setMorf(morf);
if (mpSound) {
if (basAnm == NULL && bckAnm1) {
basAnm = ((mDoExt_transAnmBas*)bckAnm1)->getBas();
}
mpSound->mpBasAnm = basAnm;
if (mpSound->mpBasAnm) {
mpSound->initActorAnimSound(basAnm, getPlaySpeed() >= 0.0f ? 1 : -1, getLoopFrame());
} else {
mpSound->stop();
}
}
}
/* 800140A0-800140D8 .text setMorf__15mDoExt_McaMorf2Ff */
void mDoExt_McaMorf2::setMorf(f32 morf) {
if (morf <= 0.0f) {
mCurMorf = 1.0f;
} else {
mCurMorf = 0.0f;
mMorfStep = 1.0f / morf;
}
mPrevMorf = mCurMorf;
}
/* 800140D8-8001419C .text play__15mDoExt_McaMorf2FP3VecUlSc */
BOOL mDoExt_McaMorf2::play(Vec* pos, u32 mtrlSndId, s8 reverb) {
if (mCurMorf < 1.0f) {
mPrevMorf = mCurMorf;
cLib_chaseF(&mCurMorf, 1.0f, mMorfStep);
}
mFrameCtrl.update();
if (mpSound && mpSound->mpBasAnm && pos) {
mpSound->setAnimSound(pos, getFrame(), getPlaySpeed(), mtrlSndId, reverb);
}
return isStop();
}
/* 8001419C-800141C8 .text entryDL__15mDoExt_McaMorf2Fv */
void mDoExt_McaMorf2::entryDL() {
if (mpModel) {
mDoExt_modelEntryDL(mpModel);
}
}
/* 800141C8-80014250 .text calc__15mDoExt_McaMorf2Fv */
void mDoExt_McaMorf2::calc() {
if (mpModel == NULL) {
return;
}
if (mpAnm1 != NULL) {
mpAnm1->setFrame(getFrame());
}
if (mpAnm2 != NULL) {
mpAnm2->setFrame(getFrame());
}
mpModel->getModelData()->getJointNodePointer(0)->setMtxCalc(this);
mpModel->calc();
}
/* 80014250-8001427C .text stopZelAnime__15mDoExt_McaMorf2Fv */
void mDoExt_McaMorf2::stopZelAnime() {
if (mpSound) {
mpSound->stop();
}
}
/* 8001427C-800142B8 .text draw__24mDoExt_offCupOnAupPacketFv */
void mDoExt_offCupOnAupPacket::draw() {
GFSetBlendModeEtc(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_CLEAR, 0, 1, 1);
}
/* 800142B8-800142F4 .text draw__24mDoExt_onCupOffAupPacketFv */
void mDoExt_onCupOffAupPacket::draw() {
GFSetBlendModeEtc(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_CLEAR, 1, 0, 1);
}
/* 800142F4-800143B8 .text draw__19mDoExt_invJntPacketFv */
void mDoExt_invJntPacket::draw() {
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* modelData = mModel->getModelData();
J3DJoint* joint = modelData->getJointNodePointer(mJntNum);
J3DMaterial* material = joint->getMesh();
J3DShape::resetVcdVatCache();
modelData->getShapeNodePointer(0x00)->loadPreDrawSetting();
while (material) {
u16 shapeIdx = material->getShape()->getIndex();
mModel->getShapePacket(shapeIdx)->drawFast();
material = material->getNext();
};
J3DShape::resetVcdVatCache();
GFSetBlendModeEtc(GX_BM_NONE, GX_BL_ZERO, GX_BL_ZERO, GX_LO_CLEAR, 1, 0, 1);
}
u8 l_matDL[] 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, 0x05, 0x06, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x05,
0x02, 0x10, 0x00, 0x00, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF,
0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 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,
};
u8 l_toonMatDL[] 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, 0x05, 0x06, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x05,
0x02, 0x10, 0x00, 0x00, 0x10, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF,
0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x00, 0x00, 0x00, 0x61, 0xC0, 0x08, 0x24, 0xAF, 0x61, 0xC1, 0x08,
0xFF, 0xF0, 0x61, 0x28, 0x00, 0x00, 0x00, 0x61, 0xC2, 0x08, 0xF6, 0x0F, 0x61, 0xC3, 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, 0x04, 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,
};
u8 l_mat1DL[] ALIGN_DECL(32) = {
0x10, 0x00, 0x00, 0x10, 0x40, 0xFF, 0xFF, 0x42, 0x80, 0x08, 0x30, 0x3C, 0xF3, 0xCF, 0x00, 0x10,
0x00, 0x00, 0x10, 0x18, 0x3C, 0xF3, 0xCF, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x05,
0x06, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0A, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x38, 0x00,
0x40, 0x61, 0xC0, 0x08, 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,
};
u8 l_toonMat1DL[] ALIGN_DECL(32) = {
0x10, 0x00, 0x00, 0x10, 0x40, 0xFF, 0xFF, 0x42, 0x80, 0x08, 0x30, 0x3C, 0xF3, 0xCF, 0x00, 0x10,
0x00, 0x00, 0x10, 0x18, 0x3C, 0xF3, 0xCF, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x05,
0x06, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0A, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF, 0x61, 0x28, 0x3C, 0x00,
0x00, 0x61, 0xC0, 0x08, 0x24, 0xAF, 0x61, 0xC1, 0x08, 0xFF, 0xF0, 0x61, 0x28, 0x3C, 0x00, 0x00,
0x61, 0xC2, 0x08, 0xF0, 0x8F, 0x61, 0xC3, 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, 0x01, 0x10, 0x00, 0x00, 0x10, 0x09, 0x00, 0x00, 0x00, 0x01,
0x61, 0x00, 0x00, 0x04, 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,
};
/* 800143B8-80014580 .text init__15mDoExt_3Dline_cFUsii */
int mDoExt_3Dline_c::init(u16, int, int) {
/* Nonmatching */
}
/* 80014584-80014664 .text init__19mDoExt_3DlineMat0_cFUsUsi */
int mDoExt_3DlineMat0_c::init(u16, u16, int) {
/* Nonmatching */
}
/* 80014664-800146A0 .text __dt__15mDoExt_3Dline_cFv */
mDoExt_3Dline_c::~mDoExt_3Dline_c() {}
/* 800146A0-800146A4 .text __ct__15mDoExt_3Dline_cFv */
mDoExt_3Dline_c::mDoExt_3Dline_c() {}
/* 800146A4-80014798 .text setMaterial__19mDoExt_3DlineMat0_cFv */
void mDoExt_3DlineMat0_c::setMaterial() {
static u8 l_normal[][3] = {
{0x40, 0x00, 0x00},
{0xC0, 0x00, 0x00},
};
j3dSys.reinitGX();
GXSetNumIndStages(0);
dKy_setLight_again();
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxDesc(GX_VA_NRM, GX_INDEX8);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_CLR_RGB, GX_RGB8, 6);
GXSetArray(GX_VA_NRM, l_normal, sizeof(*l_normal));
if (mpTevStr) {
dKy_GxFog_tevstr_set(mpTevStr);
GXCallDisplayList(l_toonMatDL, 0x80);
} else {
dKy_GxFog_set();
GXCallDisplayList(l_matDL, 0x80);
}
GXLoadPosMtxImm(j3dSys.getViewMtx(), GX_PNMTX0);
GXLoadNrmMtxImm(g_mDoMtx_identity, GX_PNMTX0);
}
/* 80014798-800148B4 .text draw__19mDoExt_3DlineMat0_cFv */
void mDoExt_3DlineMat0_c::draw() {
/* Nonmatching */
}
/* 800148B4-80014E04 .text update__19mDoExt_3DlineMat0_cFUsfR8_GXColorUsP12dKy_tevstr_c */
void mDoExt_3DlineMat0_c::update(u16, f32, GXColor&, u16, dKy_tevstr_c*) {
/* Nonmatching */
}
/* 80014E04-80015328 .text update__19mDoExt_3DlineMat0_cFUsR8_GXColorP12dKy_tevstr_c */
void mDoExt_3DlineMat0_c::update(u16, GXColor&, dKy_tevstr_c*) {
/* Nonmatching */
}
/* 80015328-800154C4 .text init__19mDoExt_3DlineMat1_cFUsUsP7ResTIMGi */
int mDoExt_3DlineMat1_c::init(u16, u16, ResTIMG*, int) {
/* Nonmatching */
}
/* 800154C4-800155DC .text setMaterial__19mDoExt_3DlineMat1_cFv */
void mDoExt_3DlineMat1_c::setMaterial() {
static u8 l_normal[][3] = {
{0x40, 0x00, 0x00},
{0xC0, 0x00, 0x00},
};
j3dSys.reinitGX();
GXSetNumIndStages(0);
dKy_setLight_again();
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_INDEX16);
GXSetVtxDesc(GX_VA_NRM, GX_INDEX8);
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_CLR_RGB, GX_RGB8, 6);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0);
GXSetArray(GX_VA_NRM, l_normal, sizeof(*l_normal));
if (mpTevStr) {
dKy_GxFog_tevstr_set(mpTevStr);
GXCallDisplayList(l_toonMat1DL, 0xA0);
} else {
dKy_GxFog_set();
GXCallDisplayList(l_mat1DL, 0x80);
}
GXLoadPosMtxImm(j3dSys.getViewMtx(), GX_PNMTX0);
GXLoadNrmMtxImm(g_mDoMtx_identity, GX_PNMTX0);
}
/* 800155DC-80015764 .text draw__19mDoExt_3DlineMat1_cFv */
void mDoExt_3DlineMat1_c::draw() {
/* Nonmatching */
}
/* 80015764-80015E54 .text update__19mDoExt_3DlineMat1_cFUsfR8_GXColorUsP12dKy_tevstr_c */
void mDoExt_3DlineMat1_c::update(u16, f32, GXColor&, u16, dKy_tevstr_c*) {
/* Nonmatching */
}
/* 80015E54-80016518 .text update__19mDoExt_3DlineMat1_cFUsR8_GXColorP12dKy_tevstr_c */
void mDoExt_3DlineMat1_c::update(u16, GXColor&, dKy_tevstr_c*) {
/* Nonmatching */
u8* size_p = mpLines->mpSize;
JUT_ASSERT(5243, size_p != 0);
}
/* 80016518-8001657C .text setMat__26mDoExt_3DlineMatSortPacketFP18mDoExt_3DlineMat_c */
void mDoExt_3DlineMatSortPacket::setMat(mDoExt_3DlineMat_c* pMat) {
if (mp3DlineMat == NULL) {
j3dSys.getDrawBuffer(0)->entryImm(this, 0);
}
pMat->mpNextLineMat = mp3DlineMat;
mp3DlineMat = pMat;
}
/* 8001657C-800165E4 .text draw__26mDoExt_3DlineMatSortPacketFv */
void mDoExt_3DlineMatSortPacket::draw() {
mp3DlineMat->setMaterial();
mDoExt_3DlineMat_c* lineMat = mp3DlineMat;
do {
lineMat->draw();
lineMat = lineMat->mpNextLineMat;
} while (lineMat);
J3DShape::resetVcdVatCache();
}
/* 800165E4-8001683C .text mDoExt_initFontCommon__FPP7JUTFontPP7ResFONTP7JKRHeapPCcP10JKRArchiveUcUlUl */
void mDoExt_initFontCommon(JUTFont** p_font, ResFONT** p_resfont, JKRHeap* p_heap, const char* param_4,
JKRArchive* p_archive, u8 param_6, u32 param_7, u32 param_8) {
JUTFont* mDoExt_font = *p_font;
JUT_ASSERT(6648, mDoExt_font == 0);
ResFONT* mDoExt_resfont = *p_resfont;
JUT_ASSERT(6649, mDoExt_resfont == 0);
*p_resfont = (ResFONT*)p_archive->getGlbResource('ROOT', param_4, p_archive);
mDoExt_resfont = *p_resfont;
JUT_ASSERT(6651, mDoExt_resfont != 0);
if (param_6 == 0) {
u32 temp = (((param_8+0x1F) & ~0x1F) + 0x40) * param_7;
JUTCacheFont* cacheFont = new(p_heap, 0) JUTCacheFont(*p_resfont, temp, p_heap);
if (cacheFont->isValid()) {
*p_font = cacheFont;
}
JKRFileLoader::removeResource(*p_resfont, NULL);
*p_resfont = NULL;
} else {
JUTResFont* resFont = new JUTResFont(*p_resfont, p_heap);
*p_font = resFont;
}
if (*p_font && !(*p_font)->isValid()) {
// "\nFailed to create cache font class\n"
OSReport_FatalError("\nキャッシュフォントクラス作成に失敗しました\n");
delete *p_font;
*p_font = NULL;
}
mDoExt_font = *p_font;
JUT_ASSERT(6685, mDoExt_font != 0);
}
JUTFont* mDoExt_font0;
ResFONT* mDoExt_resfont0;
s32 mDoExt_font0_getCount;
/* 80016884-800168E0 .text mDoExt_initFont0__Fv */
void mDoExt_initFont0() {
static const char fontdata[] = "rock_24_20_4i_usa.bfn";
mDoExt_initFontCommon(&mDoExt_font0, &mDoExt_resfont0, mDoExt_getZeldaHeap(), fontdata, dComIfGp_getFontArchive(), 1, 0, 0);
}
/* 800168E0-8001691C .text mDoExt_getMesgFont__Fv */
JUTFont* mDoExt_getMesgFont() {
if (!mDoExt_font0) {
mDoExt_initFont0();
}
mDoExt_font0_getCount++;
return mDoExt_font0;
}
/* 8001691C-80016A1C .text mDoExt_removeMesgFont__Fv */
void mDoExt_removeMesgFont() {
JUT_ASSERT(6736, mDoExt_font0_getCount > 0);
if (mDoExt_font0_getCount > 0) {
mDoExt_font0_getCount--;
JUT_ASSERT(6739, mDoExt_font0_getCount > 0);
if (mDoExt_font0_getCount == 0) {
delete mDoExt_font0;
mDoExt_font0 = NULL;
if (mDoExt_resfont0) {
JKRHeap::free(mDoExt_resfont0, NULL);
mDoExt_resfont0 = NULL;
}
}
}
}
JUTFont* mDoExt_font1;
ResFONT* mDoExt_resfont1;
s32 mDoExt_font1_getCount;
/* 80016A1C-80016A7C .text mDoExt_initFont1__Fv */
void mDoExt_initFont1() {
static const char fontdata[] = "hyrule.bfn";
mDoExt_initFontCommon(&mDoExt_font1, &mDoExt_resfont1, mDoExt_getZeldaHeap(), fontdata, dComIfGp_getRubyArchive(), 1, 1, 0x8000);
}
/* 80016A7C-80016AB8 .text mDoExt_getRubyFont__Fv */
JUTFont* mDoExt_getRubyFont() {
if (!mDoExt_font1) {
mDoExt_initFont1();
}
mDoExt_font1_getCount++;
return mDoExt_font1;
}
/* 80016AB8-80016BB8 .text mDoExt_removeRubyFont__Fv */
void mDoExt_removeRubyFont() {
JUT_ASSERT(6790, mDoExt_font1_getCount > 0);
if (mDoExt_font1_getCount > 0) {
mDoExt_font1_getCount--;
JUT_ASSERT(6793, mDoExt_font1_getCount > 0);
if (mDoExt_font1_getCount == 0) {
delete mDoExt_font1;
mDoExt_font1 = NULL;
if (mDoExt_resfont1) {
JKRHeap::free(mDoExt_resfont1, NULL);
mDoExt_resfont1 = NULL;
}
}
}
}
/* 80016BB8-80016C98 .text mDoExt_J3DModel__create__FP12J3DModelDataUlUl */
J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 i_modelFlag, u32 i_differedDlistFlag) {
J3DModel* model = new J3DModel();
if (model) {
if (i_modelData->getModelDataType() == 1 && i_modelFlag == 0) {
if (i_modelFlag = i_modelData->isLocked()) {
i_modelFlag = 0x20000;
} else {
i_modelFlag = 0x80000;
}
}
int ret = model->entryModelData(i_modelData, i_modelFlag, 1);
if (ret == J3DErrType_Success) {
if (i_modelFlag == 0x80000) {
if (i_differedDlistFlag & 0x2) {
i_differedDlistFlag |= 0x20;
}
ret = model->newDifferedDisplayList(i_differedDlistFlag);
if (ret != J3DErrType_Success) {
return NULL;
}
}
return model;
}
}
return NULL;
}
/* 80016C98-80016CC4 .text setGX__7JUTFontFQ28JUtility6TColorQ28JUtility6TColor */
void JUTFont::setGX(JUtility::TColor col1, JUtility::TColor col2) {
setGX();
}
/* 80016CC4-80016CF0 .text getCellWidth__7JUTFontCFv */
int JUTFont::getCellWidth() const {
return getWidth();
}
/* 80016CF0-80016D1C .text getCellHeight__7JUTFontCFv */
s32 JUTFont::getCellHeight() const {
return getHeight();
}
/* 80016D1C-80016D78 .text __dt__26mDoExt_3DlineMatSortPacketFv */
mDoExt_3DlineMatSortPacket::~mDoExt_3DlineMatSortPacket() {}
/* 80016D78-80016D80 .text getMaterialID__19mDoExt_3DlineMat1_cFv */
int mDoExt_3DlineMat1_c::getMaterialID() {
return 1;
}
/* 80016D80-80016D88 .text getMaterialID__19mDoExt_3DlineMat0_cFv */
int mDoExt_3DlineMat0_c::getMaterialID() {
return 0;
}
/* 80016D88-80016DE4 .text __dt__24mDoExt_onCupOffAupPacketFv */
mDoExt_onCupOffAupPacket::~mDoExt_onCupOffAupPacket() {}
/* 80016DE4-80016E40 .text __dt__24mDoExt_offCupOnAupPacketFv */
mDoExt_offCupOnAupPacket::~mDoExt_offCupOnAupPacket() {}
/* 80016E40-80016F14 .text __dt__15mDoExt_McaMorf2Fv */
mDoExt_McaMorf2::~mDoExt_McaMorf2() {}
/* 80017000-800170D4 .text __dt__14mDoExt_McaMorfFv */
mDoExt_McaMorf::~mDoExt_McaMorf() {}
/* 800170D4-800171BC .text __dt__28mDoExt_MtxCalcAnmBlendTblOldFv */
mDoExt_MtxCalcAnmBlendTblOld::~mDoExt_MtxCalcAnmBlendTblOld() {}