mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-01 17:57:24 -04:00
2131 lines
76 KiB
C++
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() {}
|