switch to dtk setup (#2203)

* switch to dtk setup

* some cleanup / fixes

* cleanup d_a_alink literals

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

* Fix build image ref (#2)

---------

Co-authored-by: Luke Street <luke@street.dev>
This commit is contained in:
TakaRikka
2024-10-10 07:29:58 -07:00
committed by GitHub
parent 2fd702c0ac
commit 12eb254d76
33438 changed files with 370506 additions and 3055930 deletions
+1 -1
View File
@@ -554,4 +554,4 @@ extern "C" void ModuleDestructorsX(void (**dtors)()) {
/* 80263210-80263218 25DB50 0008+00 1/0 0/0 0/0 .text getModuleSize__24DynamicModuleControlBaseCFv
*/
/* 80263218-80263220 25DB58 0008+00 1/0 0/0 0/0 .text getModuleName__20DynamicModuleControlCFv */
/* 80263218-80263220 25DB58 0008+00 1/0 0/0 0/0 .text getModuleName__20DynamicModuleControlCFv */
+908
View File
@@ -0,0 +1,908 @@
#include "JSystem/J2DGraph/J2DAnimation.h"
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/J3DGraphBase/J3DTexture.h"
#include "JSystem/JUtility/JUTPalette.h"
#include "JSystem/JUtility/JUTResource.h"
#include "dolphin/os.h"
f32 J2DGetKeyFrameInterpolationf(f32 param_0, J3DAnmKeyTableBase* param_1, f32* param_2);
f32 J2DGetKeyFrameInterpolations(f32 param_0, J3DAnmKeyTableBase* param_1, s16* param_2);
/* 8030A590-8030AAFC 304ED0 056C+00 1/0 0/0 0/0 .text
* getTransform__19J2DAnmTransformFullCFUsP16J3DTransformInfo */
void J2DAnmTransformFull::getTransform(u16 param_0, J3DTransformInfo* transformInfo) const {
u16 idx = (param_0 * 3);
J3DAnmTransformFullTable* xPart = &mTableInfo[idx];
J3DAnmTransformFullTable* yPart = &mTableInfo[idx + 1];
J3DAnmTransformFullTable* zPart = &mTableInfo[idx + 2];
u16 xMaxFrame = xPart->mScaleMaxFrame;
if (getFrame() < 0) {
transformInfo->mScale.x = mScaleValues[xPart->mScaleOffset];
} else if (getFrame() >= xMaxFrame) {
transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (xMaxFrame - 1))];
} else {
transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (int)getFrame())];
}
u16 yMaxFrame = yPart->mScaleMaxFrame;
if (getFrame() < 0) {
transformInfo->mScale.y = mScaleValues[yPart->mScaleOffset];
} else if (getFrame() >= yMaxFrame) {
transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (yMaxFrame - 1))];
} else {
transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (int)getFrame())];
}
u16 zMaxFrame = zPart->mScaleMaxFrame;
if (getFrame() < 0) {
transformInfo->mScale.z = mScaleValues[zPart->mScaleOffset];
} else if (getFrame() >= zMaxFrame) {
transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (zMaxFrame - 1))];
} else {
transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (int)getFrame())];
}
xMaxFrame = xPart->mRotationMaxFrame;
if (getFrame() < 0) {
transformInfo->mRotation.x = mRotationValues[xPart->mRotationOffset];
} else if (getFrame() >= xMaxFrame) {
transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (xMaxFrame - 1))];
} else {
transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (int)getFrame())];
}
yMaxFrame = yPart->mRotationMaxFrame;
if (getFrame() < 0) {
transformInfo->mRotation.y = mRotationValues[yPart->mRotationOffset];
} else if (getFrame() >= yMaxFrame) {
transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (yMaxFrame - 1))];
} else {
transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (int)getFrame())];
}
zMaxFrame = zPart->mRotationMaxFrame;
if (getFrame() < 0) {
transformInfo->mRotation.z = mRotationValues[zPart->mRotationOffset];
} else if (getFrame() >= zMaxFrame) {
transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (zMaxFrame - 1))];
} else {
transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (int)getFrame())];
}
xMaxFrame = xPart->mTranslateMaxFrame;
if (getFrame() < 0) {
transformInfo->mTranslate.x = mTranslateValues[xPart->mTranslateOffset];
} else if (getFrame() >= xMaxFrame) {
transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (xMaxFrame - 1))];
} else {
transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (int)getFrame())];
}
yMaxFrame = yPart->mTranslateMaxFrame;
if (getFrame() < 0) {
transformInfo->mTranslate.y = mTranslateValues[yPart->mTranslateOffset];
} else if (getFrame() >= yMaxFrame) {
transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (yMaxFrame - 1))];
} else {
transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (int)getFrame())];
}
zMaxFrame = zPart->mTranslateMaxFrame;
if (getFrame() < 0) {
transformInfo->mTranslate.z = mTranslateValues[zPart->mTranslateOffset];
} else if (getFrame() >= zMaxFrame) {
transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (zMaxFrame - 1))];
} else {
transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (int)getFrame())];
}
}
/* 8030AAFC-8030AF24 30543C 0428+00 1/0 0/0 0/0 .text
* calcTransform__18J2DAnmTransformKeyCFfUsP16J3DTransformInfo */
void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
J3DTransformInfo* transformInfo) const {
u16 idx = param_1 * 3;
J3DAnmTransformKeyTable* xInf = &mInfoTable[idx];
J3DAnmTransformKeyTable* yInf = &mInfoTable[idx + 1];
J3DAnmTransformKeyTable* zInf = &mInfoTable[idx + 2];
switch (xInf->mScaleInfo.mMaxFrame) {
case 0:
transformInfo->mScale.x = 1;
break;
case 1:
transformInfo->mScale.x = mScaleValues[xInf->mScaleInfo.mOffset];
break;
default:
transformInfo->mScale.x = J2DGetKeyFrameInterpolationf(
param_0, &xInf->mScaleInfo, &mScaleValues[xInf->mScaleInfo.mOffset]);
}
switch (yInf->mScaleInfo.mMaxFrame) {
case 0:
transformInfo->mScale.y = 1;
break;
case 1:
transformInfo->mScale.y = mScaleValues[yInf->mScaleInfo.mOffset];
break;
default:
transformInfo->mScale.y = J2DGetKeyFrameInterpolationf(
param_0, &yInf->mScaleInfo, &mScaleValues[yInf->mScaleInfo.mOffset]);
}
switch (zInf->mScaleInfo.mMaxFrame) {
case 0:
transformInfo->mScale.z = 1;
break;
case 1:
transformInfo->mScale.z = mScaleValues[zInf->mScaleInfo.mOffset];
break;
default:
transformInfo->mScale.z = J2DGetKeyFrameInterpolationf(
param_0, &zInf->mScaleInfo, &mScaleValues[zInf->mScaleInfo.mOffset]);
}
switch (xInf->mRotationInfo.mMaxFrame) {
case 0:
transformInfo->mRotation.x = 0;
break;
case 1:
transformInfo->mRotation.x = mRotationValues[xInf->mRotationInfo.mOffset] << field_0x24;
break;
default:
transformInfo->mRotation.x =
static_cast<s32>(J2DGetKeyFrameInterpolations(
param_0, &xInf->mRotationInfo, &mRotationValues[xInf->mRotationInfo.mOffset]))
<< field_0x24;
}
switch (yInf->mRotationInfo.mMaxFrame) {
case 0:
transformInfo->mRotation.y = 0;
break;
case 1:
transformInfo->mRotation.y = mRotationValues[yInf->mRotationInfo.mOffset] << field_0x24;
break;
default:
transformInfo->mRotation.y =
static_cast<s32>(J2DGetKeyFrameInterpolations(
param_0, &yInf->mRotationInfo, &mRotationValues[yInf->mRotationInfo.mOffset]))
<< field_0x24;
}
switch (zInf->mRotationInfo.mMaxFrame) {
case 0:
transformInfo->mRotation.z = 0;
break;
case 1:
transformInfo->mRotation.z = mRotationValues[zInf->mRotationInfo.mOffset] << field_0x24;
break;
default:
transformInfo->mRotation.z =
static_cast<s32>(J2DGetKeyFrameInterpolations(
param_0, &zInf->mRotationInfo, &mRotationValues[zInf->mRotationInfo.mOffset]))
<< field_0x24;
}
switch (xInf->mTranslateInfo.mMaxFrame) {
case 0:
transformInfo->mTranslate.x = 0;
break;
case 1:
transformInfo->mTranslate.x = mTranslateValues[xInf->mTranslateInfo.mOffset];
break;
default:
transformInfo->mTranslate.x = J2DGetKeyFrameInterpolationf(
param_0, &xInf->mTranslateInfo, &mTranslateValues[xInf->mTranslateInfo.mOffset]);
}
switch (yInf->mTranslateInfo.mMaxFrame) {
case 0:
transformInfo->mTranslate.y = 0;
break;
case 1:
transformInfo->mTranslate.y = mTranslateValues[yInf->mTranslateInfo.mOffset];
break;
default:
transformInfo->mTranslate.y = J2DGetKeyFrameInterpolationf(
param_0, &yInf->mTranslateInfo, &mTranslateValues[yInf->mTranslateInfo.mOffset]);
}
switch (zInf->mTranslateInfo.mMaxFrame) {
case 0:
transformInfo->mTranslate.z = 0;
break;
case 1:
transformInfo->mTranslate.z = mTranslateValues[zInf->mTranslateInfo.mOffset];
break;
default:
transformInfo->mTranslate.z = J2DGetKeyFrameInterpolationf(
param_0, &zInf->mTranslateInfo, &mTranslateValues[zInf->mTranslateInfo.mOffset]);
}
}
/* 8030AF24-8030AFC8 305864 00A4+00 3/0 0/0 0/0 .text
* searchUpdateMaterialID__11J2DAnmColorFP9J2DScreen */
void J2DAnmColor::searchUpdateMaterialID(J2DScreen* pScreen) {
if (pScreen != NULL && pScreen->mNameTable != NULL) {
for (u16 entry = 0; entry < this->getUpdateMaterialNum(); entry++) {
s32 idx = pScreen->mNameTable->getIndex(this->field_0x20.getName(entry));
if (idx != -1) {
mUpdateMaterialID[entry] = idx;
} else {
mUpdateMaterialID[entry] = 0xFFFF;
}
}
}
}
/* 8030AFC8-8030B200 305908 0238+00 1/0 0/0 0/0 .text getColor__15J2DAnmColorFullCFUsP8_GXColor */
void J2DAnmColorFull::getColor(u16 param_0, _GXColor* pColor) const {
J3DAnmColorFullTable* info = &mInfoTable[param_0];
u16 maxFrame = info->mRMaxFrame;
if (getFrame() < 0) {
pColor->r = mRValues[info->mROffset];
} else if (getFrame() >= maxFrame) {
pColor->r = mRValues[info->mROffset + (maxFrame - 1)];
} else {
pColor->r = mRValues[info->mROffset + (int)getFrame()];
}
maxFrame = info->mGMaxFrame;
if (getFrame() < 0) {
pColor->g = mGValues[info->mGOffset];
} else if (getFrame() >= maxFrame) {
pColor->g = mGValues[info->mGOffset + (maxFrame - 1)];
} else {
pColor->g = mGValues[info->mGOffset + (int)getFrame()];
}
maxFrame = info->mBMaxFrame;
if (getFrame() < 0) {
pColor->b = mBValues[info->mBOffset];
} else if (getFrame() >= maxFrame) {
pColor->b = mBValues[info->mBOffset + (maxFrame - 1)];
} else {
pColor->b = mBValues[info->mBOffset + (int)getFrame()];
}
maxFrame = info->mAMaxFrame;
if (getFrame() < 0) {
pColor->a = mAValues[info->mAOffset];
} else if (getFrame() >= maxFrame) {
pColor->a = mAValues[info->mAOffset + (maxFrame - 1)];
} else {
pColor->a = mAValues[info->mAOffset + (int)getFrame()];
}
}
/* 8030B200-8030B4C4 305B40 02C4+00 1/0 0/0 0/0 .text getColor__14J2DAnmColorKeyCFUsP8_GXColor */
void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const {
J3DAnmColorKeyTable* info = &mInfoTable[param_0];
f32 val;
switch (info->mRInfo.mMaxFrame) {
case 0:
pColor->r = 0;
break;
case 1:
pColor->r = mRValues[info->mRInfo.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRInfo,
&mRValues[info->mRInfo.mOffset]);
if (val < 0) {
pColor->r = 0;
} else if (val > 255) {
pColor->r = 255;
} else {
OSf32tou8(&val, &pColor->r);
}
}
switch (info->mGInfo.mMaxFrame) {
case 0:
pColor->g = 0;
break;
case 1:
pColor->g = mGValues[info->mGInfo.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGInfo,
&mGValues[info->mGInfo.mOffset]);
if (val < 0) {
pColor->g = 0;
} else if (val > 255) {
pColor->g = 255;
} else {
OSf32tou8(&val, &pColor->g);
}
}
switch (info->mBInfo.mMaxFrame) {
case 0:
pColor->b = 0;
break;
case 1:
pColor->b = mBValues[info->mBInfo.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBInfo,
&mBValues[info->mBInfo.mOffset]);
if (val < 0) {
pColor->b = 0;
} else if (val > 255) {
pColor->b = 255;
} else {
OSf32tou8(&val, &pColor->b);
}
}
switch (info->mAInfo.mMaxFrame) {
case 0:
pColor->a = 0;
break;
case 1:
pColor->a = mAValues[info->mAInfo.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mAInfo,
&mAValues[info->mAInfo.mOffset]);
if (val < 0) {
pColor->a = 0;
} else if (val > 255) {
pColor->a = 255;
} else {
OSf32tou8(&val, &pColor->a);
}
}
}
/* 8030B4C4-8030B704 305E04 0240+00 1/0 0/0 0/0 .text
* getColor__18J2DAnmVtxColorFullCFUcUsP8_GXColor */
void J2DAnmVtxColorFull::getColor(u8 param_0, u16 param_1, _GXColor* pColor) const {
J3DAnmColorFullTable* info = &mInfoTable[param_0][param_1];
u16 maxFrame = info->mRMaxFrame;
if (getFrame() < 0) {
pColor->r = mRValues[info->mROffset];
} else if (getFrame() >= maxFrame) {
pColor->r = mRValues[info->mROffset + (maxFrame - 1)];
} else {
pColor->r = mRValues[info->mROffset + (int)getFrame()];
}
maxFrame = info->mGMaxFrame;
if (getFrame() < 0) {
pColor->g = mGValues[info->mGOffset];
} else if (getFrame() >= maxFrame) {
pColor->g = mGValues[info->mGOffset + (maxFrame - 1)];
} else {
pColor->g = mGValues[info->mGOffset + (int)getFrame()];
}
maxFrame = info->mBMaxFrame;
if (getFrame() < 0) {
pColor->b = mBValues[info->mBOffset];
} else if (getFrame() >= maxFrame) {
pColor->b = mBValues[info->mBOffset + (maxFrame - 1)];
} else {
pColor->b = mBValues[info->mBOffset + (int)getFrame()];
}
maxFrame = info->mAMaxFrame;
if (getFrame() < 0) {
pColor->a = mAValues[info->mAOffset];
} else if (getFrame() >= maxFrame) {
pColor->a = mAValues[info->mAOffset + (maxFrame - 1)];
} else {
pColor->a = mAValues[info->mAOffset + (int)getFrame()];
}
}
/* 8030B704-8030B9F0 306044 02EC+00 1/0 0/0 0/0 .text
* getColor__17J2DAnmVtxColorKeyCFUcUsP8_GXColor */
void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) const {
J3DAnmColorKeyTable* info = &mInfoTable[param_0][param_1];
f32 val;
switch (info->mRInfo.mMaxFrame) {
case 0:
pColor->r = 0;
break;
case 1:
pColor->r = mRValues[info->mRInfo.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRInfo,
&mRValues[info->mRInfo.mOffset]);
if ((val <= 0)) {
pColor->r = 0;
} else if (val <= 255) {
OSf32tou8(&val, &pColor->r);
} else {
pColor->r = 255;
}
}
switch (info->mGInfo.mMaxFrame) {
case 0:
pColor->g = 0;
break;
case 1:
pColor->g = mGValues[info->mGInfo.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGInfo,
&mGValues[info->mGInfo.mOffset]);
if (val <= 0) {
pColor->g = 0;
} else if (val <= 255) {
OSf32tou8(&val, &pColor->g);
} else {
pColor->g = 255;
}
}
switch (info->mBInfo.mMaxFrame) {
case 0:
pColor->b = 0;
break;
case 1:
pColor->b = mBValues[info->mBInfo.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBInfo,
&mBValues[info->mBInfo.mOffset]);
if (val <= 0) {
pColor->b = 0;
} else if (val <= 255) {
OSf32tou8(&val, &pColor->b);
} else {
pColor->b = 255;
}
}
switch (info->mAInfo.mMaxFrame) {
case 0:
pColor->a = 0;
break;
case 1:
pColor->a = mAValues[info->mAInfo.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mAInfo,
&mAValues[info->mAInfo.mOffset]);
if (val <= 0) {
pColor->a = 0;
} else if (val <= 255) {
OSf32tou8(&val, &pColor->a);
} else {
pColor->a = 255;
}
}
}
/* 8030B9F0-8030BC60 306330 0270+00 0/0 1/1 0/0 .text
* calcTransform__19J2DAnmTextureSRTKeyCFfUsP17J3DTextureSRTInfo */
void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTInfo* pInfo) const {
u16 idx = param_1 * 3;
J3DAnmTransformKeyTable* xInf = &mInfoTable[idx];
J3DAnmTransformKeyTable* yInf = &mInfoTable[idx + 1];
J3DAnmTransformKeyTable* zInf = &mInfoTable[idx + 2];
switch (xInf->mScaleInfo.mMaxFrame) {
case 0:
pInfo->mScaleX = 1;
break;
case 1:
pInfo->mScaleX = mScaleValues[xInf->mScaleInfo.mOffset];
break;
default:
pInfo->mScaleX = J2DGetKeyFrameInterpolationf(param_0, &xInf->mScaleInfo,
&mScaleValues[xInf->mScaleInfo.mOffset]);
}
switch (yInf->mScaleInfo.mMaxFrame) {
case 0:
pInfo->mScaleY = 1;
break;
case 1:
pInfo->mScaleY = mScaleValues[yInf->mScaleInfo.mOffset];
break;
default:
pInfo->mScaleY = J2DGetKeyFrameInterpolationf(param_0, &yInf->mScaleInfo,
&mScaleValues[yInf->mScaleInfo.mOffset]);
}
switch (zInf->mRotationInfo.mMaxFrame) {
case 0:
pInfo->mRotation = 0;
break;
case 1:
pInfo->mRotation = mRotationValues[zInf->mRotationInfo.mOffset] << field_0x10;
break;
default:
pInfo->mRotation =
static_cast<s32>(J2DGetKeyFrameInterpolations(
param_0, &zInf->mRotationInfo, &mRotationValues[zInf->mRotationInfo.mOffset]))
<< field_0x10;
}
switch (xInf->mTranslateInfo.mMaxFrame) {
case 0:
pInfo->mTranslationX = 0;
break;
case 1:
pInfo->mTranslationX = mTranslationValues[xInf->mTranslateInfo.mOffset];
break;
default:
pInfo->mTranslationX = J2DGetKeyFrameInterpolationf(
param_0, &xInf->mTranslateInfo, &mTranslationValues[xInf->mTranslateInfo.mOffset]);
}
switch (yInf->mTranslateInfo.mMaxFrame) {
case 0:
pInfo->mTranslationY = 0;
break;
case 1:
pInfo->mTranslationY = mTranslationValues[yInf->mTranslateInfo.mOffset];
break;
default:
pInfo->mTranslationY = J2DGetKeyFrameInterpolationf(
param_0, &yInf->mTranslateInfo, &mTranslationValues[yInf->mTranslateInfo.mOffset]);
}
}
/* 8030BC60-8030BD10 3065A0 00B0+00 1/0 0/0 0/0 .text
* searchUpdateMaterialID__19J2DAnmTextureSRTKeyFP9J2DScreen */
void J2DAnmTextureSRTKey::searchUpdateMaterialID(J2DScreen* pScreen) {
if (pScreen != NULL && pScreen->mNameTable != NULL) {
for (u16 entry = 0; entry < this->getUpdateMaterialNum(); entry++) {
s32 idx = pScreen->mNameTable->getIndex(field_0x34.getName(entry));
if (idx != -1) {
mUpdateMaterialID[entry] = idx;
} else {
mUpdateMaterialID[entry] = 0xFFFF;
}
}
}
}
/* 8030BD10-8030BEE8 306650 01D8+00 1/0 0/0 0/0 .text
* searchUpdateMaterialID__16J2DAnmTexPatternFP9J2DScreen */
void J2DAnmTexPattern::searchUpdateMaterialID(J2DScreen* pScreen) {
if (pScreen != NULL && pScreen->mNameTable != NULL && pScreen->mTexRes != NULL) {
for (u16 entry = 0; entry < this->getUpdateMaterialNum(); entry++) {
s32 idx = pScreen->mNameTable->getIndex(field_0x20.getName(entry));
if (idx != -1) {
mUpdateMaterialID[entry] = idx;
} else {
mUpdateMaterialID[entry] = 0xFFFF;
}
}
delete[] mTIMGPtrArray;
mTIMGPtrArray = new J2DAnmTexPatternTIMGPointer[pScreen->mTexRes->mCount];
if (mTIMGPtrArray != NULL) {
JUTResReference resRef;
for (u16 i = 0; i < pScreen->mTexRes->mCount; i++) {
s8* var1 = pScreen->mTexRes->getResReference(i);
ResTIMG* var2 = NULL;
if (var1 != NULL) {
var2 = (ResTIMG*)resRef.getResource(var1, 'TIMG', NULL);
if (var2 == NULL && J2DScreen::getDataManage() != NULL) {
var2 =
(ResTIMG*)J2DScreen::getDataManage()->get(pScreen->mTexRes->getName(i));
}
}
mTIMGPtrArray[i].mRes = var2;
if (var2 != NULL && var2->indexTexture) {
JUTPalette* palette =
new JUTPalette(GX_TLUT0, (_GXTlutFmt)var2->colorFormat,
(JUTTransparency)var2->alphaEnabled, var2->numColors,
((u8*)var2) + var2->paletteOffset);
mTIMGPtrArray[i].mPalette = palette;
}
}
}
}
}
/* 8030BEE8-8030BF9C 306828 00B4+00 2/2 1/1 0/0 .text getTexNo__16J2DAnmTexPatternCFUsPUs
*/
void J2DAnmTexPattern::getTexNo(u16 param_0, u16* pTexNo) const {
u16 maxFrame = mAnmTable[param_0].mMaxFrame;
f32 frame = getFrame();
if (frame < 0) {
*pTexNo = mValues[mAnmTable[param_0].mOffset];
} else if (frame >= maxFrame) {
*pTexNo = mValues[mAnmTable[param_0].mOffset + (maxFrame - 1)];
} else {
*pTexNo = mValues[mAnmTable[param_0].mOffset + (int)frame];
}
}
/* 8030BF9C-8030BFF0 3068DC 0054+00 0/0 1/1 0/0 .text getResTIMG__16J2DAnmTexPatternCFUs
*/
ResTIMG* J2DAnmTexPattern::getResTIMG(u16 param_0) const {
if (mTIMGPtrArray == NULL) {
return NULL;
} else {
u16 texNo;
this->getTexNo(param_0, &texNo);
return mTIMGPtrArray[texNo].mRes;
}
}
/* 8030BFF0-8030C048 306930 0058+00 0/0 1/1 0/0 .text getPalette__16J2DAnmTexPatternCFUs
*/
JUTPalette* J2DAnmTexPattern::getPalette(u16 param_0) const {
if (mTIMGPtrArray == NULL) {
return NULL;
} else {
u16 texNo;
this->getTexNo(param_0, &texNo);
return mTIMGPtrArray[texNo].mPalette;
}
}
/* 8030C048-8030C0F0 306988 00A8+00 0/0 3/3 0/0 .text getVisibility__20J2DAnmVisibilityFullCFUsPUc
*/
void J2DAnmVisibilityFull::getVisibility(u16 param_0, u8* pOut) const {
u16 maxFrame = mTable[param_0]._0;
if (getFrame() < 0) {
*pOut = mValues[mTable[param_0]._2];
} else if (getFrame() >= maxFrame) {
*pOut = mValues[mTable[param_0]._2 + (maxFrame - 1)];
} else {
int frame = getFrame();
*pOut = mValues[mTable[param_0]._2 + frame];
}
}
/* 8030C0F0-8030C3B4 306A30 02C4+00 0/0 1/1 0/0 .text
* getTevColorReg__15J2DAnmTevRegKeyCFUsP11_GXColorS10 */
void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const {
J3DAnmCRegKeyTable* info = &mAnmCRegKeyTable[param_0];
f32 val;
switch (info->mRTable.mMaxFrame) {
case 0:
pColor->r = 0;
break;
case 1:
pColor->r = mCRValues[info->mRTable.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRTable,
&mCRValues[info->mRTable.mOffset]);
if (val < -0x400) {
pColor->r = -0x400;
} else if (val > 0x3FF) {
pColor->r = 0x3FF;
} else {
OSf32tos16(&val, &pColor->r);
}
}
switch (info->mGTable.mMaxFrame) {
case 0:
pColor->g = 0;
break;
case 1:
pColor->g = mCGValues[info->mGTable.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGTable,
&mCGValues[info->mGTable.mOffset]);
if (val < -0x400) {
pColor->g = -0x400;
} else if (val > 0x3FF) {
pColor->g = 0x3FF;
} else {
OSf32tos16(&val, &pColor->g);
}
}
switch (info->mBTable.mMaxFrame) {
case 0:
pColor->b = 0;
break;
case 1:
pColor->b = mCBValues[info->mBTable.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBTable,
&mCBValues[info->mBTable.mOffset]);
if (val < -0x400) {
pColor->b = -0x400;
} else if (val > 0x3FF) {
pColor->b = 0x3FF;
} else {
OSf32tos16(&val, &pColor->b);
}
}
switch (info->mATable.mMaxFrame) {
case 0:
pColor->a = 0;
break;
case 1:
pColor->a = mCAValues[info->mATable.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mATable,
&mCAValues[info->mATable.mOffset]);
if (val < -0x400) {
pColor->a = -0x400;
} else if (val > 0x3FF) {
pColor->a = 0x3FF;
} else {
OSf32tos16(&val, &pColor->a);
}
}
}
/* 8030C3B4-8030C678 306CF4 02C4+00 0/0 1/1 0/0 .text
* getTevKonstReg__15J2DAnmTevRegKeyCFUsP8_GXColor */
void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const {
J3DAnmKRegKeyTable* info = &mAnmKRegKeyTable[param_0];
f32 val;
switch (info->mRTable.mMaxFrame) {
case 0:
pColor->r = 0;
break;
case 1:
pColor->r = mKRValues[info->mRTable.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRTable,
&mKRValues[info->mRTable.mOffset]);
if (val < 0) {
pColor->r = 0;
} else if (val > 255) {
pColor->r = 255;
} else {
OSf32tou8(&val, &pColor->r);
}
}
switch (info->mGTable.mMaxFrame) {
case 0:
pColor->g = 0;
break;
case 1:
pColor->g = mKGValues[info->mGTable.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGTable,
&mKGValues[info->mGTable.mOffset]);
if (val < 0) {
pColor->g = 0;
} else if (val > 255) {
pColor->g = 255;
} else {
OSf32tou8(&val, &pColor->g);
}
}
switch (info->mBTable.mMaxFrame) {
case 0:
pColor->b = 0;
break;
case 1:
pColor->b = mKBValues[info->mBTable.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBTable,
&mKBValues[info->mBTable.mOffset]);
if (val < 0) {
pColor->b = 0;
} else if (val > 255) {
pColor->b = 255;
} else {
OSf32tou8(&val, &pColor->b);
}
}
switch (info->mATable.mMaxFrame) {
case 0:
pColor->a = 0;
break;
case 1:
pColor->a = mKAValues[info->mATable.mOffset];
break;
default:
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mATable,
&mKAValues[info->mATable.mOffset]);
if (val < 0) {
pColor->a = 0;
} else if (val > 255) {
pColor->a = 255;
} else {
OSf32tou8(&val, &pColor->a);
}
}
}
/* 8030C678-8030C77C 306FB8 0104+00 1/0 0/0 0/0 .text
* searchUpdateMaterialID__15J2DAnmTevRegKeyFP9J2DScreen */
void J2DAnmTevRegKey::searchUpdateMaterialID(J2DScreen* pScreen) {
if (pScreen != NULL && pScreen->mNameTable != NULL) {
for (u16 i = 0; i < mCRegUpdateMaterialNum; i++) {
s32 idx = pScreen->mNameTable->getIndex(mCRegNameTab.getName(i));
if (idx != -1) {
mCRegUpdateMaterialID[i] = idx;
} else {
mCRegUpdateMaterialID[i] = 0xFFFF;
}
}
for (u16 i = 0; i < mKRegUpdateMaterialNum; i++) {
s32 idx = pScreen->mNameTable->getIndex(mKRegNameTab.getName(i));
if (idx != -1) {
mKRegUpdateMaterialID[i] = idx;
} else {
mKRegUpdateMaterialID[i] = 0xFFFF;
}
}
}
}
/* 8030C77C-8030C9B0 3070BC 0234+00 6/6 0/0 0/0 .text
* J2DGetKeyFrameInterpolation<s>__FfP18J3DAnmKeyTableBasePs */
// should be J2DGetKeyFrameInterpolation<s16>
f32 J2DGetKeyFrameInterpolations(f32 param_0, J3DAnmKeyTableBase* param_1, s16* param_2) {
if (param_0 < param_2[0]) {
return param_2[1];
} else {
if (param_1->mType == 0) {
if (param_2[(param_1->mMaxFrame - 1) * 3] <= param_0) {
return param_2[(param_1->mMaxFrame - 1) * 3 + 1];
} else {
u32 tmp = param_1->mMaxFrame;
while (tmp > 1) {
u32 halfTmp = tmp / 2;
u32 upIdx = halfTmp * 3;
if (param_0 >= param_2[upIdx]) {
param_2 = param_2 + upIdx;
tmp -= halfTmp;
} else {
tmp = halfTmp;
}
}
return J2DHermiteInterpolation<s16>(param_0, &param_2[0], &param_2[1], &param_2[2],
&param_2[3], &param_2[4], &param_2[5]);
}
} else {
if (param_2[(param_1->mMaxFrame - 1) * 4] <= param_0) {
return param_2[(param_1->mMaxFrame - 1) * 4 + 1];
} else {
u32 tmp = param_1->mMaxFrame;
while (tmp > 1) {
u32 halfTmp = tmp / 2;
u32 upIdx = halfTmp * 4;
if (param_0 >= param_2[upIdx]) {
param_2 = param_2 + upIdx;
tmp -= halfTmp;
} else {
tmp = halfTmp;
}
}
return J2DHermiteInterpolation<s16>(param_0, &param_2[0], &param_2[1], &param_2[3],
&param_2[4], &param_2[5], &param_2[6]);
}
}
}
}
/* 8030C9B0-8030CB2C 3072F0 017C+00 2/2 0/0 0/0 .text
* J2DGetKeyFrameInterpolation<f>__FfP18J3DAnmKeyTableBasePf */
// should be J2DGetKeyFrameInterpolation<s16>
f32 J2DGetKeyFrameInterpolationf(f32 param_0, J3DAnmKeyTableBase* param_1, f32* param_2) {
if (param_0 < param_2[0]) {
return param_2[1];
} else {
if (param_1->mType == 0) {
if (param_2[(param_1->mMaxFrame - 1) * 3] <= param_0) {
return param_2[(param_1->mMaxFrame - 1) * 3 + 1];
} else {
u32 tmp = param_1->mMaxFrame;
while (tmp > 1) {
u32 halfTmp = tmp / 2;
u32 upIdx = halfTmp * 3;
if (param_0 >= param_2[upIdx]) {
param_2 = param_2 + upIdx;
tmp -= halfTmp;
} else {
tmp = halfTmp;
}
}
return J2DHermiteInterpolation<f32>(param_0, &param_2[0], &param_2[1], &param_2[2],
&param_2[3], &param_2[4], &param_2[5]);
}
} else {
if (param_2[(param_1->mMaxFrame - 1) * 4] <= param_0) {
return param_2[(param_1->mMaxFrame - 1) * 4 + 1];
} else {
u32 tmp = param_1->mMaxFrame;
while (tmp > 1) {
u32 halfTmp = tmp / 2;
u32 upIdx = halfTmp * 4;
if (param_0 >= param_2[upIdx]) {
param_2 = param_2 + upIdx;
tmp -= halfTmp;
} else {
tmp = halfTmp;
}
}
return J2DHermiteInterpolation<f32>(param_0, &param_2[0], &param_2[1], &param_2[3],
&param_2[4], &param_2[5], &param_2[6]);
}
}
}
}
J2DAnmTexPattern::J2DAnmTexPatternTIMGPointer::J2DAnmTexPatternTIMGPointer() {
mRes = NULL;
mPalette = NULL;
}
J2DAnmTexPattern::J2DAnmTexPatternTIMGPointer::~J2DAnmTexPatternTIMGPointer() {
delete mPalette;
}
+526
View File
@@ -0,0 +1,526 @@
//
// Generated By: dol2asm
// Translation Unit: J2DAnmLoader
//
// See J2DAnmLoader_nonmatching.cpp
// #include "JSystem/J2DGraph/J2DAnmLoader.h"
#include "dol2asm.h"
#include "dolphin/types.h"
//
// Types:
//
struct _GXColor {};
struct ResNTAB {};
struct JUTNameTab {
/* 802DE9A0 */ JUTNameTab();
/* 802DEA1C */ void setResource(ResNTAB const*);
};
struct J3DAnmVtxColorKeyData {};
struct J3DAnmVtxColorFullData {};
struct J3DAnmVisibilityFullData {};
struct J3DAnmTransformKeyData {};
struct J3DAnmTransformFullData {};
struct J3DAnmTextureSRTKeyData {};
struct J3DAnmTexPatternFullData {};
struct J3DAnmTevRegKeyData {};
struct J3DAnmColorKeyData {};
struct J3DAnmColorFullData {};
struct J2DScreen {};
struct J2DAnmVtxColorKey {};
struct J2DAnmVtxColorFull {};
struct J2DAnmVtxColor {
/* 8030363C */ void getColor(u8, u16, _GXColor*) const;
/* 8030A358 */ ~J2DAnmVtxColor();
};
struct J2DAnmVisibilityFull {
/* 8030A3B4 */ ~J2DAnmVisibilityFull();
};
struct J2DAnmTransformKey {};
struct J2DAnmTransformFull {};
struct J2DAnmTextureSRTKey {};
struct J2DAnmTexPattern {};
struct J2DAnmTevRegKey {};
struct J2DAnmLoaderDataBase {
/* 80308A6C */ void load(void const*);
};
struct J2DAnmLoader {
/* 8030A410 */ ~J2DAnmLoader();
};
struct J2DAnmBase {
/* 800569B0 */ void searchUpdateMaterialID(J2DScreen*);
};
struct J2DAnmColorKey {};
struct J2DAnmKeyLoader_v15 {
/* 80309290 */ J2DAnmKeyLoader_v15();
/* 803092AC */ ~J2DAnmKeyLoader_v15();
/* 80309308 */ void load(void const*);
/* 80309414 */ void setResource(J2DAnmBase*, void const*);
/* 80309570 */ void readAnmTransform(J3DAnmTransformKeyData const*);
/* 80309598 */ void setAnmTransform(J2DAnmTransformKey*, J3DAnmTransformKeyData const*);
/* 80309634 */ void readAnmTextureSRT(J3DAnmTextureSRTKeyData const*);
/* 8030965C */ void setAnmTextureSRT(J2DAnmTextureSRTKey*, J3DAnmTextureSRTKeyData const*);
/* 80309848 */ void readAnmColor(J3DAnmColorKeyData const*);
/* 80309870 */ void setAnmColor(J2DAnmColorKey*, J3DAnmColorKeyData const*);
/* 8030995C */ void readAnmVtxColor(J3DAnmVtxColorKeyData const*);
/* 80309984 */ void setAnmVtxColor(J2DAnmVtxColorKey*, J3DAnmVtxColorKeyData const*);
/* 80309FDC */ void readAnmTevReg(J3DAnmTevRegKeyData const*);
/* 8030A004 */ void setAnmTevReg(J2DAnmTevRegKey*, J3DAnmTevRegKeyData const*);
};
struct J2DAnmColorFull {};
struct J2DAnmFullLoader_v15 {
/* 80309A80 */ void load(void const*);
/* 80309B8C */ void setResource(J2DAnmBase*, void const*);
/* 80309CE8 */ J2DAnmFullLoader_v15();
/* 80309D04 */ ~J2DAnmFullLoader_v15();
/* 80309D60 */ void readAnmTransform(J3DAnmTransformFullData const*);
/* 80309D88 */ void setAnmTransform(J2DAnmTransformFull*, J3DAnmTransformFullData const*);
/* 80309E1C */ void readAnmColor(J3DAnmColorFullData const*);
/* 80309E44 */ void setAnmColor(J2DAnmColorFull*, J3DAnmColorFullData const*);
/* 80309F10 */ void readAnmTexPattern(J3DAnmTexPatternFullData const*);
/* 80309F38 */ void setAnmTexPattern(J2DAnmTexPattern*, J3DAnmTexPatternFullData const*);
/* 8030A190 */ void readAnmVisibility(J3DAnmVisibilityFullData const*);
/* 8030A1B8 */ void setAnmVisibility(J2DAnmVisibilityFull*, J3DAnmVisibilityFullData const*);
/* 8030A234 */ void readAnmVtxColor(J3DAnmVtxColorFullData const*);
/* 8030A25C */ void setAnmVtxColor(J2DAnmVtxColorFull*, J3DAnmVtxColorFullData const*);
};
//
// Forward References:
//
extern "C" void load__20J2DAnmLoaderDataBaseFPCv();
extern "C" void __ct__19J2DAnmKeyLoader_v15Fv();
extern "C" void __dt__19J2DAnmKeyLoader_v15Fv();
extern "C" void load__19J2DAnmKeyLoader_v15FPCv();
extern "C" void setResource__19J2DAnmKeyLoader_v15FP10J2DAnmBasePCv();
extern "C" void readAnmTransform__19J2DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData();
extern "C" void
setAnmTransform__19J2DAnmKeyLoader_v15FP18J2DAnmTransformKeyPC22J3DAnmTransformKeyData();
extern "C" void readAnmTextureSRT__19J2DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData();
extern "C" void
setAnmTextureSRT__19J2DAnmKeyLoader_v15FP19J2DAnmTextureSRTKeyPC23J3DAnmTextureSRTKeyData();
extern "C" void readAnmColor__19J2DAnmKeyLoader_v15FPC18J3DAnmColorKeyData();
extern "C" void setAnmColor__19J2DAnmKeyLoader_v15FP14J2DAnmColorKeyPC18J3DAnmColorKeyData();
extern "C" void readAnmVtxColor__19J2DAnmKeyLoader_v15FPC21J3DAnmVtxColorKeyData();
extern "C" void
setAnmVtxColor__19J2DAnmKeyLoader_v15FP17J2DAnmVtxColorKeyPC21J3DAnmVtxColorKeyData();
extern "C" void load__20J2DAnmFullLoader_v15FPCv();
extern "C" void setResource__20J2DAnmFullLoader_v15FP10J2DAnmBasePCv();
extern "C" void __ct__20J2DAnmFullLoader_v15Fv();
extern "C" void __dt__20J2DAnmFullLoader_v15Fv();
extern "C" void readAnmTransform__20J2DAnmFullLoader_v15FPC23J3DAnmTransformFullData();
extern "C" void
setAnmTransform__20J2DAnmFullLoader_v15FP19J2DAnmTransformFullPC23J3DAnmTransformFullData();
extern "C" void readAnmColor__20J2DAnmFullLoader_v15FPC19J3DAnmColorFullData();
extern "C" void setAnmColor__20J2DAnmFullLoader_v15FP15J2DAnmColorFullPC19J3DAnmColorFullData();
extern "C" void readAnmTexPattern__20J2DAnmFullLoader_v15FPC24J3DAnmTexPatternFullData();
extern "C" void
setAnmTexPattern__20J2DAnmFullLoader_v15FP16J2DAnmTexPatternPC24J3DAnmTexPatternFullData();
extern "C" void readAnmTevReg__19J2DAnmKeyLoader_v15FPC19J3DAnmTevRegKeyData();
extern "C" void setAnmTevReg__19J2DAnmKeyLoader_v15FP15J2DAnmTevRegKeyPC19J3DAnmTevRegKeyData();
extern "C" void readAnmVisibility__20J2DAnmFullLoader_v15FPC24J3DAnmVisibilityFullData();
extern "C" void
setAnmVisibility__20J2DAnmFullLoader_v15FP20J2DAnmVisibilityFullPC24J3DAnmVisibilityFullData();
extern "C" void readAnmVtxColor__20J2DAnmFullLoader_v15FPC22J3DAnmVtxColorFullData();
extern "C" void
setAnmVtxColor__20J2DAnmFullLoader_v15FP18J2DAnmVtxColorFullPC22J3DAnmVtxColorFullData();
extern "C" void __dt__14J2DAnmVtxColorFv();
extern "C" void __dt__20J2DAnmVisibilityFullFv();
extern "C" void __dt__12J2DAnmLoaderFv();
extern "C" void func_8030A458(void const*, void const*);
extern "C" void func_8030A470(void const*, void const*);
extern "C" void func_8030A488(void const*, void const*);
extern "C" void func_8030A4A0(void const*, void const*);
extern "C" void func_8030A4B8(void const*, void const*);
extern "C" void func_8030A4D0(void const*, void const*);
extern "C" void func_8030A4E8(void const*, void const*);
extern "C" void func_8030A500(void const*, void const*);
extern "C" void func_8030A518(void const*, void const*);
extern "C" void func_8030A530(void const*, void const*);
extern "C" void func_8030A548(void const*, void const*);
extern "C" void func_8030A560(void const*, void const*);
extern "C" void func_8030A578(void const*, void const*);
//
// External References:
//
extern "C" void searchUpdateMaterialID__10J2DAnmBaseFP9J2DScreen();
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void __ct__10JUTNameTabFv();
extern "C" void setResource__10JUTNameTabFPC7ResNTAB();
extern "C" void func_802F4260(void const*, void const*);
extern "C" void func_802F42C0(void const*, void const*);
extern "C" void getColor__14J2DAnmVtxColorCFUcUsP8_GXColor();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" extern void* __vt__10J2DAnmBase[4];
extern "C" extern void* __vt__15J2DAnmTransform[5 + 4 /* padding */];
extern "C" extern void* __vt__15J2DAnmTevRegKey[4];
extern "C" extern void* __vt__16J2DAnmTexPattern[4];
extern "C" extern void* __vt__19J2DAnmTextureSRTKey[4];
extern "C" extern void* __vt__17J2DAnmVtxColorKey[5];
extern "C" extern void* __vt__18J2DAnmVtxColorFull[5];
extern "C" extern void* __vt__14J2DAnmColorKey[5];
extern "C" extern void* __vt__15J2DAnmColorFull[5];
extern "C" extern void* __vt__11J2DAnmColor[5];
extern "C" extern void* __vt__18J2DAnmTransformKey[6];
extern "C" extern void* __vt__19J2DAnmTransformFull[5];
//
// Declarations:
//
/* ############################################################################################## */
/* 803CD6C8-803CD6DC 02A7E8 0014+00 2/2 0/0 0/0 .data __vt__20J2DAnmFullLoader_v15 */
SECTION_DATA extern void* __vt__20J2DAnmFullLoader_v15[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)load__20J2DAnmFullLoader_v15FPCv,
(void*)setResource__20J2DAnmFullLoader_v15FP10J2DAnmBasePCv,
(void*)__dt__20J2DAnmFullLoader_v15Fv,
};
/* 803CD6DC-803CD6F0 02A7FC 0014+00 2/2 0/0 0/0 .data __vt__19J2DAnmKeyLoader_v15 */
SECTION_DATA extern void* __vt__19J2DAnmKeyLoader_v15[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)load__19J2DAnmKeyLoader_v15FPCv,
(void*)setResource__19J2DAnmKeyLoader_v15FP10J2DAnmBasePCv,
(void*)__dt__19J2DAnmKeyLoader_v15Fv,
};
/* 803CD6F0-803CD704 02A810 0014+00 5/5 0/0 0/0 .data __vt__12J2DAnmLoader */
SECTION_DATA extern void* __vt__12J2DAnmLoader[5] = {
(void*)NULL /* RTTI */, (void*)NULL, (void*)NULL, (void*)NULL, (void*)__dt__12J2DAnmLoaderFv,
};
/* 803CD704-803CD714 02A824 0010+00 2/2 0/0 0/0 .data __vt__20J2DAnmVisibilityFull */
SECTION_DATA extern void* __vt__20J2DAnmVisibilityFull[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__20J2DAnmVisibilityFullFv,
(void*)searchUpdateMaterialID__10J2DAnmBaseFP9J2DScreen,
};
/* 803CD714-803CD728 02A834 0014+00 2/2 2/2 0/0 .data __vt__14J2DAnmVtxColor */
SECTION_DATA extern void* __vt__14J2DAnmVtxColor[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14J2DAnmVtxColorFv,
(void*)searchUpdateMaterialID__10J2DAnmBaseFP9J2DScreen,
(void*)getColor__14J2DAnmVtxColorCFUcUsP8_GXColor,
};
/* 804562F8-80456300 0048F8 0004+04 11/11 0/0 0/0 .sdata2 @1581 */
SECTION_SDATA2 static f32 lit_1581[1 + 1 /* padding */] = {
0.0f,
/* padding */
0.0f,
};
/* 80308A6C-80309290 3033AC 0824+00 0/0 26/26 2/2 .text load__20J2DAnmLoaderDataBaseFPCv
*/
void J2DAnmLoaderDataBase::load(void const* param_0) {
// NONMATCHING
}
/* 80309290-803092AC 303BD0 001C+00 1/1 0/0 0/0 .text __ct__19J2DAnmKeyLoader_v15Fv */
J2DAnmKeyLoader_v15::J2DAnmKeyLoader_v15() {
// NONMATCHING
}
/* 803092AC-80309308 303BEC 005C+00 2/1 0/0 0/0 .text __dt__19J2DAnmKeyLoader_v15Fv */
J2DAnmKeyLoader_v15::~J2DAnmKeyLoader_v15() {
// NONMATCHING
}
/* 80309308-80309414 303C48 010C+00 2/1 0/0 0/0 .text load__19J2DAnmKeyLoader_v15FPCv */
void J2DAnmKeyLoader_v15::load(void const* param_0) {
// NONMATCHING
}
/* 80309414-80309570 303D54 015C+00 1/0 0/0 0/0 .text
* setResource__19J2DAnmKeyLoader_v15FP10J2DAnmBasePCv */
void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* param_0, void const* param_1) {
// NONMATCHING
}
/* 80309570-80309598 303EB0 0028+00 1/1 0/0 0/0 .text
* readAnmTransform__19J2DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData */
void J2DAnmKeyLoader_v15::readAnmTransform(J3DAnmTransformKeyData const* param_0) {
// NONMATCHING
}
/* 80309598-80309634 303ED8 009C+00 2/2 0/0 0/0 .text
* setAnmTransform__19J2DAnmKeyLoader_v15FP18J2DAnmTransformKeyPC22J3DAnmTransformKeyData */
void J2DAnmKeyLoader_v15::setAnmTransform(J2DAnmTransformKey* param_0,
J3DAnmTransformKeyData const* param_1) {
// NONMATCHING
}
/* 80309634-8030965C 303F74 0028+00 1/1 0/0 0/0 .text
* readAnmTextureSRT__19J2DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData */
void J2DAnmKeyLoader_v15::readAnmTextureSRT(J3DAnmTextureSRTKeyData const* param_0) {
// NONMATCHING
}
/* 8030965C-80309848 303F9C 01EC+00 2/2 0/0 0/0 .text
* setAnmTextureSRT__19J2DAnmKeyLoader_v15FP19J2DAnmTextureSRTKeyPC23J3DAnmTextureSRTKeyData */
void J2DAnmKeyLoader_v15::setAnmTextureSRT(J2DAnmTextureSRTKey* param_0,
J3DAnmTextureSRTKeyData const* param_1) {
// NONMATCHING
}
/* 80309848-80309870 304188 0028+00 1/1 0/0 0/0 .text
* readAnmColor__19J2DAnmKeyLoader_v15FPC18J3DAnmColorKeyData */
void J2DAnmKeyLoader_v15::readAnmColor(J3DAnmColorKeyData const* param_0) {
// NONMATCHING
}
/* 80309870-8030995C 3041B0 00EC+00 2/2 0/0 0/0 .text
* setAnmColor__19J2DAnmKeyLoader_v15FP14J2DAnmColorKeyPC18J3DAnmColorKeyData */
void J2DAnmKeyLoader_v15::setAnmColor(J2DAnmColorKey* param_0,
J3DAnmColorKeyData const* param_1) {
// NONMATCHING
}
/* 8030995C-80309984 30429C 0028+00 1/1 0/0 0/0 .text
* readAnmVtxColor__19J2DAnmKeyLoader_v15FPC21J3DAnmVtxColorKeyData */
void J2DAnmKeyLoader_v15::readAnmVtxColor(J3DAnmVtxColorKeyData const* param_0) {
// NONMATCHING
}
/* 80309984-80309A80 3042C4 00FC+00 2/2 0/0 0/0 .text
* setAnmVtxColor__19J2DAnmKeyLoader_v15FP17J2DAnmVtxColorKeyPC21J3DAnmVtxColorKeyData */
void J2DAnmKeyLoader_v15::setAnmVtxColor(J2DAnmVtxColorKey* param_0,
J3DAnmVtxColorKeyData const* param_1) {
// NONMATCHING
}
/* 80309A80-80309B8C 3043C0 010C+00 2/1 0/0 0/0 .text load__20J2DAnmFullLoader_v15FPCv */
void J2DAnmFullLoader_v15::load(void const* param_0) {
// NONMATCHING
}
/* 80309B8C-80309CE8 3044CC 015C+00 1/0 0/0 0/0 .text
* setResource__20J2DAnmFullLoader_v15FP10J2DAnmBasePCv */
void J2DAnmFullLoader_v15::setResource(J2DAnmBase* param_0, void const* param_1) {
// NONMATCHING
}
/* 80309CE8-80309D04 304628 001C+00 1/1 0/0 0/0 .text __ct__20J2DAnmFullLoader_v15Fv */
J2DAnmFullLoader_v15::J2DAnmFullLoader_v15() {
// NONMATCHING
}
/* 80309D04-80309D60 304644 005C+00 2/1 0/0 0/0 .text __dt__20J2DAnmFullLoader_v15Fv */
J2DAnmFullLoader_v15::~J2DAnmFullLoader_v15() {
// NONMATCHING
}
/* 80309D60-80309D88 3046A0 0028+00 1/1 0/0 0/0 .text
* readAnmTransform__20J2DAnmFullLoader_v15FPC23J3DAnmTransformFullData */
void J2DAnmFullLoader_v15::readAnmTransform(J3DAnmTransformFullData const* param_0) {
// NONMATCHING
}
/* 80309D88-80309E1C 3046C8 0094+00 2/2 0/0 0/0 .text
* setAnmTransform__20J2DAnmFullLoader_v15FP19J2DAnmTransformFullPC23J3DAnmTransformFullData */
void J2DAnmFullLoader_v15::setAnmTransform(J2DAnmTransformFull* param_0,
J3DAnmTransformFullData const* param_1) {
// NONMATCHING
}
/* 80309E1C-80309E44 30475C 0028+00 1/1 0/0 0/0 .text
* readAnmColor__20J2DAnmFullLoader_v15FPC19J3DAnmColorFullData */
void J2DAnmFullLoader_v15::readAnmColor(J3DAnmColorFullData const* param_0) {
// NONMATCHING
}
/* 80309E44-80309F10 304784 00CC+00 2/2 0/0 0/0 .text
* setAnmColor__20J2DAnmFullLoader_v15FP15J2DAnmColorFullPC19J3DAnmColorFullData */
void J2DAnmFullLoader_v15::setAnmColor(J2DAnmColorFull* param_0,
J3DAnmColorFullData const* param_1) {
// NONMATCHING
}
/* 80309F10-80309F38 304850 0028+00 1/1 0/0 0/0 .text
* readAnmTexPattern__20J2DAnmFullLoader_v15FPC24J3DAnmTexPatternFullData */
void J2DAnmFullLoader_v15::readAnmTexPattern(J3DAnmTexPatternFullData const* param_0) {
// NONMATCHING
}
/* 80309F38-80309FDC 304878 00A4+00 2/2 0/0 0/0 .text
* setAnmTexPattern__20J2DAnmFullLoader_v15FP16J2DAnmTexPatternPC24J3DAnmTexPatternFullData */
void J2DAnmFullLoader_v15::setAnmTexPattern(J2DAnmTexPattern* param_0,
J3DAnmTexPatternFullData const* param_1) {
// NONMATCHING
}
/* 80309FDC-8030A004 30491C 0028+00 1/1 0/0 0/0 .text
* readAnmTevReg__19J2DAnmKeyLoader_v15FPC19J3DAnmTevRegKeyData */
void J2DAnmKeyLoader_v15::readAnmTevReg(J3DAnmTevRegKeyData const* param_0) {
// NONMATCHING
}
/* 8030A004-8030A190 304944 018C+00 2/2 0/0 0/0 .text
* setAnmTevReg__19J2DAnmKeyLoader_v15FP15J2DAnmTevRegKeyPC19J3DAnmTevRegKeyData */
void J2DAnmKeyLoader_v15::setAnmTevReg(J2DAnmTevRegKey* param_0,
J3DAnmTevRegKeyData const* param_1) {
// NONMATCHING
}
/* 8030A190-8030A1B8 304AD0 0028+00 1/1 0/0 0/0 .text
* readAnmVisibility__20J2DAnmFullLoader_v15FPC24J3DAnmVisibilityFullData */
void J2DAnmFullLoader_v15::readAnmVisibility(J3DAnmVisibilityFullData const* param_0) {
// NONMATCHING
}
/* 8030A1B8-8030A234 304AF8 007C+00 2/2 0/0 0/0 .text
* setAnmVisibility__20J2DAnmFullLoader_v15FP20J2DAnmVisibilityFullPC24J3DAnmVisibilityFullData */
void J2DAnmFullLoader_v15::setAnmVisibility(J2DAnmVisibilityFull* param_0,
J3DAnmVisibilityFullData const* param_1) {
// NONMATCHING
}
/* 8030A234-8030A25C 304B74 0028+00 1/1 0/0 0/0 .text
* readAnmVtxColor__20J2DAnmFullLoader_v15FPC22J3DAnmVtxColorFullData */
void J2DAnmFullLoader_v15::readAnmVtxColor(J3DAnmVtxColorFullData const* param_0) {
// NONMATCHING
}
/* 8030A25C-8030A358 304B9C 00FC+00 2/2 0/0 0/0 .text
* setAnmVtxColor__20J2DAnmFullLoader_v15FP18J2DAnmVtxColorFullPC22J3DAnmVtxColorFullData */
void J2DAnmFullLoader_v15::setAnmVtxColor(J2DAnmVtxColorFull* param_0,
J3DAnmVtxColorFullData const* param_1) {
// NONMATCHING
}
/* 8030A358-8030A3B4 304C98 005C+00 1/0 0/0 0/0 .text __dt__14J2DAnmVtxColorFv */
J2DAnmVtxColor::~J2DAnmVtxColor() {
// NONMATCHING
}
/* 8030A3B4-8030A410 304CF4 005C+00 1/0 0/0 0/0 .text __dt__20J2DAnmVisibilityFullFv */
J2DAnmVisibilityFull::~J2DAnmVisibilityFull() {
// NONMATCHING
}
/* 8030A410-8030A458 304D50 0048+00 1/0 0/0 0/0 .text __dt__12J2DAnmLoaderFv */
J2DAnmLoader::~J2DAnmLoader() {
// NONMATCHING
}
/* 8030A458-8030A470 304D98 0018+00 1/1 1/1 0/0 .text
* JSUConvertOffsetToPtr<25J3DAnmVisibilityFullTable>__FPCvPCv */
extern "C" void func_8030A458(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A470-8030A488 304DB0 0018+00 1/1 1/1 0/0 .text
* JSUConvertOffsetToPtr<18J3DAnmKRegKeyTable>__FPCvPCv */
extern "C" void func_8030A470(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A488-8030A4A0 304DC8 0018+00 1/1 1/1 0/0 .text
* JSUConvertOffsetToPtr<18J3DAnmCRegKeyTable>__FPCvPCv */
extern "C" void func_8030A488(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A4A0-8030A4B8 304DE0 0018+00 1/1 1/1 0/0 .text
* JSUConvertOffsetToPtr<25J3DAnmTexPatternFullTable>__FPCvPCv */
extern "C" void func_8030A4A0(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A4B8-8030A4D0 304DF8 0018+00 2/2 2/2 0/0 .text
* JSUConvertOffsetToPtr<20J3DAnmColorFullTable>__FPCvPCv */
extern "C" void func_8030A4B8(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A4D0-8030A4E8 304E10 0018+00 1/1 1/1 0/0 .text
* JSUConvertOffsetToPtr<24J3DAnmTransformFullTable>__FPCvPCv */
extern "C" void func_8030A4D0(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A4E8-8030A500 304E28 0018+00 2/2 2/2 0/0 .text
* JSUConvertOffsetToPtr<23J3DAnmVtxColorIndexData>__FPCvPCv */
extern "C" void func_8030A4E8(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A500-8030A518 304E40 0018+00 2/2 2/2 0/0 .text
* JSUConvertOffsetToPtr<19J3DAnmColorKeyTable>__FPCvPCv */
extern "C" void func_8030A500(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A518-8030A530 304E58 0018+00 1/1 1/1 0/0 .text JSUConvertOffsetToPtr<3Vec>__FPCvPCv */
extern "C" void func_8030A518(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A530-8030A548 304E70 0018+00 5/5 16/16 0/0 .text JSUConvertOffsetToPtr<7ResNTAB>__FPCvPCv
*/
extern "C" void func_8030A530(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A548-8030A560 304E88 0018+00 6/6 6/6 0/0 .text JSUConvertOffsetToPtr<s>__FPCvPCv
*/
extern "C" void func_8030A548(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A560-8030A578 304EA0 0018+00 3/3 7/7 0/0 .text JSUConvertOffsetToPtr<f>__FPCvPCv
*/
extern "C" void func_8030A560(void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8030A578-8030A590 304EB8 0018+00 2/2 2/2 0/0 .text
* JSUConvertOffsetToPtr<23J3DAnmTransformKeyTable>__FPCvPCv */
extern "C" void func_8030A578(void const* param_0, void const* param_1) {
// NONMATCHING
}
@@ -0,0 +1,550 @@
//
// Generated By: dol2asm
// Translation Unit: J2DAnmLoader
//
// this should match with -sym on and once J2DMaterialFactory is done
// JSUConvertOffsetToPtr<u16> needs to be emitted in J2DMaterialFactory before its used here
#include "JSystem/J2DGraph/J2DAnmLoader.h"
#include "JSystem/JSupport/JSupport.h"
//
// Types:
//
/* 80308A6C-80309290 3033AC 0824+00 0/0 26/26 2/2 .text load__20J2DAnmLoaderDataBaseFPCv
*/
J2DAnmBase* J2DAnmLoaderDataBase::load(void const* p_data) {
const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data;
if (hdr == NULL) {
return NULL;
} else if (hdr->mMagic == 'J3D1') {
switch (hdr->mType) {
case 'bck1': {
J2DAnmKeyLoader_v15 loader;
loader.mpResource = new J2DAnmTransformKey();
return (J2DAnmBase*)loader.load(p_data);
break;
}
case 'bpk1': {
J2DAnmKeyLoader_v15 loader;
loader.mpResource = new J2DAnmColorKey();
return (J2DAnmBase*)loader.load(p_data);
break;
}
case 'blk1':
return NULL;
case 'btk1': {
J2DAnmKeyLoader_v15 loader;
loader.mpResource = new J2DAnmTextureSRTKey();
return (J2DAnmBase*)loader.load(p_data);
break;
}
case 'brk1': {
J2DAnmKeyLoader_v15 loader;
loader.mpResource = new J2DAnmTevRegKey();
return (J2DAnmBase*)loader.load(p_data);
break;
}
case 'bxk1': {
J2DAnmKeyLoader_v15 loader;
loader.mpResource = new J2DAnmVtxColorKey();
return (J2DAnmBase*)loader.load(p_data);
break;
}
case 'bca1': {
J2DAnmFullLoader_v15 loader;
loader.mpResource = new J2DAnmTransformFull();
return (J2DAnmBase*)loader.load(p_data);
break;
}
case 'bpa1': {
J2DAnmFullLoader_v15 loader;
loader.mpResource = new J2DAnmColorFull();
return (J2DAnmBase*)loader.load(p_data);
break;
}
case 'btp1': {
J2DAnmFullLoader_v15 loader;
loader.mpResource = new J2DAnmTexPattern();
return (J2DAnmBase*)loader.load(p_data);
}
case 'bva1': {
J2DAnmFullLoader_v15 loader;
loader.mpResource = new J2DAnmVisibilityFull();
return (J2DAnmBase*)loader.load(p_data);
break;
}
case 'bla1':
return NULL;
case 'bxa1': {
J2DAnmFullLoader_v15 loader;
loader.mpResource = new J2DAnmVtxColorFull();
return (J2DAnmBase*)loader.load(p_data);
}
}
return NULL;
} else {
return NULL;
}
}
/* 80309290-803092AC 303BD0 001C+00 1/1 0/0 0/0 .text __ct__19J2DAnmKeyLoader_v15Fv */
J2DAnmKeyLoader_v15::J2DAnmKeyLoader_v15() {}
/* 803092AC-80309308 303BEC 005C+00 2/1 0/0 0/0 .text __dt__19J2DAnmKeyLoader_v15Fv */
J2DAnmKeyLoader_v15::~J2DAnmKeyLoader_v15() {}
/* 80309308-80309414 303C48 010C+00 2/1 0/0 0/0 .text load__19J2DAnmKeyLoader_v15FPCv */
void* J2DAnmKeyLoader_v15::load(void const* p_data) {
const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data;
const J3DAnmDataBlockHeader* dataPtr = &hdr->mFirst;
for (s32 i = 0; i < hdr->mCount; i++) {
switch (dataPtr->mType) {
case 'ANK1':
readAnmTransform((J3DAnmTransformKeyData*)dataPtr);
break;
case 'PAK1':
readAnmColor((J3DAnmColorKeyData*)dataPtr);
break;
case 'TTK1':
readAnmTextureSRT((J3DAnmTextureSRTKeyData*)dataPtr);
break;
case 'VCK1':
readAnmVtxColor((J3DAnmVtxColorKeyData*)dataPtr);
break;
case 'TRK1':
readAnmTevReg((J3DAnmTevRegKeyData*)dataPtr);
break;
}
dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
}
return mpResource;
}
/* 80309414-80309570 303D54 015C+00 1/0 0/0 0/0 .text
* setResource__19J2DAnmKeyLoader_v15FP10J2DAnmBasePCv */
void J2DAnmKeyLoader_v15::setResource(J2DAnmBase* p_anm, void const* p_data) {
const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data;
const J3DAnmDataBlockHeader* dataPtr = &hdr->mFirst;
for (s32 i = 0; i < hdr->mCount; i++) {
switch (dataPtr->mType) {
case 'ANK1':
if (p_anm->getKind() == KIND_TRANSFORM) {
setAnmTransform((J2DAnmTransformKey*)p_anm, (J3DAnmTransformKeyData*)dataPtr);
}
break;
case 'PAK1':
if (p_anm->getKind() == KIND_COLOR) {
setAnmColor((J2DAnmColorKey*)p_anm, (J3DAnmColorKeyData*)dataPtr);
}
break;
case 'TTK1':
if (p_anm->getKind() == KIND_TEXTURE_SRT) {
setAnmTextureSRT((J2DAnmTextureSRTKey*)p_anm,
(J3DAnmTextureSRTKeyData*)dataPtr);
}
break;
case 'TRK1':
if (p_anm->getKind() == KIND_TEV_REG) {
setAnmTevReg((J2DAnmTevRegKey*)p_anm, (J3DAnmTevRegKeyData*)dataPtr);
}
break;
case 'VCK1':
if (p_anm->getKind() == KIND_VTX_COLOR) {
setAnmVtxColor((J2DAnmVtxColorKey*)p_anm, (J3DAnmVtxColorKeyData*)dataPtr);
}
break;
}
dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
}
}
/* 80309570-80309598 303EB0 0028+00 1/1 0/0 0/0 .text
* readAnmTransform__19J2DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData */
void J2DAnmKeyLoader_v15::readAnmTransform(J3DAnmTransformKeyData const* p_data) {
setAnmTransform((J2DAnmTransformKey*)mpResource, p_data);
}
/* 80309598-80309634 303ED8 009C+00 2/2 0/0 0/0 .text
* setAnmTransform__19J2DAnmKeyLoader_v15FP18J2DAnmTransformKeyPC22J3DAnmTransformKeyData */
void J2DAnmKeyLoader_v15::setAnmTransform(J2DAnmTransformKey* p_anm,
J3DAnmTransformKeyData const* p_data) {
p_anm->field_0x22 = p_data->field_0xc;
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->field_0x24 = p_data->field_0x9;
p_anm->mFrame = 0;
p_anm->mInfoTable =
JSUConvertOffsetToPtr<J3DAnmTransformKeyTable>(p_data, (void*)p_data->mTableOffset);
p_anm->mScaleValues = JSUConvertOffsetToPtr<f32>(p_data, (void*)p_data->field_0x18);
p_anm->mRotationValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->field_0x1c);
p_anm->mTranslateValues =
JSUConvertOffsetToPtr<f32>(p_data, (void*)p_data->field_0x20);
}
/* 80309634-8030965C 303F74 0028+00 1/1 0/0 0/0 .text
* readAnmTextureSRT__19J2DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData */
void J2DAnmKeyLoader_v15::readAnmTextureSRT(J3DAnmTextureSRTKeyData const* p_data) {
setAnmTextureSRT((J2DAnmTextureSRTKey*)mpResource, p_data);
}
/* 8030965C-80309848 303F9C 01EC+00 2/2 0/0 0/0 .text
* setAnmTextureSRT__19J2DAnmKeyLoader_v15FP19J2DAnmTextureSRTKeyPC23J3DAnmTextureSRTKeyData */
void J2DAnmKeyLoader_v15::setAnmTextureSRT(J2DAnmTextureSRTKey* p_anm,
J3DAnmTextureSRTKeyData const* p_data) {
p_anm->mUpdateMaterialNum = p_data->field_0xc;
p_anm->mFrameMax = p_data->field_0xa;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->field_0x10 = p_data->field_0x9;
p_anm->mFrame = 0;
p_anm->mUpdateMaterialNum = p_data->field_0xc;
p_anm->field_0x1a = p_data->field_0xe;
p_anm->field_0x1c = p_data->field_0x10;
p_anm->field_0x1e = p_data->field_0x12;
p_anm->mInfoTable =
JSUConvertOffsetToPtr<J3DAnmTransformKeyTable>(p_data, (void*)p_data->mTableOffset);
p_anm->mUpdateMaterialID = JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mUpdateMatIDOffset);
p_anm->field_0x34.setResource(
JSUConvertOffsetToPtr<ResNTAB>(p_data, (void*)p_data->mNameTab1Offset));
p_anm->mUpdateTexMtxID = JSUConvertOffsetToPtr<u8>(p_data, p_data->mUpdateTexMtxIDOffset);
p_anm->field_0x44 = JSUConvertOffsetToPtr<Vec>(p_data, (void*)p_data->unkOffset);
p_anm->mScaleValues = JSUConvertOffsetToPtr<f32>(p_data, (void*)p_data->mScaleValOffset);
p_anm->mRotationValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mRotValOffset);
p_anm->mTranslationValues = JSUConvertOffsetToPtr<f32>(p_data, (void*)p_data->mTransValOffset);
if (p_data->mNameTab2Offset != 0) {
p_anm->field_0x68.setResource(
JSUConvertOffsetToPtr<ResNTAB>(p_data, (void*)p_data->mNameTab2Offset));
}
p_anm->field_0x4e = p_data->field_0x34;
p_anm->field_0x48 = p_data->field_0x36;
p_anm->field_0x4a = p_data->field_0x38;
p_anm->field_0x4c = p_data->field_0x3a;
p_anm->field_0x5c =
JSUConvertOffsetToPtr<J3DAnmTransformKeyTable>(p_data, (void*)p_data->mInfoTable2Offset);
p_anm->field_0x64 = JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->field_0x40);
p_anm->field_0x60 = JSUConvertOffsetToPtr<u8>(p_data, p_data->field_0x48);
p_anm->field_0x78 = JSUConvertOffsetToPtr<Vec>(p_data, (void*)p_data->field_0x4c);
p_anm->field_0x50 = JSUConvertOffsetToPtr<f32>(p_data, (void*)p_data->field_0x50);
p_anm->field_0x54 = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->field_0x54);
p_anm->field_0x58 = JSUConvertOffsetToPtr<f32>(p_data, (void*)p_data->field_0x58);
switch (p_data->field_0x5c) {
case 0:
p_anm->field_0x7c = 0;
break;
case 1:
p_anm->field_0x7c = 1;
break;
default:
p_anm->field_0x7c = 0;
break;
}
}
/* 80309848-80309870 304188 0028+00 1/1 0/0 0/0 .text
* readAnmColor__19J2DAnmKeyLoader_v15FPC18J3DAnmColorKeyData */
void J2DAnmKeyLoader_v15::readAnmColor(J3DAnmColorKeyData const* p_data) {
setAnmColor((J2DAnmColorKey*)mpResource, p_data);
}
/* 80309870-8030995C 3041B0 00EC+00 2/2 0/0 0/0 .text
* setAnmColor__19J2DAnmKeyLoader_v15FP14J2DAnmColorKeyPC18J3DAnmColorKeyData */
void J2DAnmKeyLoader_v15::setAnmColor(J2DAnmColorKey* p_anm, J3DAnmColorKeyData const* p_data) {
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->mFrame = 0;
p_anm->mUpdateMaterialNum = p_data->mUpdateMaterialNum;
p_anm->field_0x10 = p_data->field_0x10;
p_anm->field_0x12 = p_data->field_0x12;
p_anm->field_0x14 = p_data->field_0x14;
p_anm->field_0x16 = p_data->field_0x16;
p_anm->mInfoTable =
JSUConvertOffsetToPtr<J3DAnmColorKeyTable>(p_data, (void*)p_data->mTableOffset);
p_anm->mRValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mRValOffset);
p_anm->mGValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mGValOffset);
p_anm->mBValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mBValOffset);
p_anm->mAValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mAValOffset);
p_anm->mUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mUpdateMaterialIDOffset);
p_anm->field_0x20.setResource(
JSUConvertOffsetToPtr<ResNTAB>(p_data, (void*)p_data->mNameTabOffset));
}
/* 8030995C-80309984 30429C 0028+00 1/1 0/0 0/0 .text
* readAnmVtxColor__19J2DAnmKeyLoader_v15FPC21J3DAnmVtxColorKeyData */
void J2DAnmKeyLoader_v15::readAnmVtxColor(J3DAnmVtxColorKeyData const* p_data) {
setAnmVtxColor((J2DAnmVtxColorKey*)mpResource, p_data);
}
/* 80309984-80309A80 3042C4 00FC+00 2/2 0/0 0/0 .text
* setAnmVtxColor__19J2DAnmKeyLoader_v15FP17J2DAnmVtxColorKeyPC21J3DAnmVtxColorKeyData */
void J2DAnmKeyLoader_v15::setAnmVtxColor(J2DAnmVtxColorKey* p_anm,
J3DAnmVtxColorKeyData const* p_data) {
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->mFrame = 0;
p_anm->mAnmTableNum[0] = p_data->mAnmTableNum[0];
p_anm->mAnmTableNum[1] = p_data->mAnmTableNum[1];
p_anm->mInfoTable[0] =
JSUConvertOffsetToPtr<J3DAnmColorKeyTable>(p_data, (void*)p_data->mTableOffsets[0]);
p_anm->mInfoTable[1] =
JSUConvertOffsetToPtr<J3DAnmColorKeyTable>(p_data, (void*)p_data->mTableOffsets[1]);
p_anm->mVtxColorIndexData[0] = JSUConvertOffsetToPtr<J3DAnmVtxColorIndexData>(
p_data, (void*)p_data->mVtxColoIndexDataOffset[0]);
p_anm->mVtxColorIndexData[1] = JSUConvertOffsetToPtr<J3DAnmVtxColorIndexData>(
p_data, (void*)p_data->mVtxColoIndexDataOffset[1]);
p_anm->mVtxColorIndexPointer[0] =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mVtxColoIndexPointerOffset[0]);
p_anm->mVtxColorIndexPointer[1] =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mVtxColoIndexPointerOffset[1]);
p_anm->mRValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mRValOffset);
p_anm->mGValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mGValOffset);
p_anm->mBValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mBValOffset);
p_anm->mAValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mAValOffset);
}
/* 80309A80-80309B8C 3043C0 010C+00 2/1 0/0 0/0 .text load__20J2DAnmFullLoader_v15FPCv */
void* J2DAnmFullLoader_v15::load(void const* p_data) {
const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data;
const J3DAnmDataBlockHeader* dataPtr = &hdr->mFirst;
for (s32 i = 0; i < hdr->mCount; i++) {
switch (dataPtr->mType) {
case 'ANF1':
readAnmTransform((J3DAnmTransformFullData*)dataPtr);
break;
case 'PAF1':
readAnmColor((J3DAnmColorFullData*)dataPtr);
break;
case 'TPT1':
readAnmTexPattern((J3DAnmTexPatternFullData*)dataPtr);
break;
case 'VAF1':
readAnmVisibility((J3DAnmVisibilityFullData*)dataPtr);
break;
case 'VCF1':
readAnmVtxColor((J3DAnmVtxColorFullData*)dataPtr);
break;
}
dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
}
return mpResource;
}
/* 80309B8C-80309CE8 3044CC 015C+00 1/0 0/0 0/0 .text
* setResource__20J2DAnmFullLoader_v15FP10J2DAnmBasePCv */
void J2DAnmFullLoader_v15::setResource(J2DAnmBase* p_anm, void const* p_data) {
const J3DAnmDataHeader* hdr = (const J3DAnmDataHeader*)p_data;
const J3DAnmDataBlockHeader* dataPtr = &hdr->mFirst;
for (s32 i = 0; i < hdr->mCount; i++) {
switch (dataPtr->mType) {
case 'ANF1':
if (p_anm->getKind() == KIND_TRANSFORM)
setAnmTransform((J2DAnmTransformFull*)p_anm,
(J3DAnmTransformFullData*)dataPtr);
break;
case 'PAF1':
if (p_anm->getKind() == KIND_COLOR)
setAnmColor((J2DAnmColorFull*)p_anm, (J3DAnmColorFullData*)dataPtr);
break;
case 'TPT1':
if (p_anm->getKind() == KIND_TEX_PATTERN)
setAnmTexPattern((J2DAnmTexPattern*)p_anm, (J3DAnmTexPatternFullData*)dataPtr);
break;
case 'VAF1':
if (p_anm->getKind() == KIND_VISIBILITY)
setAnmVisibility((J2DAnmVisibilityFull*)p_anm,
(J3DAnmVisibilityFullData*)dataPtr);
break;
case 'VCF1':
if (p_anm->getKind() == KIND_VTX_COLOR)
setAnmVtxColor((J2DAnmVtxColorFull*)p_anm, (J3DAnmVtxColorFullData*)dataPtr);
break;
}
dataPtr = (J3DAnmDataBlockHeader*)((s32)dataPtr + dataPtr->mNextOffset);
}
}
/* 80309CE8-80309D04 304628 001C+00 1/1 0/0 0/0 .text __ct__20J2DAnmFullLoader_v15Fv */
J2DAnmFullLoader_v15::J2DAnmFullLoader_v15() {}
/* 80309D04-80309D60 304644 005C+00 2/1 0/0 0/0 .text __dt__20J2DAnmFullLoader_v15Fv */
J2DAnmFullLoader_v15::~J2DAnmFullLoader_v15() {}
/* 80309D60-80309D88 3046A0 0028+00 1/1 0/0 0/0 .text
* readAnmTransform__20J2DAnmFullLoader_v15FPC23J3DAnmTransformFullData */
void J2DAnmFullLoader_v15::readAnmTransform(J3DAnmTransformFullData const* p_data) {
setAnmTransform((J2DAnmTransformFull*)mpResource, p_data);
}
/* 80309D88-80309E1C 3046C8 0094+00 2/2 0/0 0/0 .text
* setAnmTransform__20J2DAnmFullLoader_v15FP19J2DAnmTransformFullPC23J3DAnmTransformFullData */
void J2DAnmFullLoader_v15::setAnmTransform(J2DAnmTransformFull* p_anm,
J3DAnmTransformFullData const* p_data) {
p_anm->field_0x22 = p_data->field_0xc;
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->mFrame = 0;
p_anm->mTableInfo =
JSUConvertOffsetToPtr<J3DAnmTransformFullTable>(p_data, (void*)p_data->mTableOffset);
p_anm->mScaleValues = JSUConvertOffsetToPtr<f32>(p_data, (void*)p_data->mScaleValOffset);
p_anm->mRotationValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mRotValOffset);
p_anm->mTranslateValues = JSUConvertOffsetToPtr<f32>(p_data, (void*)p_data->mTransValOffset);
}
/* 80309E1C-80309E44 30475C 0028+00 1/1 0/0 0/0 .text
* readAnmColor__20J2DAnmFullLoader_v15FPC19J3DAnmColorFullData */
void J2DAnmFullLoader_v15::readAnmColor(J3DAnmColorFullData const* p_data) {
setAnmColor((J2DAnmColorFull*)mpResource, p_data);
}
/* 80309E44-80309F10 304784 00CC+00 2/2 0/0 0/0 .text
* setAnmColor__20J2DAnmFullLoader_v15FP15J2DAnmColorFullPC19J3DAnmColorFullData */
void J2DAnmFullLoader_v15::setAnmColor(J2DAnmColorFull* p_anm, J3DAnmColorFullData const* p_data) {
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->mFrame = 0;
p_anm->mUpdateMaterialNum = p_data->mUpdateMaterialNum;
p_anm->mInfoTable =
JSUConvertOffsetToPtr<J3DAnmColorFullTable>(p_data, (void*)p_data->mTableOffset);
p_anm->mRValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mRValuesOffset);
p_anm->mGValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mGValuesOffset);
p_anm->mBValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mBValuesOffset);
p_anm->mAValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mAValuesOffset);
p_anm->mUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mUpdateMaterialIDOffset);
p_anm->field_0x20.setResource(
JSUConvertOffsetToPtr<ResNTAB>(p_data, (void*)p_data->mNameTabOffset));
}
/* 80309F10-80309F38 304850 0028+00 1/1 0/0 0/0 .text
* readAnmTexPattern__20J2DAnmFullLoader_v15FPC24J3DAnmTexPatternFullData */
void J2DAnmFullLoader_v15::readAnmTexPattern(J3DAnmTexPatternFullData const* p_data) {
setAnmTexPattern((J2DAnmTexPattern*)mpResource, p_data);
}
/* 80309F38-80309FDC 304878 00A4+00 2/2 0/0 0/0 .text
* setAnmTexPattern__20J2DAnmFullLoader_v15FP16J2DAnmTexPatternPC24J3DAnmTexPatternFullData */
void J2DAnmFullLoader_v15::setAnmTexPattern(J2DAnmTexPattern* p_anm,
J3DAnmTexPatternFullData const* p_data) {
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->mFrame = 0;
p_anm->mUpdateMaterialNum = p_data->field_0xc;
p_anm->field_0x18 = p_data->field_0xe;
p_anm->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmTexPatternFullTable>(p_data, (void*)p_data->mTableOffset);
p_anm->mValues = JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mValuesOffset);
p_anm->mUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mUpdateMaterialIDOffset);
p_anm->field_0x20.setResource(
JSUConvertOffsetToPtr<ResNTAB>(p_data, (void*)p_data->mNameTabOffset));
}
/* 80309FDC-8030A004 30491C 0028+00 1/1 0/0 0/0 .text
* readAnmTevReg__19J2DAnmKeyLoader_v15FPC19J3DAnmTevRegKeyData */
void J2DAnmKeyLoader_v15::readAnmTevReg(J3DAnmTevRegKeyData const* p_data) {
setAnmTevReg((J2DAnmTevRegKey*)mpResource, p_data);
}
/* 8030A004-8030A190 304944 018C+00 2/2 0/0 0/0 .text
* setAnmTevReg__19J2DAnmKeyLoader_v15FP15J2DAnmTevRegKeyPC19J3DAnmTevRegKeyData */
void J2DAnmKeyLoader_v15::setAnmTevReg(J2DAnmTevRegKey* p_anm, J3DAnmTevRegKeyData const* p_data) {
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->mFrame = 0;
p_anm->mCRegUpdateMaterialNum = p_data->mCRegUpdateMaterialNum;
p_anm->mAnmCRegKeyTable =
JSUConvertOffsetToPtr<J3DAnmCRegKeyTable>(p_data, (void*)p_data->mCRegTableOffset);
p_anm->mCRegUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mCRegUpdateMaterialIDOffset);
p_anm->mCRegNameTab.setResource(
JSUConvertOffsetToPtr<ResNTAB>(p_data, (void*)p_data->mCRegNameTabOffset));
p_anm->mKRegUpdateMaterialNum = p_data->mKRegUpdateMaterialNum;
p_anm->mAnmKRegKeyTable =
JSUConvertOffsetToPtr<J3DAnmKRegKeyTable>(p_data, (void*)p_data->mKRegTableOffset);
p_anm->mKRegUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mKRegUpdateMaterialIDOffset);
p_anm->mKRegNameTab.setResource(
JSUConvertOffsetToPtr<ResNTAB>(p_data, (void*)p_data->mKRegNameTabOffset));
p_anm->field_0x14 = p_data->field_0x10;
p_anm->field_0x16 = p_data->field_0x12;
p_anm->field_0x18 = p_data->field_0x14;
p_anm->field_0x1a = p_data->field_0x16;
p_anm->mCRValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mCRValuesOffset);
p_anm->mCGValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mCGValuesOffset);
p_anm->mCBValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mCBValuesOffset);
p_anm->mCAValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mCAValuesOffset);
p_anm->field_0x1c = p_data->field_0x18;
p_anm->field_0x1e = p_data->field_0x1a;
p_anm->field_0x20 = p_data->field_0x1c;
p_anm->field_0x22 = p_data->field_0x1e;
p_anm->mKRValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mKRValuesOffset);
p_anm->mKGValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mKGValuesOffset);
p_anm->mKBValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mKBValuesOffset);
p_anm->mKAValues = JSUConvertOffsetToPtr<s16>(p_data, (void*)p_data->mKAValuesOffset);
}
/* 8030A190-8030A1B8 304AD0 0028+00 1/1 0/0 0/0 .text
* readAnmVisibility__20J2DAnmFullLoader_v15FPC24J3DAnmVisibilityFullData */
void J2DAnmFullLoader_v15::readAnmVisibility(J3DAnmVisibilityFullData const* p_data) {
setAnmVisibility((J2DAnmVisibilityFull*)mpResource, p_data);
}
/* 8030A1B8-8030A234 304AF8 007C+00 2/2 0/0 0/0 .text
* setAnmVisibility__20J2DAnmFullLoader_v15FP20J2DAnmVisibilityFullPC24J3DAnmVisibilityFullData */
void J2DAnmFullLoader_v15::setAnmVisibility(J2DAnmVisibilityFull* p_anm,
J3DAnmVisibilityFullData const* p_data) {
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->mFrame = 0;
p_anm->field_0x10 = p_data->field_0xc;
p_anm->field_0x12 = p_data->field_0xe;
p_anm->mTable =
JSUConvertOffsetToPtr<J3DAnmVisibilityFullTable>(p_data, (void*)p_data->mTableOffset);
p_anm->mValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mValuesOffset);
}
/* 8030A234-8030A25C 304B74 0028+00 1/1 0/0 0/0 .text
* readAnmVtxColor__20J2DAnmFullLoader_v15FPC22J3DAnmVtxColorFullData */
void J2DAnmFullLoader_v15::readAnmVtxColor(J3DAnmVtxColorFullData const* p_data) {
setAnmVtxColor((J2DAnmVtxColorFull*)mpResource, p_data);
}
/* 8030A25C-8030A358 304B9C 00FC+00 2/2 0/0 0/0 .text
* setAnmVtxColor__20J2DAnmFullLoader_v15FP18J2DAnmVtxColorFullPC22J3DAnmVtxColorFullData */
void J2DAnmFullLoader_v15::setAnmVtxColor(J2DAnmVtxColorFull* p_anm,
J3DAnmVtxColorFullData const* p_data) {
p_anm->mFrameMax = p_data->mFrameMax;
p_anm->field_0x4 = p_data->field_0x8;
p_anm->mFrame = 0;
p_anm->mAnmTableNum[0] = p_data->mAnmTableNum[0];
p_anm->mAnmTableNum[1] = p_data->mAnmTableNum[1];
p_anm->mInfoTable[0] =
JSUConvertOffsetToPtr<J3DAnmColorFullTable>(p_data, (void*)p_data->mTableOffsets[0]);
p_anm->mInfoTable[1] =
JSUConvertOffsetToPtr<J3DAnmColorFullTable>(p_data, (void*)p_data->mTableOffsets[1]);
p_anm->mVtxColorIndexData[0] = JSUConvertOffsetToPtr<J3DAnmVtxColorIndexData>(
p_data, (void*)p_data->mVtxColorIndexDataOffsets[0]);
p_anm->mVtxColorIndexData[1] = JSUConvertOffsetToPtr<J3DAnmVtxColorIndexData>(
p_data, (void*)p_data->mVtxColorIndexDataOffsets[1]);
p_anm->mVtxColorIndexPointer[0] =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mVtxColorIndexPointerOffsets[0]);
p_anm->mVtxColorIndexPointer[1] =
JSUConvertOffsetToPtr<u16>(p_data, (void*)p_data->mVtxColorIndexPointerOffsets[1]);
p_anm->mRValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mRValuesOffset);
p_anm->mGValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mGValuesOffset);
p_anm->mBValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mBValuesOffset);
p_anm->mAValues = JSUConvertOffsetToPtr<u8>(p_data, p_data->mAValuesOffset);
}
/* 8030A358-8030A3B4 304C98 005C+00 1/0 0/0 0/0 .text __dt__14J2DAnmVtxColorFv */
// J2DAnmVtxColor::~J2DAnmVtxColor() {}
/* 8030A3B4-8030A410 304CF4 005C+00 1/0 0/0 0/0 .text __dt__20J2DAnmVisibilityFullFv */
// J2DAnmVisibilityFull::~J2DAnmVisibilityFull() {}
+205
View File
@@ -0,0 +1,205 @@
#include "JSystem/J2DGraph/J2DGrafContext.h"
#include "dolphin/gx.h"
/* 802E8B08-802E8BB4 2E3448 00AC+00 0/0 2/2 0/0 .text __ct__14J2DGrafContextFffff */
J2DGrafContext::J2DGrafContext(f32 x, f32 y, f32 width, f32 height)
: mBounds(x, y, x + width, y + height), mScissorBounds(x, y, x + width, y + height) {
JUtility::TColor color(-1);
setColor(color);
setLineWidth(6);
}
/* 802E8BB4-802E8C44 2E34F4 0090+00 1/0 1/1 0/0 .text setPort__14J2DGrafContextFv */
void J2DGrafContext::setPort() {
setScissor();
setup2D();
JGeometry::TBox2<float> bounds(mBounds);
if (bounds.i.x < 0.0f) {
bounds.i.x = 0.0f;
}
if (bounds.i.y < 0.0f) {
bounds.i.y = 0.0f;
}
GXSetViewport(bounds.i.x, bounds.i.y, bounds.getWidth(), bounds.getHeight(), 0.0f, 1.0f);
}
/* 802E8C44-802E8E20 2E3584 01DC+00 1/0 1/0 0/0 .text setup2D__14J2DGrafContextFv */
void J2DGrafContext::setup2D() {
GXSetNumIndStages(0);
for (int i = 0; i < GX_MAX_TEVSTAGE; i++) {
GXSetTevDirect((GXTevStageID)i);
}
GXSetZCompLoc(GX_FALSE);
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE);
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GXSetNumChans(1);
GXSetNumTevStages(1);
GXSetNumTexGens(0);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetCullMode(GX_CULL_NONE);
GXLoadPosMtxImm(mPosMtx, 0);
Mtx mtx;
MTXIdentity(mtx);
GXLoadTexMtxImm(mtx, GX_IDENTITY, GX_MTX3x4);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
GX_AF_NONE);
GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_NONE,
GX_AF_NONE);
GXSetCurrentMtx(0);
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBX8, 0xf);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBX8, 0xf);
GXSetLineWidth(mLineWidth, GX_TO_ZERO);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_NONE);
}
/* 802E8E20-802E90C0 2E3760 02A0+00 1/0 2/1 0/0 .text setScissor__14J2DGrafContextFv */
void J2DGrafContext::setScissor() {
JGeometry::TBox2<f32> bounds(0, 0, 1024, 1024);
JGeometry::TBox2<f32> curBounds(mScissorBounds);
mScissorBounds.intersect(bounds);
curBounds.absolute();
if (curBounds.intersect(bounds)) {
curBounds.i.x = (u32)curBounds.i.x;
curBounds.i.y = (u32)curBounds.i.y;
curBounds.f.x = ceil(curBounds.f.x);
curBounds.f.y = ceil(curBounds.f.y);
GXSetScissor(curBounds.i.x, curBounds.i.y, curBounds.getWidth(), curBounds.getHeight());
} else {
GXSetScissor(0, 0, 0, 0);
}
}
/* 802E90C0-802E90E4 2E3A00 0024+00 0/0 10/10 0/0 .text
* scissor__14J2DGrafContextFRCQ29JGeometry8TBox2<f> */
void J2DGrafContext::scissor(JGeometry::TBox2<f32> const& bounds) {
mScissorBounds = bounds;
}
/* 802E90E4-802E9118 2E3A24 0034+00 1/0 1/0 0/0 .text
* place__14J2DGrafContextFRCQ29JGeometry8TBox2<f> */
void J2DGrafContext::place(JGeometry::TBox2<f32> const& bounds) {
mBounds = bounds;
mScissorBounds = bounds;
}
/* 802E9118-802E9234 2E3A58 011C+00 1/1 4/4 0/0 .text
* setColor__14J2DGrafContextFQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColor
*/
void J2DGrafContext::setColor(JUtility::TColor colorTL, JUtility::TColor colorTR,
JUtility::TColor colorBR, JUtility::TColor colorBL) {
mColorTL = colorTL;
mColorTR = colorTR;
mColorBR = colorBR;
mColorBL = colorBL;
field_0xb0.mType = GX_BM_BLEND;
field_0xb0.mSrcFactor = GX_BL_SRC_ALPHA;
field_0xb0.mDstFactor = GX_BL_INV_SRC_ALPHA;
mLinePart.mType = GX_BM_BLEND;
mLinePart.mSrcFactor = GX_BL_SRC_ALPHA;
mLinePart.mDstFactor = GX_BL_INV_SRC_ALPHA;
mBoxPart.mType = GX_BM_BLEND;
mBoxPart.mSrcFactor = GX_BL_SRC_ALPHA;
mBoxPart.mDstFactor = GX_BL_INV_SRC_ALPHA;
if ((mColorTL & 0xFF) != 0xFF) {
return;
}
field_0xb0.mType = GX_BM_NONE;
field_0xb0.mSrcFactor = GX_BL_ONE;
field_0xb0.mDstFactor = GX_BL_ZERO;
if ((mColorBR & 0xFF) != 0xFF) {
return;
}
mLinePart.mType = GX_BM_NONE;
mLinePart.mSrcFactor = GX_BL_ONE;
mLinePart.mDstFactor = GX_BL_ZERO;
if ((mColorTR & 0xFF) != 0xFF) {
return;
}
if ((mColorBL & 0xFF) != 0xFF) {
return;
}
mBoxPart.mType = GX_BM_NONE;
mBoxPart.mSrcFactor = GX_BL_ONE;
mBoxPart.mDstFactor = GX_BL_ZERO;
}
/* 802E9234-802E9260 2E3B74 002C+00 1/1 2/2 0/0 .text setLineWidth__14J2DGrafContextFUc
*/
void J2DGrafContext::setLineWidth(u8 lineWidth) {
mLineWidth = lineWidth;
GXSetLineWidth(mLineWidth, GX_TO_ZERO);
}
/* 802E9260-802E9368 2E3BA0 0108+00 0/0 2/2 0/0 .text
* fillBox__14J2DGrafContextFRCQ29JGeometry8TBox2<f> */
void J2DGrafContext::fillBox(JGeometry::TBox2<f32> const& box) {
GXSetBlendMode((GXBlendMode)mBoxPart.mType, (GXBlendFactor)mBoxPart.mSrcFactor,
(GXBlendFactor)mBoxPart.mDstFactor, GX_LO_SET);
GXLoadPosMtxImm(mPosMtx, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(box.i.x, box.i.y, 0);
GXColor1u32(mColorTL);
GXPosition3f32(box.f.x, box.i.y, 0);
GXColor1u32(mColorTR);
GXPosition3f32(box.f.x, box.f.y, 0);
GXColor1u32(mColorBL);
GXPosition3f32(box.i.x, box.f.y, 0);
GXColor1u32(mColorBR);
GXEnd();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0);
}
/* 802E9368-802E9488 2E3CA8 0120+00 0/0 1/1 0/0 .text
* drawFrame__14J2DGrafContextFRCQ29JGeometry8TBox2<f> */
void J2DGrafContext::drawFrame(JGeometry::TBox2<f32> const& box) {
GXSetBlendMode((GXBlendMode)mBoxPart.mType, (GXBlendFactor)mBoxPart.mSrcFactor,
(GXBlendFactor)mBoxPart.mDstFactor, GX_LO_SET);
GXLoadPosMtxImm(mPosMtx, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXBegin(GX_LINESTRIP, GX_VTXFMT0, 5);
GXPosition3f32(box.i.x, box.i.y, 0);
GXColor1u32(mColorTL);
GXPosition3f32(box.f.x, box.i.y, 0);
GXColor1u32(mColorTR);
GXPosition3f32(box.f.x, box.f.y, 0);
GXColor1u32(mColorBL);
GXPosition3f32(box.i.x, box.f.y, 0);
GXColor1u32(mColorBR);
GXPosition3f32(box.i.x, box.i.y, 0);
GXColor1u32(mColorTL);
GXEnd();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0);
}
/* 802E9488-802E9564 2E3DC8 00DC+00 1/1 0/0 0/0 .text
* line__14J2DGrafContextFQ29JGeometry8TVec2<f>Q29JGeometry8TVec2<f> */
void J2DGrafContext::line(JGeometry::TVec2<f32> start, JGeometry::TVec2<f32> end) {
GXSetBlendMode((GXBlendMode)mLinePart.mType, (GXBlendFactor)mLinePart.mSrcFactor,
(GXBlendFactor)mLinePart.mDstFactor, GX_LO_SET);
GXLoadPosMtxImm(mPosMtx, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0);
GXBegin(GX_LINES, GX_VTXFMT0, 2);
GXPosition3f32(start.x, start.y, 0);
GXColor1u32(mColorTL);
GXPosition3f32(end.x, end.y, 0);
GXColor1u32(mColorBR);
GXEnd();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0);
}
/* 802E9564-802E95D4 2E3EA4 0070+00 0/0 1/1 0/0 .text
* lineTo__14J2DGrafContextFQ29JGeometry8TVec2<f> */
void J2DGrafContext::lineTo(JGeometry::TVec2<f32> pos) {
this->line(mPrevPos, pos);
mPrevPos = pos;
}
+80
View File
@@ -0,0 +1,80 @@
#include "JSystem/J2DGraph/J2DManage.h"
#include "JSystem/JSupport/JSUInputStream.h"
#include "string.h"
/* 8030CE18-8030CE7C 307758 0064+00 1/1 3/3 0/0 .text get__13J2DDataManageFPCc */
void* J2DDataManage::get(char const* name) {
for (J2DataManageLink* link = mList; link != NULL; link = link->mNext) {
if (strcmp(link->mName, name) == 0) {
return link->mData;
}
}
return NULL;
}
/* 8030CE7C-8030CF10 3077BC 0094+00 0/0 1/1 0/0 .text get__13J2DDataManageFP14JSUInputStream */
void* J2DDataManage::get(JSUInputStream* inputStream) {
inputStream->skip(1);
u8 nameLen = inputStream->readU8();
if (nameLen == 0) {
return NULL;
} else {
char nameBuffer[257];
inputStream->read(&nameBuffer, nameLen);
nameBuffer[nameLen] = 0;
return this->get(nameBuffer);
}
}
/* 8030CF10-8030CF44 307850 0034+00 1/1 2/2 0/0 .text getResReference__15J2DResReferenceCFUs */
s8* J2DResReference::getResReference(u16 idx) const {
if (mCount <= idx || idx == 0xFFFF) {
return NULL;
} else {
return (((s8*)this) + mOffsets[idx]);
}
}
/* 8030CF44-8030D098 307884 0154+00 0/0 2/2 0/0 .text getName__15J2DResReferenceCFUs */
char* J2DResReference::getName(u16 idx) const {
static char p_name[257];
s8* resRef = this->getResReference(idx);
if (resRef == NULL) {
p_name[0] = 0;
return p_name;
} else {
s8 first = resRef[0];
switch (first) {
case 2:
case 3:
for (s32 i = 0; i < resRef[1]; i++) {
p_name[i] = resRef[2 + i];
}
p_name[resRef[1]] = 0;
break;
case 4:
s32 pos = resRef[1] + 1;
for (; pos >= 2; pos--) {
if (resRef[pos] == '\\' || resRef[pos] == '/') {
break;
}
}
s32 i = 0;
pos++;
for (; pos < resRef[1] + 2; i++, pos++) {
p_name[i] = resRef[pos];
}
p_name[i] = 0;
break;
default:
p_name[0] = 0;
}
return p_name;
}
}
File diff suppressed because it is too large Load Diff
+541
View File
@@ -0,0 +1,541 @@
//
// Generated By: dol2asm
// Translation Unit: J2DMaterial
//
#include "JSystem/J2DGraph/J2DMaterial.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void __ct__11J2DMaterialFv();
extern "C" void __dt__11J2DMaterialFv();
extern "C" void setGX__11J2DMaterialFv();
extern "C" void createTevBlock__11J2DMaterialFib();
extern "C" void createIndBlock__11J2DMaterialFib();
extern "C" void __ct__Q211J2DMaterial21J2DMaterialAnmPointerFv();
extern "C" void makeAnmPointer__11J2DMaterialFv();
extern "C" void setAnimation__11J2DMaterialFP11J2DAnmColor();
extern "C" void setAnimation__11J2DMaterialFP19J2DAnmTextureSRTKey();
extern "C" void setAnimation__11J2DMaterialFP16J2DAnmTexPattern();
extern "C" void setAnimation__11J2DMaterialFP15J2DAnmTevRegKey();
extern "C" void animation__11J2DMaterialFv();
extern "C" void __dt__13J2DColorBlockFv();
extern "C" void __dt__11J2DIndBlockFv();
extern "C" void __dt__11J2DTevBlockFv();
extern "C" void setGX__11J2DIndBlockFv();
extern "C" void setGX__11J2DTevBlockFv();
extern "C" void setTevKColor__11J2DTevBlockFUlQ28JUtility6TColor();
extern "C" void setTevColor__11J2DTevBlockFUl13J2DGXColorS10();
extern "C" void setTexNo__11J2DTevBlockFUlUs();
extern "C" void setGX__15J2DIndBlockNullFv();
extern "C" void getType__15J2DIndBlockNullFv();
extern "C" void __dt__15J2DIndBlockNullFv();
extern "C" void initialize__11J2DIndBlockFv();
extern "C" void setIndTexStageNum__11J2DIndBlockFUc();
extern "C" void setIndTexOrder__11J2DIndBlockFUl14J2DIndTexOrder();
extern "C" void setIndTexMtx__11J2DIndBlockFUl12J2DIndTexMtx();
extern "C" void setIndTexCoordScale__11J2DIndBlockFUl19J2DIndTexCoordScale();
extern "C" void __ct__11J2DTexCoordFv();
extern "C" void __ct__12J2DColorChanFv();
extern "C" void __dt__19J2DIndTexCoordScaleFv();
extern "C" void __ct__19J2DIndTexCoordScaleFv();
extern "C" void __dt__12J2DIndTexMtxFv();
extern "C" void __ct__12J2DIndTexMtxFv();
extern "C" void __ct__14J2DIndTexOrderFv();
extern "C" void getColor__11J2DAnmColorCFUsP8_GXColor();
//
// External References:
//
extern "C" void __ct__Q28JUtility6TColorFv();
extern "C" void* __nw__FUl();
extern "C" void* __nw__FUli();
extern "C" void __dl__FPv();
extern "C" void storeTIMG__10JUTTextureFPC7ResTIMGP10JUTPalette7_GXTlut();
extern "C" bool getIndTexCoordScale__11J2DIndBlockFUl();
extern "C" bool getIndTexMtx__11J2DIndBlockFUl();
extern "C" bool getIndTexOrder__11J2DIndBlockFUl();
extern "C" bool getIndTexStageNum__11J2DIndBlockCFv();
extern "C" void initialize__13J2DColorBlockFv();
extern "C" void setGX__13J2DColorBlockFv();
extern "C" void initialize__14J2DTexGenBlockFv();
extern "C" void setGX__14J2DTexGenBlockFv();
extern "C" void __dt__14J2DTexGenBlockFv();
extern "C" void setTexMtx__14J2DTexGenBlockFUlR9J2DTexMtx();
extern "C" void getTexMtx__14J2DTexGenBlockFUlR9J2DTexMtx();
extern "C" void __ct__12J2DTevBlock1Fv();
extern "C" void __ct__12J2DTevBlock2Fv();
extern "C" void __ct__12J2DTevBlock4Fv();
extern "C" void __ct__12J2DTevBlock8Fv();
extern "C" void __ct__13J2DTevBlock16Fv();
extern "C" void initialize__10J2DPEBlockFv();
extern "C" void setGX__10J2DPEBlockFv();
extern "C" void calcTransform__19J2DAnmTextureSRTKeyCFfUsP17J3DTextureSRTInfo();
extern "C" void getTexNo__16J2DAnmTexPatternCFUsPUs();
extern "C" void getResTIMG__16J2DAnmTexPatternCFUs();
extern "C" void getPalette__16J2DAnmTexPatternCFUs();
extern "C" void getTevColorReg__15J2DAnmTevRegKeyCFUsP11_GXColorS10();
extern "C" void getTevKonstReg__15J2DAnmTevRegKeyCFUsP8_GXColor();
extern "C" void __construct_array();
extern "C" void _savegpr_26();
extern "C" void _restgpr_26();
extern "C" extern void* __vt__15J2DIndBlockFull[14];
extern "C" extern void* __vt__11J2DTevBlock[47];
extern "C" extern void* __vt__14J2DTexGenBlock[3 + 1 /* padding */];
//
// Declarations:
//
/* ############################################################################################## */
/* 803CCA08-803CCA40 029B28 0038+00 2/2 0/0 0/0 .data __vt__15J2DIndBlockNull */
SECTION_DATA extern void* __vt__15J2DIndBlockNull[14] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)initialize__11J2DIndBlockFv,
(void*)setGX__15J2DIndBlockNullFv,
(void*)getType__15J2DIndBlockNullFv,
(void*)setIndTexStageNum__11J2DIndBlockFUc,
(void*)getIndTexStageNum__11J2DIndBlockCFv,
(void*)setIndTexOrder__11J2DIndBlockFUl14J2DIndTexOrder,
(void*)getIndTexOrder__11J2DIndBlockFUl,
(void*)setIndTexMtx__11J2DIndBlockFUl12J2DIndTexMtx,
(void*)getIndTexMtx__11J2DIndBlockFUl,
(void*)setIndTexCoordScale__11J2DIndBlockFUl19J2DIndTexCoordScale,
(void*)getIndTexCoordScale__11J2DIndBlockFUl,
(void*)__dt__15J2DIndBlockNullFv,
};
/* 803CCA40-803CCA78 029B60 0038+00 3/3 1/1 0/0 .data __vt__11J2DIndBlock */
SECTION_DATA extern void* __vt__11J2DIndBlock[14] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)initialize__11J2DIndBlockFv,
(void*)setGX__11J2DIndBlockFv,
(void*)NULL,
(void*)setIndTexStageNum__11J2DIndBlockFUc,
(void*)getIndTexStageNum__11J2DIndBlockCFv,
(void*)setIndTexOrder__11J2DIndBlockFUl14J2DIndTexOrder,
(void*)getIndTexOrder__11J2DIndBlockFUl,
(void*)setIndTexMtx__11J2DIndBlockFUl12J2DIndTexMtx,
(void*)getIndTexMtx__11J2DIndBlockFUl,
(void*)setIndTexCoordScale__11J2DIndBlockFUl19J2DIndTexCoordScale,
(void*)getIndTexCoordScale__11J2DIndBlockFUl,
(void*)__dt__11J2DIndBlockFv,
};
/* 803CCA78-803CCA84 029B98 000C+00 2/2 0/0 0/0 .data __vt__11J2DMaterial */
SECTION_DATA extern void* __vt__11J2DMaterial[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11J2DMaterialFv,
};
/* 803CCA84-803CCA90 029BA4 000C+00 3/3 0/0 0/0 .data __vt__13J2DColorBlock */
SECTION_DATA extern void* __vt__13J2DColorBlock[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__13J2DColorBlockFv,
};
/* 802EA1AC-802EA2CC 2E4AEC 0120+00 0/0 1/1 0/0 .text __ct__11J2DMaterialFv */
J2DMaterial::J2DMaterial() {
field_0x4 = 0;
mIndex = -1;
mTevBlock = NULL;
mIndBlock = NULL;
mAnmPointer = NULL;
field_0x8 = 1;
mVisible = true;
}
/* 802EA2CC-802EA38C 2E4C0C 00C0+00 1/0 2/2 0/0 .text __dt__11J2DMaterialFv */
extern "C" void __dt__11J2DMaterialFv() {
// asm J2DMaterial::~J2DMaterial() {
// NONMATCHING
}
/* 802EA38C-802EA410 2E4CCC 0084+00 0/0 8/8 0/0 .text setGX__11J2DMaterialFv */
void J2DMaterial::setGX() {
if (mVisible) {
getColorBlock()->setGX();
getTexGenBlock()->setGX();
if (getTevBlock() != NULL) {
getTevBlock()->setGX();
}
if (getIndBlock() != NULL) {
getIndBlock()->setGX();
}
getPEBlock()->setGX();
}
}
/* 802EA410-802EA5C4 2E4D50 01B4+00 0/0 1/1 0/0 .text createTevBlock__11J2DMaterialFib */
J2DTevBlock* J2DMaterial::createTevBlock(int block_type, bool noAlign) {
J2DTevBlock* block;
if (noAlign) {
if (block_type <= 1) {
block = new J2DTevBlock1();
} else if (block_type == 2) {
block = new J2DTevBlock2();
} else if (block_type <= 4) {
block = new J2DTevBlock4();
} else if (block_type <= 8) {
block = new J2DTevBlock8();
} else {
block = new J2DTevBlock16();
}
} else {
if (block_type <= 1) {
block = new (-4) J2DTevBlock1();
} else if (block_type == 2) {
block = new (-4) J2DTevBlock2();
} else if (block_type <= 4) {
block = new (-4) J2DTevBlock4();
} else if (block_type <= 8) {
block = new (-4) J2DTevBlock8();
} else {
block = new (-4) J2DTevBlock16();
}
}
return block;
}
/* 802EA5C4-802EA79C 2E4F04 01D8+00 0/0 1/1 0/0 .text createIndBlock__11J2DMaterialFib */
J2DIndBlock* J2DMaterial::createIndBlock(int block_type, bool noAlign) {
J2DIndBlock* block;
if (noAlign) {
if (block_type != 0) {
block = new J2DIndBlockFull();
} else {
block = new J2DIndBlockNull();
}
} else {
if (block_type != 0) {
block = new (-4) J2DIndBlockFull();
} else {
block = new (-4) J2DIndBlockNull();
}
}
return block;
}
/* 802EA79C-802EA84C 2E50DC 00B0+00 1/1 0/0 0/0 .text
* __ct__Q211J2DMaterial21J2DMaterialAnmPointerFv */
J2DMaterial::J2DMaterialAnmPointer::J2DMaterialAnmPointer() {
field_0x0 = NULL;
field_0x10 = -1;
field_0x4 = 0;
for (int i = 0; i < 8; i++) {
field_0x12[i] = -1;
}
field_0x8 = 0;
for (int i = 0; i < 8; i++) {
field_0x22[i] = -1;
}
field_0xc = 0;
for (int i = 0; i < 4; i++) {
field_0x32[i] = -1;
}
for (int i = 0; i < 4; i++) {
field_0x3a[i] = -1;
}
}
/* 802EA84C-802EA89C 2E518C 0050+00 4/4 0/0 0/0 .text makeAnmPointer__11J2DMaterialFv */
void J2DMaterial::makeAnmPointer() {
if (mAnmPointer == NULL) {
mAnmPointer = new J2DMaterialAnmPointer();
}
}
/* 802EA89C-802EA94C 2E51DC 00B0+00 0/0 4/4 0/0 .text setAnimation__11J2DMaterialFP11J2DAnmColor
*/
void J2DMaterial::setAnimation(J2DAnmColor* anm) {
if (anm != NULL || mAnmPointer != NULL) {
makeAnmPointer();
mAnmPointer->field_0x0 = anm;
mAnmPointer->field_0x10 = -1;
if (anm != NULL) {
u16 matNum = anm->getUpdateMaterialNum();
u16 index = getIndex();
for (u16 i = 0; i < matNum; i++) {
u16 matID = anm->getUpdateMaterialID(i);
if (index == matID) {
mAnmPointer->field_0x10 = i;
return;
}
}
}
}
}
/* 802EA94C-802EAA2C 2E528C 00E0+00 0/0 4/4 0/0 .text
* setAnimation__11J2DMaterialFP19J2DAnmTextureSRTKey */
void J2DMaterial::setAnimation(J2DAnmTextureSRTKey* anm) {
if (anm != NULL || mAnmPointer != NULL) {
makeAnmPointer();
mAnmPointer->field_0x4 = anm;
for (int i = 0; i < 8; i++) {
mAnmPointer->field_0x12[i] = -1;
}
if (anm != NULL) {
u16 matNum = anm->getUpdateMaterialNum();
u16 index = getIndex();
for (u16 i = 0; i < matNum; i++) {
u16 matID = anm->getUpdateMaterialID(i);
if (index == matID) {
u8 mtxID = anm->getUpdateTexMtxID(i);
mAnmPointer->field_0x12[mtxID] = i;
}
}
}
}
}
/* 802EAA2C-802EAB0C 2E536C 00E0+00 0/0 4/4 0/0 .text
* setAnimation__11J2DMaterialFP16J2DAnmTexPattern */
void J2DMaterial::setAnimation(J2DAnmTexPattern* anm) {
if (anm != NULL || mAnmPointer != NULL) {
makeAnmPointer();
mAnmPointer->field_0x8 = anm;
for (int i = 0; i < 8; i++) {
mAnmPointer->field_0x22[i] = -1;
}
if (anm != NULL) {
u16 matNum = anm->getUpdateMaterialNum();
u16 index = getIndex();
J3DAnmTexPatternFullTable* anmTbl = anm->getAnmTable();
for (u16 i = 0; i < matNum; i++) {
u16 matID = anm->getUpdateMaterialID(i);
if (index == matID) {
mAnmPointer->field_0x22[anmTbl[i].mTexNo] = i;
}
}
}
}
}
/* 802EAB0C-802EAC78 2E544C 016C+00 0/0 4/4 0/0 .text
* setAnimation__11J2DMaterialFP15J2DAnmTevRegKey */
void J2DMaterial::setAnimation(J2DAnmTevRegKey* anm) {
if (anm != NULL || mAnmPointer != NULL) {
makeAnmPointer();
mAnmPointer->field_0xc = anm;
for (int i = 0; i < 4; i++) {
mAnmPointer->field_0x32[i] = -1;
}
if (anm != NULL) {
u16 matNum = anm->getCRegUpdateMaterialNum();
u16 index = getIndex();
for (u16 i = 0; i < matNum; i++) {
u16 matID = anm->getCRegUpdateMaterialID(i);
if (index == matID) {
J3DAnmCRegKeyTable* anmTbl = anm->getAnmCRegKeyTable();
mAnmPointer->field_0x32[anmTbl[i].mColorId] = i;
}
}
}
for (int i = 0; i < 4; i++) {
mAnmPointer->field_0x3a[i] = -1;
}
if (anm != NULL) {
u16 matNum = anm->getKRegUpdateMaterialNum();
u16 index = getIndex();
for (u16 i = 0; i < matNum; i++) {
u16 matID = anm->getKRegUpdateMaterialID(i);
if (index == matID) {
J3DAnmKRegKeyTable* anmTbl = anm->getAnmKRegKeyTable();
mAnmPointer->field_0x3a[anmTbl[i].mColorId] = i;
}
}
}
}
}
/* ############################################################################################## */
/* 804561B0-804561B4 0047B0 0004+00 1/1 0/0 0/0 .sdata2 @1943 */
SECTION_SDATA2 static f32 lit_1943 = 360.0f;
/* 804561B4-804561B8 0047B4 0004+00 1/1 0/0 0/0 .sdata2 @1944 */
SECTION_SDATA2 static f32 lit_1944 = 65535.0f;
/* 804561B8-804561C0 0047B8 0008+00 1/1 0/0 0/0 .sdata2 @1946 */
SECTION_SDATA2 static f64 lit_1946 = 4503599627370496.0 /* cast u32 to float */;
/* 802EAC78-802EB0F4 2E55B8 047C+00 0/0 1/1 0/0 .text animation__11J2DMaterialFv */
void J2DMaterial::animation() {
// NONMATCHING
}
/* 802EB0F4-802EB13C 2E5A34 0048+00 1/0 0/0 0/0 .text __dt__13J2DColorBlockFv */
J2DColorBlock::~J2DColorBlock() {
// NONMATCHING
}
/* 802EB13C-802EB184 2E5A7C 0048+00 1/0 0/0 0/0 .text __dt__11J2DIndBlockFv */
// J2DIndBlock::~J2DIndBlock() {
extern "C" void __dt__11J2DIndBlockFv() {
// NONMATCHING
}
/* 802EB184-802EB1CC 2E5AC4 0048+00 0/0 1/0 0/0 .text __dt__11J2DTevBlockFv */
// J2DTevBlock::~J2DTevBlock() {
extern "C" void __dt__11J2DTevBlockFv() {
// NONMATCHING
}
/* 802EB1CC-802EB1D0 2E5B0C 0004+00 1/0 0/0 0/0 .text setGX__11J2DIndBlockFv */
void J2DIndBlock::setGX() {
/* empty function */
}
/* 802EB1D0-802EB1D4 2E5B10 0004+00 0/0 1/0 0/0 .text setGX__11J2DTevBlockFv */
void J2DTevBlock::setGX() {
/* empty function */
}
/* 802EB1D4-802EB1D8 2E5B14 0004+00 0/0 1/0 0/0 .text
* setTevKColor__11J2DTevBlockFUlQ28JUtility6TColor */
void J2DTevBlock::setTevKColor(u32 param_0, JUtility::TColor param_1) {
/* empty function */
}
/* 802EB1D8-802EB1DC 2E5B18 0004+00 0/0 1/0 0/0 .text setTevColor__11J2DTevBlockFUl13J2DGXColorS10
*/
void J2DTevBlock::setTevColor(u32 param_0, J2DGXColorS10 param_1) {
/* empty function */
}
/* 802EB1DC-802EB1E0 2E5B1C 0004+00 0/0 1/0 0/0 .text setTexNo__11J2DTevBlockFUlUs */
void J2DTevBlock::setTexNo(u32 param_0, u16 param_1) {
/* empty function */
}
/* 802EB1E0-802EB1E4 2E5B20 0004+00 1/0 0/0 0/0 .text setGX__15J2DIndBlockNullFv */
extern "C" void setGX__15J2DIndBlockNullFv() {
/* empty function */
}
/* 802EB1E4-802EB1F0 2E5B24 000C+00 1/0 0/0 0/0 .text getType__15J2DIndBlockNullFv */
u32 J2DIndBlockNull::getType() {
// NONMATCHING
}
/* 802EB1F0-802EB24C 2E5B30 005C+00 1/0 0/0 0/0 .text __dt__15J2DIndBlockNullFv */
J2DIndBlockNull::~J2DIndBlockNull() {
// NONMATCHING
}
/* 802EB24C-802EB250 2E5B8C 0004+00 2/0 0/0 0/0 .text initialize__11J2DIndBlockFv */
extern "C" void initialize__11J2DIndBlockFv() {
/* empty function */
}
/* 802EB250-802EB254 2E5B90 0004+00 2/0 0/0 0/0 .text setIndTexStageNum__11J2DIndBlockFUc
*/
void J2DIndBlock::setIndTexStageNum(u8 param_0) {
/* empty function */
}
/* 802EB254-802EB258 2E5B94 0004+00 2/0 0/0 0/0 .text
* setIndTexOrder__11J2DIndBlockFUl14J2DIndTexOrder */
void J2DIndBlock::setIndTexOrder(u32 param_0, J2DIndTexOrder param_1) {
/* empty function */
}
/* 802EB258-802EB25C 2E5B98 0004+00 2/0 0/0 0/0 .text setIndTexMtx__11J2DIndBlockFUl12J2DIndTexMtx
*/
void J2DIndBlock::setIndTexMtx(u32 param_0, J2DIndTexMtx param_1) {
/* empty function */
}
/* 802EB25C-802EB260 2E5B9C 0004+00 2/0 0/0 0/0 .text
* setIndTexCoordScale__11J2DIndBlockFUl19J2DIndTexCoordScale */
void J2DIndBlock::setIndTexCoordScale(u32 param_0, J2DIndTexCoordScale param_1) {
/* empty function */
}
/* 802EB260-802EB280 2E5BA0 0020+00 1/1 0/0 0/0 .text __ct__11J2DTexCoordFv */
//J2DTexCoord::J2DTexCoord() {
void __ct__11J2DTexCoordFv() {
// NONMATCHING
}
/* 802EB280-802EB290 2E5BC0 0010+00 1/1 0/0 0/0 .text __ct__12J2DColorChanFv */
void __ct__12J2DColorChanFv() {
//asm J2DColorChan::J2DColorChan() {
// NONMATCHING
}
/* 802EB290-802EB2CC 2E5BD0 003C+00 1/1 1/1 0/0 .text __dt__19J2DIndTexCoordScaleFv */
// Most likely inline
// J2DIndTexCoordScale::~J2DIndTexCoordScale() {
void __dt__19J2DIndTexCoordScaleFv() {
// NONMATCHING
}
/* 802EB2CC-802EB2E4 2E5C0C 0018+00 1/1 0/0 0/0 .text __ct__19J2DIndTexCoordScaleFv */
//J2DIndTexCoordScale::J2DIndTexCoordScale() {
void __ct__19J2DIndTexCoordScaleFv() {
// NONMATCHING
}
/* 802EB2E4-802EB320 2E5C24 003C+00 1/1 1/1 0/0 .text __dt__12J2DIndTexMtxFv */
void __dt__12J2DIndTexMtxFv() {
//asm J2DIndTexMtx::~J2DIndTexMtx() {
// NONMATCHING
}
/* 802EB320-802EB378 2E5C60 0058+00 1/1 0/0 0/0 .text __ct__12J2DIndTexMtxFv */
//J2DIndTexMtx::J2DIndTexMtx() {
void __ct__12J2DIndTexMtxFv() {
// NONMATCHING
}
/* 802EB378-802EB390 2E5CB8 0018+00 1/1 0/0 0/0 .text __ct__14J2DIndTexOrderFv */
// Most likely inline
//J2DIndTexOrder::J2DIndTexOrder() {
void __ct__14J2DIndTexOrderFv() {
// NONMATCHING
}
/* 802EB390-802EB394 2E5CD0 0004+00 0/0 1/0 0/0 .text getColor__11J2DAnmColorCFUsP8_GXColor */
void J2DAnmColor::getColor(u16 param_0, _GXColor* param_1) const {
/* empty function */
}
+522
View File
@@ -0,0 +1,522 @@
//
// Generated By: dol2asm
// Translation Unit: J2DMaterialFactory
//
#include "JSystem/J2DGraph/J2DMaterialFactory.h"
#include "JSystem/J2DGraph/J2DMaterial.h"
#include "JSystem/JSupport/JSupport.h"
#include "string.h"
#include "dol2asm.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void __ct__18J2DMaterialFactoryFRC16J2DMaterialBlock();
extern "C" void countStages__18J2DMaterialFactoryCFi();
extern "C" void
create__18J2DMaterialFactoryCFP11J2DMaterialiUlP15J2DResReferenceP15J2DResReferenceP10JKRArchive();
extern "C" void newMatColor__18J2DMaterialFactoryCFii();
extern "C" void newColorChanNum__18J2DMaterialFactoryCFi();
extern "C" void newColorChan__18J2DMaterialFactoryCFii();
extern "C" void newTexGenNum__18J2DMaterialFactoryCFi();
extern "C" void newTexCoord__18J2DMaterialFactoryCFii();
extern "C" void newTexMtx__18J2DMaterialFactoryCFii();
extern "C" void newCullMode__18J2DMaterialFactoryCFi();
extern "C" void newTexNo__18J2DMaterialFactoryCFii();
extern "C" void newFontNo__18J2DMaterialFactoryCFi();
extern "C" void newTevOrder__18J2DMaterialFactoryCFii();
extern "C" void newTevColor__18J2DMaterialFactoryCFii();
extern "C" void newTevKColor__18J2DMaterialFactoryCFii();
extern "C" void newTevStageNum__18J2DMaterialFactoryCFi();
extern "C" void newTevStage__18J2DMaterialFactoryCFii();
extern "C" void newTevSwapModeTable__18J2DMaterialFactoryCFii();
extern "C" void newIndTexStageNum__18J2DMaterialFactoryCFi();
extern "C" void newIndTexOrder__18J2DMaterialFactoryCFii();
extern "C" void newIndTexMtx__18J2DMaterialFactoryCFii();
extern "C" void newIndTevStage__18J2DMaterialFactoryCFii();
extern "C" void newIndTexCoordScale__18J2DMaterialFactoryCFii();
extern "C" void newAlphaComp__18J2DMaterialFactoryCFi();
extern "C" void newBlend__18J2DMaterialFactoryCFi();
extern "C" void newDither__18J2DMaterialFactoryCFi();
extern "C" void __ct__11J2DTevStageFRC15J2DTevStageInfo();
extern "C" void func_802F4170(void* _this, void const*, void const*);
extern "C" void func_802F4188(void* _this, void const*, void const*);
extern "C" void func_802F41A0(void* _this, void const*, void const*);
extern "C" void func_802F41B8(void* _this, void const*, void const*);
extern "C" void func_802F41D0(void* _this, void const*, void const*);
extern "C" void func_802F41E8(void* _this, void const*, void const*);
extern "C" void func_802F4200(void* _this, void const*, void const*);
extern "C" void func_802F4218(void* _this, void const*, void const*);
extern "C" void func_802F4230(void* _this, void const*, void const*);
extern "C" void func_802F4248(void* _this, void const*, void const*);
extern "C" u8* func_802F4260(void const*, void const*);
extern "C" void func_802F4278(void* _this, void const*, void const*);
extern "C" void func_802F4290(void* _this, void const*, void const*);
extern "C" void func_802F42A8(void* _this, void const*, void const*);
extern "C" void func_802F42C0(void* _this, void const*, void const*);
extern "C" void func_802F42D8(void* _this, void const*, void const*);
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void getResource__15JUTResReferenceFPCvUlP10JKRArchive();
extern "C" void calc__9J2DTexMtxFv();
extern "C" void createTevBlock__11J2DMaterialFib();
extern "C" void createIndBlock__11J2DMaterialFib();
extern "C" void __ct__11J2DTevStageFv();
extern "C" void setTevStageInfo__11J2DTevStageFRC15J2DTevStageInfo();
extern "C" void get__13J2DDataManageFPCc();
extern "C" void getResReference__15J2DResReferenceCFUs();
extern "C" void getName__15J2DResReferenceCFUs();
extern "C" void _savegpr_19();
extern "C" void _savegpr_29();
extern "C" void _restgpr_19();
extern "C" void _restgpr_29();
extern "C" u8 mDataManage__9J2DScreen[4 + 4 /* padding */];
/* 802F2AD0-802F2C94 2ED410 01C4+00 0/0 1/1 0/0 .text
* __ct__18J2DMaterialFactoryFRC16J2DMaterialBlock */
J2DMaterialFactory::J2DMaterialFactory(J2DMaterialBlock const& param_0) {
field_0x0 = param_0.field_0x8;
field_0x4 = JSUConvertOffsetToPtr<J2DMaterialInitData>(&param_0, (void*)param_0.field_0xc);
field_0x8 = JSUConvertOffsetToPtr<u16>(&param_0, (void*)param_0.field_0x10);
if (param_0.field_0x18 && param_0.field_0x18 - param_0.field_0x14 > 4) {
field_0xc = JSUConvertOffsetToPtr<J2DIndInitData>(&param_0, (void*)param_0.field_0x18);
}
else {
field_0xc = NULL;
}
field_0x30 = JSUConvertOffsetToPtr<_GXCullMode>(&param_0, (void*)param_0.field_0x1c);
field_0x10 = JSUConvertOffsetToPtr<GXColor>(&param_0, (void*)param_0.field_0x20);
field_0x14 = JSUConvertOffsetToPtr<u8>(&param_0, (void*)param_0.field_0x24);
field_0x18 = JSUConvertOffsetToPtr<J2DColorChanInfo>(&param_0, (void*)param_0.field_0x28);
field_0x1c = JSUConvertOffsetToPtr<u8>(&param_0, (void*)param_0.field_0x2c);
field_0x20 = JSUConvertOffsetToPtr<J2DTexCoordInfo>(&param_0, (void*)param_0.field_0x30);
field_0x24 = JSUConvertOffsetToPtr<J2DTexMtxInfo>(&param_0, (void*)param_0.field_0x34);
field_0x28 = JSUConvertOffsetToPtr<u16>(&param_0, (void*)param_0.field_0x38);
field_0x2c = JSUConvertOffsetToPtr<u16>(&param_0, (void*)param_0.field_0x3c);
field_0x34 = JSUConvertOffsetToPtr<J2DTevOrderInfo>(&param_0, (void*)param_0.field_0x40);
field_0x38 = JSUConvertOffsetToPtr<_GXColorS10>(&param_0, (void*)param_0.field_0x44);
field_0x3c = JSUConvertOffsetToPtr<GXColor>(&param_0, (void*)param_0.field_0x48);
field_0x40 = JSUConvertOffsetToPtr<u8>(&param_0, (void*)param_0.field_0x4c);
field_0x44 = JSUConvertOffsetToPtr<J2DTevStageInfo>(&param_0, (void*)param_0.field_0x50);
field_0x48 = JSUConvertOffsetToPtr<J2DTevSwapModeInfo>(&param_0, (void*)param_0.field_0x54);
field_0x4c = JSUConvertOffsetToPtr<J2DTevSwapModeTableInfo>(&param_0, (void*)param_0.field_0x58);
field_0x50 = JSUConvertOffsetToPtr<J2DAlphaCompInfo>(&param_0, (void*)param_0.field_0x5c);
field_0x54 = JSUConvertOffsetToPtr<J2DBlendInfo>(&param_0, (void*)param_0.field_0x60);
field_0x58 = JSUConvertOffsetToPtr<u8>(&param_0, (void*)param_0.field_0x64);
}
/* 802F2C94-802F2D1C 2ED5D4 0088+00 1/1 0/0 0/0 .text countStages__18J2DMaterialFactoryCFi */
u32 J2DMaterialFactory::countStages(int param_0) const {
J2DMaterialInitData* iVar5 = &field_0x4[field_0x8[param_0]];
u32 uVar4 = 0;
u32 uVar3 = 0;
if (iVar5->field_0x4 != 0xff) {
uVar3 = field_0x40[iVar5->field_0x4];
}
for (int i = 0; i < 8; i++) {
if (iVar5->field_0x38[i] != 0xffff) {
uVar4++;
}
}
if ((uVar3 != uVar4 && uVar4 != 0)) {
if (uVar3 > uVar4) {
return uVar3;
}
return uVar4;
}
return uVar3;
}
/* 802F2D1C-802F362C 2ED65C 0910+00 0/0 1/1 0/0 .text
* create__18J2DMaterialFactoryCFP11J2DMaterialiUlP15J2DResReferenceP15J2DResReferenceP10JKRArchive
*/
// Stack issues
#ifdef NONMATCHING
J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int index, u32 param_2,
J2DResReference* param_3, J2DResReference* param_4,
JKRArchive* param_5) const {
u32 stages = countStages(index);
u32 uVar1 = ((param_2 & 0x1f0000) >> 16);
u32 r28 = stages > uVar1 ? stages : uVar1;
u32 r25 = r28 <= 8 ? r28 : 8;
s32 local_3bc = ((param_2 & 0x1000000) != 0);
s32 local_3c0 = (param_2 & 0x1f0000) ? local_3bc : 0;
bool temp = (param_2 & 0x1f0000);
u16 tevBlockNum = r28;
param_0->mTevBlock = J2DMaterial::createTevBlock(tevBlockNum, temp);
param_0->mIndBlock = J2DMaterial::createIndBlock(local_3c0, temp);
param_0->mIndex = index;
param_0->field_0x8 = getMaterialMode(index);
param_0->getColorBlock()->setColorChanNum(newColorChanNum(index));
param_0->getColorBlock()->setCullMode(newCullMode(index));
param_0->getTexGenBlock()->setTexGenNum(newTexGenNum(index));
param_0->getPEBlock()->setAlphaComp(newAlphaComp(index));
param_0->getPEBlock()->setBlend(newBlend(index));
param_0->getPEBlock()->setDither(newDither(index));
param_0->getTevBlock()->setTevStageNum(newTevStageNum(index));
param_0->mMaterialAlphaCalc = getMaterialAlphaCalc(index);
JUTResReference aJStack_12c;
for (u8 i = 0; i < r25; i++) {
u16 texNo = newTexNo(index, i);
s8* local_37c = param_3->getResReference(texNo);
void* local_380 = NULL;
if (local_37c != NULL) {
local_380 = aJStack_12c.getResource(local_37c, 'TIMG', param_5);
if (local_380 == NULL && param_5 != NULL) {
local_380 = aJStack_12c.getResource(local_37c, 'TIMG', NULL);
}
if (local_380 == NULL && J2DScreen::getDataManage() != NULL) {
char acStack_230[256];
strcpy(acStack_230, param_3->getName(texNo));
local_380 = J2DScreen::getDataManage()->get(acStack_230);
}
}
param_0->getTevBlock()->insertTexture(i, (ResTIMG*)local_380);
param_0->getTevBlock()->setTexNo(i, texNo);
}
u16 fontNo = newFontNo(index);
param_0->getTevBlock()->setFontNo(fontNo);
s8* local_384 = param_4->getResReference(param_0->getTevBlock()->getFontNo());
void* local_388 = NULL;
if (local_384 != NULL) {
local_388 = aJStack_12c.getResource(local_384, 'FONT', param_5);
if (local_388 == NULL && param_5 != NULL) {
local_388 = aJStack_12c.getResource(local_384, 'FONT', NULL);
}
if (local_388 == NULL && J2DScreen::getDataManage() != NULL) {
char* pcVar9 = param_4->getName(param_0->getTevBlock()->getFontNo());
char acStack_334[256];
strcpy(acStack_334, pcVar9);
local_388 = J2DScreen::getDataManage()->get(acStack_334);
}
}
param_0->getTevBlock()->setFont((ResFONT*)local_388);
for (u8 i = 0; i < r28; i++) {
param_0->getTevBlock()->setTevOrder(i, newTevOrder(index, i));
}
for (u8 i = 0; i < r28; i++) {
J2DMaterialInitData* local_38c = &field_0x4[field_0x8[index]];
param_0->getTevBlock()->setTevStage(i, newTevStage(index, i));
if (local_38c->field_0xba[i] != 0xffff) {
param_0->getTevBlock()->getTevStage(i)->setTexSel(field_0x48[local_38c->field_0xba[i]].mTexSel);
param_0->getTevBlock()->getTevStage(i)->setRasSel(field_0x48[local_38c->field_0xba[i]].mRasSel);
}
}
for (u8 i = 0; i < 4; i++) {
param_0->getTevBlock()->setTevKColor(i, newTevKColor(index, i));
}
for (u8 i = 0; i < 4; i++) {
J2DTevBlock* block = param_0->getTevBlock();
block->setTevColor(i, newTevColor(index, i));
}
for (u8 i = 0; i < 4; i++) {
param_0->getTevBlock()->setTevSwapModeTable(i, newTevSwapModeTable(index, i));
}
for (u8 i = 0; i < 2; i++) {
param_0->getColorBlock()->setMatColor(i, newMatColor(index, i));
}
for (u8 i = 0; i < 4; i++) {
param_0->getColorBlock()->setColorChan(i, newColorChan(index, i));
}
for (u8 i = 0; i < 8; i++) {
param_0->getTexGenBlock()->setTexCoord(i, newTexCoord(index, i));
}
for (u8 i = 0; i < 8; i++) {
param_0->getTexGenBlock()->setTexMtx(i, newTexMtx(index, i));
}
J2DMaterialInitData* local_394 = &field_0x4[field_0x8[index]];
for (u8 i = 0; i < r28; i++) {
param_0->getTevBlock()->setTevKColorSel(i, local_394->field_0x52[i]);
}
for (u8 i = 0; i < r28; i++) {
param_0->getTevBlock()->setTevKAlphaSel(i, local_394->field_0x62[i]);
}
if (field_0xc != NULL || local_3c0 != 0) {
u8 local_410 = newIndTexStageNum(index);
param_0->mIndBlock->setIndTexStageNum(local_410);
for (u8 i = 0; i < local_410; i++) {
param_0->getIndBlock()->setIndTexMtx(i, newIndTexMtx(index, i));
}
for (u8 i = 0; i < local_410; i++) {
param_0->getIndBlock()->setIndTexOrder(i, newIndTexOrder(index, i));
}
for (u8 i = 0; i < local_410; i++) {
param_0->getIndBlock()->setIndTexCoordScale(i, newIndTexCoordScale(index, i));
}
for (u8 i = 0; i < r28; i++) {
param_0->getTevBlock()->setIndTevStage(i, newIndTevStage(index, i));
}
}
return param_0;
}
#else
J2DMaterial* J2DMaterialFactory::create(J2DMaterial* param_0, int param_1, u32 param_2,
J2DResReference* param_3, J2DResReference* param_4,
JKRArchive* param_5) const {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 802F362C-802F36CC 2EDF6C 00A0+00 1/1 0/0 0/0 .text newMatColor__18J2DMaterialFactoryCFii */
JUtility::TColor J2DMaterialFactory::newMatColor(int param_0, int param_1) const {
GXColor color = {0xff,0xff,0xff,0xff};
JUtility::TColor local_20 = GXColor(color);
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x8[param_1] != 0xffff) {
return field_0x10[iVar2->field_0x8[param_1]];
}
return local_20;
}
/* 802F36CC-802F3704 2EE00C 0038+00 1/1 0/0 0/0 .text newColorChanNum__18J2DMaterialFactoryCFi */
u8 J2DMaterialFactory::newColorChanNum(int param_0) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x2 != 0xff) {
return field_0x14[iVar2->field_0x2];
}
return 0;
}
/* 802F3704-802F3758 2EE044 0054+00 1/1 0/0 0/0 .text newColorChan__18J2DMaterialFactoryCFii */
J2DColorChan J2DMaterialFactory::newColorChan(int param_0, int param_1) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0xc[param_1] != 0xffff) {
return J2DColorChan(field_0x18[iVar2->field_0xc[param_1]]);
}
return J2DColorChan();
}
/* 802F3758-802F3790 2EE098 0038+00 1/1 0/0 0/0 .text newTexGenNum__18J2DMaterialFactoryCFi */
u32 J2DMaterialFactory::newTexGenNum(int param_0) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x3 != 0xff) {
return field_0x1c[iVar2->field_0x3];
}
return 0;
}
/* 802F3790-802F3804 2EE0D0 0074+00 1/1 0/0 0/0 .text newTexCoord__18J2DMaterialFactoryCFii */
J2DTexCoord J2DMaterialFactory::newTexCoord(int param_0, int param_1) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x14[param_1] != 0xffff) {
return J2DTexCoord(field_0x20[iVar2->field_0x14[param_1]]);
}
return J2DTexCoord();
}
/* 802F3804-802F38E0 2EE144 00DC+00 1/1 0/0 0/0 .text newTexMtx__18J2DMaterialFactoryCFii
*/
J2DTexMtx* J2DMaterialFactory::newTexMtx(int param_0, int param_1) const {
J2DTexMtx* rv = NULL;
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x24[param_1] != 0xffff) {
rv = new J2DTexMtx(field_0x24[iVar2->field_0x24[param_1]]);
rv->calc();
}
return rv;
}
/* 802F38E0-802F3920 2EE220 0040+00 1/1 0/0 0/0 .text newCullMode__18J2DMaterialFactoryCFi */
u8 J2DMaterialFactory::newCullMode(int param_0) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x1 != 0xff) {
return field_0x30[iVar2->field_0x1];
}
return 0xff;
}
/* 802F3920-802F3968 2EE260 0048+00 1/1 0/0 0/0 .text newTexNo__18J2DMaterialFactoryCFii
*/
u16 J2DMaterialFactory::newTexNo(int param_0, int param_1) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x38[param_1] != 0xffff) {
return field_0x28[iVar2->field_0x38[param_1]];
}
return 0x1FFFF;
}
/* 802F3968-802F39A8 2EE2A8 0040+00 1/1 0/0 0/0 .text newFontNo__18J2DMaterialFactoryCFi
*/
u16 J2DMaterialFactory::newFontNo(int param_0) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x48 != 0xffff) {
return field_0x2c[iVar2->field_0x48];
}
return 0x1FFFF;
}
/* 802F39A8-802F3A1C 2EE2E8 0074+00 1/1 0/0 0/0 .text newTevOrder__18J2DMaterialFactoryCFii */
J2DTevOrder J2DMaterialFactory::newTevOrder(int param_0, int param_1) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x72[param_1] != 0xffff) {
return J2DTevOrder(field_0x34[iVar2->field_0x72[param_1]]);
}
return J2DTevOrder();
}
/* ############################################################################################## */
/* 80456BB0-80456BB4 000050 0004+00 1/1 0/0 0/0 .sbss2 @2018 */
SECTION_SBSS2 static GXColorS10 lit_2018;
/* 802F3A1C-802F3AB4 2EE35C 0098+00 1/1 0/0 0/0 .text newTevColor__18J2DMaterialFactoryCFii */
// J2DGXColorS10 init issues
#ifdef NONMATCHING
J2DGXColorS10 J2DMaterialFactory::newTevColor(int param_0, int param_1) const {
J2DGXColorS10 rv = J2DGXColorS10(GXColorS10());
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x92[param_1] != 0xffff) {
return field_0x38[iVar2->field_0x92[param_1]];
}
return rv;
}
#else
J2DGXColorS10 J2DMaterialFactory::newTevColor(int param_0, int param_1) const {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 802F3AB4-802F3B54 2EE3F4 00A0+00 1/1 0/0 0/0 .text newTevKColor__18J2DMaterialFactoryCFii */
JUtility::TColor J2DMaterialFactory::newTevKColor(int param_0, int param_1) const {
GXColor x = {0xFF, 0xFF, 0xFF, 0xFF};
JUtility::TColor local_20 = GXColor(x);
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x4a[param_1] != 0xffff) {
return field_0x3c[iVar2->field_0x4a[param_1]];
}
return local_20;
}
/* 802F3B54-802F3B8C 2EE494 0038+00 1/1 0/0 0/0 .text newTevStageNum__18J2DMaterialFactoryCFi */
u8 J2DMaterialFactory::newTevStageNum(int param_0) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x4 != 0xff) {
return field_0x40[iVar2->field_0x4];
}
return 0xFF;
}
/* 802F3B8C-802F3BEC 2EE4CC 0060+00 1/1 0/0 0/0 .text newTevStage__18J2DMaterialFactoryCFii */
J2DTevStage J2DMaterialFactory::newTevStage(int param_0, int param_1) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x9a[param_1] != 0xffff) {
return J2DTevStage(field_0x44[iVar2->field_0x9a[param_1]]);
}
return J2DTevStage();
}
/* 802F3BEC-802F3C88 2EE52C 009C+00 1/1 0/0 0/0 .text
* newTevSwapModeTable__18J2DMaterialFactoryCFii */
J2DTevSwapModeTable J2DMaterialFactory::newTevSwapModeTable(int param_0, int param_1) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0xda[param_1] != 0xffff) {
return J2DTevSwapModeTable(field_0x4c[iVar2->field_0xda[param_1]]);
}
return J2DTevSwapModeTable(j2dDefaultTevSwapModeTable);
}
/* 802F3C88-802F3CB8 2EE5C8 0030+00 1/1 0/0 0/0 .text newIndTexStageNum__18J2DMaterialFactoryCFi
*/
u8 J2DMaterialFactory::newIndTexStageNum(int param_0) const {
if (field_0xc != NULL) {
if (field_0xc[param_0].field_0x0 == 1) {
return field_0xc[param_0].field_0x1;
}
}
return 0;
}
/* 802F3CB8-802F3D20 2EE5F8 0068+00 1/1 0/0 0/0 .text newIndTexOrder__18J2DMaterialFactoryCFii */
J2DIndTexOrder J2DMaterialFactory::newIndTexOrder(int param_0, int param_1) const {
J2DIndTexOrder rv;
if (field_0xc != NULL) {
if (field_0xc[param_0].field_0x0 == 1) {
return J2DIndTexOrder(field_0xc[param_0].field_0x4[param_1]);
}
}
return rv;
}
/* 802F3D20-802F3E24 2EE660 0104+00 1/1 0/0 0/0 .text newIndTexMtx__18J2DMaterialFactoryCFii */
J2DIndTexMtx J2DMaterialFactory::newIndTexMtx(int param_0, int param_1) const {
J2DIndTexMtx rv;
if (field_0xc != NULL) {
if (field_0xc[param_0].field_0x0 == 1) {
return J2DIndTexMtx(field_0xc[param_0].field_0xc[param_1]);
}
}
return rv;
}
/* 802F3E24-802F3F78 2EE764 0154+00 1/1 0/0 0/0 .text newIndTevStage__18J2DMaterialFactoryCFii */
J2DIndTevStage J2DMaterialFactory::newIndTevStage(int param_0, int param_1) const {
J2DIndTevStage rv;
if (field_0xc != NULL) {
if (field_0xc[param_0].field_0x0 == 1) {
return J2DIndTevStage(field_0xc[param_0].field_0x68[param_1]);
}
}
return rv;
}
/* 802F3F78-802F3FE0 2EE8B8 0068+00 1/1 0/0 0/0 .text
* newIndTexCoordScale__18J2DMaterialFactoryCFii */
J2DIndTexCoordScale J2DMaterialFactory::newIndTexCoordScale(int param_0, int param_1) const {
J2DIndTexCoordScale rv;
if (field_0xc != NULL) {
if (field_0xc[param_0].field_0x0 == 1) {
return J2DIndTexCoordScale(field_0xc[param_0].field_0x60[param_1]);
}
}
return rv;
}
/* 802F3FE0-802F405C 2EE920 007C+00 1/1 0/0 0/0 .text newAlphaComp__18J2DMaterialFactoryCFi */
J2DAlphaComp J2DMaterialFactory::newAlphaComp(int param_0) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0xe2 != 0xffff) {
return J2DAlphaComp(field_0x50[iVar2->field_0xe2]);
}
return J2DAlphaComp();
}
/* 802F405C-802F40D8 2EE99C 007C+00 1/1 0/0 0/0 .text newBlend__18J2DMaterialFactoryCFi
*/
J2DBlend J2DMaterialFactory::newBlend(int param_0) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0xe4 != 0xffff) {
return J2DBlend(field_0x54[iVar2->field_0xe4]);
}
return J2DBlend();
}
/* 802F40D8-802F4110 2EEA18 0038+00 1/1 0/0 0/0 .text newDither__18J2DMaterialFactoryCFi
*/
u8 J2DMaterialFactory::newDither(int param_0) const {
J2DMaterialInitData* iVar2 = &field_0x4[field_0x8[param_0]];
if (iVar2->field_0x5 != 0xff) {
return field_0x58[iVar2->field_0x5];
}
return 0;
}
/* 802F4110-802F4170 2EEA50 0060+00 1/1 0/0 0/0 .text __ct__11J2DTevStageFRC15J2DTevStageInfo */
J2DTevStage::J2DTevStage(J2DTevStageInfo const& param_0) {
setTevStageInfo(param_0);
setTevSwapModeInfo(j2dDefaultTevSwapMode);
}
+93
View File
@@ -0,0 +1,93 @@
#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "dolphin/gx.h"
/* 802E9670-802E96D0 2E3FB0 0060+00 3/3 1/1 0/0 .text __ct__13J2DOrthoGraphFv */
J2DOrthoGraph::J2DOrthoGraph() : J2DGrafContext(0, 0, 0, 0) {
this->setLookat();
}
/* 802E96D0-802E97B4 2E4010 00E4+00 0/0 7/7 0/0 .text __ct__13J2DOrthoGraphFffffff */
J2DOrthoGraph::J2DOrthoGraph(f32 x, f32 y, f32 width, f32 height, f32 far, f32 near)
: J2DGrafContext(x, y, width, height) {
mOrtho = JGeometry::TBox2<f32>(0, 0, width, height);
mNear = -near;
mFar = -far;
this->setLookat();
}
/* 802E97B4-802E980C 2E40F4 0058+00 1/0 6/6 0/0 .text setPort__13J2DOrthoGraphFv */
void J2DOrthoGraph::setPort() {
this->J2DGrafContext::setPort();
C_MTXOrtho(mMtx44, mOrtho.i.y, mOrtho.f.y, mOrtho.i.x, mOrtho.f.x, mNear, mFar);
GXSetProjection(mMtx44, GX_ORTHOGRAPHIC);
}
/* 802E980C-802E9840 2E414C 0034+00 0/0 5/5 0/0 .text
* setOrtho__13J2DOrthoGraphFRCQ29JGeometry8TBox2<f>ff */
void J2DOrthoGraph::setOrtho(JGeometry::TBox2<f32> const& bounds, f32 far, f32 near) {
mOrtho = bounds;
mNear = -near;
mFar = -far;
}
/* 802E9840-802E987C 2E4180 003C+00 1/0 0/0 0/0 .text setLookat__13J2DOrthoGraphFv */
void J2DOrthoGraph::setLookat() {
MTXIdentity(mPosMtx);
GXLoadPosMtxImm(mPosMtx, 0);
}
/* 802E987C-802E9998 2E41BC 011C+00 0/0 1/1 0/0 .text
* scissorBounds__13J2DOrthoGraphFPQ29JGeometry8TBox2<f>PCQ29JGeometry8TBox2<f> */
void J2DOrthoGraph::scissorBounds(JGeometry::TBox2<f32>* param_0,
JGeometry::TBox2<f32> const* param_1) {
f32 widthPower = this->getWidthPower();
f32 heightPower = this->getHeightPower();
f32 ix = mBounds.i.x >= 0 ? mBounds.i.x : 0;
f32 iy = mBounds.i.y >= 0 ? mBounds.i.y : 0;
f32 f0 = ix + widthPower * (param_1->i.x - mOrtho.i.x);
f32 f2 = ix + widthPower * (param_1->f.x - mOrtho.i.x);
f32 f1 = iy + heightPower * (param_1->i.y - mOrtho.i.y);
f32 f3 = iy + heightPower * (param_1->f.y - mOrtho.i.y);
param_0->set(f0, f1, f2, f3);
param_0->intersect(mScissorBounds);
}
/* 802E9998-802E9AC4 2E42D8 012C+00 0/0 6/6 0/0 .text J2DDrawLine__FffffQ28JUtility6TColori */
void J2DDrawLine(f32 x1, f32 y1, f32 x2, f32 y2, JUtility::TColor color,
int line_width) {
J2DOrthoGraph oGrph;
oGrph.setLineWidth(line_width);
oGrph.setColor(color);
oGrph.moveTo(x1, y1);
oGrph.lineTo(x2, y2);
}
/* 802E9AC4-802E9B0C 2E4404 0048+00 0/0 10/10 0/0 .text J2DFillBox__FffffQ28JUtility6TColor */
void J2DFillBox(f32 x, f32 y, f32 width, f32 height, JUtility::TColor color) {
J2DFillBox(JGeometry::TBox2<f32>(x, y, x + width, y + height),
color);
}
/* 802E9B0C-802E9B9C 2E444C 0090+00 1/1 0/0 0/0 .text
* J2DFillBox__FRCQ29JGeometry8TBox2<f>Q28JUtility6TColor */
void J2DFillBox(JGeometry::TBox2<f32> const& box, JUtility::TColor color) {
J2DOrthoGraph oGrph;
oGrph.setColor(color);
oGrph.fillBox(box);
}
/* 802E9B9C-802E9BE8 2E44DC 004C+00 0/0 5/5 0/0 .text J2DDrawFrame__FffffQ28JUtility6TColorUc */
void J2DDrawFrame(f32 x, f32 y, f32 width, f32 height, JUtility::TColor color,
u8 line_width) {
J2DDrawFrame(JGeometry::TBox2<f32>(x, y, x + width, y + height),
color, line_width);
}
/* 802E9BE8-802E9C88 2E4528 00A0+00 1/1 0/0 0/0 .text
* J2DDrawFrame__FRCQ29JGeometry8TBox2<f>Q28JUtility6TColorUc */
void J2DDrawFrame(JGeometry::TBox2<f32> const& box, JUtility::TColor color, u8 line_width) {
J2DOrthoGraph oGrph;
oGrph.setColor(color);
oGrph.setLineWidth(line_width);
oGrph.drawFrame(box);
}
+971
View File
@@ -0,0 +1,971 @@
#include "JSystem/J2DGraph/J2DPane.h"
#include "JSystem/J2DGraph/J2DAnimation.h"
#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/JSupport/JSURandomInputStream.h"
#include "JSystem/JUtility/JUTResource.h"
/* 802F5BF8-802F5CB8 2F0538 00C0+00 0/0 10/10 0/0 .text __ct__7J2DPaneFv */
J2DPane::J2DPane() : mBounds(), mGlobalBounds(), mClipRect(), mPaneTree(this) {
mTransform = NULL;
mKind = 'PAN1';
mVisible = true;
mInfoTag = 0;
mUserInfoTag = 0;
mBounds.set(0, 0, 0, 0);
initiate();
changeUseTrans(NULL);
calcMtx();
}
/* 802F5CB8-802F5D40 2F05F8 0088+00 3/3 0/0 0/0 .text initiate__7J2DPaneFv */
void J2DPane::initiate() {
field_0x4 = -1;
mRotateOffsetY = mRotateOffsetX = mRotateZ = mRotateY = mRotateX = 0;
mBasePosition = 0;
mRotAxis = ROTATE_Z;
mScaleY = mScaleX = 1;
mCullMode = GX_CULL_NONE;
mAlpha = 255;
mIsInfluencedAlpha = true;
mColorAlpha = 255;
mConnected = false;
calcMtx();
}
/* 802F5D40-802F5DD0 2F0680 0090+00 0/0 1/1 0/0 .text
* __ct__7J2DPaneFP7J2DPanebUxRCQ29JGeometry8TBox2<f> */
J2DPane::J2DPane(J2DPane* p_pane, bool visible, u64 tag, JGeometry::TBox2<f32> const& bounds)
: mBounds(), mGlobalBounds(), mClipRect(), mPaneTree(this) {
mTransform = NULL;
initialize(p_pane, visible, tag, bounds);
}
/* 802F5DD0-802F5E88 2F0710 00B8+00 1/1 0/0 0/0 .text
* initialize__7J2DPaneFP7J2DPanebUxRCQ29JGeometry8TBox2<f> */
void J2DPane::initialize(J2DPane* p_pane, bool visible, u64 infoTag,
JGeometry::TBox2<f32> const& bounds) {
mKind = 'PAN1';
mVisible = visible;
mInfoTag = infoTag;
mUserInfoTag = 0;
mBounds.set(bounds);
if (p_pane != NULL) {
p_pane->mPaneTree.appendChild(&mPaneTree);
}
initiate();
changeUseTrans(p_pane);
calcMtx();
}
/* 802F5E88-802F5F08 2F07C8 0080+00 0/0 3/3 0/0 .text __ct__7J2DPaneFUxRCQ29JGeometry8TBox2<f> */
J2DPane::J2DPane(u64 infoTag, JGeometry::TBox2<f32> const& bounds)
: mBounds(), mGlobalBounds(), mClipRect(), mPaneTree(this) {
mTransform = NULL;
initialize(infoTag, bounds);
}
/* 802F5F08-802F5F9C 2F0848 0094+00 1/1 0/0 0/0 .text
* initialize__7J2DPaneFUxRCQ29JGeometry8TBox2<f> */
void J2DPane::initialize(u64 tag, const JGeometry::TBox2<f32>& bounds) {
mKind = 'PAN1';
mVisible = true;
mInfoTag = tag;
mUserInfoTag = 0;
mBounds.set(bounds);
initiate();
changeUseTrans(NULL);
calcMtx();
}
/* 802F5F9C-802F60C4 2F08DC 0128+00 0/0 1/1 0/0 .text
* __ct__7J2DPaneFP7J2DPaneP20JSURandomInputStreamUc */
J2DPane::J2DPane(J2DPane* p_pane, JSURandomInputStream* p_stream, u8 isEx) : mPaneTree(this) {
mTransform = NULL;
if (!isEx) {
s32 position = p_stream->getPosition();
J2DPaneHeader header;
p_stream->read(&header, sizeof(header));
mKind = header.mKind;
position += header.mSize;
makePaneStream(p_pane, p_stream);
p_stream->seek(position, JSUStreamSeekFrom_SET);
} else {
s32 position = p_stream->getPosition();
J2DPaneHeader header;
p_stream->peek(&header, sizeof(header));
mKind = header.mKind;
position += header.mSize;
makePaneExStream(p_pane, p_stream);
p_stream->seek(position, JSUStreamSeekFrom_SET);
}
}
/* 802F60C4-802F63F8 2F0A04 0334+00 1/1 3/3 0/0 .text
* makePaneStream__7J2DPaneFP7J2DPaneP20JSURandomInputStream */
void J2DPane::makePaneStream(J2DPane* p_pane, JSURandomInputStream* p_stream) {
u8 unk;
p_stream->read(&unk, 1);
p_stream->read(&mVisible, 1);
p_stream->skip(2);
mInfoTag = p_stream->read32b();
f32 x0 = p_stream->readS16();
f32 y0 = p_stream->readS16();
f32 x1 = x0 + p_stream->readS16();
f32 y1 = y0 + p_stream->readS16();
mBounds.set(x0, y0, x1, y1);
unk -= 6;
mRotateX = 0;
mRotateY = 0;
mRotateZ = 0;
if (unk != 0) {
mRotateZ = p_stream->readU16();
unk--;
}
if (unk != 0) {
mBasePosition = p_stream->readU8();
unk--;
} else {
mBasePosition = 0;
}
mRotAxis = ROTATE_Z;
mAlpha = 255;
if (unk != 0) {
mAlpha = p_stream->readU8();
unk--;
}
mIsInfluencedAlpha = true;
if (unk != 0) {
mIsInfluencedAlpha = p_stream->readU8();
unk--;
}
p_stream->align(4);
if (p_pane != NULL) {
p_pane->mPaneTree.appendChild(&mPaneTree);
}
mCullMode = GX_CULL_NONE;
mColorAlpha = 255;
mConnected = false;
field_0x4 = 0xFFFF;
mScaleX = 1;
mScaleY = 1;
mUserInfoTag = 0;
changeUseTrans(p_pane);
calcMtx();
}
/* 802F63F8-802F658C 2F0D38 0194+00 4/4 0/0 0/0 .text changeUseTrans__7J2DPaneFP7J2DPane
*/
void J2DPane::changeUseTrans(J2DPane* p_pane) {
f32 xOffset = 0;
f32 yOffset = 0;
if (mBasePosition % 3 == 1) {
xOffset = mBounds.getWidth() / 2;
} else if (mBasePosition % 3 == 2) {
xOffset = mBounds.getWidth();
}
if (mBasePosition / 3 == 1) {
yOffset = mBounds.getHeight() / 2;
} else if (mBasePosition / 3 == 2) {
yOffset = mBounds.getHeight();
}
mTranslateX = mBounds.i.x + xOffset;
mTranslateY = mBounds.i.y + yOffset;
mRotateOffsetX = xOffset;
mRotateOffsetY = yOffset;
f32 addX = -mTranslateX;
f32 addY = -mTranslateY;
mBounds.addPos(addX, addY);
if (p_pane != NULL) {
u8 otherBasePos = p_pane->mBasePosition;
f32 width = p_pane->getWidth();
f32 height = p_pane->getHeight();
if (otherBasePos % 3 == 1) {
mTranslateX -= width / 2;
} else if (otherBasePos % 3 == 2) {
mTranslateX -= width;
}
if (otherBasePos / 3 == 1) {
mTranslateY -= height / 2;
} else if (otherBasePos / 3 == 2) {
mTranslateY -= height;
}
}
}
/* 802F658C-802F666C 2F0ECC 00E0+00 1/0 4/4 0/0 .text __dt__7J2DPaneFv */
J2DPane::~J2DPane() {
JSUTreeIterator<J2DPane> iterator;
for (iterator = mPaneTree.getFirstChild(); iterator != mPaneTree.getEndChild();) {
J2DPane* child = (iterator++).getObject();
delete child;
}
}
/* 802F666C-802F6714 2F0FAC 00A8+00 0/0 2/2 0/0 .text appendChild__7J2DPaneFP7J2DPane */
bool J2DPane::appendChild(J2DPane* p_child) {
if (p_child == NULL)
return false;
const J2DPane* parent = p_child->getParentPane();
bool result = mPaneTree.appendChild(&p_child->mPaneTree);
if (result && parent == NULL) {
p_child->add(mBounds.i.x, mBounds.i.y);
p_child->calcMtx();
}
return result;
}
/* 802F6714-802F67E0 2F1054 00CC+00 0/0 1/1 0/0 .text insertChild__7J2DPaneFP7J2DPaneP7J2DPane */
bool J2DPane::insertChild(J2DPane* p_prev, J2DPane* p_child) {
if (p_child == NULL)
return false;
const J2DPane* parent = p_child->getParentPane();
bool result =
mPaneTree.insertChild(p_prev != NULL ? &p_prev->mPaneTree : NULL, &p_child->mPaneTree);
if (result && parent == NULL) {
p_child->add(mBounds.i.x, mBounds.i.y);
p_child->calcMtx();
}
return result;
}
/* 802F67E0-802F6D18 2F1120 0538+00 0/0 1/1 0/0 .text draw__7J2DPaneFffPC14J2DGrafContextbb */
void J2DPane::draw(f32 x, f32 y, J2DGrafContext const* p_grafCtx, bool isOrthoGraf, bool param_4) {
bool unkBool = param_4 && mVisible;
if (p_grafCtx->getGrafType() != 1) {
isOrthoGraf = false;
}
JSUTree<J2DPane>* parentTree = mPaneTree.getParent();
J2DPane* parent = NULL;
if (parentTree != NULL) {
parent = parentTree->getObject();
}
if (mBounds.isValid()) {
mGlobalBounds = mBounds;
f32 addX = mTranslateX;
f32 addY = mTranslateY;
mGlobalBounds.addPos(addX, addY);
if (unkBool) {
mClipRect = mBounds;
rewriteAlpha();
}
if (parent != NULL) {
f32 width = parent->mGlobalBounds.i.x - parent->mBounds.i.x;
f32 height = parent->mGlobalBounds.i.y - parent->mBounds.i.y;
mGlobalBounds.addPos(width, height);
MTXConcat(parent->mGlobalMtx, mPositionMtx, mGlobalMtx);
if (unkBool) {
if (isOrthoGraf) {
mClipRect = mGlobalBounds;
mClipRect.intersect(parent->mClipRect);
}
mColorAlpha = mAlpha;
if (mIsInfluencedAlpha) {
mColorAlpha = (mAlpha * parent->mColorAlpha) / 255;
}
}
} else {
mGlobalBounds.addPos(x, y);
makeMatrix(mTranslateX + x, mTranslateY + y);
MTXCopy(mPositionMtx, mGlobalMtx);
mClipRect = mGlobalBounds;
mColorAlpha = mAlpha;
}
JGeometry::TBox2<f32> scissorBounds(0, 0, 0, 0);
if (unkBool && isOrthoGraf) {
((J2DOrthoGraph*)p_grafCtx)->scissorBounds(&scissorBounds, &mClipRect);
}
if (unkBool && (mClipRect.isValid() || !isOrthoGraf)) {
J2DGrafContext tmpGraf(*p_grafCtx);
if (isOrthoGraf) {
tmpGraf.scissor(scissorBounds);
tmpGraf.setScissor();
}
GXSetCullMode((GXCullMode)mCullMode);
drawSelf(x, y, &tmpGraf.mPosMtx);
}
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
iter.getObject()->draw(0, 0, p_grafCtx, isOrthoGraf, unkBool);
}
}
}
/* 802F6D18-802F6F60 2F1658 0248+00 2/2 4/4 0/0 .text place__7J2DPaneFRCQ29JGeometry8TBox2<f> */
void J2DPane::place(JGeometry::TBox2<f32> const& box) {
JGeometry::TBox2<f32> tmpBox;
if (mBounds.i.x == 0) {
tmpBox.i.x = 0;
tmpBox.f.x = box.getWidth();
mTranslateX = box.i.x;
} else if (mBounds.f.x == 0) {
tmpBox.i.x = -box.getWidth();
tmpBox.f.x = 0;
mTranslateX = box.f.x;
} else {
tmpBox.i.x = -(box.getWidth() / 2);
tmpBox.f.x = box.getWidth() / 2;
mTranslateX = (box.i.x + box.f.x) / 2;
}
if (mBounds.i.y == 0) {
tmpBox.i.y = 0;
tmpBox.f.y = box.getHeight();
mTranslateY = box.i.y;
} else if (mBounds.f.y == 0) {
tmpBox.i.y = -box.getHeight();
tmpBox.f.y = 0;
mTranslateY = box.f.y;
} else {
tmpBox.i.y = -(box.getHeight() / 2);
tmpBox.f.y = box.getHeight() / 2;
mTranslateY = (box.i.y + box.f.y) / 2;
}
f32 xOff = tmpBox.i.x - mBounds.i.x;
f32 yOff = tmpBox.i.y - mBounds.i.y;
for (J2DPane* child = getFirstChildPane(); child != NULL; child = child->getNextChildPane()) {
child->mTranslateX += xOff;
child->mTranslateY += yOff;
if (xOff != 0 || yOff != 0) {
child->calcMtx();
}
}
mBounds = tmpBox;
J2DPane* parent = getParentPane();
if (parent != NULL) {
mTranslateX += parent->mBounds.i.x;
mTranslateY += parent->mBounds.i.y;
}
calcMtx();
}
/* 802F6F60-802F6FB4 2F18A0 0054+00 1/0 7/0 0/0 .text move__7J2DPaneFff */
void J2DPane::move(f32 x, f32 y) {
f32 width = getWidth();
f32 height = getHeight();
place(JGeometry::TBox2<f32>(x, y, x + width, y + height));
}
/* 802F6FB4-802F6FF8 2F18F4 0044+00 1/0 7/0 0/0 .text add__7J2DPaneFff */
void J2DPane::add(f32 x, f32 y) {
mTranslateX += x;
mTranslateY += y;
calcMtx();
}
/* 802F6FF8-802F7100 2F1938 0108+00 1/0 5/2 0/0 .text resize__7J2DPaneFff */
void J2DPane::resize(f32 x, f32 y) {
JGeometry::TBox2<f32> box = mBounds;
f32 tX = mTranslateX;
f32 tY = mTranslateY;
box.addPos(tX, tY);
const J2DPane* parent = getParentPane();
if (parent != NULL) {
f32 xAdd = -parent->mBounds.i.x;
f32 yAdd = -parent->mBounds.i.y;
box.addPos(xAdd, yAdd);
}
box.f.x = box.i.x + x;
box.f.y = box.i.y + y;
place(box);
}
/* ############################################################################################## */
/* 804349B0-804349C0 0616D0 0010+00 2/2 0/0 0/0 .bss static_mBounds__7J2DPane */
JGeometry::TBox2<f32> J2DPane::static_mBounds(0, 0, 0, 0);
/* 802F7100-802F71DC 2F1A40 00DC+00 0/0 25/25 1/1 .text getBounds__7J2DPaneFv */
JGeometry::TBox2<f32>& J2DPane::getBounds() {
static_mBounds = mBounds;
f32 tX = mTranslateX;
f32 tY = mTranslateY;
static_mBounds.addPos(tX, tY);
const J2DPane* parent = getParentPane();
if (parent != NULL) {
f32 xAdd = -parent->mBounds.i.x;
f32 yAdd = -parent->mBounds.i.y;
static_mBounds.addPos(xAdd, yAdd);
}
return static_mBounds;
}
/* 802F71DC-802F720C 2F1B1C 0030+00 0/0 12/12 0/0 .text rotate__7J2DPaneFff13J2DRotateAxisf */
void J2DPane::rotate(f32 offsetX, f32 offsetY, J2DRotateAxis axis, f32 angle) {
mRotateOffsetX = offsetX;
mRotateOffsetY = offsetY;
mRotAxis = axis;
rotate(angle);
}
/* 802F720C-802F7264 2F1B4C 0058+00 1/1 0/0 0/0 .text rotate__7J2DPaneFf */
void J2DPane::rotate(f32 angle) {
if (mRotAxis == ROTATE_X) {
mRotateX = angle;
} else if (mRotAxis == ROTATE_Y) {
mRotateY = angle;
} else {
mRotateZ = angle;
}
calcMtx();
}
/* 802F7264-802F72E0 2F1BA4 007C+00 0/0 2/2 0/0 .text clip__7J2DPaneFRCQ29JGeometry8TBox2<f> */
void J2DPane::clip(JGeometry::TBox2<f32> const& bounds) {
JGeometry::TBox2<f32> boxA(bounds);
JGeometry::TBox2<f32> boxB(mGlobalBounds);
boxA.addPos(boxB.i);
mClipRect.intersect(boxA);
}
/* 802F72E0-802F7388 2F1C20 00A8+00 1/0 7/1 0/0 .text search__7J2DPaneFUx */
J2DPane* J2DPane::search(u64 tag) {
if (tag == mInfoTag) {
return this;
}
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
if (J2DPane* result = iter.getObject()->search(tag)) {
return result;
}
}
return NULL;
}
/* 802F7388-802F7430 2F1CC8 00A8+00 1/0 7/1 0/0 .text searchUserInfo__7J2DPaneFUx */
J2DPane* J2DPane::searchUserInfo(u64 tag) {
if (tag == mUserInfoTag) {
return this;
}
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
if (J2DPane* result = iter.getObject()->searchUserInfo(tag)) {
return result;
}
}
return NULL;
}
/* 802F7430-802F74B8 2F1D70 0088+00 1/0 7/7 0/0 .text isUsed__7J2DPaneFPC7ResTIMG */
bool J2DPane::isUsed(const ResTIMG* p_timg) {
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
if (iter.getObject()->isUsed(p_timg))
return true;
}
return false;
}
/* 802F74B8-802F7540 2F1DF8 0088+00 1/0 7/7 0/0 .text isUsed__7J2DPaneFPC7ResFONT */
bool J2DPane::isUsed(const ResFONT* p_font) {
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
if (iter.getObject()->isUsed(p_font))
return true;
}
return false;
}
/* 802F7540-802F7680 2F1E80 0140+00 1/0 7/0 0/0 .text makeMatrix__7J2DPaneFffff */
void J2DPane::makeMatrix(f32 param_0, f32 param_1, f32 param_2, f32 param_3) {
f32 tmpX = mRotateOffsetX - param_2;
f32 tmpY = mRotateOffsetY - param_3;
Mtx rotX, rotY, rotZ, rotMtx, mtx, tmp;
MTXTrans(mtx, -tmpX, -tmpY, 0);
MTXRotRad(rotX, 'x', DEG_TO_RAD(mRotateX));
MTXRotRad(rotY, 'y', DEG_TO_RAD(mRotateY));
MTXRotRad(rotZ, 'z', DEG_TO_RAD(-mRotateZ));
MTXConcat(rotZ, rotX, tmp);
MTXConcat(rotY, tmp, rotMtx);
MTXScaleApply(mtx, mPositionMtx, mScaleX, mScaleY, 1);
MTXConcat(rotMtx, mPositionMtx, tmp);
MTXTransApply(tmp, mPositionMtx, param_0 + tmpX, param_1 + tmpY, 0);
}
/* 802F7680-802F76F8 2F1FC0 0078+00 1/0 7/3 0/0 .text setCullBack__7J2DPaneF11_GXCullMode
*/
void J2DPane::setCullBack(GXCullMode mode) {
mCullMode = mode;
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
iter.getObject()->setCullBack(mode);
}
}
/* 802F76F8-802F77D0 2F2038 00D8+00 0/0 8/8 0/0 .text setBasePosition__7J2DPaneF15J2DBasePosition
*/
void J2DPane::setBasePosition(J2DBasePosition position) {
mBasePosition = position;
mRotAxis = ROTATE_Z;
mRotateOffsetX = 0;
if (position % 3 == 1) {
f32 width = getWidth();
mRotateOffsetX = width / 2;
} else if (position % 3 == 2) {
f32 width = getWidth();
mRotateOffsetX = width;
}
mRotateOffsetY = 0;
if (position / 3 == 1) {
f32 height = getHeight();
mRotateOffsetY = height / 2;
} else if (position / 3 == 2) {
f32 height = getHeight();
mRotateOffsetY = height;
}
calcMtx();
}
/* 802F77D0-802F79A8 2F2110 01D8+00 0/0 1/1 0/0 .text setInfluencedAlpha__7J2DPaneFbb */
void J2DPane::setInfluencedAlpha(bool influencedAlpha, bool param_1) {
if (param_1 && mIsInfluencedAlpha != influencedAlpha) {
J2DPane* parent = getParentPane();
u8 alpha = 255;
for (; parent != NULL; parent = parent->getParentPane()) {
if (parent->getAlpha() == 0) {
alpha = 0;
break;
}
alpha = (((f32)alpha) * parent->getAlpha() / 255);
if (!parent->mIsInfluencedAlpha) {
break;
}
}
if (influencedAlpha) {
if (alpha == 0) {
setAlpha(0);
} else {
f32 fAlpha = ((f32)mAlpha) / alpha * 255;
u8 alpha;
if (fAlpha > 255) {
alpha = 255;
} else {
alpha = fAlpha;
}
setAlpha(alpha);
}
} else {
setAlpha((f32)(alpha * mAlpha) / 255);
}
}
mIsInfluencedAlpha = influencedAlpha;
}
/* 802F79A8-802F7A8C 2F22E8 00E4+00 0/0 3/3 0/0 .text getGlbVtx__7J2DPaneCFUc */
Vec J2DPane::getGlbVtx(u8 param_0) const {
Vec out;
if (param_0 >= 4) {
out.x = 0;
out.y = 0;
out.z = 0;
return out;
} else {
f32 x, y;
if (param_0 & 1) {
x = mBounds.f.x;
} else {
x = mBounds.i.x;
}
if (param_0 & 2) {
y = mBounds.f.y;
} else {
y = mBounds.i.y;
}
out.x = x * mGlobalMtx[0][0] + y * mGlobalMtx[0][1] + mGlobalMtx[0][3];
out.y = x * mGlobalMtx[1][0] + y * mGlobalMtx[1][1] + mGlobalMtx[1][3];
out.z = x * mGlobalMtx[2][0] + y * mGlobalMtx[2][1] + mGlobalMtx[2][3];
return out;
}
}
/* 802F7A8C-802F7AC4 2F23CC 0038+00 1/1 15/15 0/0 .text getFirstChildPane__7J2DPaneFv */
J2DPane* J2DPane::getFirstChildPane() {
if (!getFirstChild())
return NULL;
return getFirstChild()->getObject();
}
/* 802F7AC4-802F7AFC 2F2404 0038+00 1/1 8/8 0/0 .text getNextChildPane__7J2DPaneFv */
J2DPane* J2DPane::getNextChildPane() {
if (getPaneTree()->getNextChild() == NULL)
return NULL;
return getPaneTree()->getNextChild()->getObject();
}
/* 802F7AFC-802F7B18 2F243C 001C+00 6/6 11/11 0/0 .text getParentPane__7J2DPaneFv */
J2DPane* J2DPane::getParentPane() {
if (getPaneTree()->getParent() == NULL)
return NULL;
return getPaneTree()->getParent()->getObject();
}
/* name unknown */
struct J2DPaneInfo {
/* 0x00 */ u32 mKind;
/* 0x04 */ u32 mSize;
/* 0x08 */ u16 field_0x8;
/* 0x0A */ u16 field_0xa;
/* 0x0B */ u8 mVisible;
/* 0x0C */ u8 mBasePosition;
/* 0x10 */ u64 mInfoTag;
/* 0x18 */ u64 mUserInfoTag;
/* 0x20 */ f32 mRotOffsetX;
/* 0x24 */ f32 mRotOffsetY;
/* 0x28 */ f32 mScaleX;
/* 0x2C */ f32 mScaleY;
/* 0x30 */ f32 mRotateX;
/* 0x34 */ f32 mRotateY;
/* 0x38 */ f32 mRotateZ;
/* 0x3C */ f32 mTranslateX;
/* 0x40 */ f32 mTranslateY;
}; // Size: 0x48
/* 802F7B18-802F7D00 2F2458 01E8+00 1/1 6/6 0/0 .text
* makePaneExStream__7J2DPaneFP7J2DPaneP20JSURandomInputStream */
void J2DPane::makePaneExStream(J2DPane* p_parent, JSURandomInputStream* p_stream) {
p_stream->getPosition();
J2DPaneInfo data;
p_stream->read(&data, sizeof(data));
field_0x4 = data.field_0xa;
mVisible = !!data.mVisible;
mInfoTag = data.mInfoTag;
mUserInfoTag = data.mUserInfoTag;
mScaleX = data.mScaleX;
mScaleY = data.mScaleY;
mRotateX = data.mRotateX;
mRotateY = data.mRotateY;
mRotateZ = data.mRotateZ;
mTranslateX = data.mTranslateX;
mTranslateY = data.mTranslateY;
mRotAxis = ROTATE_Z;
if (data.mBasePosition % 3 == 0) {
mRotateOffsetX = 0;
} else if (data.mBasePosition % 3 == 1) {
mRotateOffsetX = data.mRotOffsetX / 2;
} else {
mRotateOffsetX = data.mRotOffsetX;
}
if (data.mBasePosition / 3 == 0) {
mRotateOffsetY = 0;
} else if (data.mBasePosition / 3 == 1) {
mRotateOffsetY = data.mRotOffsetY / 2;
} else {
mRotateOffsetY = data.mRotOffsetY;
}
mBounds.set(-mRotateOffsetX, -mRotateOffsetY, data.mRotOffsetX - mRotateOffsetX,
data.mRotOffsetY - mRotateOffsetY);
mBasePosition = data.mBasePosition;
mAlpha = 255;
mIsInfluencedAlpha = false;
if (p_parent != NULL) {
p_parent->mPaneTree.appendChild(&mPaneTree);
}
mCullMode = GX_CULL_NONE;
mColorAlpha = 255;
mConnected = false;
calcMtx();
}
/* 802F7D00-802F7DB8 2F2640 00B8+00 0/0 1/1 0/0 .text J2DCast_F32_to_S16__7J2DPaneFfUc */
s16 J2DPane::J2DCast_F32_to_S16(f32 value, u8 arg2) {
if (arg2 >= 0xF) {
return 0;
} else {
f32 tmpF;
tmpF = value;
if (value < 0) {
tmpF = -value;
}
int tmp = tmpF * (1 << arg2);
if (tmp >= 0x8000) {
if (value < 0) {
return 0x8000;
} else {
return 0x7FFF;
}
} else if (value < 0) {
return ~tmp + 1;
} else {
return tmp;
}
}
}
/* 802F7DB8-802F7EF4 2F26F8 013C+00 0/0 3/3 0/0 .text
* getPointer__7J2DPaneFP20JSURandomInputStreamUlP10JKRArchive */
void* J2DPane::getPointer(JSURandomInputStream* p_stream, u32 param_1, JKRArchive* p_archive) {
JUTResReference resRef;
void* pointer;
if (p_archive == NULL) {
if (J2DScreen::getDataManage() == NULL) {
pointer = resRef.getResource(p_stream, param_1, NULL);
} else {
s32 prevPos = p_stream->getPosition();
pointer = resRef.getResource(p_stream, param_1, NULL);
if (pointer == NULL) {
p_stream->seek(prevPos, JSUStreamSeekFrom_SET);
pointer = J2DScreen::getDataManage()->get(p_stream);
}
}
} else {
s32 prevPos = p_stream->getPosition();
pointer = resRef.getResource(p_stream, param_1, p_archive);
if (pointer == NULL) {
p_stream->seek(prevPos, JSUStreamSeekFrom_SET);
pointer = resRef.getResource(p_stream, param_1, NULL);
}
if (pointer == NULL) {
if (J2DScreen::getDataManage() != NULL) {
p_stream->seek(prevPos, JSUStreamSeekFrom_SET);
pointer = J2DScreen::getDataManage()->get(p_stream);
}
}
}
return pointer;
}
/* 802F7EF4-802F7FC4 2F2834 00D0+00 2/0 7/4 0/0 .text setAnimation__7J2DPaneFP10J2DAnmBase */
void J2DPane::setAnimation(J2DAnmBase* p_anm) {
if (p_anm != NULL) {
switch (p_anm->getKind()) {
default:
break;
case KIND_TRANSFORM:
setAnimation(static_cast<J2DAnmTransform*>(p_anm));
break;
case KIND_COLOR:
setAnimation(static_cast<J2DAnmColor*>(p_anm));
break;
case KIND_VTX_COLOR:
setAnimation(static_cast<J2DAnmVtxColor*>(p_anm));
break;
case KIND_TEXTURE_SRT:
setAnimation(static_cast<J2DAnmTextureSRTKey*>(p_anm));
break;
case KIND_TEX_PATTERN:
setAnimation(static_cast<J2DAnmTexPattern*>(p_anm));
break;
case KIND_VISIBILITY:
setAnimation(static_cast<J2DAnmVisibilityFull*>(p_anm));
break;
case KIND_TEV_REG:
setAnimation(static_cast<J2DAnmTevRegKey*>(p_anm));
break;
}
}
}
/* 802F7FC4-802F7FCC -00001 0008+00 0/0 0/0 0/0 .text setAnimation__7J2DPaneFP15J2DAnmTransform */
void J2DPane::setAnimation(J2DAnmTransform* p_anm) {
mTransform = p_anm;
}
/* 802F7FCC-802F8004 2F290C 0038+00 0/0 57/57 0/0 .text animationTransform__7J2DPaneFv */
void J2DPane::animationTransform() {
if (mTransform != NULL)
animationTransform(mTransform);
}
/* 802F8004-802F8080 2F2944 007C+00 1/0 7/1 0/0 .text clearAnmTransform__7J2DPaneFv */
void J2DPane::clearAnmTransform() {
J2DAnmTransform* none = NULL;
setAnimation(none);
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
iter.getObject()->clearAnmTransform();
}
}
/* 802F8080-802F8118 2F29C0 0098+00 1/0 7/0 0/0 .text
* animationTransform__7J2DPaneFPC15J2DAnmTransform */
const J2DAnmTransform* J2DPane::animationTransform(const J2DAnmTransform* p_transform) {
const J2DAnmTransform* p = p_transform;
if (mTransform != NULL)
p = mTransform;
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
iter.getObject()->animationTransform(p);
}
updateTransform(p);
return p;
}
/* 802F8118-802F81A0 2F2A58 0088+00 1/0 8/1 0/0 .text
* setVisibileAnimation__7J2DPaneFP20J2DAnmVisibilityFull */
void J2DPane::setVisibileAnimation(J2DAnmVisibilityFull* p_visibility) {
setAnimationVF(p_visibility);
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
iter.getObject()->setVisibileAnimation(p_visibility);
}
}
/* 802F81A0-802F8228 2F2AE0 0088+00 1/0 8/1 0/0 .text
* setVtxColorAnimation__7J2DPaneFP14J2DAnmVtxColor */
void J2DPane::setVtxColorAnimation(J2DAnmVtxColor* p_vtxColor) {
setAnimationVC(p_vtxColor);
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
iter.getObject()->setVtxColorAnimation(p_vtxColor);
}
}
/* 802F8228-802F82C0 2F2B68 0098+00 1/0 7/3 0/0 .text animationPane__7J2DPaneFPC15J2DAnmTransform
*/
const J2DAnmTransform* J2DPane::animationPane(const J2DAnmTransform* p_transform) {
const J2DAnmTransform* p = p_transform;
if (mTransform != NULL)
p = mTransform;
JSUTreeIterator<J2DPane> iter;
for (iter = mPaneTree.getFirstChild(); iter != mPaneTree.getEndChild(); ++iter) {
iter.getObject()->animationPane(p);
}
updateTransform(p);
return p;
}
/* 802F82C0-802F83C8 2F2C00 0108+00 2/2 0/0 0/0 .text
* updateTransform__7J2DPaneFPC15J2DAnmTransform */
void J2DPane::updateTransform(J2DAnmTransform const* p_anmTransform) {
if (field_0x4 != 0xFFFF && p_anmTransform != NULL) {
J3DTransformInfo info;
p_anmTransform->getTransform(field_0x4, &info);
mScaleX = info.mScale.x;
mScaleY = info.mScale.z;
mRotateX = (u16)info.mRotation.x * 360.0f / 65535.0f;
mRotateY = (u16)info.mRotation.z * 360.0f / 65535.0f;
mRotateZ = (u16)info.mRotation.y * 360.0f / 65535.0f;
mTranslateX = info.mTranslate.x;
mTranslateY = info.mTranslate.z;
calcMtx();
}
}
/* 802F83C8-802F83CC 2F2D08 0004+00 1/0 0/0 0/0 .text drawSelf__7J2DPaneFffPA3_A4_f */
void J2DPane::drawSelf(f32, f32, f32 (*)[3][4]) {
/* empty function */
}
/* 802F83CC-802F83D0 2F2D0C 0004+00 1/0 1/0 0/0 .text rewriteAlpha__7J2DPaneFv */
void J2DPane::rewriteAlpha() {
/* empty function */
}
/* 802F83D0-802F83FC 2F2D10 002C+00 1/0 6/0 0/0 .text
* setAnimationVF__7J2DPaneFP20J2DAnmVisibilityFull */
void J2DPane::setAnimationVF(J2DAnmVisibilityFull* p_visibility) {
setAnimation(p_visibility);
}
/* 802F83FC-802F8428 2F2D3C 002C+00 1/0 6/0 0/0 .text setAnimationVC__7J2DPaneFP14J2DAnmVtxColor
*/
void J2DPane::setAnimationVC(J2DAnmVtxColor* p_vtxColor) {
setAnimation(p_vtxColor);
}
/* 802F8428-802F8464 2F2D68 003C+00 1/0 4/0 0/0 .text setCullBack__7J2DPaneFb */
void J2DPane::setCullBack(bool cull) {
GXCullMode mode;
if (!cull)
mode = GX_CULL_NONE;
else
mode = GX_CULL_BACK;
setCullBack(mode);
}
/* 802F8464-802F8474 2F2DA4 0010+00 1/0 5/0 0/0 .text setConnectParent__7J2DPaneFb */
bool J2DPane::setConnectParent(bool connected) {
mConnected = false;
return false;
}
/* 802F8474-802F8478 2F2DB4 0004+00 1/0 7/0 0/0 .text update__7J2DPaneFv */
void J2DPane::update() {
/* empty function */
}
/* 802F8478-802F847C 2F2DB8 0004+00 1/0 1/0 0/0 .text drawSelf__7J2DPaneFff */
void J2DPane::drawSelf(f32, f32) {
/* empty function */
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+600
View File
@@ -0,0 +1,600 @@
//
// Generated By: dol2asm
// Translation Unit: J2DPrint
//
#include "JSystem/J2DGraph/J2DPrint.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JUtility/JUTFont.h"
#include "stdio.h"
#include "stdlib.h"
#include "global.h"
/* ############################################################################################## */
/* 80451580-80451584 000A80 0004+00 3/3 0/0 0/0 .sbss mStrBuff__8J2DPrint */
const u8* J2DPrint::mStrBuff;
/* 80451584-80451588 000A84 0004+00 1/1 0/0 0/0 .sbss None */
static bool sStrBufInitialized;
/* 80451588-8045158C 000A88 0004+00 3/3 0/0 0/0 .sbss mStrBuffSize__8J2DPrint */
size_t J2DPrint::mStrBuffSize;
/* 8045158C-80451590 000A8C 0004+00 2/2 0/0 0/0 .sbss None */
static u8 data_8045158C[4];
/* 802F42F0-802F4394 2EEC30 00A4+00 1/1 0/0 0/0 .text J2DPrint_print_alpha_va */
f32 J2DPrint_print_alpha_va(J2DPrint* pPrint, u8 param_1, const char* fmt, va_list args) {
pPrint->initchar();
s32 tmp = vsnprintf((char*)J2DPrint::mStrBuff, J2DPrint::mStrBuffSize, fmt, args);
J2DPrint::TSize size;
if (tmp < 0) {
return 0.0f;
} else if (tmp >= J2DPrint::mStrBuffSize) {
tmp = J2DPrint::mStrBuffSize - 1;
data_8045158C[0] = 1;
}
pPrint->parse(J2DPrint::mStrBuff, tmp, 0x80000000 - 1, NULL, size, param_1, true);
return size.field_0x0;
}
/* 802F4394-802F4420 2EECD4 008C+00 0/0 6/6 0/0 .text
* __ct__8J2DPrintFP7JUTFontffQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColor
*/
J2DPrint::J2DPrint(JUTFont* pFont, f32 param_1, f32 param_2, JUtility::TColor param_3,
JUtility::TColor param_4, JUtility::TColor param_5, JUtility::TColor param_6) {
private_initiate(pFont, param_1, param_2, param_3, param_4, param_5, param_6, false);
}
/* 802F4420-802F4468 2EED60 0048+00 1/0 6/6 0/0 .text __dt__8J2DPrintFv */
J2DPrint::~J2DPrint() {}
/* 802F4468-802F4658 2EEDA8 01F0+00 1/1 0/0 0/0 .text
* private_initiate__8J2DPrintFP7JUTFontffQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorb
*/
void J2DPrint::private_initiate(JUTFont* pFont, f32 param_1, f32 param_2, JUtility::TColor param_3,
JUtility::TColor param_4, JUtility::TColor param_5,
JUtility::TColor param_6, bool param_7) {
if (mStrBuff == NULL) {
setBuffer(0x400); // r4
}
mFont = pFont;
field_0x48 = param_1;
field_0x4c = 32.0f;
if (mFont != NULL) {
f32 temp;
if (param_7 == false) {
temp = param_2;
} else {
temp = mFont->getLeading();
}
field_0x4c = temp;
}
field_0x5a = 1;
locate(0.0f, 0.0f);
mCharColor = param_3;
mGradColor = param_4;
field_0x38 = param_5;
field_0x3c = param_6;
if (mFont == NULL) {
field_0x58 = 80;
} else {
field_0x58 = mFont->getWidth() << 2;
}
if (mFont != NULL) {
setFontSize();
mFont->setGX(field_0x38, field_0x3c);
}
initchar();
}
/* 802F4658-802F46C4 2EEF98 006C+00 1/1 1/1 0/0 .text setBuffer__8J2DPrintFUl */
u8* J2DPrint::setBuffer(size_t size) {
u8* tmp = (u8*)mStrBuff;
if (sStrBufInitialized) {
delete mStrBuff;
}
mStrBuff = new (JKRHeap::sSystemHeap, 0) u8[size];
mStrBuffSize = size;
sStrBufInitialized = true;
return tmp;
}
/* 802F46C4-802F475C 2EF004 0098+00 1/1 0/0 0/0 .text setFontSize__8J2DPrintFv */
void J2DPrint::setFontSize() {
if (mFont) {
mFontSizeX = mFont->getCellWidth();
mFontSizeY = mFont->getCellHeight();
}
}
/* 802F475C-802F4778 2EF09C 001C+00 2/2 2/2 0/0 .text locate__8J2DPrintFff */
void J2DPrint::locate(f32 param_0, f32 param_1) {
field_0x24 = param_0;
field_0x28 = param_1;
field_0x2c = param_0;
mCursorV = param_1;
field_0x34 = 0.0f;
}
/* 802F4778-802F4828 2EF0B8 00B0+00 0/0 2/2 0/0 .text print__8J2DPrintFffUcPCce */
void J2DPrint::print(f32 param_0, f32 param_1, u8 param_2, char const* fmt, ...) {
locate(param_0, param_1);
va_list args;
va_start(args, fmt);
J2DPrint_print_alpha_va(this, param_2, fmt, args);
va_end(args);
}
/* 802F4828-802F4B4C 2EF168 0324+00 0/0 4/4 0/0 .text
* printReturn__8J2DPrintFPCcff18J2DTextBoxHBinding18J2DTextBoxVBindingffUc */
void J2DPrint::printReturn(char const* param_0, f32 param_1, f32 param_2,
J2DTextBoxHBinding param_3, J2DTextBoxVBinding param_4, f32 param_5,
f32 param_6, u8 param_7) {
if (mFont != NULL) {
initchar();
field_0x24 = field_0x2c;
field_0x28 = mCursorV;
size_t sVar6 = strlen(param_0);
if (sVar6 >= mStrBuffSize) {
sVar6 = mStrBuffSize - 1;
data_8045158C[0] = 1;
}
u16 local_2b0[260];
TSize aTStack_2b8;
f32 dVar10 = parse((const u8*)param_0, sVar6, param_1, local_2b0, aTStack_2b8,
param_7, false);
f32 dVar12 = mFont->getAscent()*(mFontSizeY / mFont->getCellHeight());
f32 dVar13 = dVar10 + dVar12;
switch (param_4)
{
case VBIND_TOP:
break;
case VBIND_BOTTOM:
param_6 += (s32)(param_2 - dVar13 - 0.5f);
break;
case VBIND_CENTER:
param_6 += (s32)(param_2 - dVar13 - 0.5f) / 2;
default:
break;
}
for (int iVar8 = 0; local_2b0[iVar8] != 0xffff; iVar8++) {
switch (param_3) {
case VBIND_TOP:
local_2b0[iVar8] = 0;
break;
case VBIND_BOTTOM:
local_2b0[iVar8] = param_1 - local_2b0[iVar8];
break;
case VBIND_CENTER:
f32 fVar1 = (local_2b0[iVar8]);
fVar1 = param_1 - fVar1;
f32 ratio = 0.5f;
local_2b0[iVar8] = fVar1 * ratio;
break;
}
}
initchar();
field_0x2c += param_5;
mCursorV += param_6 + dVar12;
field_0x24 = field_0x2c;
field_0x28 = mCursorV;
parse((const u8*)param_0, sVar6, param_1, local_2b0, aTStack_2b8, param_7, true);
}
}
/* 802F4B4C-802F52E8 2EF48C 079C+00 2/2 0/0 0/0 .text
* parse__8J2DPrintFPCUciiPUsRQ28J2DPrint5TSizeUcb */
f32 J2DPrint::parse(u8 const* param_0, int param_1, int param_2, u16* param_3,
J2DPrint::TSize& param_4, u8 param_5, bool param_6) {
if (mFont == NULL) {
return 0.0f;
}
const u8* local_a4 = param_0;
u16 r29 = 0;
f32 f30 = field_0x2c;
f32 f28 = mCursorV;
f32 f31 = f30;
f32 local_a8 = f28;
int r27 = *(param_0++);
f32 f29 = field_0x2c;
f32 local_ac = field_0x2c;
f32 local_b0 = mCursorV;
f32 local_b4 = mCursorV;
JUtility::TColor local_b8 = field_0x8;
JUtility::TColor local_bc = field_0xc;
f32 local_c0;
local_b8.a = local_b8.a * param_5 / 0xff;
local_bc.a = local_bc.a * param_5 / 0xff;
mFont->setGradColor(local_b8, field_0x22 ? local_bc : local_b8);
do {
bool local_f0 = false;
bool r25;
if (mFont->isLeadByte(r27)) {
r27 = (r27 << 8) | (*(param_0++));
local_f0 = true;
}
if (r27 == 0 || ((u32)param_0 - (u32)local_a4) > param_1) {
if (param_6 == 0 && param_3 != NULL) {
param_3[r29] = 0.5f + f31;
}
r29++;
break;
} else {
r25 = true;
local_c0 = field_0x2c;
if (r27 < 0x20) {
if (r27 == 0x1b) {
u16 local_e8 = doEscapeCode(&param_0, param_5);
if (local_e8 == 'HM') {
if ((param_6 == 0) && (param_3 != NULL)) {
param_3[r29] = 0.5f + f31;
}
field_0x2c = f30;
mCursorV = f28;
r29++;
if (r29 == 0x100) {
break;
}
f31 = 0.0f;
}
if (local_e8) {
r25 = false;
}
} else {
doCtrlCode(r27);
r25 = false;
if (r27 == 10) {
if ((!param_6) && (param_3 != NULL)) {
param_3[r29] = 0.5f + f31;
}
r29++;
if (r29 == 0x100) {
break;
}
f31 = 0.0f;
}
}
} else if (local_f0 && ((u32)param_0 - (u32)local_a4 > (u32)param_1)) {
if ((!param_6) && (param_3 != NULL)) {
param_3[r29] = 0.5f + f31;
}
r29++;
break;
} else {
if (mFont->isFixed()) {
field_0x34 = mFont->getFixedWidth();
} else {
JUTFont::TWidth uStack_ec;
mFont->getWidthEntry(r27, &uStack_ec);
field_0x34 = uStack_ec.field_0x1;
}
field_0x34 *= field_0x18 / mFont->getCellWidth();
f32 fVar6 = ((field_0x2c + field_0x34) - field_0x24);
fVar6 = 10000.0f * fVar6;
f32 local_c8 = s32(fVar6) / 10000.0f;
if (local_c8 > param_2 && field_0x2c > f30) {
u32 local_e4;
if (local_f0) {
local_e4 = 2;
} else {
local_e4 = 1;
}
param_0 -= local_e4;
mCursorV += field_0x14;
if (!param_6 && (param_3 != NULL)) {
param_3[r29] = 0.5f + f31;
}
r29++;
if (r29 == 0x100) {
break;
}
field_0x2c = field_0x24;
f31 = 0.0f;
r25 = false;
} else {
if (param_6) {
if (param_3 != NULL) {
mFont->drawChar_scale(field_0x2c + (f32)(s16)param_3[r29], mCursorV,
(s32)field_0x18, (s32)field_0x1c, r27, true);
} else {
mFont->drawChar_scale(field_0x2c, mCursorV,
(s32)field_0x18, (s32)field_0x1c, r27, true);
}
}
field_0x2c += field_0x34;
}
}
}
if (r25) {
if (field_0x2c - f30 > f31) {
f31 = field_0x2c - f30;
}
field_0x2c += field_0x10;
field_0x34 += field_0x10;
f32 local_cc = (field_0x1c / mFont->getHeight()) * mFont->getDescent();
if (local_a8 < mCursorV + local_cc) {
local_a8 = mCursorV + local_cc;
}
if (field_0x2c > local_ac) {
local_ac = field_0x2c;
}
if (field_0x2c < f29) {
f29 = field_0x2c;
}
if (local_c0 < f29) {
f29 = local_c0;
}
if (mCursorV > local_b4) {
local_b4 = mCursorV;
}
if (mCursorV < local_b0) {
local_b0 = mCursorV;
}
}
r27 = *(param_0++);
} while (true);
if (param_3 != NULL) {
param_3[r29] = 0xffff;
}
param_4.field_0x0 = local_ac - f29;
param_4.field_0x4 = local_b4 - local_b0 + mFont->getLeading();
if (!param_6) {
field_0x2c = f30;
mCursorV = f28;
}
return local_a8 - f28;
}
/* 802F52E8-802F5410 2EFC28 0128+00 2/1 0/0 0/0 .text doCtrlCode__8J2DPrintFi */
void J2DPrint::doCtrlCode(int param_0) {
switch (param_0) {
case 8:
field_0x2c -= field_0x34;
field_0x34 = 0.0f;
break;
case 9:
if (field_0x20 > 0) {
f32 fVar1 = field_0x2c;
field_0x2c = field_0x20 + field_0x20 * ((int)field_0x2c / field_0x20);
field_0x34 = field_0x2c - fVar1;
}
break;
case 10:
field_0x34 = 0.0f;
field_0x2c = field_0x24;
mCursorV += field_0x14;
break;
case 0xd:
field_0x34 = 0.0f;
field_0x2c = field_0x24;
break;
case 0x1c:
field_0x2c += 1.0f;
break;
case 0x1d:
field_0x2c -= 1.0f;
break;
case 0x1e:
mCursorV -= 1.0f;
break;
case 0x1f:
mCursorV += + 1.0f;
}
}
/* 802F5410-802F594C 2EFD50 053C+00 1/1 0/0 0/0 .text doEscapeCode__8J2DPrintFPPCUcUc */
u16 J2DPrint::doEscapeCode(u8 const** param_0, u8 param_1) {
u8 const* puVar9 = *param_0;
u16 uVar11 = 0;
u16 uVar3;
for (int iVar10 = 0; iVar10 < 2; iVar10++) {
if (mFont->isLeadByte(**param_0)) {
uVar3 = ((**param_0) << 8) | (*param_0)[1];
(*param_0) += 2;
} else {
uVar3 = **param_0;
(*param_0)++;
}
if (uVar3 >= 0x80 || uVar3 < 0x20) {
*param_0 = puVar9;
return 0;
}
uVar11 = ((uVar11) << 8) | uVar3;
}
JUtility::TColor local_40 = field_0x8;
JUtility::TColor local_44 = field_0xc;
switch(uVar11) {
case 'CU':
mCursorV -= getNumberF32(param_0, 1.0f, 0.0f, 10);
break;
case 'CD':
mCursorV += getNumberF32(param_0, 1.0f, 0.0f, 10);
break;
case 'CL':
field_0x2c -= getNumberF32(param_0, 1.0f, 0.0f, 10);
break;
case 'CR':
field_0x2c += getNumberF32(param_0, 1.0f, 0.0f, 10);
break;
case 'LU':
mCursorV -= field_0x14;
break;
case 'LD':
mCursorV += field_0x14;
break;
case 'ST':
s32 val = getNumberS32(param_0, field_0x20, field_0x20, 10);
if (val > 0) {
field_0x20 = val;
}
break;
case 'CC':
field_0x8 = getNumberS32(param_0, *(u32*)&mCharColor, *(u32*)&field_0x8, 16);
local_40 = field_0x8;
local_40.a = local_40.a * param_1 / 0xff;
local_44.a = local_44.a * param_1 / 0xff;
JUtility::TColor* local_68;
if (field_0x22 != 0) {
local_68 = &local_44;
}
else {
local_68 = &local_40;
}
mFont->setGradColor(local_40, *local_68);
break;
case 'GC':
field_0xc = getNumberS32(param_0, *(u32*)&mGradColor, *(u32*)&field_0xc, 16);
local_44 = field_0xc;
local_40.a = local_40.a * param_1 / 0xff;
local_44.a = local_44.a * param_1 / 0xff;
JUtility::TColor* local_74;
if (field_0x22 != 0) {
local_74 = &local_44;
}
else {
local_74 = &local_40;
}
mFont->setGradColor(local_40, *local_74);
break;
case 'FX':
f32 dVar13 = getNumberF32(param_0, mFontSizeX, field_0x18, 10);
if (dVar13 >= 0) {
field_0x18 = dVar13;
}
break;
case 'FY':
f32 dVar14 = getNumberF32(param_0, mFontSizeY, field_0x1c, 10);
if (dVar14 >= 0) {
field_0x1c = dVar14;
}
break;
case 'SH':
field_0x10 = getNumberF32(param_0, field_0x48, field_0x10, 10);
break;
case 'SV':
field_0x14 = getNumberF32(param_0, field_0x4c, field_0x14, 10);
break;
case 'GM':
s32 isZero = getNumberS32(param_0, field_0x22 == 0, field_0x22, 10) == 0;
field_0x22 = isZero == 0;
local_40.a = local_40.a * param_1 / 0xff;
local_44.a = local_44.a * param_1 / 0xff;
JUtility::TColor* local_80;
if (field_0x22 != 0) {
local_80 = &local_44;
}
else {
local_80 = &local_40;
}
mFont->setGradColor(local_40, *local_80);
break;
case 'HM':
break;
default:
*param_0 = puVar9;
uVar11 = 0;
break;
}
return uVar11;
}
/* 802F594C-802F59C0 2F028C 0074+00 3/3 0/0 0/0 .text initchar__8J2DPrintFv */
void J2DPrint::initchar() {
field_0x8 = mCharColor;
field_0xc = mGradColor;
field_0x10 = field_0x48;
field_0x14 = field_0x4c;
field_0x22 = field_0x5a;
field_0x20 = field_0x58;
field_0x18 = mFontSizeX;
field_0x1c = mFontSizeY;
}
/* 802F59C0-802F5AC4 2F0300 0104+00 1/1 0/0 0/0 .text getNumberS32__8J2DPrintFPPCUclli */
s32 J2DPrint::getNumberS32(u8 const** param_0, s32 param_1, s32 param_2, int base) {
const u8* puVar1 = *param_0;
s32 uVar2 = param_1;
if (*puVar1 != '[') {
return param_1;
}
(*param_0)++;
uVar2 = 0;
char* local_28;
if (base == 10) {
uVar2 = strtol((char*)*param_0, &local_28, base);
} else if (base == 16) {
uVar2 = strtoul((char*)*param_0, &local_28, base);
if ((u32)local_28 - (u32)*param_0 != 8) {
if ((u32)local_28 - (u32)*param_0 == 6) {
uVar2 = (uVar2 << 8) | 0xff;
} else {
*param_0 = puVar1;
return param_2;
}
}
}
if (local_28[0] != ']') {
*param_0 = puVar1;
return param_2;
} else {
if ((char*)*param_0 == (char*)local_28) {
*param_0 = (const u8*)local_28 + 1;
return param_1;
} else {
*param_0 = (const u8*)local_28 + 1;
}
}
return uVar2;
}
/* 802F5AC4-802F5BF8 2F0404 0134+00 1/1 0/0 0/0 .text getNumberF32__8J2DPrintFPPCUcffi */
f32 J2DPrint::getNumberF32(u8 const** param_0, f32 param_1, f32 param_2, int base) {
const u8* puVar1 = *param_0;
s32 uVar2 = param_1;
if (*puVar1 != '[') {
return param_1;
}
(*param_0)++;
uVar2 = 0;
char* local_28;
if (base == 10) {
uVar2 = strtol((char*)*param_0, &local_28, base);
} else if (base == 16) {
uVar2 = strtoul((char*)*param_0, &local_28, base);
if ((u32)local_28 - (u32)*param_0 != 8) {
if ((u32)local_28 - (u32)*param_0 == 6) {
uVar2 = (uVar2 << 8) | 0xff;
} else {
*param_0 = puVar1;
return param_2;
}
}
}
if (local_28[0] != ']') {
*param_0 = puVar1;
return param_2;
} else {
if ((char*)*param_0 == (char*)local_28) {
*param_0 = (const u8*)local_28 + 1;
return param_1;
} else {
*param_0 = (const u8*)local_28 + 1;
}
}
return uVar2;
}
+705
View File
@@ -0,0 +1,705 @@
//
// Generated By: dol2asm
// Translation Unit: J2DScreen
//
#include "JSystem/J2DGraph/J2DScreen.h"
#include "JSystem/J2DGraph/J2DPictureEx.h"
#include "JSystem/J2DGraph/J2DTextBoxEx.h"
#include "JSystem/J2DGraph/J2DWindowEx.h"
#include "JSystem/J2DGraph/J2DOrthoGraph.h"
#include "JSystem/JKernel/JKRArchive.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JSupport/JSUMemoryStream.h"
#include "dol2asm.h"
#include "dolphin/types.h"
#include "global.h"
//
// Forward References:
//
extern "C" void __ct__9J2DScreenFv();
extern "C" void __dt__9J2DScreenFv();
extern "C" void clean__9J2DScreenFv();
extern "C" void setPriority__9J2DScreenFPCcUlP10JKRArchive();
extern "C" void setPriority__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive();
extern "C" void private_set__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive();
extern "C" void checkSignature__9J2DScreenFP20JSURandomInputStream();
extern "C" void getScreenInformation__9J2DScreenFP20JSURandomInputStream();
extern "C" void makeHierarchyPanes__9J2DScreenFP7J2DPaneP20JSURandomInputStreamUlP10JKRArchive();
extern "C" void
createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUlP10JKRArchive();
extern "C" void draw__9J2DScreenFffPC14J2DGrafContext();
extern "C" void search__9J2DScreenFUx();
extern "C" void searchUserInfo__9J2DScreenFUx();
extern "C" void drawSelf__9J2DScreenFffPA3_A4_f();
extern "C" void createMaterial__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive();
extern "C" void isUsed__9J2DScreenFPC7ResTIMG();
extern "C" void isUsed__9J2DScreenFPC7ResFONT();
extern "C" void getNameResource__9J2DScreenFPCc();
extern "C" void animation__9J2DScreenFv();
extern "C" void setAnimation__9J2DScreenFP11J2DAnmColor();
extern "C" void setAnimation__9J2DScreenFP19J2DAnmTextureSRTKey();
extern "C" void setAnimation__9J2DScreenFP16J2DAnmTexPattern();
extern "C" void setAnimation__9J2DScreenFP15J2DAnmTevRegKey();
extern "C" void setAnimation__9J2DScreenFP14J2DAnmVtxColor();
extern "C" void setAnimation__9J2DScreenFP20J2DAnmVisibilityFull();
extern "C" void createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUl();
extern "C" s32 getTypeID__9J2DScreenCFv();
extern "C" void calcMtx__9J2DScreenFv();
extern "C" void setAnimation__9J2DScreenFP10J2DAnmBase();
extern "C" void setAnimationVF__9J2DScreenFP20J2DAnmVisibilityFull();
extern "C" void setAnimationVC__9J2DScreenFP14J2DAnmVtxColor();
extern "C" u8 mDataManage__9J2DScreen[4 + 4 /* padding */];
//
// External References:
//
extern "C" void setAlpha__7J2DPaneFUc();
extern "C" void clearAnmTransform__9J2DScreenFv();
extern "C" void makeMatrix__7J2DPaneFff();
extern "C" void setAnimation__9J2DScreenFP15J2DAnmTransform();
extern "C" void* __nw__FUl();
extern "C" void* __nwa__FUl();
extern "C" void* __nwa__FUli();
extern "C" void __dl__FPv();
extern "C" void __dla__FPv();
extern "C" void getGlbResource__13JKRFileLoaderFPCcP13JKRFileLoader();
extern "C" void __dt__14JSUInputStreamFv();
extern "C" void read__14JSUInputStreamFPvl();
extern "C" void peek__20JSURandomInputStreamFPvl();
extern "C" void seek__20JSURandomInputStreamFl17JSUStreamSeekFrom();
extern "C" void setBuffer__20JSUMemoryInputStreamFPCvl();
extern "C" void __ct__10JUTNameTabFPC7ResNTAB();
extern "C" void __ct__13J2DOrthoGraphFffffff();
extern "C" void setPort__13J2DOrthoGraphFv();
extern "C" void __ct__11J2DMaterialFv();
extern "C" void __dt__11J2DMaterialFv();
extern "C" void setAnimation__11J2DMaterialFP11J2DAnmColor();
extern "C" void setAnimation__11J2DMaterialFP19J2DAnmTextureSRTKey();
extern "C" void setAnimation__11J2DMaterialFP16J2DAnmTexPattern();
extern "C" void setAnimation__11J2DMaterialFP15J2DAnmTevRegKey();
extern "C" void animation__11J2DMaterialFv();
extern "C" void __ct__18J2DMaterialFactoryFRC16J2DMaterialBlock();
extern "C" void
create__18J2DMaterialFactoryCFP11J2DMaterialiUlP15J2DResReferenceP15J2DResReferenceP10JKRArchive();
extern "C" void func_802F5D40();
extern "C" void __ct__7J2DPaneFP7J2DPaneP20JSURandomInputStreamUc();
extern "C" void __dt__7J2DPaneFv();
extern "C" void draw__7J2DPaneFffPC14J2DGrafContextbb();
extern "C" void func_802F6D18();
extern "C" void move__7J2DPaneFff();
extern "C" void add__7J2DPaneFff();
extern "C" void resize__7J2DPaneFff();
extern "C" void search__7J2DPaneFUx();
extern "C" void searchUserInfo__7J2DPaneFUx();
extern "C" void isUsed__7J2DPaneFPC7ResTIMG();
extern "C" void isUsed__7J2DPaneFPC7ResFONT();
extern "C" void makeMatrix__7J2DPaneFffff();
extern "C" void setCullBack__7J2DPaneF11_GXCullMode();
extern "C" void setAnimation__7J2DPaneFP10J2DAnmBase();
extern "C" void animationTransform__7J2DPaneFPC15J2DAnmTransform();
extern "C" void setVisibileAnimation__7J2DPaneFP20J2DAnmVisibilityFull();
extern "C" void setVtxColorAnimation__7J2DPaneFP14J2DAnmVtxColor();
extern "C" void animationPane__7J2DPaneFPC15J2DAnmTransform();
extern "C" void rewriteAlpha__7J2DPaneFv();
extern "C" void setCullBack__7J2DPaneFb();
extern "C" void setConnectParent__7J2DPaneFb();
extern "C" void update__7J2DPaneFv();
extern "C" void drawSelf__7J2DPaneFff();
extern "C" void __ct__9J2DWindowFP7J2DPaneP20JSURandomInputStreamP10JKRArchive();
extern "C" void __ct__9J2DWindowFP7J2DPaneP20JSURandomInputStreamP11J2DMaterial();
extern "C" void __ct__10J2DPictureFP7J2DPaneP20JSURandomInputStreamP10JKRArchive();
extern "C" void __ct__10J2DPictureFP7J2DPaneP20JSURandomInputStreamP11J2DMaterial();
extern "C" void __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamP10JKRArchive();
extern "C" void __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial();
extern "C" void __ct__11J2DWindowExFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial();
extern "C" void __ct__12J2DPictureExFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial();
extern "C" void __ct__12J2DTextBoxExFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial();
extern "C" void get__13J2DDataManageFPCc();
extern "C" void __destroy_new_array();
extern "C" void __construct_new_array();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" extern void* __vt__10JSUIosBase[3];
extern "C" extern void* __vt__20JSURandomInputStream[9];
extern "C" extern void* __vt__14JSUInputStream[6 + 1 /* padding */];
extern "C" extern void* __vt__20JSUMemoryInputStream[9 + 1 /* padding */];
extern "C" extern void* __vt__14J2DGrafContext[10];
extern "C" extern void* __vt__13J2DOrthoGraph[10];
/* 802F8498-802F8540 2F2DD8 00A8+00 0/0 59/59 4/4 .text __ct__9J2DScreenFv */
J2DScreen::J2DScreen()
: J2DPane(NULL, true, 'root', JGeometry::TBox2<f32>(JGeometry::TVec2<f32>(0.0f, 0.0f), JGeometry::TVec2<f32>(640.0f, 480.0f))), mColor() {
field_0x4 = -1;
mScissor = false;
mMaterialNum = 0;
mMaterials = NULL;
mTexRes = NULL;
mFontRes = NULL;
mNameTable = NULL;
}
/* 802F8540-802F85A8 2F2E80 0068+00 1/0 0/0 0/0 .text __dt__9J2DScreenFv */
J2DScreen::~J2DScreen() {
clean();
}
/* 802F85A8-802F8648 2F2EE8 00A0+00 3/3 0/0 0/0 .text clean__9J2DScreenFv */
void J2DScreen::clean() {
delete[] mMaterials;
mMaterialNum = 0;
mMaterials = NULL;
delete[] mTexRes;
mTexRes = NULL;
delete[] mFontRes;
mFontRes = NULL;
if (mNameTable != NULL) {
delete[] mNameTable->getResNameTable();
delete mNameTable;
mNameTable = NULL;
}
}
/* 802F8648-802F8748 2F2F88 0100+00 0/0 58/58 4/4 .text setPriority__9J2DScreenFPCcUlP10JKRArchive
*/
bool J2DScreen::setPriority(char const* resName, u32 param_1, JKRArchive* p_archive) {
if (p_archive == NULL) {
return false;
}
void* res = JKRFileLoader::getGlbResource(resName, p_archive);
if (res != NULL) {
u32 size = p_archive->getExpandedResSize(res);
JSUMemoryInputStream stream(res, size);
return setPriority(&stream, param_1, p_archive);
}
return false;
}
/* 802F8748-802F8778 2F3088 0030+00 1/1 1/1 0/0 .text
* setPriority__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive */
bool J2DScreen::setPriority(JSURandomInputStream* p_stream, u32 param_1, JKRArchive* p_archive) {
if (p_archive == NULL) {
return false;
} else {
return private_set(p_stream, param_1, p_archive);
}
}
/* 802F8778-802F8834 2F30B8 00BC+00 1/1 0/0 0/0 .text
* private_set__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive */
bool J2DScreen::private_set(JSURandomInputStream* p_stream, u32 param_1, JKRArchive* p_archive) {
if (!checkSignature(p_stream)) {
return false;
}
if (!getScreenInformation(p_stream)) {
return false;
}
bool make_end = makeHierarchyPanes(this, p_stream, param_1, p_archive) != 2;
if (!(param_1 & 0x1F0000)) {
clean();
}
if (make_end) {
return p_stream->isGood();
}
return false;
}
/* 802F8834-802F8894 2F3174 0060+00 1/1 0/0 0/0 .text
* checkSignature__9J2DScreenFP20JSURandomInputStream */
bool J2DScreen::checkSignature(JSURandomInputStream* p_stream) {
J2DScrnHeader header;
p_stream->read(&header, sizeof(J2DScrnHeader));
if (header.mTag != 'SCRN' || (header.mType != 'blo1' && header.mType != 'blo2')) {
return false;
} else {
return true;
}
}
/* 802F8894-802F8990 2F31D4 00FC+00 1/1 0/0 0/0 .text
* getScreenInformation__9J2DScreenFP20JSURandomInputStream */
bool J2DScreen::getScreenInformation(JSURandomInputStream* p_stream) {
J2DScrnInfoHeader info;
p_stream->read(&info, sizeof(J2DScrnInfoHeader));
if (info.mTag != 'INF1') {
return false;
}
JGeometry::TBox2<f32> dimensions(0.0f, 0.0f, info.mWidth, info.mHeight);
place(dimensions);
JUtility::TColor color(info.mColor);
mColor = color;
if (info.mSize > 0x10) {
p_stream->skip(info.mSize - 0x10);
}
return true;
}
/* 802F8990-802F8B98 2F32D0 0208+00 1/1 0/0 0/0 .text
* makeHierarchyPanes__9J2DScreenFP7J2DPaneP20JSURandomInputStreamUlP10JKRArchive */
s32 J2DScreen::makeHierarchyPanes(J2DPane* p_basePane, JSURandomInputStream* p_stream, u32 param_2,
JKRArchive* p_archive) {
J2DPane* next_pane = p_basePane;
while (true) {
J2DScrnBlockHeader header;
p_stream->peek(&header, sizeof(J2DScrnBlockHeader));
switch (header.mTag) {
case 'EXT1':
p_stream->seek(header.mSize, JSUStreamSeekFrom_CUR);
return 1;
case 'BGN1':
p_stream->seek(header.mSize, JSUStreamSeekFrom_CUR);
int ret = makeHierarchyPanes(next_pane, p_stream, param_2, p_archive);
if (ret != 0) {
return ret;
}
break;
case 'END1':
p_stream->seek(header.mSize, JSUStreamSeekFrom_CUR);
return 0;
case 'TEX1':
J2DResReference* texRes = getResReference(p_stream, param_2);
mTexRes = texRes;
if (texRes == NULL) {
return 2;
}
break;
case 'FNT1':
J2DResReference* fntRes = getResReference(p_stream, param_2);
mFontRes = fntRes;
if (fntRes == NULL) {
return 2;
}
break;
case 'MAT1':
if (!createMaterial(p_stream, param_2, p_archive)) {
return 2;
}
break;
default:
if (p_archive == NULL) {
next_pane = createPane(header, p_stream, p_basePane, param_2);
} else {
next_pane = createPane(header, p_stream, p_basePane, param_2, p_archive);
}
if (next_pane == NULL) {
return 2;
}
break;
}
}
}
/* 802F8B98-802F8ED4 2F34D8 033C+00 1/0 0/0 0/0 .text
* createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUlP10JKRArchive */
J2DPane* J2DScreen::createPane(J2DScrnBlockHeader const& header, JSURandomInputStream* p_stream,
J2DPane* p_basePane, u32 param_3, JKRArchive* p_archive) {
J2DPane* newPane;
switch (header.mTag) {
case 'PAN1':
newPane = new J2DPane(p_basePane, p_stream, 0);
break;
case 'WIN1':
newPane = new J2DWindow(p_basePane, p_stream, p_archive);
break;
case 'PIC1':
newPane = new J2DPicture(p_basePane, p_stream, p_archive);
break;
case 'TBX1':
newPane = new J2DTextBox(p_basePane, p_stream, p_archive);
break;
case 'PAN2':
newPane = new J2DPane(p_basePane, p_stream, 1);
break;
case 'WIN2':
if (param_3 & 0x1F0000) {
newPane = new J2DWindowEx(p_basePane, p_stream, param_3, mMaterials);
break;
}
newPane = new J2DWindow(p_basePane, p_stream, mMaterials);
break;
case 'PIC2':
if (param_3 & 0x1F0000) {
newPane = new J2DPictureEx(p_basePane, p_stream, param_3, mMaterials);
break;
}
newPane = new J2DPicture(p_basePane, p_stream, mMaterials);
break;
case 'TBX2':
if (param_3 & 0x1F0000) {
newPane = new J2DTextBoxEx(p_basePane, p_stream, param_3, mMaterials);
break;
}
newPane = new J2DTextBox(p_basePane, p_stream, param_3, mMaterials);
break;
default:
s32 position = p_stream->getPosition();
s32 size = header.mSize;
s32 start = size + position;
newPane = new J2DPane(p_basePane, p_stream, 0);
p_stream->seek(start, JSUStreamSeekFrom_SET);
break;
}
return newPane;
}
/* 802F8ED4-802F90A0 2F3814 01CC+00 0/0 51/51 4/4 .text draw__9J2DScreenFffPC14J2DGrafContext */
void J2DScreen::draw(f32 x, f32 y, J2DGrafContext const* grafCtx) {
u32 l_x, l_y, width, height;
if (mScissor) {
GXGetScissor(&l_x, &l_y, &width, &height);
}
if (grafCtx != NULL) {
J2DPane::draw(x, y, grafCtx, mScissor, true);
} else {
J2DOrthoGraph ortho(0.0f, 0.0f, 640.0f, 480.0f, -1.0f, 1.0f);
ortho.setPort();
J2DPane::draw(x, y, &ortho, mScissor, true);
}
if (mScissor) {
GXSetScissor(l_x, l_y, width, height);
}
GXSetNumIndStages(0);
for (int i = 0; i < 0x10; i++) {
GXSetTevDirect((GXTevStageID)i);
}
GXSetNumTevStages(1);
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetVtxDesc(GX_VA_TEX0, GX_NONE);
GXSetCullMode(GX_CULL_NONE);
GXSetNumTexGens(0);
GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
GX_AF_NONE);
for (int i = 0; i < 4; i++) {
GXSetTevSwapModeTable((GXTevSwapSel)i, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
}
}
/* 802F90A0-802F90E0 2F39E0 0040+00 1/0 0/0 0/0 .text search__9J2DScreenFUx */
J2DPane* J2DScreen::search(u64 tag) {
if (tag == 0) {
return NULL;
}
return J2DPane::search(tag);
}
/* 802F90E0-802F9120 2F3A20 0040+00 1/0 0/0 0/0 .text searchUserInfo__9J2DScreenFUx */
J2DPane* J2DScreen::searchUserInfo(u64 tag) {
if (tag == 0) {
return NULL;
}
return J2DPane::searchUserInfo(tag);
}
/* 802F9120-802F9280 2F3A60 0160+00 1/0 0/0 0/0 .text drawSelf__9J2DScreenFffPA3_A4_f */
void J2DScreen::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) {
JUtility::TColor color(mColor);
u8 alpha = (color.a * mAlpha) / 255;
if (alpha != 0) {
JUtility::TColor sp8(alpha | ((u32)color & 0xFFFFFF00));
color = sp8;
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(0.0f, 0.0f, 0.0f);
GXColor1u32(color);
GXPosition3f32(getWidth(), 0.0f, 0.0f);
GXColor1u32(color);
GXPosition3f32(getWidth(), getHeight(), 0.0f);
GXColor1u32(color);
GXPosition3f32(0.0f, getHeight(), 0.0f);
GXColor1u32(color);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
GXEnd();
}
}
/* 802F9280-802F937C 2F3BC0 00FC+00 1/1 0/0 0/0 .text
* getResReference__9J2DScreenFP20JSURandomInputStreamUl */
J2DResReference* J2DScreen::getResReference(JSURandomInputStream* p_stream, u32 param_1) {
s32 position = p_stream->getPosition();
p_stream->skip(4);
s32 size1, size2;
size1 = p_stream->readS32();
p_stream->skip(4);
size2 = p_stream->readS32();
p_stream->seek(position + size2, JSUStreamSeekFrom_SET);
size1 = size1 - size2;
char* buffer;
if (param_1 & 0x1F0000) {
buffer = new char[size1];
} else {
buffer = new (-4) char[size1];
}
if (buffer != NULL) {
p_stream->read(buffer, size1);
}
return (J2DResReference*)buffer;
}
/* 802F937C-802F9600 2F3CBC 0284+00 1/1 0/0 0/0 .text
* createMaterial__9J2DScreenFP20JSURandomInputStreamUlP10JKRArchive */
// nametab section has issues
#ifdef NONMATCHING
bool J2DScreen::createMaterial(JSURandomInputStream* p_stream, u32 param_1, JKRArchive* p_archive) {
s32 position = p_stream->getPosition();
J2DScrnBlockHeader header;
p_stream->read(&header, 8);
mMaterialNum = p_stream->readU16();
p_stream->skip(2);
if (param_1 & 0x1F0000) {
mMaterials = new J2DMaterial[mMaterialNum];
} else {
mMaterials = new (-4) J2DMaterial[mMaterialNum];
}
u8* buffer = new (-4) u8[header.mSize];
if (mMaterials != NULL && buffer != NULL) {
p_stream->seek(position, JSUStreamSeekFrom_SET);
p_stream->read(buffer, header.mSize);
J2DMaterialFactory factory(*(J2DMaterialBlock*)buffer);
for (u16 i = 0; i < mMaterialNum; i++) {
factory.create(&mMaterials[i], i, param_1, mTexRes, mFontRes, p_archive);
}
if (param_1 & 0x1F0000) {
u32 offset =
buffer[0x14] << 0x18 | buffer[0x15] << 0x10 | buffer[0x16] << 8 | buffer[0x17];
char* sec = (char*)buffer + offset;
u16* sec_s = ((u16*)sec);
u32 size = ((u16*)sec)[0]*2;
u16 num = sec_s[size + 1];
while (sec[num] != 0) {
num++;
}
num++;
u8* nametab = new u8[num];
if (nametab != NULL) {
for (u16 i = 0; i < num; i++) {
nametab[i] = sec[i];
}
mNameTable = new JUTNameTab((ResNTAB*)nametab);
if (mNameTable == NULL) {
delete[] nametab;
} else {
success:
delete[] buffer;
return true;
}
}
} else {
goto success;
}
}
delete[] buffer;
clean();
return false;
}
#else
bool J2DScreen::createMaterial(JSURandomInputStream* param_0, u32 param_1,
JKRArchive* param_2) {
// NONMATCHING
}
#endif
/* 802F9600-802F9620 2F3F40 0020+00 1/0 0/0 0/0 .text isUsed__9J2DScreenFPC7ResTIMG */
bool J2DScreen::isUsed(ResTIMG const* p_timg) {
return J2DPane::isUsed(p_timg);
}
/* 802F9620-802F9640 2F3F60 0020+00 1/0 0/0 0/0 .text isUsed__9J2DScreenFPC7ResFONT */
bool J2DScreen::isUsed(ResFONT const* p_font) {
return J2DPane::isUsed(p_font);
}
/* ############################################################################################## */
/* 80451590-80451598 000A90 0004+04 1/1 3/3 0/0 .sbss mDataManage__9J2DScreen */
J2DDataManage* J2DScreen::mDataManage;
/* 802F9640-802F9690 2F3F80 0050+00 0/0 6/6 0/0 .text getNameResource__9J2DScreenFPCc */
void* J2DScreen::getNameResource(char const* resName) {
void* res = JKRFileLoader::getGlbResource(resName, NULL);
if (res == NULL && mDataManage != NULL) {
res = mDataManage->get(resName);
}
return res;
}
/* 802F9690-802F9704 2F3FD0 0074+00 0/0 30/30 3/3 .text animation__9J2DScreenFv */
void J2DScreen::animation() {
animationPane(mTransform);
for (u16 i = 0; i < mMaterialNum; i++) {
mMaterials[i].animation();
}
}
/* 802F9704-802F9798 2F4044 0094+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP11J2DAnmColor */
void J2DScreen::setAnimation(J2DAnmColor* p_anmColor) {
p_anmColor->searchUpdateMaterialID(this);
u16 matNum = p_anmColor->getUpdateMaterialNum();
for (u16 i = 0; i < matNum; i++) {
u16 matID = p_anmColor->getUpdateMaterialID(i);
if (matID < mMaterialNum) {
mMaterials[matID].setAnimation(p_anmColor);
}
}
}
/* 802F9798-802F9838 2F40D8 00A0+00 1/0 0/0 0/0 .text
* setAnimation__9J2DScreenFP19J2DAnmTextureSRTKey */
void J2DScreen::setAnimation(J2DAnmTextureSRTKey* p_anmSRTKey) {
p_anmSRTKey->searchUpdateMaterialID(this);
u16 matNum = p_anmSRTKey->getUpdateMaterialNum();
for (u16 i = 0; i < matNum; i++) {
u16 matID = p_anmSRTKey->getUpdateMaterialID(i);
if (matID < mMaterialNum) {
mMaterials[matID].setAnimation(p_anmSRTKey);
}
}
}
/* 802F9838-802F98CC 2F4178 0094+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP16J2DAnmTexPattern
*/
void J2DScreen::setAnimation(J2DAnmTexPattern* p_anmPattern) {
p_anmPattern->searchUpdateMaterialID(this);
u16 matNum = p_anmPattern->getUpdateMaterialNum();
for (u16 i = 0; i < matNum; i++) {
u16 matID = p_anmPattern->getUpdateMaterialID(i);
if (matID < mMaterialNum) {
mMaterials[matID].setAnimation(p_anmPattern);
}
}
}
/* 802F98CC-802F99A8 2F420C 00DC+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP15J2DAnmTevRegKey
*/
void J2DScreen::setAnimation(J2DAnmTevRegKey* p_anmRegKey) {
p_anmRegKey->searchUpdateMaterialID(this);
u16 cMatNum = p_anmRegKey->getCRegUpdateMaterialNum();
for (u16 i = 0; i < cMatNum; i++) {
u16 matID = p_anmRegKey->getCRegUpdateMaterialID(i);
if (matID < mMaterialNum) {
mMaterials[matID].setAnimation(p_anmRegKey);
}
}
u16 kMatNum = p_anmRegKey->getKRegUpdateMaterialNum();
for (u16 i = 0; i < kMatNum; i++) {
u16 matID = p_anmRegKey->getKRegUpdateMaterialID(i);
if (matID < mMaterialNum) {
mMaterials[matID].setAnimation(p_anmRegKey);
}
}
}
/* 802F99A8-802F99C8 2F42E8 0020+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP14J2DAnmVtxColor
*/
void J2DScreen::setAnimation(J2DAnmVtxColor* p_anmVtxColor) {
J2DPane::setVtxColorAnimation(p_anmVtxColor);
}
/* 802F99C8-802F99E8 2F4308 0020+00 1/0 0/0 0/0 .text
* setAnimation__9J2DScreenFP20J2DAnmVisibilityFull */
void J2DScreen::setAnimation(J2DAnmVisibilityFull* p_anmVisibility) {
J2DPane::setVisibileAnimation(p_anmVisibility);
}
/* 802F99E8-802F9A18 2F4328 0030+00 1/0 0/0 0/0 .text
* createPane__9J2DScreenFRC18J2DScrnBlockHeaderP20JSURandomInputStreamP7J2DPaneUl */
J2DPane* J2DScreen::createPane(J2DScrnBlockHeader const& header, JSURandomInputStream* p_stream,
J2DPane* p_basePane, u32 param_3) {
return createPane(header, p_stream, p_basePane, param_3, NULL);
}
/* 802F9A18-802F9A20 2F4358 0008+00 1/0 0/0 0/0 .text getTypeID__9J2DScreenCFv */
u16 J2DScreen::getTypeID() const {
return 8;
}
/* 802F9A20-802F9A54 2F4360 0034+00 1/0 0/0 0/0 .text calcMtx__9J2DScreenFv */
void J2DScreen::calcMtx() {
makeMatrix(mTranslateX, mTranslateY);
}
/* 802F9A54-802F9A74 2F4394 0020+00 1/0 0/0 0/0 .text setAnimation__9J2DScreenFP10J2DAnmBase */
void J2DScreen::setAnimation(J2DAnmBase* p_anm) {
J2DPane::setAnimation(p_anm);
}
/* 802F9A74-802F9A78 2F43B4 0004+00 1/0 0/0 0/0 .text
* setAnimationVF__9J2DScreenFP20J2DAnmVisibilityFull */
void J2DScreen::setAnimationVF(J2DAnmVisibilityFull*) {
/* empty function */
}
/* 802F9A78-802F9A7C 2F43B8 0004+00 1/0 0/0 0/0 .text setAnimationVC__9J2DScreenFP14J2DAnmVtxColor
*/
void J2DScreen::setAnimationVC(J2DAnmVtxColor*) {
/* empty function */
}
+239
View File
@@ -0,0 +1,239 @@
//
// J2DTevs
//
#include "JSystem/J2DGraph/J2DTevs.h"
#include "JSystem/J2DGraph/J2DMatBlock.h"
#include "math.h"
#include "dolphin/gx.h"
/* 802E9C90-802E9CC4 2E45D0 0034+00 0/0 1/1 0/0 .text load__9J2DTexMtxFUl */
void J2DTexMtx::load(u32 mtxIdx) {
GXLoadTexMtxImm(mTexMtx, mtxIdx * 3 + GX_TEXMTX0, mInfo.getTexMtxType());
}
/* 802E9CC4-802E9D2C 2E4604 0068+00 0/0 2/2 0/0 .text calc__9J2DTexMtxFv */
void J2DTexMtx::calc() {
if (mInfo.mTexMtxDCC == J2DTexMtxInfo::DCC_NONE) {
getTextureMtx(mInfo.mTexSRTInfo, mInfo.mCenter, mTexMtx);
} else if (mInfo.mTexMtxDCC == J2DTexMtxInfo::DCC_MAYA) {
getTextureMtxMaya(mInfo.mTexSRTInfo, mTexMtx);
}
}
/* 802E9D2C-802E9EBC 2E466C 0190+00 1/1 0/0 0/0 .text
* getTextureMtx__9J2DTexMtxFRC17J2DTextureSRTInfo3VecPA4_f */
void J2DTexMtx::getTextureMtx(J2DTextureSRTInfo const& param_0, Vec param_1, Mtx param_2) {
float f31 = (param_0.field_0x8 * M_PI) / 180.0f;
param_2[0][0] = param_0.field_0x0 * i_cosf(f31);
param_2[0][1] = -param_0.field_0x0 * i_sinf(f31);
param_2[0][2] = 0.0f;
param_2[0][3] = -param_0.field_0x0 * i_cosf(f31) * param_1.x + param_1.y * (param_0.field_0x0 * i_sinf(f31)) +
param_1.x + param_0.field_0xc;
param_2[1][0] = param_0.field_0x4 * i_sinf(f31);
param_2[1][1] = param_0.field_0x4 * i_cosf(f31);
param_2[1][2] = 0.0f;
param_2[1][3] = -param_0.field_0x4 * i_sinf(f31) * param_1.x - param_1.y * (param_0.field_0x4 * i_cosf(f31)) +
param_1.y + param_0.field_0x10;
param_2[2][0] = 0.0f;
param_2[2][1] = 0.0f;
param_2[2][2] = 1.0f;
param_2[2][3] = 0.0f;
}
/* 802E9EBC-802EA044 2E47FC 0188+00 1/1 0/0 0/0 .text
* getTextureMtxMaya__9J2DTexMtxFRC17J2DTextureSRTInfoPA4_f */
void J2DTexMtx::getTextureMtxMaya(J2DTextureSRTInfo const& param_0, Mtx param_1) {
float f31 = (param_0.field_0x8 * M_PI) / 180.0f;
param_1[0][0] = param_0.field_0x0 * i_cosf(f31);
param_1[0][1] = param_0.field_0x4 * i_sinf(f31);
param_1[0][2] = 0.0f;
param_1[0][3] = (param_0.field_0xc - 0.5f) * i_cosf(f31) -
(param_0.field_0x10 - 0.5f + param_0.field_0x4) * i_sinf(f31) + 0.5f;
param_1[1][0] = -param_0.field_0x0 * i_sinf(f31);
param_1[1][1] = param_0.field_0x4 * i_cosf(f31);
param_1[1][2] = 0.0f;
param_1[1][3] = -(param_0.field_0xc - 0.5f) * i_sinf(f31) -
(param_0.field_0x10 - 0.5f + param_0.field_0x4) * i_cosf(f31) + 0.5f;
param_1[2][0] = 0.0f;
param_1[2][1] = 0.0f;
param_1[2][2] = 1.0f;
param_1[2][3] = 0.0f;
}
/* 802EA044-802EA098 2E4984 0054+00 0/0 5/5 0/0 .text load__14J2DIndTevStageFUc */
void J2DIndTevStage::load(u8 tevStage) {
GXSetTevIndirect((GXTevStageID)tevStage, getIndStage(), getIndFormat(), getBiasSel(),
getMtxSel(), getWrapS(), getWrapT(), getPrev(), getLod(), getAlphaSel());
}
/* 802EA098-802EA0CC 2E49D8 0034+00 0/0 1/1 0/0 .text load__12J2DIndTexMtxFUc */
void J2DIndTexMtx::load(u8 indTexMtx) {
GXSetIndTexMtx((GXIndTexMtxID)(GX_ITM_0 + indTexMtx), (f32*)mIndTexMtxInfo.mMtx,
mIndTexMtxInfo.mScaleExp);
}
/* 802EA0CC-802EA0FC 2E4A0C 0030+00 0/0 1/1 0/0 .text load__19J2DIndTexCoordScaleFUc */
void J2DIndTexCoordScale::load(u8 indTexStage) {
GXSetIndTexCoordScale((GXIndTexStageID)indTexStage, mInfo.getScaleS(), mInfo.getScaleT());
}
/* 802EA0FC-802EA12C 2E4A3C 0030+00 0/0 1/1 0/0 .text load__14J2DIndTexOrderFUc */
void J2DIndTexOrder::load(u8 indTexStage) {
GXSetIndTexOrder((GXIndTexStageID)indTexStage, mInfo.getTexCoordID(), mInfo.getTexMapID());
}
/* 802EA12C-802EA134 2E4A6C 0008+00 0/0 1/0 0/0 .text getTevSwapModeTable__11J2DTevBlockFUl */
J2DTevSwapModeTable* J2DTevBlock::getTevSwapModeTable(u32 param_0) {
return NULL;
}
/* 802EA134-802EA13C 2E4A74 0008+00 0/0 1/0 0/0 .text getTevStage__11J2DTevBlockFUl */
J2DTevStage* J2DTevBlock::getTevStage(u32 param_0) {
return NULL;
}
/* 802EA13C-802EA144 2E4A7C 0008+00 0/0 1/0 0/0 .text getTevColor__11J2DTevBlockFUl */
J2DGXColorS10* J2DTevBlock::getTevColor(u32 param_0) {
return NULL;
}
/* 802EA144-802EA14C 2E4A84 0008+00 0/0 1/0 0/0 .text getTevOrder__11J2DTevBlockFUl */
J2DTevOrder* J2DTevBlock::getTevOrder(u32 param_0) {
return NULL;
}
/* 802EA14C-802EA154 2E4A8C 0008+00 0/0 1/0 0/0 .text getTevKAlphaSel__11J2DTevBlockFUl
*/
u8 J2DTevBlock::getTevKAlphaSel(u32 param_0) {
return 0;
}
/* 802EA154-802EA15C 2E4A94 0008+00 0/0 1/0 0/0 .text getTevKColorSel__11J2DTevBlockFUl
*/
u8 J2DTevBlock::getTevKColorSel(u32 param_0) {
return 0;
}
/* 802EA15C-802EA164 2E4A9C 0008+00 0/0 1/0 0/0 .text getTevKColor__11J2DTevBlockFUl */
JUtility::TColor* J2DTevBlock::getTevKColor(u32 param_0) {
return NULL;
}
/* 802EA164-802EA170 2E4AA4 000C+00 0/0 1/0 0/0 .text getFontNo__11J2DTevBlockCFv */
u16 J2DTevBlock::getFontNo() const {
return 0xFFFF;
}
/* 802EA170-802EA17C 2E4AB0 000C+00 0/0 1/0 0/0 .text getTexNo__11J2DTevBlockCFUl */
u32 J2DTevBlock::getTexNo(u32 param_0) const {
return 0xFFFF;
}
/* 802EA17C-802EA184 2E4ABC 0008+00 0/0 1/0 0/0 .text getTevStageNum__11J2DTevBlockCFv */
u8 J2DTevBlock::getTevStageNum() const {
return 1;
}
/* 802EA184-802EA18C 2E4AC4 0008+00 0/0 1/0 0/0 .text getIndTevStage__11J2DTevBlockFUl */
J2DIndTevStage* J2DTevBlock::getIndTevStage(u32 param_0) {
return NULL;
}
/* 802EA18C-802EA194 2E4ACC 0008+00 0/0 2/0 0/0 .text getIndTexCoordScale__11J2DIndBlockFUl */
J2DIndTexCoordScale* J2DIndBlock::getIndTexCoordScale(u32 param_0) {
return NULL;
}
/* 802EA194-802EA19C 2E4AD4 0008+00 0/0 2/0 0/0 .text getIndTexMtx__11J2DIndBlockFUl */
J2DIndTexMtx* J2DIndBlock::getIndTexMtx(u32 param_0) {
return NULL;
}
/* 802EA19C-802EA1A4 2E4ADC 0008+00 0/0 2/0 0/0 .text getIndTexOrder__11J2DIndBlockFUl */
J2DIndTexOrder* J2DIndBlock::getIndTexOrder(u32 param_0) {
return NULL;
}
/* 802EA1A4-802EA1AC 2E4AE4 0008+00 0/0 2/0 0/0 .text getIndTexStageNum__11J2DIndBlockCFv
*/
u8 J2DIndBlock::getIndTexStageNum() const {
return 0;
}
/* ############################################################################################## */
/* 803A1B80-803A1BA0 02E1E0 0020+00 0/0 3/3 0/0 .rodata j2dDefaultTexCoordInfo */
J2DTexCoordInfo const j2dDefaultTexCoordInfo[8] = {
{GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, 0}, {GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY, 0},
{GX_TG_MTX2x4, GX_TG_TEX2, GX_IDENTITY, 0}, {GX_TG_MTX2x4, GX_TG_TEX3, GX_IDENTITY, 0},
{GX_TG_MTX2x4, GX_TG_TEX4, GX_IDENTITY, 0}, {GX_TG_MTX2x4, GX_TG_TEX5, GX_IDENTITY, 0},
{GX_TG_MTX2x4, GX_TG_TEX6, GX_IDENTITY, 0}, {GX_TG_MTX2x4, GX_TG_TEX7, GX_IDENTITY, 0},
};
/* 803A1BA0-803A1BC4 02E200 0024+00 0/0 3/3 0/0 .rodata j2dDefaultTexMtxInfo */
J2DTexMtxInfo const j2dDefaultTexMtxInfo = {1, 1, 255, 255, 0.5f, 0.5f,
0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f};
/* 803A1BC4-803A1BE0 02E224 001C+00 0/0 3/3 0/0 .rodata j2dDefaultIndTexMtxInfo */
J2DIndTexMtxInfo const j2dDefaultIndTexMtxInfo = {{0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f}, 1};
/* 803A1BE0-803A1BF4 02E240 0014+00 0/0 1/1 0/0 .rodata j2dDefaultTevStageInfo */
extern J2DTevStageInfo const j2dDefaultTevStageInfo = {
4, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_CPREV, GX_TEV_ADD,
GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV, GX_CA_RASA, GX_CA_ZERO,
GX_CA_ZERO, GX_CA_APREV, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1,
GX_TEVPREV};
/* 803A1BF4-803A1C00 02E254 000C+00 0/0 7/7 0/0 .rodata j2dDefaultIndTevStageInfo */
extern const J2DIndTevStageInfo j2dDefaultIndTevStageInfo = {
GX_INDTEXSTAGE0, GX_ITB_NONE, GX_ITB_NONE, GX_ITM_OFF, GX_ITW_OFF,
GX_ITW_OFF, 0, 0, GX_ITBA_OFF,
};
/* 8045617C-80456180 00477C 0004+00 0/0 1/1 0/0 .sdata2 j2dDefaultColInfo */
extern const GXColor j2dDefaultColInfo = {255, 255, 255, 255};
/* 80456180-80456184 004780 0004+00 0/0 7/7 0/0 .sdata2 j2dDefaultTevOrderInfoNull */
extern const J2DTevOrderInfo j2dDefaultTevOrderInfoNull = {
GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL, 0};
/* 80456184-80456188 004784 0002+02 0/0 3/3 0/0 .sdata2 j2dDefaultIndTexOrderNull */
extern const J2DIndTexOrderInfo j2dDefaultIndTexOrderNull = {
GX_TEXCOORD_NULL,
GX_TEXMAP_NULL,
};
/* 80456188-80456190 004788 0008+00 0/0 5/5 0/0 .sdata2 j2dDefaultTevColor */
extern const GXColorS10 j2dDefaultTevColor = {255, 255, 255, 255};
/* 80456190-80456194 004790 0002+02 0/0 3/3 0/0 .sdata2 j2dDefaultIndTexCoordScaleInfo */
extern const J2DIndTexCoordScaleInfo j2dDefaultIndTexCoordScaleInfo = {
GX_ITS_1,
GX_ITS_1,
};
/* 80456194-80456198 004794 0004+00 0/0 5/5 0/0 .sdata2 j2dDefaultTevKColor */
extern const GXColor j2dDefaultTevKColor = {255, 255, 255, 255};
/* 80456198-8045619C 004798 0004+00 0/0 2/2 0/0 .sdata2 j2dDefaultTevSwapMode */
extern const J2DTevSwapModeInfo j2dDefaultTevSwapMode = {GX_TEV_SWAP0, GX_TEV_SWAP0, 0, 0};
/* 8045619C-804561A0 00479C 0004+00 0/0 6/6 0/0 .sdata2 j2dDefaultTevSwapModeTable */
extern const J2DTevSwapModeTableInfo j2dDefaultTevSwapModeTable = {
GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA};
/* 804561A0-804561A4 0047A0 0004+00 0/0 3/3 0/0 .sdata2 j2dDefaultBlendInfo */
extern const J2DBlendInfo j2dDefaultBlendInfo = {GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA,
GX_LO_NOOP};
/* 804561A4-804561A8 0047A4 0004+00 0/0 1/1 0/0 .sdata2 None */
extern const u8 j2dDefaultPEBlockDither = 0;
/* 804561A8-804561AC 0047A8 0004+00 0/0 3/3 0/0 .sdata2 j2dDefaultColorChanInfo */
extern const J2DColorChanInfo j2dDefaultColorChanInfo = {0, 3, 0, 0};
/* 804561AC-804561AE 0047AC 0002+00 0/0 1/1 0/0 .sdata2 None */
extern const u8 data_804561AC = 0x1B;
/* 804561AE-804561B0 0047AE 0002+00 0/0 3/3 0/0 .sdata2 j2dDefaultAlphaCmp */
extern const u16 j2dDefaultAlphaCmp = 0x00E7;
+491
View File
@@ -0,0 +1,491 @@
//
// Generated By: dol2asm
// Translation Unit: J2DTextBox
//
#include "JSystem/J2DGraph/J2DTextBox.h"
#include "JSystem/J2DGraph/J2DPrint.h"
#include "JSystem/JSupport/JSURandomInputStream.h"
#include "JSystem/JUtility/JUTResFont.h"
#include "dol2asm.h"
/* 802FF660-802FF6D8 2F9FA0 0078+00 0/0 1/1 0/0 .text __ct__10J2DTextBoxFv */
J2DTextBox::J2DTextBox()
: mFont(NULL), mCharColor(), mGradientColor(), mStringPtr(NULL), mWhiteColor(), mBlackColor() {
initiate(NULL, NULL, 0, HBIND_LEFT, VBIND_TOP);
}
/* 802FF6D8-802FF75C 2FA018 0084+00 0/0 1/1 0/0 .text
* __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamP10JKRArchive */
J2DTextBox::J2DTextBox(J2DPane* p_pane, JSURandomInputStream* p_stream, JKRArchive* p_archive)
: mFont(NULL), mCharColor(), mGradientColor(), mStringPtr(NULL), mWhiteColor(), mBlackColor() {
private_readStream(p_pane, p_stream, p_archive);
}
/* 802FF75C-802FFBC4 2FA09C 0468+00 0/0 1/1 0/0 .text
* __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial */
J2DTextBox::J2DTextBox(J2DPane* p_pane, JSURandomInputStream* p_stream, u32 param_2,
J2DMaterial* p_material)
: mFont(NULL), mCharColor(), mGradientColor(), mStringPtr(NULL), mWhiteColor(), mBlackColor() {
J2DTextBoxInfo info;
int startPos = p_stream->getPosition();
J2DTbxBlockHeader header;
p_stream->read(&header, 8);
mKind = 'TBX1';
int panHeaderPos = p_stream->getPosition();
J2DTbxBlockHeader panHeader;
p_stream->peek(&panHeader, 8);
makePaneExStream(p_pane, p_stream);
p_stream->seek(panHeaderPos + panHeader.mSize, JSUStreamSeekFrom_SET);
p_stream->read(&info, 0x20);
J2DMaterial* mat = NULL;
if (info.mMaterialNum != 0xFFFF) {
mat = &p_material[info.mMaterialNum];
if (mat != NULL) {
if (mat->getTevBlock() != NULL) {
JUTFont* font = mat->getTevBlock()->getFont();
if (font != NULL) {
mFont = font;
mat->getTevBlock()->setFontUndeleteFlag();
}
}
mAlpha = mat->getColorBlock()->getMatColor(0)->a;
}
}
mCharSpacing = info.mCharSpace;
mLineSpacing = info.mLineSpace;
mFontSizeX = info.mFontSizeX;
mFontSizeY = info.mFontSizeY;
mFlags = (info.mHBind << 2) | info.mVBind;
mCharColor = JUtility::TColor(info.mCharColor);
mGradientColor = JUtility::TColor(info.mGradColor);
setConnectParent(info.mConnected);
u16 strLength = 0;
if (!(param_2 & 0x2000000)) {
strLength = info.field_0x1c;
if ((s16)info.field_0x1c == -1) {
strLength = info.field_0x1e + 1;
}
}
mStringLength = 0;
mStringPtr = NULL;
if (strLength != 0) {
mStringPtr = new char[strLength];
}
if (mStringPtr != NULL) {
mStringLength = strLength;
int temp_r0 = (u16)strLength - 1;
u16 var_r26_2 = info.field_0x1e;
if (temp_r0 < var_r26_2) {
var_r26_2 = (u16)temp_r0;
}
p_stream->peek(mStringPtr, var_r26_2);
mStringPtr[var_r26_2] = 0;
}
p_stream->skip(info.field_0x1e);
p_stream->seek(startPos + header.mSize, JSUStreamSeekFrom_SET);
mBlackColor = JUtility::TColor(0);
mWhiteColor = JUtility::TColor(0xFFFFFFFF);
if (mat != NULL && mat->getTevBlock() != NULL) {
if (mat->getTevBlock()->getTevStageNum() != 1) {
J2DGXColorS10* color0p = mat->getTevBlock()->getTevColor(0);
GXColorS10 color0;
color0.r = color0p->r;
color0.g = color0p->g;
color0.b = color0p->b;
color0.a = color0p->a;
J2DGXColorS10* color1p = mat->getTevBlock()->getTevColor(1);
GXColorS10 color1;
color1.r = color1p->r;
color1.g = color1p->g;
color1.b = color1p->b;
color1.a = color1p->a;
mBlackColor = JUtility::TColor(((u8)color0.r << 0x18) | ((u8)color0.g << 0x10) |
((u8)color0.b << 8) | (u8)color0.a);
mWhiteColor = JUtility::TColor(((u8)color1.r << 0x18) | ((u8)color1.g << 0x10) |
((u8)color1.b << 8) | (u8)color1.a);
}
}
field_0x10c = 0.0f;
field_0x110 = 0.0f;
mTextFontOwned = true;
}
/* 802FFBC4-802FFC58 2FA504 0094+00 0/0 1/1 0/0 .text
* __ct__10J2DTextBoxFUxRCQ29JGeometry8TBox2<f>PC7ResFONTPCcs18J2DTextBoxHBinding18J2DTextBoxVBinding
*/
J2DTextBox::J2DTextBox(u64 tag, JGeometry::TBox2<f32> const& bounds, ResFONT const* p_font,
char const* string, s16 strLength, J2DTextBoxHBinding hBind,
J2DTextBoxVBinding vBind)
: J2DPane(tag, bounds), mFont(NULL), mCharColor(), mGradientColor(), mStringPtr(NULL),
mWhiteColor(), mBlackColor() {
initiate(p_font, string, strLength, hBind, vBind);
}
/* 802FFC58-802FFE88 2FA598 0230+00 2/2 1/0 0/0 .text
* initiate__10J2DTextBoxFPC7ResFONTPCcs18J2DTextBoxHBinding18J2DTextBoxVBinding */
void J2DTextBox::initiate(ResFONT const* p_font, char const* string, s16 length,
J2DTextBoxHBinding hBind, J2DTextBoxVBinding vBind) {
if (p_font != NULL) {
mFont = new JUTResFont(p_font, NULL);
}
mCharColor.set(0xFFFFFFFF);
mGradientColor.set(0xFFFFFFFF);
mBlackColor = JUtility::TColor(0);
mWhiteColor = JUtility::TColor(0xFFFFFFFF);
mFlags = (hBind << 2) | vBind;
mStringLength = 0;
mStringPtr = NULL;
if (string != NULL && length != 0) {
u32 len = strlen(string);
u16 stringLen = length;
if (length == -1) {
if (len >= 0xFFFF) {
len = 0xFFFF - 1;
}
stringLen = len + 1;
}
mStringPtr = new char[stringLen];
if (stringLen != 0 && mStringPtr != NULL) {
strncpy(mStringPtr, string, stringLen - 1);
mStringPtr[stringLen - 1] = 0;
mStringLength = stringLen;
}
}
field_0x10c = 0.0f;
field_0x110 = 0.0f;
mCharSpacing = 0.0f;
if (mFont == NULL) {
mLineSpacing = 0.0f;
mFontSizeX = 0.0f;
mFontSizeY = 0.0f;
} else {
mLineSpacing = mFont->getLeading();
mFontSizeX = mFont->getWidth();
mFontSizeY = mFont->getHeight();
}
mKind = 'TBX1';
mTextFontOwned = true;
}
/* 802FFE88-803001E0 2FA7C8 0358+00 1/1 0/0 0/0 .text
* private_readStream__10J2DTextBoxFP7J2DPaneP20JSURandomInputStreamP10JKRArchive */
void J2DTextBox::private_readStream(J2DPane* p_pane, JSURandomInputStream* p_stream,
JKRArchive* p_archive) {
int position = p_stream->getPosition();
J2DTbxBlockHeader header;
p_stream->read(&header, 8);
mKind = header.mTag;
makePaneStream(p_pane, p_stream);
u8 spA = p_stream->readU8();
ResFONT* fontPtr = (ResFONT*)getPointer(p_stream, 'FONT', p_archive);
if (fontPtr != NULL) {
mFont = new JUTResFont(fontPtr, NULL);
}
mCharColor.set(p_stream->read32b());
mGradientColor.set(p_stream->read32b());
mFlags = p_stream->read8b();
mCharSpacing = p_stream->readS16();
mLineSpacing = p_stream->readS16();
mFontSizeX = p_stream->read16b();
mFontSizeY = p_stream->read16b();
s16 stringLen = p_stream->read16b();
mStringPtr = new char[stringLen + 1];
if (mStringPtr != NULL) {
p_stream->read(mStringPtr, stringLen);
mStringPtr[stringLen] = 0;
mStringLength = stringLen + 1;
} else {
p_stream->skip(stringLen);
mStringLength = 0;
}
spA -= 10;
if (spA != 0) {
u8 sp8 = p_stream->read8b();
if (sp8 != 0) {
setConnectParent(true);
}
spA--;
}
mBlackColor = JUtility::TColor(0);
mWhiteColor = JUtility::TColor(0xFFFFFFFF);
if (spA != 0) {
mBlackColor.set(p_stream->read32b());
spA--;
}
if (spA != 0) {
mWhiteColor.set(p_stream->read32b());
}
field_0x10c = 0.0f;
field_0x110 = 0.0f;
p_stream->seek(position + header.mSize, JSUStreamSeekFrom_SET);
mTextFontOwned = true;
}
/* 803001E0-80300278 2FAB20 0098+00 1/0 2/2 0/0 .text __dt__10J2DTextBoxFv */
J2DTextBox::~J2DTextBox() {
if (mTextFontOwned) {
delete mFont;
}
delete[] mStringPtr;
}
/* 80300278-803002E8 2FABB8 0070+00 1/0 0/0 0/0 .text setFont__10J2DTextBoxFP7JUTFont */
void J2DTextBox::setFont(JUTFont* p_font) {
if (p_font) {
if (mTextFontOwned) {
delete mFont;
}
mFont = p_font;
mTextFontOwned = false;
}
}
/* 803002E8-80300490 2FAC28 01A8+00 1/0 0/0 0/0 .text draw__10J2DTextBoxFff */
void J2DTextBox::draw(f32 posX, f32 posY) {
Mtx m;
if (isVisible()) {
J2DPrint print(mFont, mCharSpacing, mLineSpacing, mCharColor, mGradientColor, mBlackColor,
mWhiteColor);
print.setFontSize(mFontSizeX, mFontSizeY);
makeMatrix(posX, posY, 0.0f, 0.0f);
GXLoadPosMtxImm(mPositionMtx, GX_PNMTX0);
GXSetCurrentMtx(0);
GXSetNumIndStages(0);
for (int i = 0; i < 16; i++) {
GXSetTevDirect((GXTevStageID)i);
}
GXSetNumTexGens(1);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
if (mStringPtr != NULL) {
print.print(0.0f, 0.0f, mAlpha, "%s", mStringPtr);
}
MTXIdentity(m);
GXLoadPosMtxImm(m, 0);
}
}
/* 80300490-80300658 2FADD0 01C8+00 1/0 1/1 0/0 .text draw__10J2DTextBoxFfff18J2DTextBoxHBinding
*/
void J2DTextBox::draw(f32 posX, f32 posY, f32 param_2, J2DTextBoxHBinding hBind) {
Mtx m;
if (isVisible()) {
J2DPrint print(mFont, mCharSpacing, mLineSpacing, mCharColor, mGradientColor, mBlackColor,
mWhiteColor);
print.setFontSize(mFontSizeX, mFontSizeY);
makeMatrix(posX, posY, 0.0f, 0.0f);
GXLoadPosMtxImm(mPositionMtx, GX_PNMTX0);
GXSetCurrentMtx(0);
GXSetNumIndStages(0);
for (int i = 0; i < 16; i++) {
GXSetTevDirect((GXTevStageID)i);
}
GXSetNumTexGens(1);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
if (mStringPtr != NULL) {
print.printReturn(mStringPtr, param_2, 0.0f, hBind, VBIND_TOP, 0.0f, -mFontSizeY,
mAlpha);
}
MTXIdentity(m);
GXLoadPosMtxImm(m, 0);
}
}
/* 80300658-80300660 2FAF98 0008+00 0/0 62/62 2/2 .text getStringPtr__10J2DTextBoxCFv */
char* J2DTextBox::getStringPtr() const {
return mStringPtr;
}
/* 80300660-8030074C 2FAFA0 00EC+00 0/0 6/6 0/0 .text setString__10J2DTextBoxFPCce */
s32 J2DTextBox::setString(char const* string, ...) {
va_list args;
va_start(args, string);
delete[] mStringPtr;
u32 len = strlen(string);
if (len >= 0xFFFF) {
len = 0xFFFF - 1;
}
mStringLength = 0;
char* tmp = new char[len + 1];
mStringPtr = tmp;
if (mStringPtr) {
mStringLength = len + 1;
strcpy(mStringPtr, string);
}
va_end(args);
return len;
}
/* 8030074C-80300870 2FB08C 0124+00 0/0 41/41 2/2 .text setString__10J2DTextBoxFsPCce */
s32 J2DTextBox::setString(s16 length, char const* string, ...) {
va_list args;
va_start(args, string);
delete[] mStringPtr;
mStringPtr = NULL;
u32 len = strlen(string);
u16 stringLen = length;
if (length == -1) {
if (len >= 0xFFFF) {
len = 0xFFFF - 1;
}
stringLen = len + 1;
}
mStringLength = 0;
if (stringLen != 0) {
mStringPtr = new char[stringLen];
}
if (mStringPtr != NULL) {
strncpy(mStringPtr, string, stringLen - 1);
mStringPtr[stringLen - 1] = 0;
mStringLength = stringLen;
}
va_end(args);
return len;
}
/* 80300870-803008E8 2FB1B0 0078+00 1/0 1/0 0/0 .text setConnectParent__10J2DTextBoxFb */
bool J2DTextBox::setConnectParent(bool connected) {
if (getPaneTree()->getParent() == NULL) {
return false;
}
if (getPaneTree()->getParent()->getObject()->getTypeID() != 0x11) {
return false;
}
mConnected = connected;
return connected;
}
/* 803008E8-80300950 2FB228 0068+00 1/0 1/0 0/0 .text drawSelf__10J2DTextBoxFff */
void J2DTextBox::drawSelf(f32 param_0, f32 param_1) {
Mtx identity;
MTXIdentity(identity);
drawSelf(param_0, param_1, &identity);
}
/* 80300950-80300AF8 2FB290 01A8+00 1/0 0/0 0/0 .text drawSelf__10J2DTextBoxFffPA3_A4_f
*/
void J2DTextBox::drawSelf(f32 param_0, f32 param_1, Mtx* p_mtx) {
Mtx m;
J2DPrint print(mFont, mCharSpacing, mLineSpacing, mCharColor, mGradientColor, mBlackColor,
mWhiteColor);
print.setFontSize(mFontSizeX, mFontSizeY);
MTXConcat(*p_mtx, mGlobalMtx, m);
GXLoadPosMtxImm(m, GX_PNMTX0);
GXSetNumIndStages(0);
for (int i = 0; i < 16; i++) {
GXSetTevDirect((GXTevStageID)i);
}
GXSetNumTexGens(1);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 60, GX_FALSE, 125);
print.locate(param_0 + mBounds.i.x, param_1 + mBounds.i.y);
if (mStringPtr != NULL) {
print.printReturn(mStringPtr, mBounds.getWidth() + 0.0001f, mBounds.getHeight(),
getHBinding(), getVBinding(), field_0x10c, field_0x110, mColorAlpha);
}
}
/* 80300AF8-80300BFC 2FB438 0104+00 1/0 1/0 0/0 .text resize__10J2DTextBoxFff */
void J2DTextBox::resize(f32 x, f32 y) {
if (mConnected && getPaneTree() != NULL && getPaneTree()->getParent() != NULL) {
J2DPane* obj = getPaneTree()->getParent()->getObject();
if (obj->getTypeID() == 0x11) {
f32 obj_x = obj->getWidth() + (x - getWidth());
f32 obj_y = obj->getHeight() + (y - getHeight());
obj->resize(obj_x, obj_y);
return;
}
}
J2DPane::resize(x, y);
}
/* 80300BFC-80300C68 2FB53C 006C+00 1/0 0/0 0/0 .text isUsed__10J2DTextBoxFPC7ResFONT */
bool J2DTextBox::isUsed(ResFONT const* p_font) {
if (mFont != NULL && mFont->getResFont() == p_font) {
return true;
}
return J2DPane::isUsed(p_font);
}
/* 80300C68-80300C70 2FB5A8 0008+00 1/0 1/0 0/0 .text getTypeID__10J2DTextBoxCFv */
u16 J2DTextBox::getTypeID() const {
return 19;
}
/* 80300C70-80300C90 2FB5B0 0020+00 1/0 0/0 0/0 .text isUsed__10J2DTextBoxFPC7ResTIMG */
bool J2DTextBox::isUsed(ResTIMG const* p_timg) {
return J2DPane::isUsed(p_timg);
}
/* 80300C90-80300C94 2FB5D0 0004+00 1/0 0/0 0/0 .text rewriteAlpha__10J2DTextBoxFv */
void J2DTextBox::rewriteAlpha() {
/* empty function */
}
+598
View File
@@ -0,0 +1,598 @@
//
// J2DTextBoxEx
//
#include "JSystem/J2DGraph/J2DTextBoxEx.h"
#include "JSystem/J2DGraph/J2DPrint.h"
#include "JSystem/JSupport/JSURandomInputStream.h"
#include "JSystem/JUtility/JUTResFont.h"
/* 803071E4-8030751C 301B24 0338+00 0/0 1/1 0/0 .text
* __ct__12J2DTextBoxExFP7J2DPaneP20JSURandomInputStreamUlP11J2DMaterial */
J2DTextBoxEx::J2DTextBoxEx(J2DPane* p_pane, JSURandomInputStream* p_stream, u32 param_2,
J2DMaterial* p_material) {
J2DTextBoxInfo info;
mVisibilityAnm = NULL;
int startPos = p_stream->getPosition();
J2DTbxBlockHeader header;
p_stream->read(&header, 8);
mKind = header.mTag;
int panHeaderPos = p_stream->getPosition();
J2DTbxBlockHeader panHeader;
p_stream->peek(&panHeader, 8);
makePaneExStream(p_pane, p_stream);
p_stream->seek(panHeaderPos + panHeader.mSize, JSUStreamSeekFrom_SET);
p_stream->read(&info, 0x20);
field_0x13c = info.field_0x2;
field_0x13e = info.mMaterialNum;
mMaterial = NULL;
if (field_0x13e != 0xFFFF) {
mMaterial = &p_material[field_0x13e];
p_material[field_0x13e].field_0x4 = this;
rewriteAlpha();
if (mMaterial != NULL) {
if (mMaterial->getTevBlock() != NULL) {
mFont = mMaterial->getTevBlock()->getFont();
}
}
}
mCharSpacing = info.mCharSpace;
mLineSpacing = info.mLineSpace;
mFontSizeX = info.mFontSizeX;
mFontSizeY = info.mFontSizeY;
mFlags = (info.mHBind << 2) | info.mVBind;
mCharColor = JUtility::TColor(info.mCharColor);
mGradientColor = JUtility::TColor(info.mGradColor);
setConnectParent(info.mConnected);
u16 strLength = 0;
if (!(param_2 & 0x2000000)) {
strLength = info.field_0x1c;
if ((s16)info.field_0x1c == -1) {
strLength = info.field_0x1e + 1;
}
}
mStringLength = 0;
mStringPtr = NULL;
if (strLength != 0) {
mStringPtr = new char[strLength];
}
if (mStringPtr != NULL) {
mStringLength = strLength;
int temp_r0 = (u16)strLength - 1;
u16 var_r26_2 = info.field_0x1e;
if (temp_r0 < var_r26_2) {
var_r26_2 = (u16)temp_r0;
}
p_stream->peek(mStringPtr, var_r26_2);
mStringPtr[var_r26_2] = 0;
}
p_stream->skip(info.field_0x1e);
p_stream->seek(startPos + header.mSize, JSUStreamSeekFrom_SET);
field_0x10c = 0.0f;
field_0x110 = 0.0f;
mTextFontOwned = false;
field_0x140 = 0;
}
/* 8030751C-803075AC 301E5C 0090+00 1/0 0/0 0/0 .text __dt__12J2DTextBoxExFv */
J2DTextBoxEx::~J2DTextBoxEx() {
if (field_0x140 != 0) {
delete mMaterial;
}
}
/* 803075AC-803078AC 301EEC 0300+00 1/0 0/0 0/0 .text drawSelf__12J2DTextBoxExFffPA3_A4_f
*/
void J2DTextBoxEx::drawSelf(f32 param_0, f32 param_1, Mtx* p_mtx) {
Mtx m;
JUTFont* font = NULL;
if (mMaterial != NULL && mMaterial->getTevBlock() != NULL) {
font = mMaterial->getTevBlock()->getFont();
}
J2DPrint print(font, (int)mCharSpacing, (int)mLineSpacing, mCharColor, mGradientColor, mBlackColor,
mWhiteColor);
print.setFontSize((int)mFontSizeX, (int)mFontSizeY);
if (mMaterial != NULL) {
mMaterial->setGX();
MTXConcat(*p_mtx, mGlobalMtx, m);
GXLoadPosMtxImm(m, GX_PNMTX0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
print.locate(param_0 + mBounds.i.x, param_1 + mBounds.i.y);
if (mMaterial->isVisible() && mStringPtr != NULL) {
u8 alpha = 255;
if (mMaterial->getColorBlock()->getColorChan(1)->getMatSrc() == 1) {
if (mMaterial->getMaterialAlphaCalc() == 1) {
alpha = mColorAlpha;
}
} else if (mIsInfluencedAlpha) {
GXSetChanMatColor(GX_ALPHA0, JUtility::TColor(mColorAlpha));
}
print.printReturn(mStringPtr, (int)(mBounds.getWidth() + 0.0001f), (int)mBounds.getHeight(),
getHBinding(), getVBinding(), field_0x10c, field_0x110, alpha);
}
}
}
/* 803078AC-80307AF0 3021EC 0244+00 1/0 0/0 0/0 .text draw__12J2DTextBoxExFff */
void J2DTextBoxEx::draw(f32 posX, f32 posY) {
Mtx m;
if (isVisible()) {
JUTFont* font = NULL;
if (mMaterial != NULL && mMaterial->getTevBlock() != NULL) {
font = mMaterial->getTevBlock()->getFont();
}
J2DPrint print(font, mCharSpacing, mLineSpacing, mCharColor, mGradientColor, mBlackColor,
mWhiteColor);
print.setFontSize(mFontSizeX, mFontSizeY);
mColorAlpha = mAlpha;
if (mMaterial != NULL) {
mMaterial->setGX();
makeMatrix(posX, posY, 0.0f, 0.0f);
GXLoadPosMtxImm(mPositionMtx, GX_PNMTX0);
GXSetCurrentMtx(0);
if (!mMaterial->isVisible()) {
return;
}
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
if (mStringPtr != NULL) {
u8 alpha = 255;
if (mMaterial->getMaterialAlphaCalc() == 1) {
alpha = mColorAlpha;
}
print.print(0.0f, 0.0f, alpha, "%s", mStringPtr);
}
for (int i = 0; i < 4; i++) {
GXSetTevSwapModeTable((GXTevSwapSel)i, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
}
GXSetNumIndStages(0);
for (int i = 0; i < 16; i++) {
GXSetTevDirect((GXTevStageID)i);
}
MTXIdentity(m);
GXLoadPosMtxImm(m, 0);
}
}
}
/* 80307AF0-80307D5C 302430 026C+00 1/0 0/0 0/0 .text draw__12J2DTextBoxExFfff18J2DTextBoxHBinding
*/
void J2DTextBoxEx::draw(f32 posX, f32 posY, f32 param_2, J2DTextBoxHBinding hBind) {
Mtx m;
if (isVisible()) {
JUTFont* font = NULL;
if (mMaterial != NULL && mMaterial->getTevBlock() != NULL) {
font = mMaterial->getTevBlock()->getFont();
}
J2DPrint print(font, mCharSpacing, mLineSpacing, mCharColor, mGradientColor, mBlackColor,
mWhiteColor);
print.setFontSize(mFontSizeX, mFontSizeY);
mColorAlpha = mAlpha;
if (mMaterial != NULL) {
mMaterial->setGX();
makeMatrix(posX, posY, 0.0f, 0.0f);
GXLoadPosMtxImm(mPositionMtx, GX_PNMTX0);
GXSetCurrentMtx(0);
if (!mMaterial->isVisible()) {
return;
}
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
if (mStringPtr != NULL) {
u8 alpha = 255;
if (mMaterial->getMaterialAlphaCalc() == 1) {
alpha = mColorAlpha;
}
print.printReturn(mStringPtr, param_2, 0.0f, hBind, VBIND_TOP, 0.0f, -mFontSizeY,
alpha);
}
for (int i = 0; i < 4; i++) {
GXSetTevSwapModeTable((GXTevSwapSel)i, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
}
GXSetNumIndStages(0);
for (int i = 0; i < 16; i++) {
GXSetTevDirect((GXTevStageID)i);
}
MTXIdentity(m);
GXLoadPosMtxImm(m, 0);
}
}
}
/* 80307D5C-80307DC0 30269C 0064+00 1/0 0/0 0/0 .text setFont__12J2DTextBoxExFP7JUTFont
*/
void J2DTextBoxEx::setFont(JUTFont* p_font) {
if (p_font != NULL && mMaterial != NULL && mMaterial->getTevBlock() != NULL) {
mMaterial->getTevBlock()->setFont(p_font);
mFont = p_font;
}
}
/* 80307DC0-80307E0C 302700 004C+00 1/0 0/0 0/0 .text getFont__12J2DTextBoxExCFv */
JUTFont* J2DTextBoxEx::getFont() const {
if (mMaterial != NULL && mMaterial->getTevBlock() != NULL) {
return mMaterial->getTevBlock()->getFont();
}
return NULL;
}
/* 80307E0C-80307EF0 30274C 00E4+00 1/1 0/0 0/0 .text setTevOrder__12J2DTextBoxExFb */
void J2DTextBoxEx::setTevOrder(bool param_0) {
u16 local_18[2];
if (!param_0) {
local_18[0] = 4;
local_18[1] = 0xffff;
} else {
local_18[0] = 0xff;
local_18[1] = 0xff04;
}
for (u8 i = 0; i < 2; i++) {
if (mMaterial->getTevBlock()->getMaxStage() > i) {
J2DTevOrderInfo info;
info.mTexCoord = (local_18[i]) >> 8;
info.mTexMap = (local_18[i]) >> 8;
info.mColor = local_18[i] & 0xff;
J2DTevOrder tevOrder = info;
mMaterial->getTevBlock()->setTevOrder(i, tevOrder);
}
}
}
/* 80307EF0-80307F94 302830 00A4+00 1/1 0/0 0/0 .text setTevStage__12J2DTextBoxExFb */
void J2DTextBoxEx::setTevStage(bool param_0) {
J2DTevStage* stage = mMaterial->getTevBlock()->getTevStage(0);
if (!param_0) {
setStage(stage, STAGE_0);
} else {
setStage(stage, STAGE_1);
setStage(mMaterial->getTevBlock()->getTevStage(1), STAGE_2);
}
}
/* 80307F94-8030823C 3028D4 02A8+00 1/1 0/0 0/0 .text
* setStage__12J2DTextBoxExFP11J2DTevStageQ212J2DTextBoxEx10stage_enum */
void J2DTextBoxEx::setStage(J2DTevStage* param_0, J2DTextBoxEx::stage_enum param_1) {
const u8 tevColors[3][4] = {
{0x0F, 0x08, 0x0A, 0x0F}, {0x02, 0x04, 0x08, 0x0F}, {0x0F, 0x0A, 0x00, 0x0F},
};
const u8 tevAlpha[3][4] = {
{0x07, 0x04, 0x05, 0x07}, {0x01, 0x02, 0x04, 0x07}, {0x07, 0x05, 0x00, 0x07},
};
const u8 tevColorOps[3][5] = {
{0x00, 0x00, 0x00, 0x01, 0x00},
{0x00, 0x00, 0x00, 0x01, 0x00},
{0x00, 0x00, 0x00, 0x01, 0x00},
};
const u8 tevAlphaOps[3][5] = {
{0x00, 0x00, 0x00, 0x01, 0x00},
{0x00, 0x00, 0x00, 0x01, 0x00},
{0x00, 0x00, 0x00, 0x01, 0x00},
};
param_0->setTevColorAB(tevColors[param_1][0], tevColors[param_1][1]);
param_0->setTevColorCD(tevColors[param_1][2], tevColors[param_1][3]);
param_0->setTevColorOp(
tevColorOps[param_1][0], tevColorOps[param_1][1], tevColorOps[param_1][2], tevColorOps[param_1][3], tevColorOps[param_1][4]);
param_0->setAlphaABCD(
tevAlpha[param_1][0], tevAlpha[param_1][1], tevAlpha[param_1][2], tevAlpha[param_1][3]);
param_0->setTevAlphaOp(
tevAlphaOps[param_1][0], tevAlphaOps[param_1][1], tevAlphaOps[param_1][2], tevAlphaOps[param_1][3], tevAlphaOps[param_1][4]);
}
/* 8030823C-803082C4 302B7C 0088+00 1/0 0/0 0/0 .text setBlack__12J2DTextBoxExFQ28JUtility6TColor
*/
bool J2DTextBoxEx::setBlack(JUtility::TColor black) {
JUtility::TColor tevBlack;
JUtility::TColor tevWhite;
if (!getBlackWhite(&tevBlack, &tevWhite)) {
return false;
} else {
return setBlackWhite(black, tevWhite);
}
}
/* 803082C4-8030834C 302C04 0088+00 1/0 0/0 0/0 .text setWhite__12J2DTextBoxExFQ28JUtility6TColor
*/
bool J2DTextBoxEx::setWhite(JUtility::TColor white) {
JUtility::TColor tevBlack;
JUtility::TColor tevWhite;
if (!getBlackWhite(&tevBlack, &tevWhite)) {
return false;
} else {
return setBlackWhite(tevBlack, white);
}
}
/* 8030834C-803084CC 302C8C 0180+00 1/0 0/0 0/0 .text
* setBlackWhite__12J2DTextBoxExFQ28JUtility6TColorQ28JUtility6TColor */
bool J2DTextBoxEx::setBlackWhite(JUtility::TColor param_0, JUtility::TColor param_1) {
if (mMaterial == NULL) {
return false;
}
if (mMaterial->getTevBlock() == NULL) {
return false;
}
if (!isSetBlackWhite(param_0, param_1)) {
return false;
}
bool bvar = false;
if (param_0 != 0 || param_1 != -1) {
bvar = true;
}
mMaterial->getTevBlock()->setTevStageNum(bvar ? 2 : 1);
setTevOrder(bvar);
setTevStage(bvar);
if (bvar) {
J2DGXColorS10 color;
color.r = param_0.r;
color.g = param_0.g;
color.b = param_0.b;
color.a = param_0.a;
mMaterial->getTevBlock()->setTevColor(0, color);
color.r = param_1.r;
color.g = param_1.g;
color.b = param_1.b;
color.a = param_1.a;
mMaterial->getTevBlock()->setTevColor(1, color);
}
return true;
}
/* 803084CC-80308668 302E0C 019C+00 4/4 0/0 0/0 .text
* getBlackWhite__12J2DTextBoxExCFPQ28JUtility6TColorPQ28JUtility6TColor */
bool J2DTextBoxEx::getBlackWhite(JUtility::TColor* param_0, JUtility::TColor* param_1) const {
if (mMaterial == NULL) {
return false;
}
if (mMaterial->getTevBlock() == NULL) {
return false;
}
bool tevStageNum = mMaterial->getTevBlock()->getTevStageNum() != 1;
*param_0 = JUtility::TColor(0);
*param_1 = JUtility::TColor(0xffffffff);
if (tevStageNum) {
J2DGXColorS10* local_30 = mMaterial->getTevBlock()->getTevColor(0);
s16 color0r = local_30->r;
s16 color0g = local_30->g;
s16 color0b = local_30->b;
s16 color0a = local_30->a;
J2DGXColorS10* local_38 = mMaterial->getTevBlock()->getTevColor(1);
s16 color1r = local_38->r;
s16 color1g = local_38->g;
s16 color1b = local_38->b;
s16 color1a = local_38->a;
*param_0 = JUtility::TColor(
(((u8)color0r) << 24) | (((u8)color0g) << 16) | (((u8)color0b) << 8) |
((u8)color0a));
*param_1 = JUtility::TColor(
(((u8)color1r) << 24) | (((u8)color1g) << 16) | (((u8)color1b) << 8) |
((u8)color1a));
}
return true;
}
/* 80308668-803086FC 302FA8 0094+00 1/1 0/0 0/0 .text
* isSetBlackWhite__12J2DTextBoxExCFQ28JUtility6TColorQ28JUtility6TColor */
bool J2DTextBoxEx::isSetBlackWhite(JUtility::TColor param_0, JUtility::TColor param_1) const {
if ((u32)param_0 == 0 && (u32)param_1 == 0xffffffff) {
return 1;
}
mMaterial->getTevBlock()->getTevStageNum();
if (mMaterial->getTevBlock()->getMaxStage() == 1) {
return 0;
}
return 1;
}
/* 803086FC-8030875C 30303C 0060+00 1/0 0/0 0/0 .text getBlack__12J2DTextBoxExCFv */
JUtility::TColor J2DTextBoxEx::getBlack() const {
JUtility::TColor black;
JUtility::TColor white;
if (getBlackWhite(&black, &white) == 0) {
return JUtility::TColor(0);
}
return black;
}
/* 8030875C-803087BC 30309C 0060+00 1/0 0/0 0/0 .text getWhite__12J2DTextBoxExCFv */
JUtility::TColor J2DTextBoxEx::getWhite() const {
JUtility::TColor black;
JUtility::TColor white;
if (getBlackWhite(&black, &white) == 0) {
return JUtility::TColor(0xffffffff);
}
return white;
}
/* 803087BC-803087DC 3030FC 0020+00 1/0 0/0 0/0 .text setAlpha__12J2DTextBoxExFUc */
void J2DTextBoxEx::setAlpha(u8 alpha) {
mAlpha = alpha;
if (mMaterial == NULL) {
return;
}
if (mMaterial->getColorBlock()->getMatColor(0) == NULL) {
return;
}
mMaterial->getColorBlock()->getMatColor(0)->a = alpha;
}
/* 803087DC-80308810 30311C 0034+00 1/0 0/0 0/0 .text setCullBack__12J2DTextBoxExF11_GXCullMode */
void J2DTextBoxEx::setCullBack(GXCullMode mode) {
mCullMode = mode;
if (mMaterial != NULL) {
mMaterial->getColorBlock()->setCullMode(mode);
}
J2DPane::setCullBack(mode);
}
/* 80308810-80308828 303150 0018+00 1/0 0/0 0/0 .text rewriteAlpha__12J2DTextBoxExFv */
void J2DTextBoxEx::rewriteAlpha() {
if (mMaterial == NULL) {
return;
}
mAlpha = mMaterial->getColorBlock()->getMatColor(0)->a;
}
/* 80308828-803088B4 303168 008C+00 1/0 0/0 0/0 .text isUsed__12J2DTextBoxExFPC7ResFONT
*/
bool J2DTextBoxEx::isUsed(ResFONT const* p_font) {
if (getFont() != NULL && getFont()->getResFont() == p_font) {
return true;
}
return J2DPane::isUsed(p_font);
}
/* 803088B4-803088E0 3031F4 002C+00 1/0 0/0 0/0 .text setAnimation__12J2DTextBoxExFP11J2DAnmColor
*/
void J2DTextBoxEx::setAnimation(J2DAnmColor* anm) {
if (mMaterial != NULL) {
mMaterial->setAnimation(anm);
}
}
/* 803088E0-8030890C 303220 002C+00 1/0 0/0 0/0 .text
* setAnimation__12J2DTextBoxExFP19J2DAnmTextureSRTKey */
void J2DTextBoxEx::setAnimation(J2DAnmTextureSRTKey* anm) {
if (mMaterial != NULL) {
mMaterial->setAnimation(anm);
}
}
/* 8030890C-80308938 30324C 002C+00 1/0 0/0 0/0 .text
* setAnimation__12J2DTextBoxExFP16J2DAnmTexPattern */
void J2DTextBoxEx::setAnimation(J2DAnmTexPattern* anm) {
if (mMaterial != NULL) {
mMaterial->setAnimation(anm);
}
}
/* 80308938-80308964 303278 002C+00 1/0 0/0 0/0 .text
* setAnimation__12J2DTextBoxExFP15J2DAnmTevRegKey */
void J2DTextBoxEx::setAnimation(J2DAnmTevRegKey* anm) {
if (mMaterial != NULL) {
mMaterial->setAnimation(anm);
}
}
/* 80308964-8030896C -00001 0008+00 0/0 0/0 0/0 .text
* setAnimation__12J2DTextBoxExFP20J2DAnmVisibilityFull */
void J2DTextBoxEx::setAnimation(J2DAnmVisibilityFull* anm) {
mVisibilityAnm = anm;
}
/* 8030896C-803089EC 3032AC 0080+00 1/0 0/0 0/0 .text
* animationPane__12J2DTextBoxExFPC15J2DAnmTransform */
const J2DAnmTransform* J2DTextBoxEx::animationPane(J2DAnmTransform const* param_0) {
if (mVisibilityAnm != NULL && field_0x13c != 0xffff) {
u8 visibility;
mVisibilityAnm->getVisibility(field_0x13c, &visibility);
if (visibility != 0) {
show();
} else {
hide();
}
}
return J2DPane::animationPane(param_0);
}
/* 803089EC-80308A28 30332C 003C+00 1/0 0/0 0/0 .text setCullBack__12J2DTextBoxExFb */
void J2DTextBoxEx::setCullBack(bool param_0) {
setCullBack(param_0 ? GX_CULL_BACK : GX_CULL_NONE);
}
/* 80308A28-80308A48 303368 0020+00 1/0 0/0 0/0 .text isUsed__12J2DTextBoxExFPC7ResTIMG
*/
bool J2DTextBoxEx::isUsed(ResTIMG const* p_timg) {
return J2DPane::isUsed(p_timg);
}
/* 80308A48-80308A4C 303388 0004+00 1/0 0/0 0/0 .text
* setAnimation__12J2DTextBoxExFP14J2DAnmVtxColor */
void J2DTextBoxEx::setAnimation(J2DAnmVtxColor* param_0) {
/* empty function */
}
/* 80308A4C-80308A6C 30338C 0020+00 1/0 0/0 0/0 .text setAnimation__12J2DTextBoxExFP10J2DAnmBase
*/
void J2DTextBoxEx::setAnimation(J2DAnmBase* anm) {
J2DPane::setAnimation(anm);
}
/* 803A1DF0-803A1DF0 02E450 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+679
View File
@@ -0,0 +1,679 @@
#include "JSystem/J2DGraph/J2DWindow.h"
#include "JSystem/JSupport/JSURandomInputStream.h"
#include "JSystem/JUtility/JUTPalette.h"
#include "JSystem/JUtility/JUTResource.h"
#include "JSystem/JUtility/JUTTexture.h"
/* 802F9A7C-802F9B74 2F43BC 00F8+00 0/0 1/1 0/0 .text __ct__9J2DWindowFv */
J2DWindow::J2DWindow()
: field_0x100(NULL), field_0x104(NULL), field_0x108(NULL), field_0x10c(NULL), field_0x110(NULL),
mPalette(NULL) {
field_0x144 = 0;
setContentsColor(JUtility::TColor(0xffffffff));
mBlack = JUtility::TColor(0);
mWhite = JUtility::TColor(0xffffffff);
}
/* 802F9B74-802F9C10 2F44B4 009C+00 0/0 1/1 0/0 .text
* __ct__9J2DWindowFP7J2DPaneP20JSURandomInputStreamP10JKRArchive */
J2DWindow::J2DWindow(J2DPane* param_0, JSURandomInputStream* param_1, JKRArchive* param_2)
: field_0x100(NULL), field_0x104(NULL), field_0x108(NULL), field_0x10c(NULL), field_0x110(NULL),
mPalette(NULL) {
private_readStream(param_0, param_1, param_2);
}
struct J2DWindowData {
u8 field_0x0[0x10];
u16 field_0x10[4];
u8 field_0x18;
u8 field_0x19;
u16 field_0x1a;
u16 field_0x1c;
u16 field_0x1e;
u16 field_0x20;
u16 field_0x22;
u16 field_0x24;
u8 field_0x26[0xa];
u32 field_0x30[4];
};
/* 802F9C10-802FA118 2F4550 0508+00 0/0 1/1 0/0 .text
* __ct__9J2DWindowFP7J2DPaneP20JSURandomInputStreamP11J2DMaterial */
J2DWindow::J2DWindow(J2DPane* param_0, JSURandomInputStream* param_1, J2DMaterial* param_2) :
field_0x100(NULL),
field_0x104(NULL),
field_0x108(NULL),
field_0x10c(NULL),
field_0x110(NULL),
mPalette(NULL) {
u32 auStack_78[2];
u32 position = param_1->getPosition();
param_1->read(auStack_78, 8);
mKind = 'WIN1';
u32 local_dc = param_1->getPosition();
int auStack_b8[2];
param_1->peek(auStack_b8, 8);
makePaneExStream(param_0, param_1);
param_1->seek(local_dc + auStack_b8[1], JSUStreamSeekFrom_SET);
J2DWindowData buffer;
param_1->read(&buffer, sizeof(J2DWindowData));
JUtility::TColor* colors[4] = {
&field_0x128,
&field_0x12C,
&field_0x130,
&field_0x134,
};
u16 local_c0[4];
J2DMaterial *local_98[4];
for (int iVar7 = 0; iVar7 < 4; iVar7++) {
local_c0[iVar7] = buffer.field_0x10[iVar7];
local_98[iVar7] = NULL;
if (local_c0[iVar7] != 0xffff) {
local_98[iVar7] = param_2 + local_c0[iVar7];
}
*colors[iVar7] = JUtility::TColor(buffer.field_0x30[iVar7]);
}
field_0x144 = buffer.field_0x18;
field_0x114.set(
buffer.field_0x1a,
buffer.field_0x1c,
buffer.field_0x1a + buffer.field_0x1e,
buffer.field_0x1c + buffer.field_0x20);
u16 temp = buffer.field_0x24;
J2DMaterial* pJVar5 = NULL;
if (temp != 0xffff) {
pJVar5 = param_2 + temp;
}
param_1->seek(position + auStack_78[1], JSUStreamSeekFrom_SET);
if (local_98[0] != NULL) {
mAlpha = local_98[0]->getColorBlock()->getMatColor(0)->a;
}
mBlack = JUtility::TColor(0);
mWhite = JUtility::TColor(0xffffffff);
if (local_98[0] != NULL && local_98[0]->getTevBlock() != NULL) {
if (local_98[0]->getTevBlock()->getTevStageNum() != 1) {
J2DGXColorS10* local_c8 = local_98[0]->getTevBlock()->getTevColor(0);
s16 blackr = local_c8->r;
s16 blackg = local_c8->g;
s16 blackb = local_c8->b;
s16 blacka = local_c8->a;
J2DGXColorS10* local_d0 = local_98[0]->getTevBlock()->getTevColor(1);
s16 whiter = local_d0->r;
s16 whiteg = local_d0->g;
s16 whiteb = local_d0->b;
s16 whitea = local_d0->a;
mBlack = JUtility::TColor(
(((u8)blackr) << 24) | (((u8)blackg) << 16) | (((u8)blackb) << 8) |
((u8)blacka));
mWhite = JUtility::TColor(
(((u8)whiter) << 24) | (((u8)whiteg) << 16) | (((u8)whiteb) << 8) |
((u8)whitea));
}
}
JUTTexture** textures[4] = {
&field_0x100,
&field_0x104,
&field_0x108,
&field_0x10c,
};
J2DMaterial * mat;
for (u32 uVar6 = 0; uVar6 < 4; uVar6++) {
mat = local_98[uVar6];
if (mat != NULL && mat->getTevBlock() != NULL) {
JUTTexture* local_e0 = mat->getTevBlock()->getTexture(0);
if (local_e0 != NULL) {
*textures[uVar6] = local_e0;
mat->getTevBlock()->setUndeleteFlag(0xfe);
}
}
}
field_0x110 = NULL;
if (pJVar5 != NULL && pJVar5->getTevBlock() != NULL) {
JUTTexture* local_e0 = pJVar5->getTevBlock()->getTexture(0);
if (local_e0 != NULL) {
field_0x110 = local_e0;
pJVar5->getTevBlock()->setUndeleteFlag(0xfe);
}
}
initinfo2();
}
/* 802FA118-802FA604 2F4A58 04EC+00 1/1 0/0 0/0 .text
* private_readStream__9J2DWindowFP7J2DPaneP20JSURandomInputStreamP10JKRArchive */
void J2DWindow::private_readStream(J2DPane* param_0, JSURandomInputStream* param_1,
JKRArchive* param_2) {
s32 local_188 = param_1->getPosition();
u32 local_180[2];
param_1->read(local_180, 8);
mKind = local_180[0];
makePaneStream(param_0, param_1);
JUTResReference stack_178;
u8 r27 = param_1->readU8();
f32 f31 = param_1->read16b();
f32 f30 = param_1->read16b();
f32 f29 = f31 + param_1->read16b();
f32 f28 = f30 + param_1->read16b();
field_0x114.set(f31, f30, f29, f28);
ResTIMG* timg = (ResTIMG*)getPointer(param_1, 'TIMG', param_2);
if (timg) {
field_0x100 = new JUTTexture(timg, 0);
}
timg = (ResTIMG*)getPointer(param_1, 'TIMG', param_2);
if (timg) {
field_0x104 = new JUTTexture(timg, 0);
}
timg = (ResTIMG*)getPointer(param_1, 'TIMG', param_2);
if (timg) {
field_0x108 = new JUTTexture(timg, 0);
}
timg = (ResTIMG*)getPointer(param_1, 'TIMG', param_2);
if (timg) {
field_0x10c = new JUTTexture(timg, 0);
}
ResTLUT* tlut = (ResTLUT*)getPointer(param_1, 'TLUT', param_2);
if (tlut) {
mPalette = new JUTPalette(GX_TLUT0, tlut);
}
field_0x144 = param_1->read8b();
field_0x128.set(param_1->read32b());
field_0x12C.set(param_1->read32b());
field_0x130.set(param_1->read32b());
field_0x134.set(param_1->read32b());
r27 -= 14;
field_0x110 = NULL;
if (r27) {
timg = (ResTIMG*)getPointer(param_1, 'TIMG', param_2);
if (timg) {
field_0x110 = new JUTTexture(timg, 0);
}
r27--;
}
mBlack = JUtility::TColor(0);
mWhite = JUtility::TColor(0xffffffff);
if (r27) {
mBlack = JUtility::TColor(param_1->readU32());
r27--;
}
if (r27) {
mWhite = JUtility::TColor(param_1->readU32());
}
param_1->seek(local_188 + local_180[1], JSUStreamSeekFrom_SET);
initinfo2();
}
/* 802FA604-802FA880 2F4F44 027C+00 2/2 0/0 0/0 .text initinfo2__9J2DWindowFv */
void J2DWindow::initinfo2() {
if (field_0x100 && field_0x104 && field_0x108 && field_0x10c) {
field_0x140 = field_0x100->getWidth() + field_0x104->getWidth();
field_0x142 = field_0x100->getHeight() + field_0x108->getHeight();
} else {
field_0x140 = 1;
field_0x142 = 1;
return;
}
field_0x145 = 0;
JUTTexture* r30 = field_0x100;
if (*field_0x104 != *r30) {
field_0x145 |= 1;
r30 = field_0x104;
}
if (*field_0x10c != *r30) {
field_0x145 |= 2;
r30 = field_0x10c;
}
if (*field_0x108 != *r30) {
field_0x145 |= 4;
}
}
/* 802FA880-802FA928 2F51C0 00A8+00 1/0 1/1 0/0 .text __dt__9J2DWindowFv */
J2DWindow::~J2DWindow() {
delete field_0x100;
delete field_0x104;
delete field_0x108;
delete field_0x10c;
delete mPalette;
delete field_0x110;
}
/* 802FA928-802FAA5C 2F5268 0134+00 1/0 0/0 0/0 .text draw__9J2DWindowFRCQ29JGeometry8TBox2<f> */
void J2DWindow::draw(JGeometry::TBox2<f32> const& param_0) {
JGeometry::TBox2<f32> stack_58;
if (field_0x100 && field_0x104 && field_0x108 && field_0x10c) {
stack_58.set(field_0x100->getWidth(), field_0x100->getHeight(),
param_0.getWidth() - field_0x104->getWidth(),
param_0.getHeight() - field_0x108->getHeight());
} else {
stack_58.set(0.0f, 0.0f, param_0.getWidth(), param_0.getHeight());
}
draw(param_0, stack_58);
}
/* 802FAA5C-802FAED0 2F539C 0474+00 2/2 0/0 0/0 .text
* draw_private__9J2DWindowFRCQ29JGeometry8TBox2<f>RCQ29JGeometry8TBox2<f> */
void J2DWindow::draw_private(JGeometry::TBox2<f32> const& param_0,
JGeometry::TBox2<f32> const& param_1) {
JGeometry::TBox2<f32> stack_a0(param_1);
stack_a0.addPos(param_0.i);
drawContents(stack_a0);
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXSetNumTexGens(1);
if (field_0x100 && field_0x104 && field_0x108 && field_0x10c) {
f32 f29 = param_0.i.x;
f32 f28 = param_0.i.y;
f32 f31 = param_0.f.x - field_0x10c->getWidth();
f32 f30 = param_0.f.y - field_0x10c->getHeight();
f32 f27 = f29 + field_0x100->getWidth();
f32 f26 = f28 + field_0x100->getHeight();
drawFrameTexture(field_0x100, f29, f28, field_0x144 & 0x80, field_0x144 & 0x40, true);
bool r24 = isField0x145Set(1);
drawFrameTexture(field_0x104, f31, f28, field_0x144 & 0x20, field_0x144 & 0x10, r24);
u16 local_a6;
if (field_0x144 & 0x20) {
local_a6 = 0x8000;
} else {
local_a6 = 0;
}
u16 local_a8;
if (field_0x144 & 0x10) {
local_a8 = 0;
} else {
local_a8 = 0x8000;
}
u16 local_a82 = local_a8 ^ 0x8000;
drawFrameTexture(field_0x104, f27, f28, f31 - f27, field_0x104->getHeight(), local_a6,
local_a8, local_a6, local_a82, false);
bool isset2 = isField0x145Set(2);
drawFrameTexture(field_0x10c, f31, f30, field_0x144 & 2, field_0x144 & 1, isset2);
u16 local_aa;
if (field_0x144 & 2) {
local_aa = 0x8000;
} else {
local_aa = 0;
}
u16 local_ac;
if (field_0x144 & 1) {
local_ac = 0;
} else {
local_ac = 0x8000;
}
local_a82 = local_ac ^ 0x8000;
drawFrameTexture(field_0x10c, f27, f30, f31 - f27, field_0x10c->getHeight(), local_aa,
local_ac, local_aa, local_a82, false);
u16 local_ae;
if (field_0x144 & 2) {
local_ae = 0;
} else {
local_ae = 0x8000;
}
u16 local_ae2 = local_ae ^ 0x8000;
u16 local_b0;
if (field_0x144 & 1) {
local_b0 = 0x8000;
} else {
local_b0 = 0;
}
drawFrameTexture(field_0x10c, f31, f26, field_0x10c->getWidth(), f30 - f26, local_ae,
local_b0, local_ae2, local_b0, false);
bool isset4 = isField0x145Set(4);
drawFrameTexture(field_0x108, f29, f30, field_0x144 & 8, field_0x144 & 4, isset4);
u16 local_b2;
if (field_0x144 & 8) {
local_b2 = 0;
} else {
local_b2 = 0x8000;
}
u16 local_b22 = local_b2 ^ 0x8000;
u16 local_b4;
if (field_0x144 & 4) {
local_b4 = 0x8000;
} else {
local_b4 = 0;
}
drawFrameTexture(field_0x108, f29, f26, field_0x108->getWidth(), f30 - f26, local_b2,
local_b4, local_b22, local_b4, false);
}
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetNumTexGens(0);
GXSetVtxDesc(GX_VA_TEX0, GX_NONE);
}
/* 802FAED0-802FB000 2F5810 0130+00 1/0 0/0 0/0 .text
* draw__9J2DWindowFRCQ29JGeometry8TBox2<f>RCQ29JGeometry8TBox2<f> */
void J2DWindow::draw(JGeometry::TBox2<f32> const& param_0, JGeometry::TBox2<f32> const& param_1) {
if (param_0.getWidth() >= field_0x140 && param_0.getHeight() >= field_0x142 && isVisible()) {
makeMatrix(param_0.i.x, param_0.i.y, 0, 0);
GXLoadPosMtxImm(mPositionMtx, GX_PNMTX0);
GXSetCurrentMtx(0);
mColorAlpha = mAlpha;
JGeometry::TBox2<f32> stack_70(0.0f, 0.0f, param_0.getWidth(), param_0.getHeight());
draw_private(stack_70, param_1);
Mtx stack_60;
MTXIdentity(stack_60);
GXLoadPosMtxImm(stack_60, GX_PNMTX0);
}
}
/* 802FB000-802FB12C 2F5940 012C+00 1/0 1/0 0/0 .text resize__9J2DWindowFff */
void J2DWindow::resize(f32 param_0, f32 param_1) {
f32 f31 = getWidth();
f32 f30 = getHeight();
J2DPane::resize(param_0, param_1);
field_0x114.f.x += param_0 - f31;
field_0x114.f.y += param_1 - f30;
for (JSUTreeIterator<J2DPane> it(getFirstChild()); it != getEndChild(); it++) {
if (it->getTypeID() == 19 && it->isConnectParent()) {
f32 f29 = param_0 - f31 + it->getWidth();
f32 f28 = param_1 - f30 + it->getHeight();
it->J2DPane::resize(f29, f28);
}
}
}
/* 802FB12C-802FB1D8 2F5A6C 00AC+00 1/1 0/0 0/0 .text
* setContentsColor__9J2DWindowFQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColor
*/
void J2DWindow::setContentsColor(JUtility::TColor param_0, JUtility::TColor param_1,
JUtility::TColor param_2, JUtility::TColor param_3) {
field_0x128.set(param_0);
field_0x12C.set(param_1);
field_0x130.set(param_2);
field_0x134.set(param_3);
}
/* 802FB1D8-802FB240 2F5B18 0068+00 1/0 1/0 0/0 .text drawSelf__9J2DWindowFff */
void J2DWindow::drawSelf(f32 param_0, f32 param_1) {
Mtx stack_38;
MTXIdentity(stack_38);
drawSelf(param_0, param_1, &stack_38);
}
/* 802FB240-802FB338 2F5B80 00F8+00 1/0 0/0 0/0 .text drawSelf__9J2DWindowFffPA3_A4_f */
void J2DWindow::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) {
JGeometry::TBox2<f32> stack_50(mBounds);
stack_50.addPos(JGeometry::TVec2<f32>(param_0, param_1));
if (stack_50.getWidth() >= field_0x140 && stack_50.getHeight() >= field_0x142) {
Mtx stack_40;
MTXConcat(*param_2, mGlobalMtx, stack_40);
GXLoadPosMtxImm(stack_40, GX_PNMTX0);
draw_private(stack_50, field_0x114);
}
clip(field_0x114);
}
/* 802FB338-802FB634 2F5C78 02FC+00 1/0 0/0 0/0 .text
* drawContents__9J2DWindowFRCQ29JGeometry8TBox2<f> */
void J2DWindow::drawContents(JGeometry::TBox2<f32> const& param_0) {
if (param_0.isValid()) {
GXSetNumChans(1);
GXSetNumTexGens(0);
GXSetNumTevStages(1);
GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
if ((field_0x128 & 0xff) == 0xff && (field_0x12C & 0xff) == 0xff &&
(field_0x130 & 0xff) == 0xff && (field_0x134 & 0xff) == 0xff && mColorAlpha == 0xff)
{
GXSetBlendMode(GX_BM_NONE, GX_BL_ONE, GX_BL_ZERO, GX_LO_SET);
} else {
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
}
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetChanCtrl(GX_COLOR0A0, 0, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
GX_AF_NONE);
GXSetNumIndStages(0);
for (int i = 0; i < 16; i++) {
GXSetTevDirect(GXTevStageID(i));
}
if (field_0x110 == NULL) {
JUtility::TColor color1(field_0x128);
JUtility::TColor color2(field_0x130);
JUtility::TColor color3(field_0x12C);
JUtility::TColor color4(field_0x134);
if (mColorAlpha != 0xff) {
color1.a = color1.a * mColorAlpha / 0xff;
color2.a = color2.a * mColorAlpha / 0xff;
color3.a = color3.a * mColorAlpha / 0xff;
color4.a = color4.a * mColorAlpha / 0xff;
}
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(param_0.i.x, param_0.i.y, 0.0f);
GXColor1u32(color1);
GXPosition3f32(param_0.f.x, param_0.i.y, 0.0f);
GXColor1u32(color3);
GXPosition3f32(param_0.f.x, param_0.f.y, 0.0f);
GXColor1u32(color4);
GXPosition3f32(param_0.i.x, param_0.f.y, 0.0f);
GXColor1u32(color2);
GXEnd();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
} else {
GXClearVtxDesc();
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
GXSetNumTexGens(1);
drawContentsTexture(param_0.i.x, param_0.i.y, param_0.getWidth(), param_0.getHeight());
}
}
}
/* 802FB634-802FB7C8 2F5F74 0194+00 2/2 0/0 0/0 .text
* drawFrameTexture__9J2DWindowFP10JUTTextureffffUsUsUsUsb */
void J2DWindow::drawFrameTexture(JUTTexture* param_0, f32 param_1, f32 param_2, f32 param_3,
f32 param_4, u16 param_5, u16 param_6, u16 param_7, u16 param_8,
bool param_9) {
f32 f31 = param_1 + param_3;
f32 f30 = param_2 + param_4;
if (param_9) {
param_0->load(GX_TEXMAP0);
setTevMode(param_0, mBlack, mWhite);
}
JUtility::TColor stack_64(mColorAlpha | 0xffffff00);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(param_1, param_2, 0.0f);
GXColor1u32(stack_64);
GXTexCoord2u16(param_7, param_8);
GXPosition3f32(f31, param_2, 0.0f);
GXColor1u32(stack_64);
GXTexCoord2u16(param_5, param_8);
GXPosition3f32(f31, f30, 0.0f);
GXColor1u32(stack_64);
GXTexCoord2u16(param_5, param_6);
GXPosition3f32(param_1, f30, 0.0f);
GXColor1u32(stack_64);
GXTexCoord2u16(param_7, param_6);
GXEnd();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
}
/* 802FB7C8-802FB868 2F6108 00A0+00 1/1 0/0 0/0 .text
* drawFrameTexture__9J2DWindowFP10JUTTextureffbbb */
void J2DWindow::drawFrameTexture(JUTTexture* param_0, f32 param_1, f32 param_2, bool param_3,
bool param_4, bool param_5) {
u16 r31 = param_4 ? u16(0x8000) : u16(0);
u16 r30 = param_3 ? u16(0x8000) : u16(0);
u16 r29 = param_4 ? u16(0) : u16(0x8000);
u16 r28 = param_3 ? u16(0) : u16(0x8000);
drawFrameTexture(param_0, param_1, param_2, param_0->getWidth(), param_0->getHeight(), r28, r29,
r30, r31, param_5);
}
/* 802FB868-802FBB90 2F61A8 0328+00 1/1 0/0 0/0 .text drawContentsTexture__9J2DWindowFffff */
void J2DWindow::drawContentsTexture(f32 param_0, f32 param_1, f32 param_2, f32 param_3) {
f32 f29 = param_0 + param_2;
f32 f28 = param_1 + param_3;
f32 width = field_0x110->getWidth();
f32 height = field_0x110->getHeight();
f32 f27 = -(param_2 / width - 1.0f) / 2.0f;
f32 f26 = -(param_3 / height - 1.0f) / 2.0f;
f32 f25 = f27 + param_2 / width;
f32 f24 = f26 + param_3 / height;
TContentsColor stack_f0;
getContentsColor(stack_f0);
if (mColorAlpha != 0xff) {
stack_f0.field_0x0.a = stack_f0.field_0x0.a * mColorAlpha / 0xff;
stack_f0.field_0x4.a = stack_f0.field_0x4.a * mColorAlpha / 0xff;
stack_f0.field_0x8.a = stack_f0.field_0x8.a * mColorAlpha / 0xff;
stack_f0.field_0xc.a = stack_f0.field_0xc.a * mColorAlpha / 0xff;
}
field_0x110->load(GX_TEXMAP0);
setTevMode(field_0x110, 0, 0xffffffff);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA6, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
GXPosition3f32(param_0, param_1, 0.0f);
GXColor1u32(stack_f0.field_0x0);
GXTexCoord2f32(f27, f26);
GXPosition3f32(f29, param_1, 0.0f);
GXColor1u32(stack_f0.field_0x4);
GXTexCoord2f32(f25, f26);
GXPosition3f32(f29, f28, 0.0f);
GXColor1u32(stack_f0.field_0xc);
GXTexCoord2f32(f25, f24);
GXPosition3f32(param_0, f28, 0.0f);
GXColor1u32(stack_f0.field_0x8);
GXTexCoord2f32(f27, f24);
GXEnd();
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBX8, 0xf);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0);
}
/* 802FBB90-802FBE60 2F64D0 02D0+00 2/2 0/0 0/0 .text
* setTevMode__9J2DWindowFP10JUTTextureQ28JUtility6TColorQ28JUtility6TColor */
void J2DWindow::setTevMode(JUTTexture* param_0, JUtility::TColor param_1,
JUtility::TColor param_2) {
if (param_1 == 0 && param_2 == 0xffffffff) {
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO);
if (param_0->getTransparency()) {
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO);
} else {
GXSetTevColor(GX_TEVREG2, JUtility::TColor(0xffffffff));
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A2, GX_CA_RASA, GX_CA_ZERO);
}
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetNumTevStages(1);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
} else {
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
GXSetTevColor(GX_TEVREG0, param_1);
GXSetTevColor(GX_TEVREG1, param_2);
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_C0, GX_CC_C1, GX_CC_TEXC, GX_CC_ZERO);
if (param_0->getTransparency()) {
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A0, GX_CA_A1, GX_CA_TEXA, GX_CA_ZERO);
} else {
GXSetTevColor(GX_TEVREG2, JUtility::TColor(0xffffffff));
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A0, GX_CA_A1, GX_CA_A2, GX_CA_ZERO);
}
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_CPREV, GX_CC_RASC, GX_CC_ZERO);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_APREV, GX_CA_RASA, GX_CA_ZERO);
GXSetTevColorOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetTevAlphaOp(GX_TEVSTAGE1, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
GXSetNumTevStages(2);
}
GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_SET);
}
/* 802FBE60-802FBEDC 2F67A0 007C+00 1/0 0/0 0/0 .text getFrameTexture__9J2DWindowCFUcUc
*/
JUTTexture* J2DWindow::getFrameTexture(u8 param_0, u8 param_1) const {
JUTTexture* tmp[4] = {NULL, NULL, NULL, NULL};
tmp[0] = field_0x100;
tmp[1] = field_0x104;
tmp[2] = field_0x108;
tmp[3] = field_0x10c;
if (param_0 >= 4 || param_1 != 0) {
return NULL;
}
return tmp[param_0];
}
/* 802FBEDC-802FBF98 2F681C 00BC+00 1/0 0/0 0/0 .text isUsed__9J2DWindowFPC7ResTIMG */
bool J2DWindow::isUsed(ResTIMG const* param_0) {
JUTTexture* tmp[5] = {NULL, NULL, NULL, NULL, NULL};
tmp[0] = field_0x100;
tmp[1] = field_0x104;
tmp[2] = field_0x108;
tmp[3] = field_0x10c;
tmp[4] = field_0x110;
for (u8 i = 0; i < 5; i++) {
if (tmp[i] && tmp[i]->getTexInfo() == param_0) {
return true;
}
}
return J2DPane::isUsed(param_0);
}
/* 802FBF98-802FBFA0 2F68D8 0008+00 1/0 1/0 0/0 .text getTypeID__9J2DWindowCFv */
u16 J2DWindow::getTypeID() const {
return 17;
}
/* 802FBFA0-802FBFE8 2F68E0 0048+00 1/0 0/0 0/0 .text draw__9J2DWindowFffff */
void J2DWindow::draw(f32 param_0, f32 param_1, f32 param_2, f32 param_3) {
draw(JGeometry::TBox2<f32>(param_0, param_1, param_0 + param_2, param_1 + param_3));
}
/* 802FBFE8-802FC000 2F6928 0018+00 1/0 0/0 0/0 .text getContentsTexture__9J2DWindowCFUc
*/
JUTTexture* J2DWindow::getContentsTexture(u8 param_0) const {
if (param_0 != 0) {
return NULL;
}
return field_0x110;
}
/* 802FC000-802FC01C 2F6940 001C+00 1/0 0/0 0/0 .text
* getMaterial__9J2DWindowCFRQ29J2DWindow9TMaterial */
void J2DWindow::getMaterial(J2DWindow::TMaterial& param_0) const {
param_0.field_0x0 = NULL;
param_0.field_0x4 = NULL;
param_0.field_0x8 = NULL;
param_0.field_0xc = NULL;
param_0.field_0x10 = NULL;
}
/* 802FC01C-802FC024 2F695C 0008+00 1/0 0/0 0/0 .text getFrameMaterial__9J2DWindowCFUc */
J2DMaterial* J2DWindow::getFrameMaterial(u8 param_0) const {
return NULL;
}
/* 802FC024-802FC02C 2F6964 0008+00 1/0 0/0 0/0 .text getContentsMaterial__9J2DWindowCFv
*/
J2DMaterial* J2DWindow::getContentsMaterial() const {
return NULL;
}
/* 802FC02C-802FC04C 2F696C 0020+00 1/0 0/0 0/0 .text isUsed__9J2DWindowFPC7ResFONT */
bool J2DWindow::isUsed(ResFONT const* param_0) {
return J2DPane::isUsed(param_0);
}
/* 802FC04C-802FC050 2F698C 0004+00 1/0 0/0 0/0 .text rewriteAlpha__9J2DWindowFv */
void J2DWindow::rewriteAlpha() {
/* empty function */
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,922 @@
//
// Generated By: dol2asm
// Translation Unit: J3DAnimation
//
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void init__12J3DFrameCtrlFs();
extern "C" void checkPass__12J3DFrameCtrlFf();
extern "C" void update__12J3DFrameCtrlFv();
extern "C" void __ct__15J3DAnmTransformFsPfPsPf();
extern "C" void getTransform__19J3DAnmTransformFullCFUsP16J3DTransformInfo();
extern "C" void getTransform__27J3DAnmTransformFullWithLerpCFUsP16J3DTransformInfo();
extern "C" void calcTransform__18J3DAnmTransformKeyCFfUsP16J3DTransformInfo();
extern "C" void __ct__19J3DAnmTextureSRTKeyFv();
extern "C" void calcTransform__19J3DAnmTextureSRTKeyCFfUsP17J3DTextureSRTInfo();
extern "C" void getWeight__17J3DAnmClusterFullCFUs();
extern "C" void getWeight__16J3DAnmClusterKeyCFUs();
extern "C" void __ct__14J3DAnmVtxColorFv();
extern "C" void __ct__18J3DAnmVtxColorFullFv();
extern "C" void getColor__18J3DAnmVtxColorFullCFUcUsP8_GXColor();
extern "C" void __ct__17J3DAnmVtxColorKeyFv();
extern "C" void getColor__17J3DAnmVtxColorKeyCFUcUsP8_GXColor();
extern "C" void __ct__11J3DAnmColorFv();
extern "C" void searchUpdateMaterialID__11J3DAnmColorFP16J3DMaterialTable();
extern "C" void __ct__15J3DAnmColorFullFv();
extern "C" void getColor__15J3DAnmColorFullCFUsP8_GXColor();
extern "C" void __ct__14J3DAnmColorKeyFv();
extern "C" void getColor__14J3DAnmColorKeyCFUsP8_GXColor();
extern "C" void __ct__15J3DAnmTevRegKeyFv();
extern "C" void __ct__16J3DAnmTexPatternFv();
extern "C" void getTexNo__16J3DAnmTexPatternCFUsPUs();
extern "C" void searchUpdateMaterialID__16J3DAnmTexPatternFP16J3DMaterialTable();
extern "C" void searchUpdateMaterialID__16J3DAnmTexPatternFP12J3DModelData();
extern "C" void searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP16J3DMaterialTable();
extern "C" void searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP12J3DModelData();
extern "C" void getTevColorReg__15J3DAnmTevRegKeyCFUsP11_GXColorS10();
extern "C" void getTevKonstReg__15J3DAnmTevRegKeyCFUsP8_GXColor();
extern "C" void searchUpdateMaterialID__15J3DAnmTevRegKeyFP16J3DMaterialTable();
extern "C" void searchUpdateMaterialID__15J3DAnmTevRegKeyFP12J3DModelData();
extern "C" void func_8032B8A0(void* _this, f32, J3DAnmKeyTableBase*, s16*);
extern "C" void func_8032BAD4(void* _this, f32, J3DAnmKeyTableBase*, f32*);
extern "C" void __dt__14J3DAnmVtxColorFv();
extern "C" void __dt__11J3DAnmColorFv();
extern "C" void __dt__16J3DAnmTexPatternFv();
extern "C" s32 getKind__16J3DAnmTexPatternCFv();
extern "C" void __dt__15J3DAnmTevRegKeyFv();
extern "C" s32 getKind__15J3DAnmTevRegKeyCFv();
extern "C" void __dt__14J3DAnmColorKeyFv();
extern "C" s32 getKind__14J3DAnmColorKeyCFv();
extern "C" void __dt__15J3DAnmColorFullFv();
extern "C" s32 getKind__15J3DAnmColorFullCFv();
extern "C" bool getKind__11J3DAnmColorCFv();
extern "C" void getColor__11J3DAnmColorCFUsP8_GXColor();
extern "C" void __dt__17J3DAnmVtxColorKeyFv();
extern "C" s32 getKind__17J3DAnmVtxColorKeyCFv();
extern "C" void __dt__18J3DAnmVtxColorFullFv();
extern "C" s32 getKind__18J3DAnmVtxColorFullCFv();
extern "C" s32 getKind__14J3DAnmVtxColorCFv();
extern "C" void getColor__14J3DAnmVtxColorCFUcUsP8_GXColor();
extern "C" void __dt__16J3DAnmClusterKeyFv();
extern "C" s32 getKind__16J3DAnmClusterKeyCFv();
extern "C" void __dt__13J3DAnmClusterFv();
extern "C" s32 getKind__13J3DAnmClusterCFv();
extern "C" void getWeight__13J3DAnmClusterCFUs();
extern "C" void __dt__17J3DAnmClusterFullFv();
extern "C" s32 getKind__17J3DAnmClusterFullCFv();
extern "C" void __dt__19J3DAnmTextureSRTKeyFv();
extern "C" s32 getKind__19J3DAnmTextureSRTKeyCFv();
extern "C" void __dt__27J3DAnmTransformFullWithLerpFv();
extern "C" s32 getKind__27J3DAnmTransformFullWithLerpCFv();
extern "C" void __dt__19J3DAnmTransformFullFv();
extern "C" s32 getKind__19J3DAnmTransformFullCFv();
//
// External References:
//
extern "C" void __dl__FPv();
extern "C" void __ct__10JUTNameTabFv();
extern "C" void getIndex__10JUTNameTabCFPCc();
extern "C" void getName__10JUTNameTabCFUs();
extern "C" void __cvt_fp2unsigned();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__10J3DAnmBase[4];
extern "C" extern void* __vt__15J3DAnmTransform[5];
extern "C" extern void* __vt__10JUTNameTab[3];
//
// Declarations:
//
/* ############################################################################################## */
/* 80456430-80456434 004A30 0004+00 6/6 0/0 0/0 .sdata2 @852 */
SECTION_SDATA2 static f32 lit_852 = 1.0f;
/* 80456434-80456438 004A34 0004+00 20/20 0/0 0/0 .sdata2 @853 */
SECTION_SDATA2 static u8 lit_853[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 803283FC-8032842C 322D3C 0030+00 0/0 25/25 285/285 .text init__12J3DFrameCtrlFs */
void J3DFrameCtrl::init(s16 i_end) {
mAttribute = 2;
mState = 0;
mStart = 0;
mEnd = i_end;
mLoop = 0;
mRate = lit_852;
mFrame = FLOAT_LABEL(lit_853);
}
/* ############################################################################################## */
/* 80456438-80456440 004A38 0004+04 2/2 0/0 0/0 .sdata2 @973 */
SECTION_SDATA2 static f32 lit_973[1 + 1 /* padding */] = {
0.0010000000474974513f,
/* padding */
0.0f,
};
/* 80456440-80456448 004A40 0008+00 4/4 0/0 0/0 .sdata2 @975 */
SECTION_SDATA2 static f64 lit_975 = 4503601774854144.0 /* cast s32 to float */;
/* 8032842C-803289CC 322D6C 05A0+00 0/0 92/92 382/382 .text checkPass__12J3DFrameCtrlFf
*/
int J3DFrameCtrl::checkPass(f32 pass_frame) {
f32 cur_frame = mFrame;
f32 next_frame = cur_frame + mRate;
switch (mAttribute) {
case 0:
case 1:
if (next_frame < mStart) {
next_frame = mStart;
}
if (next_frame >= mEnd) {
next_frame = mEnd - 0.001f;
}
if (cur_frame <= next_frame) {
if (cur_frame <= pass_frame && pass_frame < next_frame) {
return true;
} else {
return false;
}
}
if (next_frame <= pass_frame && pass_frame < cur_frame) {
return true;
}
return false;
case 2:
if (cur_frame < mStart) {
while (next_frame < mStart) {
if (mLoop - mStart <= 0.0f) {
break;
}
next_frame += mLoop - mStart;
}
if (next_frame <= pass_frame && pass_frame < mLoop) {
return true;
} else {
return false;
}
} else if (mEnd <= cur_frame) {
while (next_frame >= mEnd) {
if (mEnd - mLoop <= 0.0f) {
break;
}
next_frame -= mEnd - mLoop;
}
if (mLoop <= pass_frame && pass_frame < next_frame) {
return true;
} else {
return false;
}
} else if (next_frame < mStart) {
while (next_frame < mStart) {
if (mLoop - mStart <= 0.0f) {
break;
}
next_frame += mLoop - mStart;
}
if ((mStart <= pass_frame && pass_frame < cur_frame) || (next_frame <= pass_frame && pass_frame < mLoop)) {
return true;
} else {
return false;
}
} else if (mEnd <= next_frame) {
while (next_frame >= mEnd) {
if (mEnd - mLoop <= 0.0f) {
break;
}
next_frame -= mEnd - mLoop;
}
if ((cur_frame <= pass_frame && pass_frame < mEnd) || (mLoop <= pass_frame && pass_frame < next_frame)) {
return true;
} else {
return false;
}
} else if (cur_frame <= next_frame) {
if (cur_frame <= pass_frame && pass_frame < next_frame) {
return true;
} else {
return false;
}
} else if (next_frame <= pass_frame && pass_frame < cur_frame) {
return true;
}
return false;
case 3:
case 4:
if (next_frame >= mEnd) {
next_frame = mEnd - 0.001f;
}
if (next_frame < mStart) {
next_frame = mStart;
}
if (cur_frame <= next_frame) {
if (cur_frame <= pass_frame && pass_frame < next_frame) {
return true;
} else {
return false;
}
}
if (next_frame <= pass_frame && pass_frame < cur_frame) {
return true;
}
return false;
default:
return false;
}
}
/* 803289CC-80328E40 32330C 0474+00 0/0 3/3 0/0 .text update__12J3DFrameCtrlFv */
void J3DFrameCtrl::update() {
mState = 0;
mFrame += mRate;
switch (mAttribute) {
case 0:
if (mFrame < mStart) {
mFrame = mStart;
mRate = 0.0f;
mState |= 1;
}
if (mFrame >= mEnd) {
mFrame = mEnd - 0.001f;
mRate = 0.0f;
mState |= 1;
}
break;
case 1:
if (mFrame < mStart) {
mFrame = mStart;
mRate = 0.0f;
mState |= 1;
}
if (mFrame >= mEnd) {
mFrame = mStart;
mRate = 0.0f;
mState |= 1;
}
break;
case 2:
while (mFrame < mStart) {
mState |= 2;
if (mLoop - mStart <= 0.0f) {
break;
}
mFrame += mLoop - mStart;
}
while (mFrame >= mEnd) {
mState |= 2;
if (mEnd - mLoop <= 0.0f) {
break;
}
mFrame -= mEnd - mLoop;
}
break;
case 3:
if (mFrame >= mEnd) {
mFrame = mEnd - (mFrame - mEnd);
mRate = -mRate;
}
if (mFrame < mStart) {
mFrame = mStart - (mFrame - mStart);
mRate = 0.0f;
mState |= 1;
}
break;
case 4:
if (mFrame >= mEnd - 1.0f) {
mFrame = (mEnd - 1.0f) - (mFrame - (mEnd - 1.0f));
mRate = -mRate;
}
if (mFrame < mStart) {
mFrame = mStart - (mFrame - mStart);
mRate = -mRate;
mState |= 2;
}
break;
}
}
/* 80328E40-80328E90 323780 0050+00 0/0 3/3 0/0 .text __ct__15J3DAnmTransformFsPfPsPf */
J3DAnmTransform::J3DAnmTransform(s16 param_0, f32* param_1, s16* param_2, f32* param_3)
: J3DAnmBase(param_0) {
mScaleData = param_1;
mRotData = param_2;
mTransData = param_3;
field_0x18 = 0;
field_0x1a = 0;
field_0x1c = 0;
field_0x1e = 0;
}
/* ############################################################################################## */
/* 80456448-80456450 004A48 0004+04 4/4 0/0 0/0 .sdata2 @1092 */
SECTION_SDATA2 static f32 lit_1092[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 80328E90-803291F0 3237D0 0360+00 1/0 0/0 0/0 .text
* getTransform__19J3DAnmTransformFullCFUsP16J3DTransformInfo */
void J3DAnmTransformFull::getTransform(u16 param_0, J3DTransformInfo* param_1) const {
// NONMATCHING
}
/* ############################################################################################## */
/* 80456450-80456458 004A50 0008+00 2/2 0/0 0/0 .sdata2 @1223 */
SECTION_SDATA2 static f64 lit_1223 = 4503599627370496.0 /* cast u32 to float */;
/* 803291F0-80329A34 323B30 0844+00 1/0 0/0 0/0 .text
* getTransform__27J3DAnmTransformFullWithLerpCFUsP16J3DTransformInfo */
void J3DAnmTransformFullWithLerp::getTransform(u16 param_0, J3DTransformInfo* param_1) const {
// NONMATCHING
}
/* 80329A34-80329E5C 324374 0428+00 0/0 1/1 0/0 .text
* calcTransform__18J3DAnmTransformKeyCFfUsP16J3DTransformInfo */
void J3DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
J3DTransformInfo* param_2) const {
// NONMATCHING
}
/* ############################################################################################## */
/* 803CED50-803CED60 02BE70 0010+00 2/2 0/0 0/0 .data __vt__16J3DAnmTexPattern */
SECTION_DATA extern void* __vt__16J3DAnmTexPattern[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16J3DAnmTexPatternFv,
(void*)getKind__16J3DAnmTexPatternCFv,
};
/* 803CED60-803CED70 02BE80 0010+00 2/2 0/0 0/0 .data __vt__15J3DAnmTevRegKey */
SECTION_DATA extern void* __vt__15J3DAnmTevRegKey[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__15J3DAnmTevRegKeyFv,
(void*)getKind__15J3DAnmTevRegKeyCFv,
};
/* 803CED70-803CED84 02BE90 0014+00 2/2 0/0 0/0 .data __vt__14J3DAnmColorKey */
SECTION_DATA extern void* __vt__14J3DAnmColorKey[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14J3DAnmColorKeyFv,
(void*)getKind__14J3DAnmColorKeyCFv,
(void*)getColor__14J3DAnmColorKeyCFUsP8_GXColor,
};
/* 803CED84-803CED98 02BEA4 0014+00 2/2 0/0 0/0 .data __vt__15J3DAnmColorFull */
SECTION_DATA extern void* __vt__15J3DAnmColorFull[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__15J3DAnmColorFullFv,
(void*)getKind__15J3DAnmColorFullCFv,
(void*)getColor__15J3DAnmColorFullCFUsP8_GXColor,
};
/* 803CED98-803CEDAC 02BEB8 0014+00 4/4 0/0 0/0 .data __vt__11J3DAnmColor */
SECTION_DATA extern void* __vt__11J3DAnmColor[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11J3DAnmColorFv,
(void*)getKind__11J3DAnmColorCFv,
(void*)getColor__11J3DAnmColorCFUsP8_GXColor,
};
/* 803CEDAC-803CEDC0 02BECC 0014+00 2/2 0/0 0/0 .data __vt__17J3DAnmVtxColorKey */
SECTION_DATA extern void* __vt__17J3DAnmVtxColorKey[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__17J3DAnmVtxColorKeyFv,
(void*)getKind__17J3DAnmVtxColorKeyCFv,
(void*)getColor__17J3DAnmVtxColorKeyCFUcUsP8_GXColor,
};
/* 803CEDC0-803CEDD4 02BEE0 0014+00 2/2 0/0 0/0 .data __vt__18J3DAnmVtxColorFull */
SECTION_DATA extern void* __vt__18J3DAnmVtxColorFull[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__18J3DAnmVtxColorFullFv,
(void*)getKind__18J3DAnmVtxColorFullCFv,
(void*)getColor__18J3DAnmVtxColorFullCFUcUsP8_GXColor,
};
/* 803CEDD4-803CEDE8 02BEF4 0014+00 4/4 0/0 0/0 .data __vt__14J3DAnmVtxColor */
SECTION_DATA extern void* __vt__14J3DAnmVtxColor[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14J3DAnmVtxColorFv,
(void*)getKind__14J3DAnmVtxColorCFv,
(void*)getColor__14J3DAnmVtxColorCFUcUsP8_GXColor,
};
/* 803CEDE8-803CEDFC 02BF08 0014+00 1/1 1/1 0/0 .data __vt__16J3DAnmClusterKey */
SECTION_DATA extern void* __vt__16J3DAnmClusterKey[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16J3DAnmClusterKeyFv,
(void*)getKind__16J3DAnmClusterKeyCFv,
(void*)getWeight__16J3DAnmClusterKeyCFUs,
};
/* 803CEDFC-803CEE10 02BF1C 0014+00 3/3 1/1 0/0 .data __vt__13J3DAnmCluster */
SECTION_DATA extern void* __vt__13J3DAnmCluster[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__13J3DAnmClusterFv,
(void*)getKind__13J3DAnmClusterCFv,
(void*)getWeight__13J3DAnmClusterCFUs,
};
/* 803CEE10-803CEE24 02BF30 0014+00 1/1 1/1 0/0 .data __vt__17J3DAnmClusterFull */
SECTION_DATA extern void* __vt__17J3DAnmClusterFull[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__17J3DAnmClusterFullFv,
(void*)getKind__17J3DAnmClusterFullCFv,
(void*)getWeight__17J3DAnmClusterFullCFUs,
};
/* 803CEE24-803CEE34 02BF44 0010+00 2/2 0/0 0/0 .data __vt__19J3DAnmTextureSRTKey */
SECTION_DATA extern void* __vt__19J3DAnmTextureSRTKey[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__19J3DAnmTextureSRTKeyFv,
(void*)getKind__19J3DAnmTextureSRTKeyCFv,
};
/* 80329E5C-80329F14 32479C 00B8+00 0/0 2/2 0/0 .text __ct__19J3DAnmTextureSRTKeyFv */
J3DAnmTextureSRTKey::J3DAnmTextureSRTKey() : J3DAnmBase(0) {
mDecShift = 0;
mTransNum = 0;
mRotNum = 0;
mScaleNum = 0;
mTrackNum = 0;
mAnmTable = 0;
mTransData = 0;
mScaleData = 0;
mRotData = 0;
field_0x48 = 0;
field_0x46 = 0;
field_0x44 = 0;
field_0x4a = 0;
field_0x58 = 0;
field_0x54 = 0;
field_0x4c = 0;
field_0x50 = 0;
mTexMtxCalcType = 0;
}
/* 80329F14-8032A184 324854 0270+00 0/0 1/1 0/0 .text
* calcTransform__19J3DAnmTextureSRTKeyCFfUsP17J3DTextureSRTInfo */
void J3DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1,
J3DTextureSRTInfo* param_2) const {
// NONMATCHING
}
/* 8032A184-8032A218 324AC4 0094+00 1/0 0/0 0/0 .text getWeight__17J3DAnmClusterFullCFUs
*/
f32 J3DAnmClusterFull::getWeight(u16 param_0) const {
// NONMATCHING
}
/* 8032A218-8032A29C 324B58 0084+00 1/0 0/0 0/0 .text getWeight__16J3DAnmClusterKeyCFUs
*/
f32 J3DAnmClusterKey::getWeight(u16 param_0) const {
// NONMATCHING
}
/* 8032A29C-8032A30C 324BDC 0070+00 2/2 0/0 0/0 .text __ct__14J3DAnmVtxColorFv */
J3DAnmVtxColor::J3DAnmVtxColor() : J3DAnmBase(0) {
for (int i = 0; i < 2; i++) {
mAnmTableNum[i] = 0;
}
for (int i = 0; i < 2; i++) {
mAnmVtxColorIndexData[i] = 0;
}
}
/* 8032A30C-8032A368 324C4C 005C+00 0/0 1/1 0/0 .text __ct__18J3DAnmVtxColorFullFv */
J3DAnmVtxColorFull::J3DAnmVtxColorFull() {
for (int i = 0; i < 2; i++) {
mpTable[i] = 0;
}
}
/* 8032A368-8032A4E0 324CA8 0178+00 1/0 0/0 0/0 .text
* getColor__18J3DAnmVtxColorFullCFUcUsP8_GXColor */
void J3DAnmVtxColorFull::getColor(u8 param_0, u16 param_1, _GXColor* param_2) const {
// NONMATCHING
}
/* 8032A4E0-8032A53C 324E20 005C+00 0/0 1/1 0/0 .text __ct__17J3DAnmVtxColorKeyFv */
J3DAnmVtxColorKey::J3DAnmVtxColorKey() {
for (int i = 0; i < 2; i++) {
mpTable[i] = 0;
}
}
/* ############################################################################################## */
/* 80456458-8045645C 004A58 0004+00 3/3 0/0 0/0 .sdata2 @1499 */
SECTION_SDATA2 static f32 lit_1499 = 255.0f;
/* 8032A53C-8032A828 324E7C 02EC+00 1/0 0/0 0/0 .text
* getColor__17J3DAnmVtxColorKeyCFUcUsP8_GXColor */
void J3DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* param_2) const {
// NONMATCHING
}
/* 8032A828-8032A8A4 325168 007C+00 2/2 0/0 0/0 .text __ct__11J3DAnmColorFv */
J3DAnmColor::J3DAnmColor() : J3DAnmBase(0), field_0xc(0), field_0xe(0), field_0x10(0), field_0x12(0), mUpdateMaterialNum(0), mUpdateMaterialID(NULL) {}
/* 8032A8A4-8032A93C 3251E4 0098+00 0/0 1/1 0/0 .text
* searchUpdateMaterialID__11J3DAnmColorFP16J3DMaterialTable */
void J3DAnmColor::searchUpdateMaterialID(J3DMaterialTable* param_0) {
// NONMATCHING
}
/* 8032A93C-8032A990 32527C 0054+00 0/0 1/1 0/0 .text __ct__15J3DAnmColorFullFv */
J3DAnmColorFull::J3DAnmColorFull() {
mColorR = 0;
mColorG = 0;
mColorB = 0;
mColorA = 0;
mAnmTable = 0;
}
/* 8032A990-8032AB00 3252D0 0170+00 1/0 0/0 0/0 .text getColor__15J3DAnmColorFullCFUsP8_GXColor */
void J3DAnmColorFull::getColor(u16 param_0, _GXColor* param_1) const {
// NONMATCHING
}
/* 8032AB00-8032AB54 325440 0054+00 0/0 1/1 0/0 .text __ct__14J3DAnmColorKeyFv */
J3DAnmColorKey::J3DAnmColorKey() {
field_0x2c = 0;
field_0x30 = 0;
field_0x34 = 0;
field_0x38 = 0;
field_0x3c = 0;
}
/* 8032AB54-8032AE18 325494 02C4+00 1/0 0/0 0/0 .text getColor__14J3DAnmColorKeyCFUsP8_GXColor */
void J3DAnmColorKey::getColor(u16 param_0, _GXColor* param_1) const {
// NONMATCHING
}
/* 8032AE18-8032AED8 325758 00C0+00 0/0 1/1 0/0 .text __ct__15J3DAnmTevRegKeyFv */
J3DAnmTevRegKey::J3DAnmTevRegKey() : J3DAnmBase(0) {
mKRegUpdateMaterialNum = 0;
mCRegUpdateMaterialNum = 0;
mCRegDataCountA = 0;
mCRegDataCountB = 0;
mCRegDataCountG = 0;
mCRegDataCountR = 0;
mKRegDataCountA = 0;
mKRegDataCountB = 0;
mKRegDataCountG = 0;
mKRegDataCountR = 0;
mKRegUpdateMaterialID = 0;
mCRegUpdateMaterialID = 0;
mAnmCRegDataA = 0;
mAnmCRegDataB = 0;
mAnmCRegDataG = 0;
mAnmCRegDataR = 0;
mAnmKRegDataA = 0;
mAnmKRegDataB = 0;
mAnmKRegDataG = 0;
mAnmKRegDataR = 0;
}
/* 8032AED8-8032AF50 325818 0078+00 0/0 2/2 0/0 .text __ct__16J3DAnmTexPatternFv */
J3DAnmTexPattern::J3DAnmTexPattern() : J3DAnmBase(0), mTextureIndex(NULL), mAnmTable(NULL), field_0x14(0), mUpdateMaterialNum(0), mUpdateMaterialID(NULL) {}
/* 8032AF50-8032B004 325890 00B4+00 0/0 1/1 72/72 .text getTexNo__16J3DAnmTexPatternCFUsPUs */
void J3DAnmTexPattern::getTexNo(u16 param_0, u16* param_1) const {
// NONMATCHING
}
/* 8032B004-8032B09C 325944 0098+00 1/1 1/1 0/0 .text
* searchUpdateMaterialID__16J3DAnmTexPatternFP16J3DMaterialTable */
void J3DAnmTexPattern::searchUpdateMaterialID(J3DMaterialTable* param_0) {
for (u16 i = 0; i < mUpdateMaterialNum; i++) {
s32 r3 = param_0->getMaterialName()->getIndex(mUpdateMaterialName.getName(i));
if (r3 != -1) {
mUpdateMaterialID[i] = r3;
} else {
mUpdateMaterialID[i] = -1;
}
}
}
/* 8032B09C-8032B0C0 3259DC 0024+00 0/0 4/4 1/1 .text
* searchUpdateMaterialID__16J3DAnmTexPatternFP12J3DModelData */
void J3DAnmTexPattern::searchUpdateMaterialID(J3DModelData* param_0) {
searchUpdateMaterialID(&param_0->getMaterialTable());
}
/* 8032B0C0-8032B1D4 325A00 0114+00 1/1 1/1 0/0 .text
* searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP16J3DMaterialTable */
void J3DAnmTextureSRTKey::searchUpdateMaterialID(J3DMaterialTable* param_0) {
for (u16 i = 0; i < u16(mTrackNum / 3); i++) {
s32 r3 = param_0->getMaterialName()->getIndex(mUpdateMaterialName.getName(i));
if (r3 != -1) {
mUpdateMaterialID[i] = r3;
} else {
mUpdateMaterialID[i] = -1;
}
}
for (u16 i = 0; i < u16(field_0x4a / 3); i++) {
s32 r3 = param_0->getMaterialName()->getIndex(mPostUpdateMaterialName.getName(i));
if (r3 != -1) {
mPostUpdateMaterialID[i] = r3;
} else {
mPostUpdateMaterialID[i] = -1;
}
}
}
/* 8032B1D4-8032B1F8 325B14 0024+00 0/0 8/8 6/6 .text
* searchUpdateMaterialID__19J3DAnmTextureSRTKeyFP12J3DModelData */
void J3DAnmTextureSRTKey::searchUpdateMaterialID(J3DModelData* param_0) {
searchUpdateMaterialID(&param_0->getMaterialTable());
}
/* ############################################################################################## */
/* 8045645C-80456460 004A5C 0004+00 1/1 0/0 0/0 .sdata2 @1817 */
SECTION_SDATA2 static f32 lit_1817 = -1024.0f;
/* 80456460-80456468 004A60 0004+04 1/1 0/0 0/0 .sdata2 @1818 */
SECTION_SDATA2 static f32 lit_1818[1 + 1 /* padding */] = {
1023.0f,
/* padding */
0.0f,
};
/* 8032B1F8-8032B4BC 325B38 02C4+00 0/0 2/2 1/1 .text
* getTevColorReg__15J3DAnmTevRegKeyCFUsP11_GXColorS10 */
void J3DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* param_1) const {
// NONMATCHING
}
/* 8032B4BC-8032B780 325DFC 02C4+00 0/0 1/1 1/1 .text
* getTevKonstReg__15J3DAnmTevRegKeyCFUsP8_GXColor */
void J3DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* param_1) const {
// NONMATCHING
}
/* 8032B780-8032B87C 3260C0 00FC+00 1/1 1/1 0/0 .text
* searchUpdateMaterialID__15J3DAnmTevRegKeyFP16J3DMaterialTable */
void J3DAnmTevRegKey::searchUpdateMaterialID(J3DMaterialTable* param_0) {
// NONMATCHING
}
/* 8032B87C-8032B8A0 3261BC 0024+00 0/0 9/9 4/4 .text
* searchUpdateMaterialID__15J3DAnmTevRegKeyFP12J3DModelData */
void J3DAnmTevRegKey::searchUpdateMaterialID(J3DModelData* param_0) {
searchUpdateMaterialID(&param_0->getMaterialTable());
}
/* 8032B8A0-8032BAD4 3261E0 0234+00 6/6 0/0 0/0 .text
* J3DGetKeyFrameInterpolation<s>__FfP18J3DAnmKeyTableBasePs */
extern "C" void func_8032B8A0(void* _this, f32 param_0, J3DAnmKeyTableBase* param_1,
s16* param_2) {
// NONMATCHING
}
/* 8032BAD4-8032BC50 326414 017C+00 3/3 0/0 0/0 .text
* J3DGetKeyFrameInterpolation<f>__FfP18J3DAnmKeyTableBasePf */
extern "C" void func_8032BAD4(void* _this, f32 param_0, J3DAnmKeyTableBase* param_1,
f32* param_2) {
// NONMATCHING
}
/* 8032BC50-8032BCAC 326590 005C+00 1/0 0/0 0/0 .text __dt__14J3DAnmVtxColorFv */
extern "C" void __dt__14J3DAnmVtxColorFv() {
// asm J3DAnmVtxColor::~J3DAnmVtxColor() {
// NONMATCHING
}
/* 8032BCAC-8032BD20 3265EC 0074+00 1/0 0/0 0/0 .text __dt__11J3DAnmColorFv */
extern "C" void __dt__11J3DAnmColorFv() {
// asm J3DAnmColor::~J3DAnmColor() {
// NONMATCHING
}
/* 8032BD20-8032BD94 326660 0074+00 1/0 0/0 0/0 .text __dt__16J3DAnmTexPatternFv */
extern "C" void __dt__16J3DAnmTexPatternFv() {
// asm J3DAnmTexPattern::~J3DAnmTexPattern() {
// NONMATCHING
}
/* 8032BD94-8032BD9C 3266D4 0008+00 1/0 0/0 0/0 .text getKind__16J3DAnmTexPatternCFv */
s32 J3DAnmTexPattern::getKind() const {
return 2;
}
/* 8032BD9C-8032BE24 3266DC 0088+00 1/0 0/0 0/0 .text __dt__15J3DAnmTevRegKeyFv */
extern "C" void __dt__15J3DAnmTevRegKeyFv() {
// asm J3DAnmTevRegKey::~J3DAnmTevRegKey() {
// NONMATCHING
}
/* 8032BE24-8032BE2C 326764 0008+00 1/0 0/0 0/0 .text getKind__15J3DAnmTevRegKeyCFv */
s32 J3DAnmTevRegKey::getKind() const {
return 5;
}
/* 8032BE2C-8032BEB0 32676C 0084+00 1/0 0/0 0/0 .text __dt__14J3DAnmColorKeyFv */
extern "C" void __dt__14J3DAnmColorKeyFv() {
// asm J3DAnmColorKey::~J3DAnmColorKey() {
// NONMATCHING
}
/* 8032BEB0-8032BEB8 3267F0 0008+00 1/0 0/0 0/0 .text getKind__14J3DAnmColorKeyCFv */
s32 J3DAnmColorKey::getKind() const {
return 11;
}
/* 8032BEB8-8032BF3C 3267F8 0084+00 1/0 0/0 0/0 .text __dt__15J3DAnmColorFullFv */
extern "C" void __dt__15J3DAnmColorFullFv() {
// asm J3DAnmColorFull::~J3DAnmColorFull() {
// NONMATCHING
}
/* 8032BF3C-8032BF44 32687C 0008+00 1/0 0/0 0/0 .text getKind__15J3DAnmColorFullCFv */
s32 J3DAnmColorFull::getKind() const {
return 10;
}
/* 8032BF44-8032BF4C 326884 0008+00 1/0 0/0 0/0 .text getKind__11J3DAnmColorCFv */
s32 J3DAnmColor::getKind() const {
return 1;
}
/* 8032BF4C-8032BF50 32688C 0004+00 1/0 0/0 0/0 .text getColor__11J3DAnmColorCFUsP8_GXColor */
void J3DAnmColor::getColor(u16 param_0, _GXColor* param_1) const {
/* empty function */
}
/* 8032BF50-8032BFBC 326890 006C+00 1/0 0/0 0/0 .text __dt__17J3DAnmVtxColorKeyFv */
extern "C" void __dt__17J3DAnmVtxColorKeyFv() {
// asm J3DAnmVtxColorKey::~J3DAnmVtxColorKey() {
// NONMATCHING
}
/* 8032BFBC-8032BFC4 3268FC 0008+00 1/0 0/0 0/0 .text getKind__17J3DAnmVtxColorKeyCFv */
s32 J3DAnmVtxColorKey::getKind() const {
return 15;
}
/* 8032BFC4-8032C030 326904 006C+00 1/0 0/0 0/0 .text __dt__18J3DAnmVtxColorFullFv */
extern "C" void __dt__18J3DAnmVtxColorFullFv() {
// asm J3DAnmVtxColorFull::~J3DAnmVtxColorFull() {
// NONMATCHING
}
/* 8032C030-8032C038 326970 0008+00 1/0 0/0 0/0 .text getKind__18J3DAnmVtxColorFullCFv */
s32 J3DAnmVtxColorFull::getKind() const {
return 14;
}
/* 8032C038-8032C040 326978 0008+00 1/0 0/0 0/0 .text getKind__14J3DAnmVtxColorCFv */
s32 J3DAnmVtxColor::getKind() const {
return 7;
}
/* 8032C040-8032C044 326980 0004+00 1/0 0/0 0/0 .text getColor__14J3DAnmVtxColorCFUcUsP8_GXColor
*/
void J3DAnmVtxColor::getColor(u8 param_0, u16 param_1, _GXColor* param_2) const {
/* empty function */
}
/* 8032C044-8032C0B0 326984 006C+00 1/0 0/0 0/0 .text __dt__16J3DAnmClusterKeyFv */
extern "C" void __dt__16J3DAnmClusterKeyFv() {
// asm J3DAnmClusterKey::~J3DAnmClusterKey() {
// NONMATCHING
}
/* 8032C0B0-8032C0B8 3269F0 0008+00 1/0 0/0 0/0 .text getKind__16J3DAnmClusterKeyCFv */
s32 J3DAnmClusterKey::getKind() const {
return 13;
}
/* 8032C0B8-8032C114 3269F8 005C+00 1/0 0/0 0/0 .text __dt__13J3DAnmClusterFv */
extern "C" void __dt__13J3DAnmClusterFv() {
// asm J3DAnmCluster::~J3DAnmCluster() {
// NONMATCHING
}
/* 8032C114-8032C11C 326A54 0008+00 1/0 0/0 0/0 .text getKind__13J3DAnmClusterCFv */
s32 J3DAnmCluster::getKind() const {
return 3;
}
/* 8032C11C-8032C124 326A5C 0008+00 1/0 0/0 0/0 .text getWeight__13J3DAnmClusterCFUs */
f32 J3DAnmCluster::getWeight(u16 param_0) const {
return lit_852;
}
/* 8032C124-8032C190 326A64 006C+00 1/0 0/0 0/0 .text __dt__17J3DAnmClusterFullFv */
extern "C" void __dt__17J3DAnmClusterFullFv() {
// asm J3DAnmClusterFull::~J3DAnmClusterFull() {
// NONMATCHING
}
/* 8032C190-8032C198 326AD0 0008+00 1/0 0/0 0/0 .text getKind__17J3DAnmClusterFullCFv */
s32 J3DAnmClusterFull::getKind() const {
return 12;
}
/* 8032C198-8032C220 326AD8 0088+00 1/0 0/0 0/0 .text __dt__19J3DAnmTextureSRTKeyFv */
extern "C" void __dt__19J3DAnmTextureSRTKeyFv() {
// asm J3DAnmTextureSRTKey::~J3DAnmTextureSRTKey() {
// NONMATCHING
}
/* 8032C220-8032C228 326B60 0008+00 1/0 0/0 0/0 .text getKind__19J3DAnmTextureSRTKeyCFv
*/
s32 J3DAnmTextureSRTKey::getKind() const {
return 4;
}
/* ############################################################################################## */
/* 803CEE34-803CEE48 02BF54 0014+00 1/1 1/1 0/0 .data __vt__27J3DAnmTransformFullWithLerp
*/
SECTION_DATA extern void* __vt__27J3DAnmTransformFullWithLerp[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__27J3DAnmTransformFullWithLerpFv,
(void*)getKind__27J3DAnmTransformFullWithLerpCFv,
(void*)getTransform__27J3DAnmTransformFullWithLerpCFUsP16J3DTransformInfo,
};
/* 803CEE48-803CEE60 02BF68 0014+04 2/2 1/1 0/0 .data __vt__19J3DAnmTransformFull */
SECTION_DATA extern void* __vt__19J3DAnmTransformFull[5 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__19J3DAnmTransformFullFv,
(void*)getKind__19J3DAnmTransformFullCFv,
(void*)getTransform__19J3DAnmTransformFullCFUsP16J3DTransformInfo,
/* padding */
NULL,
};
/* 8032C228-8032C2A4 326B68 007C+00 1/0 0/0 0/0 .text __dt__27J3DAnmTransformFullWithLerpFv */
extern "C" void __dt__27J3DAnmTransformFullWithLerpFv() {
// asm J3DAnmTransformFullWithLerp::~J3DAnmTransformFullWithLerp() {
// NONMATCHING
}
/* 8032C2A4-8032C2AC 326BE4 0008+00 1/0 0/0 0/0 .text getKind__27J3DAnmTransformFullWithLerpCFv */
s32 J3DAnmTransformFullWithLerp::getKind() const {
return 16;
}
/* 8032C2AC-8032C318 326BEC 006C+00 1/0 0/0 0/0 .text __dt__19J3DAnmTransformFullFv */
extern "C" void __dt__19J3DAnmTransformFullFv() {
// asm J3DAnmTransformFull::~J3DAnmTransformFull() {
// NONMATCHING
}
/* 8032C318-8032C320 326C58 0008+00 1/0 0/0 0/0 .text getKind__19J3DAnmTransformFullCFv
*/
s32 J3DAnmTransformFull::getKind() const {
return 9;
}
+212
View File
@@ -0,0 +1,212 @@
//
// Generated By: dol2asm
// Translation Unit: J3DCluster
//
#include "JSystem/J3DGraphAnimator/J3DCluster.h"
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "dol2asm.h"
#include "dolphin/os.h"
#ifdef DEBUG
#define J3D_ASSERT(COND) \
if ((COND) == 0) { \
JUTAssertion::showAssert(JUTAssertion::getSDevice(), __FILE__, __LINE__, \
"Error : null pointer"); \
OSPanic(__FILE__, __LINE__, "Halt"); \
}
#else
#define J3D_ASSERT(COND)
#endif
//
// Forward References:
//
extern "C" void __ct__13J3DDeformDataFv();
extern "C" void offAllFlag__13J3DDeformDataFUl();
extern "C" void deform__13J3DDeformDataFP8J3DModel();
extern "C" void deform__13J3DDeformDataFP15J3DVertexBuffer();
extern "C" void setAnm__13J3DDeformDataFP13J3DAnmCluster();
extern "C" void __ct__11J3DDeformerFP13J3DDeformData();
extern "C" void deform__11J3DDeformerFP15J3DVertexBufferUs();
extern "C" void deform_VtxPosF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf();
extern "C" void deform_VtxNrmF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf();
extern "C" void deform__11J3DDeformerFP15J3DVertexBufferUsPf();
extern "C" void normalizeWeight__11J3DDeformerFiPf();
//
// External References:
//
extern "C" void PPCSync();
extern "C" void __cvt_fp2unsigned();
extern "C" void _savegpr_21();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_21();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" f32 asinAcosTable___5JMath[1032];
//
// Declarations:
//
/* 8032E1F8-8032E230 328B38 0038+00 0/0 1/1 0/0 .text __ct__13J3DDeformDataFv */
J3DDeformData::J3DDeformData() {
mClusterNum = 0;
mClusterKeyNum = 0;
mClusterVertexNum = 0;
mClusterPointer = NULL;
mClusterKeyPointer = NULL;
mClusterVertex = NULL;
mVtxPosNum = 0;
mVtxNrmNum = 0;
mVtxPos = NULL;
mVtxNrm = NULL;
mClusterName = NULL;
mClusterKeyName = NULL;
}
/* 8032E230-8032E274 328B70 0044+00 0/0 1/1 0/0 .text offAllFlag__13J3DDeformDataFUl */
void J3DDeformData::offAllFlag(u32 i_flag) {
for (u16 i = 0; i < mClusterNum; i++) {
mClusterPointer[i].getDeformer()->offFlag(i_flag);
}
}
/* 8032E274-8032E298 328BB4 0024+00 0/0 1/1 0/0 .text deform__13J3DDeformDataFP8J3DModel
*/
void J3DDeformData::deform(J3DModel* model) {
J3D_ASSERT(model != NULL);
deform(model->getVertexBuffer());
}
/* 8032E298-8032E364 328BD8 00CC+00 1/1 0/0 0/0 .text deform__13J3DDeformDataFP15J3DVertexBuffer
*/
void J3DDeformData::deform(J3DVertexBuffer* buffer) {
J3D_ASSERT(buffer != NULL);
buffer->swapVtxPosArrayPointer();
buffer->swapVtxNrmArrayPointer();
for (u16 i = 0; i < mClusterNum; i++) {
mClusterPointer[i].getDeformer()->deform(buffer, i);
}
DCStoreRangeNoSync(buffer->getVtxPosArrayPointer(0),
buffer->getVertexData()->getVtxNum() * sizeof(Vec));
DCStoreRangeNoSync(buffer->getVtxNrmArrayPointer(0),
buffer->getVertexData()->getNrmNum() * sizeof(Vec));
PPCSync();
buffer->setCurrentVtxPos(buffer->getVtxPosArrayPointer(0));
buffer->setCurrentVtxNrm(buffer->getVtxNrmArrayPointer(0));
}
/* 8032E364-8032E39C 328CA4 0038+00 0/0 1/1 0/0 .text setAnm__13J3DDeformDataFP13J3DAnmCluster */
void J3DDeformData::setAnm(J3DAnmCluster* anm) {
for (u16 i = 0; i < mClusterNum; i++) {
mClusterPointer[i].getDeformer()->setAnmCluster(anm);
}
}
/* 8032E39C-8032E3BC 328CDC 0020+00 0/0 1/1 0/0 .text __ct__11J3DDeformerFP13J3DDeformData */
J3DDeformer::J3DDeformer(J3DDeformData* data) {
mDeformData = data;
mAnmCluster = NULL;
field_0x8 = NULL;
field_0xc = NULL;
mFlags = 3;
}
/* 8032E3BC-8032E4A4 328CFC 00E8+00 1/1 0/0 0/0 .text deform__11J3DDeformerFP15J3DVertexBufferUs
*/
void J3DDeformer::deform(J3DVertexBuffer* buffer, u16 param_1) {
J3D_ASSERT(buffer != 0);
u16 var_r31 = 0;
if (mAnmCluster != NULL) {
for (u16 i = 0; i < param_1; i++) {
var_r31 += mDeformData->getClusterPointer(i)->mKeyNum;
}
u16 num = mDeformData->getClusterPointer(param_1)->mKeyNum;
for (u16 i = 0; i < num; i++) {
field_0x8[i] = mAnmCluster->getWeight(var_r31++);
}
deform(buffer, param_1, field_0x8);
}
}
/* ############################################################################################## */
/* 80456470-80456474 004A70 0004+00 2/2 0/0 0/0 .sdata2 @830 */
SECTION_SDATA2 static f32 lit_830 = 1.0f;
/* 80456474-80456478 004A74 0004+00 1/1 0/0 0/0 .sdata2 @840 */
SECTION_SDATA2 static f32 lit_840 = 1.0f;
/* 80456478-8045647C 004A78 0004+00 1/1 0/0 0/0 .sdata2 None */
SECTION_SDATA2 static f32 data_80456478 = -1.0f;
/* 8045647C-80456480 004A7C 0004+00 3/3 0/0 0/0 .sdata2 @866 */
SECTION_SDATA2 static u8 lit_866[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 8032E4A4-8032E60C 328DE4 0168+00 1/1 0/0 0/0 .text
* deform_VtxPosF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf */
void J3DDeformer::deform_VtxPosF32(J3DVertexBuffer* param_0, J3DCluster* param_1,
J3DClusterKey* param_2, f32* param_3) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80456480-80456484 004A80 0004+00 1/1 0/0 0/0 .sdata2 @1020 */
SECTION_SDATA2 static f32 lit_1020 = -1.0f;
/* 80456484-80456488 004A84 0004+00 1/1 0/0 0/0 .sdata2 @1021 */
SECTION_SDATA2 static f32 lit_1021 = 3.1415927410125732f;
/* 80456488-8045648C 004A88 0004+00 1/1 0/0 0/0 .sdata2 @1022 */
SECTION_SDATA2 static f32 lit_1022 = 1023.5f;
/* 8045648C-80456490 004A8C 0004+00 1/1 0/0 0/0 .sdata2 @1023 */
SECTION_SDATA2 static f32 lit_1023 = 1.5707963705062866f;
/* 80456490-80456494 004A90 0004+00 1/1 0/0 0/0 .sdata2 @1024 */
SECTION_SDATA2 static f32 lit_1024 = 57.2957763671875f;
/* 80456494-80456498 004A94 0004+00 1/1 0/0 0/0 .sdata2 @1025 */
SECTION_SDATA2 static f32 lit_1025 = 180.0f;
/* 80456498-804564A0 004A98 0008+00 1/1 0/0 0/0 .sdata2 @1027 */
SECTION_SDATA2 static f64 lit_1027 = 4503599627370496.0 /* cast u32 to float */;
/* 8032E60C-8032EAB4 328F4C 04A8+00 1/1 0/0 0/0 .text
* deform_VtxNrmF32__11J3DDeformerFP15J3DVertexBufferP10J3DClusterP13J3DClusterKeyPf */
void J3DDeformer::deform_VtxNrmF32(J3DVertexBuffer* param_0, J3DCluster* param_1,
J3DClusterKey* param_2, f32* param_3) {
// NONMATCHING
}
/* 8032EAB4-8032EBCC 3293F4 0118+00 1/1 0/0 0/0 .text deform__11J3DDeformerFP15J3DVertexBufferUsPf
*/
void J3DDeformer::deform(J3DVertexBuffer* param_0, u16 param_1, f32* param_2) {
// NONMATCHING
}
/* 8032EBCC-8032EC28 32950C 005C+00 1/1 0/0 0/0 .text normalizeWeight__11J3DDeformerFiPf
*/
void J3DDeformer::normalizeWeight(int param_0, f32* param_1) {
// NONMATCHING
}
+269
View File
@@ -0,0 +1,269 @@
#include "JSystem/J3DGraphAnimator/J3DJoint.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/JMath/JMath.h"
#include "dol2asm.h"
#include "m_Do/m_Do_mtx.h"
/* 8032EC28-8032ECAC 329568 0084+00 0/0 1/1 0/0 .text
* init__25J3DMtxCalcJ3DSysInitBasicFRC3VecRA3_A4_Cf */
void J3DMtxCalcJ3DSysInitBasic::init(Vec const& scale, Mtx const& mtx) {
J3DSys::mCurrentS = scale;
J3DSys::mParentS = (Vec){1.0f, 1.0f, 1.0f};
JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y,
J3DSys::mCurrentS.z);
}
/* 8032ECAC-8032ED30 3295EC 0084+00 0/0 2/2 2/2 .text
* init__24J3DMtxCalcJ3DSysInitMayaFRC3VecRA3_A4_Cf */
void J3DMtxCalcJ3DSysInitMaya::init(Vec const& scale, Mtx const& mtx) {
J3DSys::mParentS = (Vec){1.0f, 1.0f, 1.0f};
J3DSys::mCurrentS = scale;
JMAMTXApplyScale(mtx, J3DSys::mCurrentMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y,
J3DSys::mCurrentS.z);
}
/* ############################################################################################## */
/* 804515F0-804515F4 000AF0 0004+00 3/3 1/1 0/0 .sbss mMtxBuffer__10J3DMtxCalc */
J3DMtxBuffer* J3DMtxCalc::mMtxBuffer;
/* 804515F4-804515F8 000AF4 0004+00 4/4 9/9 2/2 .sbss mJoint__10J3DMtxCalc */
J3DJoint* J3DMtxCalc::mJoint;
inline s32 checkScaleOne(const Vec& param_0) {
if (param_0.x == 1.0f && param_0.y == 1.0f && param_0.z == 1.0f) {
return true;
} else {
return false;
}
}
/* 8032ED30-8032EE50 329670 0120+00 0/0 1/1 0/0 .text
* calcTransform__28J3DMtxCalcCalcTransformBasicFRC16J3DTransformInfo */
void J3DMtxCalcCalcTransformBasic::calcTransform(J3DTransformInfo const& transInfo) {
J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer();
u16 jntNo = J3DMtxCalc::getJoint()->getJntNo();
MtxP anmMtx = mtxBuf->getAnmMtx(jntNo);
J3DSys::mCurrentS.x *= transInfo.mScale.x;
J3DSys::mCurrentS.y *= transInfo.mScale.y;
J3DSys::mCurrentS.z *= transInfo.mScale.z;
J3DGetTranslateRotateMtx(transInfo, anmMtx);
if (!checkScaleOne(J3DSys::mCurrentS)) {
mtxBuf->setScaleFlag(jntNo, 0);
JMAMTXApplyScale(anmMtx, anmMtx, transInfo.mScale.x, transInfo.mScale.y,
transInfo.mScale.z);
} else {
mtxBuf->setScaleFlag(jntNo, 1);
}
MTXConcat(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentMtx);
MTXCopy(J3DSys::mCurrentMtx, anmMtx);
}
/* 8032EE50-8032EFBC 329790 016C+00 0/0 1/1 0/0 .text
* calcTransform__32J3DMtxCalcCalcTransformSoftimageFRC16J3DTransformInfo */
void J3DMtxCalcCalcTransformSoftimage::calcTransform(J3DTransformInfo const& transInfo) {
J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer();
u16 jntNo = J3DMtxCalc::getJoint()->getJntNo();
MtxP anmMtx = mtxBuf->getAnmMtx(jntNo);
J3DGetTranslateRotateMtx(transInfo.mRotation.x, transInfo.mRotation.y, transInfo.mRotation.z,
transInfo.mTranslate.x * J3DSys::mCurrentS.x,
transInfo.mTranslate.y * J3DSys::mCurrentS.y,
transInfo.mTranslate.z * J3DSys::mCurrentS.z, anmMtx);
MTXConcat(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentMtx);
J3DSys::mCurrentS.x *= transInfo.mScale.x;
J3DSys::mCurrentS.y *= transInfo.mScale.y;
J3DSys::mCurrentS.z *= transInfo.mScale.z;
if (!checkScaleOne(J3DSys::mCurrentS)) {
mtxBuf->setScaleFlag(jntNo, 0);
JMAMTXApplyScale(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentS.x, J3DSys::mCurrentS.y,
J3DSys::mCurrentS.z);
anmMtx[0][3] = J3DSys::mCurrentMtx[0][3];
anmMtx[1][3] = J3DSys::mCurrentMtx[1][3];
anmMtx[2][3] = J3DSys::mCurrentMtx[2][3];
} else {
mtxBuf->setScaleFlag(jntNo, 1);
MTXCopy(J3DSys::mCurrentMtx, anmMtx);
}
}
/* 8032EFBC-8032F13C 3298FC 0180+00 0/0 6/6 2/2 .text
* calcTransform__27J3DMtxCalcCalcTransformMayaFRC16J3DTransformInfo */
void J3DMtxCalcCalcTransformMaya::calcTransform(J3DTransformInfo const& transInfo) {
J3DJoint* joint = J3DMtxCalc::getJoint();
J3DMtxBuffer* mtxBuf = J3DMtxCalc::getMtxBuffer();
u16 jntNo = joint->getJntNo();
MtxP anmMtx = mtxBuf->getAnmMtx(jntNo);
J3DGetTranslateRotateMtx(transInfo, anmMtx);
if (transInfo.mScale.x == 1.0f && transInfo.mScale.y == 1.0f && transInfo.mScale.z == 1.0f) {
mtxBuf->setScaleFlag(jntNo, 1);
} else {
mtxBuf->setScaleFlag(jntNo, 0);
JMAMTXApplyScale(anmMtx, anmMtx, transInfo.mScale.x, transInfo.mScale.y,
transInfo.mScale.z);
}
if (joint->getScaleCompensate() == 1) {
f32 invX = JMath::fastReciprocal(J3DSys::mParentS.x);
f32 invY = JMath::fastReciprocal(J3DSys::mParentS.y);
f32 invZ = JMath::fastReciprocal(J3DSys::mParentS.z);
anmMtx[0][0] *= invX;
anmMtx[0][1] *= invX;
anmMtx[0][2] *= invX;
anmMtx[1][0] *= invY;
anmMtx[1][1] *= invY;
anmMtx[1][2] *= invY;
anmMtx[2][0] *= invZ;
anmMtx[2][1] *= invZ;
anmMtx[2][2] *= invZ;
}
MTXConcat(J3DSys::mCurrentMtx, anmMtx, J3DSys::mCurrentMtx);
MTXCopy(J3DSys::mCurrentMtx, anmMtx);
J3DSys::mParentS.x = transInfo.mScale.x;
J3DSys::mParentS.y = transInfo.mScale.y;
J3DSys::mParentS.z = transInfo.mScale.z;
}
/* 8032F13C-8032F170 329A7C 0034+00 0/0 1/1 0/0 .text appendChild__8J3DJointFP8J3DJoint
*/
void J3DJoint::appendChild(J3DJoint* pChild) {
if (mChild == NULL) {
mChild = pChild;
} else {
J3DJoint* curChild = mChild;
while (curChild->getYounger() != NULL) {
curChild = curChild->getYounger();
}
curChild->setYounger(pChild);
}
}
/* 8032F170-8032F254 329AB0 00E4+00 0/0 1/1 0/0 .text __ct__8J3DJointFv */
J3DJoint::J3DJoint() {
mCallBackUserData = NULL;
mCallBack = NULL;
field_0x8 = NULL;
mChild = NULL;
mYounger = NULL;
mJntNo = 0;
mKind = 1;
mScaleCompensate = false;
__memcpy(&mTransformInfo, &j3dDefaultTransformInfo, sizeof(J3DTransformInfo));
mBoundingSphereRadius = 0.0f;
mMtxCalc = NULL;
mMesh = NULL;
Vec init = {0.0f, 0.0f, 0.0f};
mMin = init;
Vec init2 = {0.0f, 0.0f, 0.0f};
mMax = init2;
}
/* 8032F254-8032F3F8 329B94 01A4+00 0/0 1/1 0/0 .text entryIn__8J3DJointFv */
void J3DJoint::entryIn() {
MtxP anmMtx = j3dSys.getModel()->getAnmMtx(mJntNo);
j3dSys.getDrawBuffer(0)->setZMtx(anmMtx);
j3dSys.getDrawBuffer(1)->setZMtx(anmMtx);
for (J3DMaterial* mesh = mMesh; mesh != NULL;) {
if (mesh->getShape()->checkFlag(1)) {
mesh = mesh->getNext();
} else {
J3DMatPacket* matPacket = j3dSys.getModel()->getMatPacket(mesh->getIndex());
J3DShapePacket* shapePacket =
j3dSys.getModel()->getShapePacket(mesh->getShape()->getIndex());
if (!matPacket->isLocked()) {
if (mesh->getMaterialAnm()) {
J3DMaterialAnm* piVar8 = mesh->getMaterialAnm();
piVar8->calc(mesh);
}
mesh->calc(anmMtx);
}
mesh->setCurrentMtx();
matPacket->setMaterialAnmID(mesh->getMaterialAnm());
matPacket->setShapePacket(shapePacket);
J3DDrawBuffer* drawBuffer = j3dSys.getDrawBuffer(mesh->isDrawModeOpaTexEdge());
if ((u8)matPacket->entry(drawBuffer)) {
j3dSys.setMatPacket(matPacket);
J3DDrawBuffer::entryNum++;
mesh->makeDisplayList();
}
mesh = mesh->getNext();
}
}
}
/* ############################################################################################## */
/* 804515F8-80451600 000AF8 0004+04 1/1 1/1 0/0 .sbss mCurrentMtxCalc__8J3DJoint */
J3DMtxCalc* J3DJoint::mCurrentMtxCalc;
/* 8032F3F8-8032F5A8 329D38 01B0+00 0/0 1/1 0/0 .text recursiveCalc__8J3DJointFv */
void J3DJoint::recursiveCalc() {
J3DMtxCalc* prevMtxCalc = NULL;
Mtx prevCurrentMtx;
mDoMtx_copy(J3DSys::mCurrentMtx, prevCurrentMtx);
f32 currentX = J3DSys::mCurrentS.x;
f32 currentY = J3DSys::mCurrentS.y;
f32 currentZ = J3DSys::mCurrentS.z;
f32 parentX = J3DSys::mParentS.x;
f32 parentY = J3DSys::mParentS.y;
f32 parentZ = J3DSys::mParentS.z;
if (getMtxCalc() != NULL) {
prevMtxCalc = getCurrentMtxCalc();
J3DMtxCalc* piVar2 = this->getMtxCalc();
setCurrentMtxCalc(piVar2);
J3DMtxCalc::setJoint(this);
piVar2->calc();
} else {
if (getCurrentMtxCalc() != NULL) {
J3DMtxCalc* uVar6 = getCurrentMtxCalc();
J3DMtxCalc::setJoint(this);
uVar6->calc();
}
}
J3DJointCallBack jointCallback = getCallBack();
if (jointCallback != NULL) {
(*jointCallback)(this, 0);
}
J3DJoint* child = getChild();
if (child != NULL) {
child->recursiveCalc();
}
mDoMtx_copy(prevCurrentMtx, J3DSys::mCurrentMtx);
J3DSys::mCurrentS.x = currentX;
J3DSys::mCurrentS.y = currentY;
J3DSys::mCurrentS.z = currentZ;
J3DSys::mParentS.x = parentX;
J3DSys::mParentS.y = parentY;
J3DSys::mParentS.z = parentZ;
if (prevMtxCalc != NULL) {
setCurrentMtxCalc(prevMtxCalc);
}
if (jointCallback != NULL) {
(*jointCallback)(this, 1);
}
J3DJoint* younger = getYounger();
if (younger != NULL) {
younger->recursiveCalc();
}
}
@@ -0,0 +1,137 @@
#include "JSystem/J3DGraphAnimator/J3DJointTree.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h"
#include "JSystem/J3DGraphAnimator/J3DShapeTable.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
/* 80325A18-80325A9C 320358 0084+00 0/0 1/1 0/0 .text __ct__12J3DJointTreeFv */
J3DJointTree::J3DJointTree()
: mHierarchy(NULL), mFlags(0), mModelDataType(0), mRootNode(NULL), mBasicMtxCalc(NULL),
mJointNodePointer(NULL), mJointNum(0), mWEvlpMtxNum(0), mWEvlpMixMtxNum(0), mWEvlpMixIndex(0),
mWEvlpMixWeight(0), mInvJointMtx(NULL), mWEvlpImportantMtxIdx(0), field_0x40(0),
mJointName(NULL) {}
/* 80325A9C-80325C00 3203DC 0164+00 1/0 2/2 0/0 .text
* makeHierarchy__12J3DJointTreeFP8J3DJointPPC17J3DModelHierarchyP16J3DMaterialTableP13J3DShapeTable
*/
void J3DJointTree::makeHierarchy(J3DJoint* pJoint, J3DModelHierarchy const** pHierarchy,
J3DMaterialTable* pMaterialTable, J3DShapeTable* pShapeTable) {
enum {
kTypeEnd = 0x00,
kTypeBeginChild = 0x01,
kTypeEndChild = 0x02,
kTypeJoint = 0x10,
kTypeMaterial = 0x11,
kTypeShape = 0x12,
};
J3DJoint * curJoint = pJoint;
while (true) {
J3DJoint * newJoint = NULL;
J3DMaterial * newMaterial = NULL;
J3DShape * newShape = NULL;
const J3DModelHierarchy * inf = *pHierarchy;
u16 val;
switch (inf->mType) {
case kTypeBeginChild:
*pHierarchy = inf + 1;
makeHierarchy(curJoint, pHierarchy, pMaterialTable, pShapeTable);
break;
case kTypeEndChild:
*pHierarchy = inf + 1;
return;
case kTypeEnd:
return;
case kTypeJoint:
{
J3DJoint ** jointNodePointer = mJointNodePointer;
*pHierarchy = inf + 1;
newJoint = jointNodePointer[inf->mValue];
}
break;
case kTypeMaterial:
*pHierarchy = inf + 1;
val = inf->mValue;
newMaterial = pMaterialTable->getMaterialNodePointer(val);
break;
case kTypeShape:
*pHierarchy = inf + 1;
val = inf->mValue;
newShape = pShapeTable->getShapeNodePointer(val);
break;
}
if (newJoint != NULL) {
curJoint = newJoint;
if (pJoint == NULL)
mRootNode = newJoint;
else
pJoint->appendChild(newJoint);
} else if (newMaterial != NULL) {
if (pJoint->getMesh() != NULL)
newMaterial->mNext = pJoint->getMesh();
pJoint->mMesh = newMaterial;
newMaterial->mJoint = pJoint;
} else if (newShape != NULL) {
newMaterial = pJoint->getMesh();
newMaterial->mShape = newShape;
newShape->mMaterial = newMaterial;
}
}
}
/* 80325C00-80325CAC 320540 00AC+00 0/0 2/2 0/0 .text findImportantMtxIndex__12J3DJointTreeFv */
void J3DJointTree::findImportantMtxIndex() {
const s32 wEvlpMtxNum = getWEvlpMtxNum();
u32 tableIdx = 0;
const u16 drawFullWgtMtxNum = getDrawFullWgtMtxNum();
const u16 * wEvlpMixIndex = getWEvlpMixIndex();
const f32 * wEvlpMixWeight = getWEvlpMixWeight();
u16 * wEvlpImportantMtxIdx = getWEvlpImportantMtxIndex();
// Rigid matrices are easy.
for (u16 i = 0; i < drawFullWgtMtxNum; i++)
wEvlpImportantMtxIdx[i] = mDrawMtxData.mDrawMtxIndex[i];
// For envelope matrices, we need to find the matrix with the most contribution.
for (s32 i = 0; i < wEvlpMtxNum; i++) {
s32 mixNum = getWEvlpMixMtxNum(i);
u16 bestIdx = 0;
f32 bestWeight = -0.1f;
for (s32 j = 0; j < mixNum; j++) {
if (bestWeight < wEvlpMixWeight[tableIdx]) {
bestWeight = wEvlpMixWeight[tableIdx];
bestIdx = wEvlpMixIndex[tableIdx];
}
tableIdx++;
}
wEvlpImportantMtxIdx[i + mDrawMtxData.mDrawFullWgtMtxNum] = bestIdx;
}
}
/* 80325CAC-80325D1C 3205EC 0070+00 1/0 0/0 0/0 .text
* calc__12J3DJointTreeFP12J3DMtxBufferRC3VecRA3_A4_Cf */
void J3DJointTree::calc(J3DMtxBuffer* pMtxBuffer, Vec const& scale, f32 const (&mtx)[3][4]) {
getBasicMtxCalc()->init(scale, mtx);
J3DMtxCalc::setMtxBuffer(pMtxBuffer);
J3DJoint* root = getRootNode();
if (root == NULL)
return;
root->setCurrentMtxCalc(getBasicMtxCalc());
root->recursiveCalc();
}
/* 80325D1C-80325D24 32065C 0008+00 1/1 0/0 0/0 .text setMtxBuffer__10J3DMtxCalcFP12J3DMtxBuffer
*/
void J3DMtxCalc::setMtxBuffer(J3DMtxBuffer* mtxBuffer) {
J3DMtxCalc::mMtxBuffer = mtxBuffer;
}
/* 80325D24-80325D88 320664 0064+00 1/0 0/0 0/0 .text __dt__12J3DJointTreeFv */
J3DJointTree::~J3DJointTree() {}
@@ -0,0 +1,128 @@
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void calc__14J3DMaterialAnmCFP11J3DMaterial();
//
// External References:
//
extern "C" void __dt__14J3DMaterialAnmFv();
//
// Declarations:
//
void J3DMaterialAnm::initialize() {
for (int i = 0; i < ARRAY_SIZE(mMatColorAnm); i++) {
mMatColorAnm[i].setAnmFlag(false);
}
for (int i = 0; i < ARRAY_SIZE(mTexNoAnm); i++) {
mTexNoAnm[i].setAnmFlag(false);
}
for (int i = 0; i < ARRAY_SIZE(mTevColorAnm); i++) {
mTevColorAnm[i].setAnmFlag(false);
}
for (int i = 0; i < ARRAY_SIZE(mTevKColorAnm); i++) {
mTevKColorAnm[i].setAnmFlag(false);
}
for (int i = 0; i < ARRAY_SIZE(mTexMtxAnm); i++) {
mTexMtxAnm[i].setAnmFlag(false);
}
}
void J3DMaterialAnm::calc(J3DMaterial* pMat) const {
for (u32 i = 0; i < ARRAY_SIZE(mMatColorAnm); i++) {
if (mMatColorAnm[i].getAnmFlag()) {
_GXColor* color = pMat->getColorBlock()->getMatColor(i);
mMatColorAnm[i].calc(color);
}
}
u16 tmp;
for (u32 i = 0; i < ARRAY_SIZE(mTexNoAnm); i++) {
if (mTexNoAnm[i].getAnmFlag()) {
mTexNoAnm[i].calc(&tmp);
pMat->getTevBlock()->setTexNo(i, tmp);
}
}
for (u32 i = 0; i < 3; i++) {
if (mTevColorAnm[i].getAnmFlag()) {
_GXColorS10* color = pMat->getTevBlock()->getTevColor(i);
mTevColorAnm[i].calc(color);
}
}
for (u32 i = 0; i < ARRAY_SIZE(mTevKColorAnm); i++) {
if (mTevKColorAnm[i].getAnmFlag()) {
_GXColor* color = pMat->getTevBlock()->getTevKColor(i);
mTevKColorAnm[i].calc(color);
}
}
for (u32 i = 0; i < ARRAY_SIZE(mTexMtxAnm); i++) {
if (mTexMtxAnm[i].getAnmFlag()) {
J3DTexMtx* texMtx = pMat->getTexGenBlock()->getTexMtx(i);
mTexMtxAnm[i].calc(&texMtx->getTexMtxInfo().mSRT);
}
}
}
void J3DMaterialAnm::setMatColorAnm(int idx, J3DMatColorAnm* p_matColorAnm) {
if (p_matColorAnm == NULL) {
mMatColorAnm[idx].setAnmFlag(false);
} else {
mMatColorAnm[idx] = *p_matColorAnm;
}
}
void J3DMaterialAnm::setTexMtxAnm(int idx, J3DTexMtxAnm* p_texMtxAnm) {
if (p_texMtxAnm == NULL) {
mTexMtxAnm[idx].setAnmFlag(false);
} else {
mTexMtxAnm[idx] = *p_texMtxAnm;
}
}
void J3DMaterialAnm::setTexNoAnm(int idx, J3DTexNoAnm* p_texNoAnm) {
if (p_texNoAnm == NULL) {
mTexNoAnm[idx].setAnmFlag(false);
} else {
mTexNoAnm[idx] = *p_texNoAnm;
}
}
void J3DMaterialAnm::setTevColorAnm(int idx, J3DTevColorAnm* p_tevColorAnm) {
if (p_tevColorAnm == NULL) {
mTevColorAnm[idx].setAnmFlag(false);
} else {
mTevColorAnm[idx] = *p_tevColorAnm;
}
}
void J3DMaterialAnm::setTevKColorAnm(int idx, J3DTevKColorAnm* p_tevKColorAnm) {
if (p_tevKColorAnm == NULL) {
mTevKColorAnm[idx].setAnmFlag(false);
} else {
mTevKColorAnm[idx] = *p_tevKColorAnm;
}
}
/* ############################################################################################## */
/* 803CEE60-803CEE70 02BF80 0010+00 0/0 10/10 74/74 .data __vt__14J3DMaterialAnm */
SECTION_DATA extern void* __vt__14J3DMaterialAnm[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__14J3DMaterialAnmFv,
(void*)calc__14J3DMaterialAnmCFP11J3DMaterial,
};
@@ -0,0 +1,332 @@
//
// Generated By: dol2asm
// Translation Unit: J3DMaterialAttach
//
#include "JSystem/J3DGraphAnimator/J3DMaterialAttach.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void clear__16J3DMaterialTableFv();
extern "C" void __ct__16J3DMaterialTableFv();
extern "C" void __dt__16J3DMaterialTableFv();
extern "C" void removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor();
extern "C" void removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern();
extern "C" void removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
extern "C" void removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey();
extern "C" void createTexMtxForAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
extern "C" void entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor();
extern "C" void entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern();
extern "C" void entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey();
extern "C" void entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey();
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void __as__13J3DTexMtxInfoFRC13J3DTexMtxInfo();
extern "C" void setMatColorAnm__14J3DMaterialAnmFiP14J3DMatColorAnm();
extern "C" void setTexMtxAnm__14J3DMaterialAnmFiP12J3DTexMtxAnm();
extern "C" void setTexNoAnm__14J3DMaterialAnmFiP11J3DTexNoAnm();
extern "C" void setTevColorAnm__14J3DMaterialAnmFiP14J3DTevColorAnm();
extern "C" void setTevKColorAnm__14J3DMaterialAnmFiP15J3DTevKColorAnm();
extern "C" void _savegpr_22();
extern "C" void _savegpr_24();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _restgpr_22();
extern "C" void _restgpr_24();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" extern void* __vt__11J3DTexNoAnm[3];
/* 8032F5A8-8032F5D0 329EE8 0028+00 0/0 1/1 0/0 .text clear__16J3DMaterialTableFv */
void J3DMaterialTable::clear() {
mMaterialNum = 0;
mUniqueMatNum = 0;
mMaterialNodePointer = NULL;
mMaterialName = NULL;
field_0x10 = 0;
mTexture = NULL;
mTextureName = NULL;
field_0x1c = 0;
}
/* 8032F5D0-8032F604 329F10 0034+00 0/0 2/2 0/0 .text __ct__16J3DMaterialTableFv */
J3DMaterialTable::J3DMaterialTable() {
mMaterialNum = 0;
mUniqueMatNum = 0;
mMaterialNodePointer = NULL;
mMaterialName = NULL;
field_0x10 = 0;
mTexture = NULL;
mTextureName = NULL;
field_0x1c = 0;
}
/* 8032F604-8032F64C 329F44 0048+00 1/0 1/1 0/0 .text __dt__16J3DMaterialTableFv */
J3DMaterialTable::~J3DMaterialTable() {}
/* 8032F64C-8032F6F8 329F8C 00AC+00 0/0 1/1 5/5 .text
* removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */
int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnmColor) {
int ret = false;
u16 updateMatNum = pAnmColor->getUpdateMaterialNum();
for (u16 i = 0; i < updateMatNum; i++) {
if (pAnmColor->isValidUpdateMaterialID(i)) {
J3DMaterial* materialNode = getMaterialNodePointer(pAnmColor->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = materialNode->getMaterialAnm();
if (materialAnm == NULL) {
ret = true;
} else {
materialAnm->setMatColorAnm(0, NULL);
}
}
}
return ret;
}
/* 8032F6F8-8032F7B4 32A038 00BC+00 0/0 5/5 10/10 .text
* removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */
int J3DMaterialTable::removeTexNoAnimator(J3DAnmTexPattern* anm) {
int ret = 0;
u16 materialNum = anm->getUpdateMaterialNum();
J3DAnmTexPatternFullTable* anm_table = anm->mAnmTable;
for (u16 i = 0; i < materialNum; i++) {
if (anm->isValidUpdateMaterialID(i)) {
u16 materialID = anm->getUpdateMaterialID(i);
J3DMaterialAnm* pMatAnm = getMaterialNodePointer(materialID)->getMaterialAnm();
u8 texNo = anm_table[i].mTexNo;
if (pMatAnm == NULL)
ret = 1;
else
pMatAnm->setTexNoAnm(texNo, NULL);
}
}
return ret;
}
/* 8032F7B4-8032F880 32A0F4 00CC+00 0/0 4/4 26/26 .text
* removeTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
int J3DMaterialTable::removeTexMtxAnimator(J3DAnmTextureSRTKey* pAnm) {
s32 ret = 0;
u16 materialNum = pAnm->getUpdateMaterialNum();
for (u16 i = 0; i < materialNum; i++) {
u16 materialID = pAnm->getUpdateMaterialID(i);
if (materialID != 0xFFFF) {
J3DMaterial* pMaterial = getMaterialNodePointer(materialID);
J3DMaterialAnm* pMatAnm = pMaterial->getMaterialAnm();
u8 texMtxID = pAnm->getUpdateTexMtxID(i);
if (pMatAnm == NULL) {
ret = 1;
} else if (texMtxID != 0xFF) {
pMatAnm->setTexMtxAnm(texMtxID, NULL);
}
}
}
return ret;
}
/* 8032F880-8032F9C0 32A1C0 0140+00 0/0 7/7 24/24 .text
* removeTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */
int J3DMaterialTable::removeTevRegAnimator(J3DAnmTevRegKey* pAnm) {
s32 ret = 0;
u16 cRegMaterialNum = pAnm->getCRegUpdateMaterialNum();
u16 kRegMaterialNum = pAnm->getKRegUpdateMaterialNum();
for (u16 i = 0; i < cRegMaterialNum; i++) {
if (pAnm->getCRegUpdateMaterialID(i) != 0xFFFF) {
J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getCRegUpdateMaterialID(i))->getMaterialAnm();
u32 colorId = pAnm->getAnmCRegKeyTable()[i].mColorId;
if (pMatAnm == NULL)
ret = 1;
else
pMatAnm->setTevColorAnm(colorId, NULL);
}
}
for (u16 i = 0; i < kRegMaterialNum; i++) {
if (pAnm->getKRegUpdateMaterialID(i) != 0xFFFF) {
J3DMaterialAnm * pMatAnm = getMaterialNodePointer(pAnm->getKRegUpdateMaterialID(i))->getMaterialAnm();
u32 colorId = pAnm->getAnmKRegKeyTable()[i].mColorId;
if (pMatAnm == NULL) {
ret = 1;
} else {
pMatAnm->setTevKColorAnm(colorId, NULL);
}
}
}
return ret;
}
/* 8032F9C0-8032FAF4 32A300 0134+00 1/1 0/0 0/0 .text
* createTexMtxForAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
int J3DMaterialTable::createTexMtxForAnimator(J3DAnmTextureSRTKey* param_1) {
int rv = 0;
u16 materialNum = param_1->getUpdateMaterialNum();
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < materialNum; i++) {
if (param_1->isValidUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
u8 mtxId = param_1->getUpdateTexMtxID(i);
if (material->getMaterialAnm() == 0) {
rv = 1;
} else {
u32 mtxId2 = mtxId;
if (mtxId2 != 0xff && material->getTexMtx(mtxId2) == 0) {
J3DTexMtx* mtx = new J3DTexMtx();
rv = 4;
material->setTexMtx(mtxId2, mtx);
JUT_WARN(420, "matNo<%d> : texMtx%d nothing !\n", i, mtxId);
}
}
}
}
return rv;
}
/* 8032FAF4-8032FBC8 32A434 00D4+00 0/0 1/1 0/0 .text
* entryMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */
int J3DMaterialTable::entryMatColorAnimator(J3DAnmColor* param_1) {
int rv = 0;
u16 materialNum = param_1->getUpdateMaterialNum();
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < materialNum; i++) {
if (param_1->isValidUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
if (materialAnm == 0) {
rv = 1;
} else {
J3DMatColorAnm matColorAnm(i, param_1);
materialAnm->setMatColorAnm(0, &matColorAnm);
}
}
}
return rv;
}
/* 8032FBC8-8032FCC4 32A508 00FC+00 0/0 7/7 1/1 .text
* entryTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */
int J3DMaterialTable::entryTexNoAnimator(J3DAnmTexPattern* param_1) {
int rv = 0;
u16 materialNum = param_1->getUpdateMaterialNum();
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < materialNum; i++) {
if (param_1->isValidUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
u8 texNo = param_1->getAnmTable()[i].mTexNo;
if (materialAnm == 0) {
rv = 1;
} else {
J3DTexNoAnm texNoAnm(i, param_1);
materialAnm->setTexNoAnm(texNo, &texNoAnm);
}
}
}
return rv;
}
/* 8032FCC4-8032FE70 32A604 01AC+00 0/0 14/14 6/6 .text
* entryTexMtxAnimator__16J3DMaterialTableFP19J3DAnmTextureSRTKey */
// getUpdateTexMtxID u8 issue / getSRTCenter
#ifdef NONMATCHING
int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_1) {
int rv = 0;
u16 materialNum = param_1->getUpdateMaterialNum();
rv = createTexMtxForAnimator(param_1);
if (rv != 0) {
return rv;
}
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < materialNum; i++) {
if (param_1->isValidUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
u8 texMtxID = param_1->getUpdateTexMtxID(i);
if (materialAnm == 0) {
rv = 1;
} else {
if (texMtxID != 0xff) {
if (material->getTexCoord(texMtxID) != NULL) {
material->getTexCoord(texMtxID)->setTexGenMtx(texMtxID * 3 + 30);
}
J3DTexMtxInfo& iVar3 = material->getTexMtx(texMtxID)->getTexMtxInfo();
iVar3.mInfo = (iVar3.mInfo & 0x3f)| (param_1->getTexMtxCalcType() << 7);
iVar3.mCenter.x = param_1->getSRTCenter(i)->x;
iVar3.mCenter.y = param_1->getSRTCenter(i)->y;
iVar3.mCenter.z = param_1->getSRTCenter(i)->z;
J3DTexMtxAnm texMtxAnm(i, param_1);
materialAnm->setTexMtxAnm(texMtxID, &texMtxAnm);
}
}
}
}
return rv;
}
#else
int J3DMaterialTable::entryTexMtxAnimator(J3DAnmTextureSRTKey* param_0) {
// NONMATCHING
}
#endif
/* 8032FE70-8032FFEC 32A7B0 017C+00 0/0 10/10 4/4 .text
* entryTevRegAnimator__16J3DMaterialTableFP15J3DAnmTevRegKey */
int J3DMaterialTable::entryTevRegAnimator(J3DAnmTevRegKey* param_1) {
int rv = 0;
u16 cRegNum = param_1->getCRegUpdateMaterialNum();
u16 kRegNum = param_1->getKRegUpdateMaterialNum();
if (isLocked()) {
return 2;
}
for (u16 i = 0; i < cRegNum; i++) {
if (param_1->isValidCRegUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getCRegUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
u8 colorId = param_1->getAnmCRegKeyTable()[i].mColorId;
if (materialAnm == NULL) {
rv = 1;
} else {
J3DTevColorAnm tevColorAnm(i, param_1);
materialAnm->setTevColorAnm(colorId, &tevColorAnm);
}
}
}
for (u16 i = 0; i < kRegNum; i++) {
if (param_1->isValidKRegUpdateMaterialID(i)) {
J3DMaterial* material = getMaterialNodePointer(param_1->getKRegUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = material->getMaterialAnm();
u32 colorId = param_1->getAnmKRegKeyTable()[i].mColorId;
if (materialAnm == NULL) {
rv = 1;
} else {
J3DTevKColorAnm tevKColorAnm(i, param_1);
materialAnm->setTevKColorAnm(colorId, &tevKColorAnm);
}
}
}
return rv;
}
+679
View File
@@ -0,0 +1,679 @@
//
// Generated By: dol2asm
// Translation Unit: J3DModel
//
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "dol2asm.h"
#include "dolphin/os.h"
//
// Forward References:
//
extern "C" void initialize__8J3DModelFv();
extern "C" void entryModelData__8J3DModelFP12J3DModelDataUlUl();
extern "C" void createShapePacket__8J3DModelFP12J3DModelData();
extern "C" void createMatPacket__8J3DModelFP12J3DModelDataUl();
extern "C" void newDifferedDisplayList__8J3DModelFUl();
extern "C" void lock__8J3DModelFv();
extern "C" void unlock__8J3DModelFv();
extern "C" void calcMaterial__8J3DModelFv();
extern "C" void calcDiffTexMtx__8J3DModelFv();
extern "C" void diff__8J3DModelFv();
extern "C" void setDeformData__8J3DModelFP13J3DDeformDataUl();
extern "C" void setSkinDeform__8J3DModelFP13J3DSkinDeformUl();
extern "C" void calcAnmMtx__8J3DModelFv();
extern "C" void calcWeightEnvelopeMtx__8J3DModelFv();
extern "C" void update__8J3DModelFv();
extern "C" void calc__8J3DModelFv();
extern "C" void entry__8J3DModelFv();
extern "C" void viewCalc__8J3DModelFv();
extern "C" void calcNrmMtx__8J3DModelFv();
extern "C" void calcBumpMtx__8J3DModelFv();
extern "C" void calcBBoardMtx__8J3DModelFv();
extern "C" void prepareShapePackets__8J3DModelFv();
extern "C" void __dt__8J3DModelFv();
extern "C" void __dt__12J3DMtxBufferFv();
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void* __nwa__FUl();
extern "C" void __dl__FPv();
extern "C" void setVertexData__15J3DVertexBufferFP13J3DVertexData();
extern "C" void __dt__15J3DVertexBufferFv();
extern "C" void copyLocalVtxArray__15J3DVertexBufferFUl();
extern "C" void allocTransformedVtxPosArray__15J3DVertexBufferFv();
extern "C" void allocTransformedVtxNrmArray__15J3DVertexBufferFv();
extern "C" void single_To_Double__17J3DDisplayListObjFv();
extern "C" void newDisplayList__13J3DDrawPacketFUl();
extern "C" void newSingleDisplayList__13J3DDrawPacketFUl();
extern "C" void __ct__12J3DMatPacketFv();
extern "C" void __dt__12J3DMatPacketFv();
extern "C" void addShapePacket__12J3DMatPacketFP14J3DShapePacket();
extern "C" void __ct__14J3DShapePacketFv();
extern "C" void __dt__14J3DShapePacketFv();
extern "C" void newDifferedDisplayList__14J3DShapePacketFUl();
extern "C" void calcNBTScale__8J3DShapeFRC3VecPA3_A3_fPA3_A3_f();
extern "C" void countDLSize__11J3DMaterialFv();
extern "C" void newSharedDisplayList__11J3DMaterialFUl();
extern "C" void newSingleSharedDisplayList__11J3DMaterialFUl();
extern "C" void syncJ3DSysFlags__12J3DModelDataCFv();
extern "C" void initialize__12J3DMtxBufferFv();
extern "C" void create__12J3DMtxBufferFP12J3DModelDataUl();
extern "C" void calcWeightEnvelopeMtx__12J3DMtxBufferFv();
extern "C" void calcDrawMtx__12J3DMtxBufferFUlRC3VecRA3_A4_Cf();
extern "C" void calcNrmMtx__12J3DMtxBufferFv();
extern "C" void calcBBoardMtx__12J3DMtxBufferFv();
extern "C" void J3DCalcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f();
extern "C" void initSkinInfo__13J3DSkinDeformFP12J3DModelData();
extern "C" void initMtxIndexArray__13J3DSkinDeformFP12J3DModelData();
extern "C" void changeFastSkinDL__13J3DSkinDeformFP12J3DModelData();
extern "C" void transformVtxPosNrm__13J3DSkinDeformFP12J3DModelData();
extern "C" void deform__13J3DSkinDeformFP8J3DModel();
extern "C" void calc__15J3DVtxColorCalcFP8J3DModel();
extern "C" void offAllFlag__13J3DDeformDataFUl();
extern "C" void deform__13J3DDeformDataFP8J3DModel();
extern "C" void entryIn__8J3DJointFv();
extern "C" void __construct_new_array();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_23();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* ############################################################################################## */
/* 80456428-80456430 004A28 0004+04 1/1 0/0 0/0 .sdata2 @896 */
SECTION_SDATA2 static f32 lit_896[1 + 1 /* padding */] = {
1.0f,
/* padding */
0.0f,
};
/* 80327100-80327184 321A40 0084+00 0/0 3/3 0/0 .text initialize__8J3DModelFv */
void J3DModel::initialize() {
mModelData = NULL;
mFlags = 0;
mDiffFlag = 0;
mCalcCallBack = NULL;
mUserArea = 0;
mBaseScale.x = 1.0f;
mBaseScale.y = 1.0f;
mBaseScale.z = 1.0f;
MTXIdentity(mBaseTransformMtx);
MTXIdentity(mInternalView);
mMtxBuffer = NULL;
mMatPacket = NULL;
mShapePacket = NULL;
mDeformData = NULL;
mSkinDeform = NULL;
mVtxColorCalc = NULL;
mUnkCalc1 = NULL;
mUnkCalc2 = NULL;
}
/* ############################################################################################## */
/* 803CED20-803CED44 02BE40 0024+00 1/1 3/3 0/0 .data __vt__8J3DModel */
SECTION_DATA extern void* __vt__8J3DModel[9] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)update__8J3DModelFv,
(void*)entry__8J3DModelFv,
(void*)calc__8J3DModelFv,
(void*)calcMaterial__8J3DModelFv,
(void*)calcDiffTexMtx__8J3DModelFv,
(void*)viewCalc__8J3DModelFv,
(void*)__dt__8J3DModelFv,
};
/* 803CED44-803CED50 02BE64 000C+00 2/2 0/0 0/0 .data __vt__12J3DMtxBuffer */
SECTION_DATA extern void* __vt__12J3DMtxBuffer[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__12J3DMtxBufferFv,
};
/* 80327184-80327300 321AC4 017C+00 0/0 3/3 0/0 .text
* entryModelData__8J3DModelFP12J3DModelDataUlUl */
s32 J3DModel::entryModelData(J3DModelData* p_modelData, u32 modelFlag, u32 mtxBufferFlag) {
mModelData = p_modelData;
mMtxBuffer = new J3DMtxBuffer();
if (mMtxBuffer == NULL) {
return 4;
}
s32 ret = mMtxBuffer->create(p_modelData, mtxBufferFlag);
if (ret) {
return ret;
}
ret = createShapePacket(p_modelData);
if (ret) {
return ret;
}
ret = createMatPacket(p_modelData, modelFlag);
if (ret) {
return ret;
}
mVertexBuffer.setVertexData(&p_modelData->getVertexData());
prepareShapePackets();
if (modelFlag & J3DMdlFlag_Unk00001) {
onFlag(J3DMdlFlag_Unk00001);
}
if (modelFlag & J3DMdlFlag_Unk00002) {
onFlag(J3DMdlFlag_Unk00002);
}
if (modelFlag & J3DMdlFlag_Unk00010) {
onFlag(J3DMdlFlag_Unk00010);
}
if (modelFlag & J3DMdlFlag_Unk20000) {
onFlag(J3DMdlFlag_Unk20000);
}
if (modelFlag & J3DMdlFlag_Unk40000) {
onFlag(J3DMdlFlag_Unk40000);
}
if (modelFlag & J3DMdlFlag_Unk80000) {
onFlag(J3DMdlFlag_Unk80000);
}
if (modelFlag & J3DMdlFlag_SkinPosCpu) {
onFlag(J3DMdlFlag_SkinPosCpu);
}
if (modelFlag & J3DMdlFlag_SkinNrmCpu) {
onFlag(J3DMdlFlag_SkinNrmCpu);
}
return 0;
}
/* 80327300-803273CC 321C40 00CC+00 1/1 0/0 0/0 .text createShapePacket__8J3DModelFP12J3DModelData
*/
s32 J3DModel::createShapePacket(J3DModelData* p_modelData) {
if (p_modelData->getShapeNum() != 0) {
u16 shapeNum = p_modelData->getShapeNum();
mShapePacket = new J3DShapePacket[shapeNum];
if (mShapePacket == NULL) {
return kJ3DError_Alloc;
}
for (int i = 0; i < p_modelData->getShapeNum(); i++) {
J3DShape* shapeNode = p_modelData->getShapeNodePointer(i);
mShapePacket[i].setShape(shapeNode);
mShapePacket[i].setModel(this);
}
}
return kJ3DError_Success;
}
/* 803273CC-803275FC 321D0C 0230+00 1/1 0/0 0/0 .text createMatPacket__8J3DModelFP12J3DModelDataUl
*/
s32 J3DModel::createMatPacket(J3DModelData* p_modelData, u32 flag) {
if (p_modelData->getMaterialNum() != 0) {
mMatPacket = new J3DMatPacket[p_modelData->getMaterialNum()];
if (mMatPacket == NULL) {
return kJ3DError_Alloc;
}
}
s32 ret;
u16 matNum = p_modelData->getMaterialNum();
u32 singleDLFlag = flag & 0x40000;
for (u16 i = 0; i < matNum; i++) {
J3DMaterial* materialNode = p_modelData->getMaterialNodePointer(i);
J3DMatPacket* pkt = mMatPacket + i;
u16 shapeIndex = materialNode->getShape()->getIndex();
J3DShapePacket* shapePacket = mShapePacket + shapeIndex;
pkt->setMaterial(materialNode);
pkt->setInitShapePacket(shapePacket);
pkt->addShapePacket(shapePacket);
pkt->setTexture(p_modelData->getTexture());
pkt->setMaterialID(materialNode->mDiffFlag);
if (p_modelData->getModelDataType() == 1) {
pkt->mFlags |= 0x01;
}
if (!!(flag & 0x80000)) {
pkt->mpDisplayListObj = materialNode->getSharedDisplayListObj();
} else {
if (p_modelData->getModelDataType() == 1) {
if (!!(flag & 0x40000)) {
pkt->mpDisplayListObj = materialNode->getSharedDisplayListObj();
} else {
J3DDisplayListObj* sharedDL = materialNode->getSharedDisplayListObj();
ret = sharedDL->single_To_Double();
if (ret != kJ3DError_Success)
return ret;
pkt->mpDisplayListObj = sharedDL;
}
} else if (!!(flag & 0x20000)) {
if (!!(flag & 0x40000)) {
ret = materialNode->newSingleSharedDisplayList(materialNode->countDLSize());
if (ret != kJ3DError_Success)
return ret;
pkt->mpDisplayListObj = materialNode->getSharedDisplayListObj();
} else {
ret = materialNode->newSharedDisplayList(materialNode->countDLSize());
if (ret != kJ3DError_Success)
return ret;
J3DDisplayListObj* sharedDL = materialNode->getSharedDisplayListObj();
ret = sharedDL->single_To_Double();
if (ret != kJ3DError_Success)
return ret;
pkt->mpDisplayListObj = sharedDL;
}
} else {
if (!!(flag & 0x40000)) {
ret = pkt->newSingleDisplayList(materialNode->countDLSize());
if (ret != kJ3DError_Success)
return ret;
} else {
ret = pkt->newDisplayList(materialNode->countDLSize());
if (ret != kJ3DError_Success)
return ret;
}
}
}
}
return kJ3DError_Success;
}
/* 803275FC-8032767C 321F3C 0080+00 0/0 1/1 0/0 .text newDifferedDisplayList__8J3DModelFUl */
s32 J3DModel::newDifferedDisplayList(u32 flag) {
mDiffFlag = flag;
u16 shapeNum = getModelData()->getShapeNum();
for (u16 i = 0; i < shapeNum; i++) {
s32 ret = mShapePacket[i].newDifferedDisplayList(flag);
if (ret != kJ3DError_Success)
return ret;
}
return kJ3DError_Success;
}
/* 8032767C-803276B4 321FBC 0038+00 0/0 4/4 0/0 .text lock__8J3DModelFv */
void J3DModel::lock() {
u16 matNum = mModelData->getMaterialNum();
for (int i = 0; i < matNum; i++) {
mMatPacket[i].lock();
}
}
/* 803276B4-803276EC 321FF4 0038+00 0/0 2/2 0/0 .text unlock__8J3DModelFv */
void J3DModel::unlock() {
u16 matNum = mModelData->getMaterialNum();
for (int i = 0; i < matNum; i++) {
mMatPacket[i].unlock();
}
}
/* 803276EC-80327858 32202C 016C+00 1/0 0/0 0/0 .text calcMaterial__8J3DModelFv */
void J3DModel::calcMaterial() {
j3dSys.setModel(this);
if (checkFlag(4)) {
j3dSys.onFlag(4);
} else {
j3dSys.offFlag(4);
}
if (checkFlag(8)) {
j3dSys.onFlag(8);
} else {
j3dSys.offFlag(8);
}
mModelData->syncJ3DSysFlags();
j3dSys.setTexture(mModelData->getTexture());
u16 matNum = mModelData->getMaterialNum();
for (u16 i = 0; i < matNum; i++) {
j3dSys.setMatPacket(&mMatPacket[i]);
J3DMaterial* material = mModelData->getMaterialNodePointer(i);
if (material->getMaterialAnm() != NULL) {
material->getMaterialAnm()->calc(material);
}
int jntNo = material->getJoint()->getJntNo();
material->calc(getAnmMtx(jntNo));
}
}
/* 80327858-803279A0 322198 0148+00 1/0 0/0 0/0 .text calcDiffTexMtx__8J3DModelFv */
#if defined NON_MATCHING
void J3DModel::calcDiffTexMtx() {
// regalloc
j3dSys.setModel(this);
u16 num;
num = getModelData()->getMaterialNum();
for (u16 i = 0; i < num; i++) {
j3dSys.setMatPacket(getMatPacket(i));
J3DMaterial* materialNode = getModelData()->getMaterialNodePointer(i);
materialNode->calcDiffTexMtx(getAnmMtx(materialNode->getJoint()->getJntNo()));
}
num = getModelData()->getShapeNum();
for (u16 i = 0; i < num; i++) {
J3DShapePacket* shapePacket = getShapePacket(i);
J3DTexGenBlock* texGenBlock =
getModelData()->getShapeNodePointer(i)->getMaterial()->getTexGenBlock();
for (u16 j = 0; (int)j < 8; j++) {
J3DTexMtx* texMtxNode = texGenBlock->getTexMtx(j);
J3DTexMtxObj* texMtxObj = shapePacket->getTexMtxObj();
if (texMtxNode != NULL && texMtxObj != NULL) {
MTXCopy(texMtxNode->getMtx(), texMtxObj->getMtx(j));
}
}
}
}
#else
void J3DModel::calcDiffTexMtx() {
// NONMATCHING
}
#endif
/* 803279A0-80327A2C 3222E0 008C+00 0/0 2/2 0/0 .text diff__8J3DModelFv */
void J3DModel::diff() {
for (u16 n = getModelData()->getMaterialNum(), i = 0; i < n; i++) {
j3dSys.setMatPacket(&mMatPacket[i]);
getModelData()->getMaterialNodePointer(i)->diff(mDiffFlag);
}
}
/* 80327A2C-80327AA0 32236C 0074+00 0/0 1/1 2/2 .text setDeformData__8J3DModelFP13J3DDeformDataUl
*/
s32 J3DModel::setDeformData(J3DDeformData* p_deformData, u32 param_1) {
mDeformData = p_deformData;
if (p_deformData == NULL) {
return 0;
}
s32 ret = mVertexBuffer.copyLocalVtxArray(param_1);
if (ret) {
return ret;
}
if (param_1 & 4) {
p_deformData->offAllFlag(1);
}
return 0;
}
/* 80327AA0-80327BD4 3223E0 0134+00 0/0 0/0 2/2 .text setSkinDeform__8J3DModelFP13J3DSkinDeformUl
*/
s32 J3DModel::setSkinDeform(J3DSkinDeform* p_skinDeform, u32 flags) {
mSkinDeform = p_skinDeform;
s32 ret = kJ3DError_Success;
if (p_skinDeform == NULL) {
offFlag(J3DMdlFlag_SkinPosCpu);
offFlag(J3DMdlFlag_SkinNrmCpu);
return 5;
} else {
mSkinDeform->initMtxIndexArray(mModelData);
ret = mModelData->checkFlag(0x100);
if (ret != kJ3DError_Success) {
mSkinDeform->changeFastSkinDL(mModelData);
flags &= ~2;
flags &= ~4;
mSkinDeform->transformVtxPosNrm(mModelData);
mSkinDeform->initSkinInfo(mModelData);
}
ret = 0;
if ((~flags & 2)) {
ret = mVertexBuffer.allocTransformedVtxPosArray();
if (ret != kJ3DError_Success) {
offFlag(J3DMdlFlag_SkinPosCpu);
return ret;
}
onFlag(J3DMdlFlag_SkinPosCpu);
} else {
offFlag(J3DMdlFlag_SkinPosCpu);
}
if ((~flags & 4)) {
ret = mVertexBuffer.allocTransformedVtxNrmArray();
if (ret != kJ3DError_Success) {
offFlag(J3DMdlFlag_SkinNrmCpu);
return ret;
}
onFlag(J3DMdlFlag_SkinNrmCpu);
} else {
offFlag(J3DMdlFlag_SkinNrmCpu);
}
}
return ret;
}
/* 80327BD4-80327C58 322514 0084+00 1/1 0/0 2/2 .text calcAnmMtx__8J3DModelFv */
void J3DModel::calcAnmMtx() {
j3dSys.setModel(this);
if (checkFlag(2)) {
getModelData()->getJointTree().calc(mMtxBuffer, j3dDefaultScale, j3dDefaultMtx);
} else {
getModelData()->getJointTree().calc(mMtxBuffer, mBaseScale, mBaseTransformMtx);
}
}
/* 80327C58-80327CA4 322598 004C+00 1/1 1/1 1/1 .text calcWeightEnvelopeMtx__8J3DModelFv
*/
void J3DModel::calcWeightEnvelopeMtx() {
if (getModelData()->getWEvlpMtxNum() != 0 && !checkFlag(0x10)) {
if (!getModelData()->checkFlag(0x100)) {
mMtxBuffer->calcWeightEnvelopeMtx();
}
}
}
/* 80327CA4-80327CF0 3225E4 004C+00 1/0 0/0 0/0 .text update__8J3DModelFv */
void J3DModel::update() {
calc();
entry();
}
/* 80327CF0-80327E4C 322630 015C+00 1/0 0/0 0/0 .text calc__8J3DModelFv */
void J3DModel::calc() {
j3dSys.setModel(this);
if (checkFlag(J3DMdlFlag_SkinPosCpu)) {
j3dSys.onFlag(J3DSysFlag_SkinPosCpu);
} else {
j3dSys.offFlag(J3DSysFlag_SkinPosCpu);
}
if (checkFlag(J3DMdlFlag_SkinNrmCpu)) {
j3dSys.onFlag(J3DSysFlag_SkinNrmCpu);
} else {
j3dSys.offFlag(J3DSysFlag_SkinNrmCpu);
}
getModelData()->syncJ3DSysFlags();
mVertexBuffer.frameInit();
if (mUnkCalc2 != NULL) {
mUnkCalc2->calc(getModelData());
}
if (mDeformData != NULL) {
mDeformData->deform(this);
}
if (mVtxColorCalc != NULL) {
mVtxColorCalc->calc(this);
}
if (mUnkCalc1 != NULL) {
mUnkCalc1->calc(this);
}
calcAnmMtx();
calcWeightEnvelopeMtx();
if (mSkinDeform != NULL) {
mSkinDeform->deform(this);
}
if (mCalcCallBack != NULL) {
mCalcCallBack(this, 0);
}
}
/* 80327E4C-80327F40 32278C 00F4+00 1/0 0/0 0/0 .text entry__8J3DModelFv */
void J3DModel::entry() {
j3dSys.setModel(this);
if (checkFlag(J3DMdlFlag_SkinPosCpu)) {
j3dSys.onFlag(J3DSysFlag_SkinPosCpu);
} else {
j3dSys.offFlag(J3DSysFlag_SkinPosCpu);
}
if (checkFlag(J3DMdlFlag_SkinNrmCpu)) {
j3dSys.onFlag(J3DSysFlag_SkinNrmCpu);
} else {
j3dSys.offFlag(J3DSysFlag_SkinNrmCpu);
}
getModelData()->syncJ3DSysFlags();
j3dSys.setTexture(getModelData()->getTexture());
for (u16 i = 0; i < getModelData()->getJointNum(); i++) {
J3DJoint* joint = getModelData()->getJointNodePointer(i);
if (joint->getMesh() != NULL) {
joint->entryIn();
}
}
}
/* 80327F40-80328190 322880 0250+00 1/0 0/0 0/0 .text viewCalc__8J3DModelFv */
void J3DModel::viewCalc() {
mMtxBuffer->swapDrawMtx();
mMtxBuffer->swapNrmMtx();
if (mModelData->checkFlag(0x10)) {
if (getMtxCalcMode() == 2) {
J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx,
(MtxP)&mInternalView);
}
} else if (isCpuSkinningOn()) {
if (getMtxCalcMode() == 2) {
J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx,
(MtxP)&mInternalView);
}
} else if (checkFlag(J3DMdlFlag_SkinPosCpu)) {
mMtxBuffer->calcDrawMtx(getMtxCalcMode(), mBaseScale, mBaseTransformMtx);
calcNrmMtx();
calcBumpMtx();
DCStoreRangeNoSync(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx));
DCStoreRange(getNrmMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx33));
} else if (checkFlag(J3DMdlFlag_SkinNrmCpu)) {
mMtxBuffer->calcDrawMtx(getMtxCalcMode(), mBaseScale, mBaseTransformMtx);
calcBBoardMtx();
DCStoreRange(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx));
} else {
mMtxBuffer->calcDrawMtx(getMtxCalcMode(), mBaseScale, mBaseTransformMtx);
calcNrmMtx();
calcBBoardMtx();
calcBumpMtx();
DCStoreRangeNoSync(getDrawMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx));
DCStoreRange(getNrmMtxPtr(), mModelData->getDrawMtxNum() * sizeof(Mtx33));
}
prepareShapePackets();
}
/* 80328190-803281B4 322AD0 0024+00 1/1 0/0 0/0 .text calcNrmMtx__8J3DModelFv */
void J3DModel::calcNrmMtx() {
mMtxBuffer->calcNrmMtx();
}
/* 803281B4-803282B8 322AF4 0104+00 1/1 0/0 0/0 .text calcBumpMtx__8J3DModelFv */
void J3DModel::calcBumpMtx() {
if (getModelData()->checkBumpFlag() == 1) {
u32 bumpMtxIdx = 0;
u16 materialNum = getModelData()->getMaterialNum();
u16 i = 0;
for (; i < materialNum; i++) {
J3DMaterial* material = getModelData()->getMaterialNodePointer(i);
if (material->getNBTScale()->mbHasScale == 1) {
material->getShape()->calcNBTScale(*material->getNBTScale()->getScale(),
getNrmMtxPtr(), getBumpMtxPtr(bumpMtxIdx));
DCStoreRange(getBumpMtxPtr(bumpMtxIdx), getModelData()->getDrawMtxNum() * 0x24);
bumpMtxIdx++;
}
}
}
}
/* 803282B8-803282EC 322BF8 0034+00 1/1 0/0 0/0 .text calcBBoardMtx__8J3DModelFv */
void J3DModel::calcBBoardMtx() {
if (mModelData->checkBBoardFlag()) {
mMtxBuffer->calcBBoardMtx();
}
}
/* 803282EC-80328350 322C2C 0064+00 2/2 0/0 0/0 .text prepareShapePackets__8J3DModelFv */
void J3DModel::prepareShapePackets() {
u16 shapeNum = getModelData()->getShapeNum();
for (u16 i = 0; i < shapeNum; i++) {
J3DShape* xx = mModelData->getShapeNodePointer(i);
J3DShapePacket* pkt = getShapePacket(i);
pkt->setMtxBuffer(mMtxBuffer);
if (getMtxCalcMode() == 2) {
pkt->setBaseMtxPtr(&mInternalView);
} else {
pkt->setBaseMtxPtr(&j3dSys.mViewMtx);
}
}
}
/* 80328350-803283B4 322C90 0064+00 1/0 0/0 0/0 .text __dt__8J3DModelFv */
J3DModel::~J3DModel() {}
/* 803283B4-803283FC 322CF4 0048+00 1/0 0/0 0/0 .text __dt__12J3DMtxBufferFv */
extern "C" void __dt__12J3DMtxBufferFv() {
// asm J3DMtxBuffer::~J3DMtxBuffer() {
// NONMATCHING
}
@@ -0,0 +1,182 @@
//
// Generated By: dol2asm
// Translation Unit: J3DModelData
//
#include "JSystem/J3DGraphAnimator/J3DModelData.h"
#include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "dol2asm.h"
#include "dolphin/os.h"
//
// Forward References:
//
extern "C" void clear__12J3DModelDataFv();
extern "C" void __ct__12J3DModelDataFv();
extern "C" void newSharedDisplayList__12J3DModelDataFUl();
extern "C" void indexToPtr__12J3DModelDataFv();
extern "C" void makeSharedDL__12J3DModelDataFv();
extern "C" void simpleCalcMaterial__12J3DModelDataFUsPA4_f();
extern "C" void syncJ3DSysPointers__12J3DModelDataCFv();
extern "C" void syncJ3DSysFlags__12J3DModelDataCFv();
extern "C" void __dt__13J3DShapeTableFv();
extern "C" void __dt__12J3DModelDataFv();
//
// External References:
//
extern "C" void __dl__FPv();
extern "C" void __ct__13J3DVertexDataFv();
extern "C" void __dt__14J3DDrawMtxDataFv();
extern "C" void countDLSize__11J3DMaterialFv();
extern "C" void newSharedDisplayList__11J3DMaterialFUl();
extern "C" void newSingleSharedDisplayList__11J3DMaterialFUl();
extern "C" void __ct__12J3DJointTreeFv();
extern "C" void __ct__16J3DMaterialTableFv();
extern "C" void __dt__16J3DMaterialTableFv();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__12J3DJointTree[4 + 1 /* padding */];
//
// Declarations:
//
/* 80325D88-80325DA0 3206C8 0018+00 1/1 2/2 0/0 .text clear__12J3DModelDataFv */
void J3DModelData::clear() {
mpRawData = 0;
mFlags = 0;
mbHasBumpArray = 0;
mbHasBillboard = 0;
}
/* ############################################################################################## */
/* 803CED08-803CED14 02BE28 000C+00 3/3 0/0 0/0 .data __vt__13J3DShapeTable */
SECTION_DATA extern void* __vt__13J3DShapeTable[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__13J3DShapeTableFv,
};
/* 803CED14-803CED20 02BE34 000C+00 2/2 0/0 0/0 .data __vt__12J3DModelData */
SECTION_DATA extern void* __vt__12J3DModelData[3] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__12J3DModelDataFv,
};
/* 80325DA0-80325E14 3206E0 0074+00 0/0 2/2 0/0 .text __ct__12J3DModelDataFv */
J3DModelData::J3DModelData() {
clear();
}
/* 80325E14-80325EC8 320754 00B4+00 0/0 2/2 0/0 .text newSharedDisplayList__12J3DModelDataFUl */
s32 J3DModelData::newSharedDisplayList(u32 flag) {
u16 matNum = getMaterialNum();
for (u16 i = 0; i < matNum; i++) {
if (!!(flag & 0x40000)) {
s32 ret = getMaterialNodePointer(i)->newSingleSharedDisplayList(getMaterialNodePointer(i)->countDLSize());
if (ret != kJ3DError_Success)
return ret;
} else {
s32 ret = getMaterialNodePointer(i)->newSharedDisplayList(getMaterialNodePointer(i)->countDLSize());
if (ret != kJ3DError_Success)
return ret;
}
}
return kJ3DError_Success;
}
/* ############################################################################################## */
/* 804515E8-804515EC 000AE8 0004+00 1/1 0/0 0/0 .sbss sInterruptFlag$965 */
static s32 sInterruptFlag;
/* 804515EC-804515F0 000AEC 0004+00 1/1 0/0 0/0 .sbss None */
static s8 sInitInterruptFlag;
/* 80325EC8-80325F94 320808 00CC+00 0/0 1/1 0/0 .text indexToPtr__12J3DModelDataFv */
void J3DModelData::indexToPtr() {
J3DTexture* tex = getTexture();
j3dSys.setTexture(tex);
if (!sInitInterruptFlag) {
sInterruptFlag = OSDisableInterrupts();
sInitInterruptFlag = true;
}
OSDisableScheduler();
GDLObj gdl_obj;
u16 matNum = getMaterialNum();
for (u16 i = 0; i < matNum; i++) {
J3DMaterial* matNode = getMaterialNodePointer(i);
J3DDisplayListObj* dl_obj = matNode->getSharedDisplayListObj();
GDInitGDLObj(&gdl_obj, dl_obj->getDisplayList(0), dl_obj->getDisplayListSize());
GDSetCurrent(&gdl_obj);
matNode->getTevBlock()->indexToPtr();
}
GDSetCurrent(NULL);
OSEnableScheduler();
OSRestoreInterrupts(sInterruptFlag);
}
/* 80325F94-8032600C 3208D4 0078+00 0/0 2/2 0/0 .text makeSharedDL__12J3DModelDataFv */
void J3DModelData::makeSharedDL() {
J3DTexture* tex = getTexture();
j3dSys.setTexture(tex);
u16 matNum = getMaterialNum();
for (u16 i = 0; i < matNum; i++) {
getMaterialNodePointer(i)->makeSharedDisplayList();
}
}
/* 8032600C-803260CC 32094C 00C0+00 0/0 3/3 7/7 .text simpleCalcMaterial__12J3DModelDataFUsPA4_f
*/
void J3DModelData::simpleCalcMaterial(u16 idx, Mtx param_1) {
syncJ3DSysFlags();
J3DJoint* jointNode = getJointNodePointer(idx);
for (J3DMaterial* mat = jointNode->getMesh(); mat != NULL; mat = mat->getNext()) {
if (mat->getMaterialAnm() != NULL) {
mat->getMaterialAnm()->calc(mat);
}
mat->calc(param_1);
}
}
/* 803260CC-803260F8 320A0C 002C+00 0/0 1/1 0/0 .text syncJ3DSysPointers__12J3DModelDataCFv */
void J3DModelData::syncJ3DSysPointers() const {
j3dSys.setTexture(getTexture());
j3dSys.setVtxPos(getVtxPosArray());
j3dSys.setVtxNrm(getVtxNrmArray());
j3dSys.setVtxCol(getVtxColorArray(0));
}
/* 803260F8-80326134 320A38 003C+00 1/1 5/5 0/0 .text syncJ3DSysFlags__12J3DModelDataCFv
*/
void J3DModelData::syncJ3DSysFlags() const {
if (checkFlag(0x20)) {
j3dSys.onFlag(J3DSysFlag_PostTexMtx);
} else {
j3dSys.offFlag(J3DSysFlag_PostTexMtx);
}
}
/* 80326134-8032617C 320A74 0048+00 1/0 0/0 0/0 .text __dt__13J3DShapeTableFv */
extern "C" void __dt__13J3DShapeTableFv() {
// asm J3DShapeTable::~J3DShapeTable() {
// NONMATCHING
}
/* 8032617C-80326214 320ABC 0098+00 1/0 0/0 0/0 .text __dt__12J3DModelDataFv */
J3DModelData::~J3DModelData() {
// NONMATCHING
}
@@ -0,0 +1,295 @@
//
// Generated By: dol2asm
// Translation Unit: J3DMtxBuffer
//
#include "JSystem/J3DGraphAnimator/J3DMtxBuffer.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void initialize__12J3DMtxBufferFv();
extern "C" void create__12J3DMtxBufferFP12J3DModelDataUl();
extern "C" void createAnmMtx__12J3DMtxBufferFP12J3DModelData();
extern "C" void createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData();
extern "C" void setNoUseDrawMtx__12J3DMtxBufferFv();
extern "C" void createDoubleDrawMtx__12J3DMtxBufferFP12J3DModelDataUl();
extern "C" void createBumpMtxArray__12J3DMtxBufferFP12J3DModelDataUl();
extern "C" void calcWeightEnvelopeMtx__12J3DMtxBufferFv();
extern "C" void calcDrawMtx__12J3DMtxBufferFUlRC3VecRA3_A4_Cf();
extern "C" void calcNrmMtx__12J3DMtxBufferFv();
extern "C" void calcBBoardMtx__12J3DMtxBufferFv();
extern "C" void J3DCalcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f();
extern "C" u8 sNoUseDrawMtx__12J3DMtxBuffer[48];
extern "C" u8 sNoUseNrmMtx__12J3DMtxBuffer[36 + 4 /* padding */];
extern "C" void* sNoUseDrawMtxPtr__12J3DMtxBuffer;
extern "C" void* sNoUseNrmMtxPtr__12J3DMtxBuffer;
//
// External References:
//
extern "C" void* __nwa__FUl();
extern "C" void* __nwa__FUli();
extern "C" void J3DCalcBBoardMtx__FPA4_f();
extern "C" void J3DCalcYBBoardMtx__FPA4_f();
extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
extern "C" void J3DPSMtxArrayConcat__FPA4_fPA4_fPA4_fUl();
extern "C" void countBumpMtxNum__8J3DShapeCFv();
extern "C" void _savegpr_19();
extern "C" void _savegpr_24();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_19();
extern "C" void _restgpr_24();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* 80326214-80326258 320B54 0044+00 0/0 1/1 0/0 .text initialize__12J3DMtxBufferFv */
void J3DMtxBuffer::initialize() {
mJointTree = NULL;
mpScaleFlagArr = NULL;
mpEvlpScaleFlagArr = NULL;
mpAnmMtx = NULL;
mpWeightEvlpMtx = NULL;
mpDrawMtxArr[0] = NULL;
mpDrawMtxArr[1] = NULL;
mpNrmMtxArr[0] = NULL;
mpNrmMtxArr[1] = NULL;
mpBumpMtxArr[0] = NULL;
mpBumpMtxArr[1] = NULL;
mFlags = 1;
mCurrentViewNo = 0;
mpUserAnmMtx = NULL;
}
/* 80326258-80326364 320B98 010C+00 0/0 1/1 0/0 .text create__12J3DMtxBufferFP12J3DModelDataUl */
enum {
J3DMdlDataFlag_ConcatView = 0x10,
J3DMdlDataFlag_NoAnimation = 0x100,
};
static inline u32 getMdlDataFlag_MtxLoadType(u32 flag) {
return flag & 0x10;
}
s32 J3DMtxBuffer::create(J3DModelData* p_modelData, u32 flag) {
s32 ret;
mFlags = flag;
mJointTree = &p_modelData->getJointTree();
ret = createAnmMtx(p_modelData);
if (ret != kJ3DError_Success)
return ret;
ret = createWeightEnvelopeMtx(p_modelData);
if (ret != kJ3DError_Success)
return ret;
if (p_modelData->checkFlag(J3DMdlDataFlag_NoAnimation)) {
setNoUseDrawMtx();
} else {
switch (getMdlDataFlag_MtxLoadType(p_modelData->getFlag())) {
case J3DMdlDataFlag_ConcatView:
ret = setNoUseDrawMtx();
break;
case 0:
default:
ret = createDoubleDrawMtx(p_modelData, flag);
break;
}
}
if (ret != kJ3DError_Success)
return ret;
if (p_modelData->getFlag() & J3DMdlDataFlag_ConcatView) {
p_modelData->setBumpFlag(0);
} else {
ret = createBumpMtxArray(p_modelData, flag);
if (ret != kJ3DError_Success)
return ret;
}
return ret;
}
/* 80326364-803263F0 320CA4 008C+00 1/1 0/0 0/0 .text createAnmMtx__12J3DMtxBufferFP12J3DModelData
*/
s32 J3DMtxBuffer::createAnmMtx(J3DModelData* p_modelData) {
if (p_modelData->getJointNum() != 0) {
mpScaleFlagArr = new u8[p_modelData->getJointNum()];
mpAnmMtx = new Mtx[p_modelData->getJointNum()];
mpUserAnmMtx = mpAnmMtx;
}
if (mpScaleFlagArr == NULL)
return kJ3DError_Alloc;
return mpAnmMtx == NULL ? kJ3DError_Alloc : kJ3DError_Success;
}
/* 803263F0-8032648C 320D30 009C+00 1/1 0/0 0/0 .text
* createWeightEnvelopeMtx__12J3DMtxBufferFP12J3DModelData */
s32 J3DMtxBuffer::createWeightEnvelopeMtx(J3DModelData* p_modelData) {
if (p_modelData->getWEvlpMtxNum() != 0) {
mpEvlpScaleFlagArr = new u8[p_modelData->getWEvlpMtxNum()];
mpWeightEvlpMtx = new Mtx[p_modelData->getWEvlpMtxNum()];
}
if (p_modelData->getWEvlpMtxNum() != 0 && mpEvlpScaleFlagArr == NULL)
return kJ3DError_Alloc;
if (p_modelData->getWEvlpMtxNum() != 0 && mpWeightEvlpMtx == NULL)
return kJ3DError_Alloc;
return kJ3DError_Success;
}
/* ############################################################################################## */
/* 804371C0-804371F0 063EE0 0030+00 1/0 0/0 0/0 .bss sNoUseDrawMtx__12J3DMtxBuffer */
Mtx J3DMtxBuffer::sNoUseDrawMtx;
/* 804371F0-80437218 063F10 0024+04 1/0 0/0 0/0 .bss sNoUseNrmMtx__12J3DMtxBuffer */
Mtx33 J3DMtxBuffer::sNoUseNrmMtx;
/* 80450970-80450974 -00001 0004+00 1/1 0/0 0/0 .sdata sNoUseDrawMtxPtr__12J3DMtxBuffer */
Mtx* J3DMtxBuffer::sNoUseDrawMtxPtr = &J3DMtxBuffer::sNoUseDrawMtx;
/* 80450974-80450978 -00001 0004+00 1/1 0/0 0/0 .sdata sNoUseNrmMtxPtr__12J3DMtxBuffer */
Mtx33* J3DMtxBuffer::sNoUseNrmMtxPtr = &J3DMtxBuffer::sNoUseNrmMtx;
/* 8032648C-803264B8 320DCC 002C+00 1/1 0/0 0/0 .text setNoUseDrawMtx__12J3DMtxBufferFv
*/
s32 J3DMtxBuffer::setNoUseDrawMtx() {
mpDrawMtxArr[1] = &sNoUseDrawMtxPtr;
mpDrawMtxArr[0] = &sNoUseDrawMtxPtr;
mpNrmMtxArr[1] = &sNoUseNrmMtxPtr;
mpNrmMtxArr[0] = &sNoUseNrmMtxPtr;
mpBumpMtxArr[1] = NULL;
mpBumpMtxArr[0] = NULL;
return kJ3DError_Success;
}
/* 803264B8-80326664 320DF8 01AC+00 1/1 0/0 0/0 .text
* createDoubleDrawMtx__12J3DMtxBufferFP12J3DModelDataUl */
s32 J3DMtxBuffer::createDoubleDrawMtx(J3DModelData* p_modelData, u32 num) {
if (num != 0) {
for (s32 i = 0; i < 2; i++) {
mpDrawMtxArr[i] = new Mtx*[num];
mpNrmMtxArr[i] = new Mtx33*[num];
mpBumpMtxArr[i] = NULL;
}
}
if (num != 0) {
for (u32 i = 0; i < 2; i++) {
if (mpDrawMtxArr[i] == NULL)
return kJ3DError_Alloc;
if (mpNrmMtxArr[i] == NULL)
return kJ3DError_Alloc;
}
}
for (s32 i = 0; i < 2; i++) {
for (u32 j = 0; j < num; j++) {
if (p_modelData->getDrawMtxNum() != 0) {
mpDrawMtxArr[i][j] = new (0x20) Mtx[p_modelData->getDrawMtxNum()];
mpNrmMtxArr[i][j] = new (0x20) Mtx33[p_modelData->getDrawMtxNum()];
}
}
}
for (s32 i = 0; i < 2; i++) {
for (u32 j = 0; j < num; j++) {
if (p_modelData->getDrawMtxNum() != 0) {
if (mpDrawMtxArr[i][j] == NULL)
return kJ3DError_Alloc;
if (mpNrmMtxArr[i][j] == NULL)
return kJ3DError_Alloc;
}
}
}
return kJ3DError_Success;
}
/* 80326664-803268D4 320FA4 0270+00 1/1 0/0 0/0 .text
* createBumpMtxArray__12J3DMtxBufferFP12J3DModelDataUl */
s32 J3DMtxBuffer::createBumpMtxArray(J3DModelData* param_0, u32 param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80450978-80450980 0003F8 0008+00 1/1 0/0 0/0 .sdata J3DUnit01 */
SECTION_SDATA static u8 J3DUnit01[8] = {
0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00,
};
/* 803268D4-80326ACC 321214 01F8+00 0/0 1/1 0/0 .text calcWeightEnvelopeMtx__12J3DMtxBufferFv */
void J3DMtxBuffer::calcWeightEnvelopeMtx() {
// NONMATCHING
}
/* 80326ACC-80326D3C 32140C 0270+00 0/0 1/1 0/0 .text
* calcDrawMtx__12J3DMtxBufferFUlRC3VecRA3_A4_Cf */
void J3DMtxBuffer::calcDrawMtx(u32 param_0, Vec const& param_1, f32 const (&param_2)[3][4]) {
// NONMATCHING
}
extern void J3DPSCalcInverseTranspose(Mtx p1, Mtx33 p2);
/* 80326D3C-80326EF0 32167C 01B4+00 0/0 1/1 0/0 .text calcNrmMtx__12J3DMtxBufferFv */
void J3DMtxBuffer::calcNrmMtx() {
// NONMATCHING
}
/* ############################################################################################## */
/* 80456420-80456424 004A20 0004+00 1/1 0/0 0/0 .sdata2 @1320 */
SECTION_SDATA2 static f32 lit_1320 = 1.0f;
/* 80456424-80456428 004A24 0004+00 1/1 0/0 0/0 .sdata2 @1321 */
SECTION_SDATA2 static u8 lit_1321[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80326EF0-80327048 321830 0158+00 0/0 1/1 0/0 .text calcBBoardMtx__12J3DMtxBufferFv */
void J3DMtxBuffer::calcBBoardMtx() {
// NONMATCHING
}
/* 80327048-80327100 321988 00B8+00 1/1 1/1 0/0 .text
* J3DCalcViewBaseMtx__FPA4_fRC3VecRA3_A4_CfPA4_f */
void J3DCalcViewBaseMtx(Mtx view, Vec const& scale, const Mtx& base, Mtx dst) {
Mtx m;
m[0][0] = base[0][0] * scale.x;
m[0][1] = base[0][1] * scale.y;
m[0][2] = base[0][2] * scale.z;
m[0][3] = base[0][3];
m[1][0] = base[1][0] * scale.x;
m[1][1] = base[1][1] * scale.y;
m[1][2] = base[1][2] * scale.z;
m[1][3] = base[1][3];
m[2][0] = base[2][0] * scale.x;
m[2][1] = base[2][1] * scale.y;
m[2][2] = base[2][2] * scale.z;
m[2][3] = base[2][3];
MTXConcat(view, m, dst);
}
@@ -0,0 +1,38 @@
#include "JSystem/J3DGraphAnimator/J3DShapeTable.h"
void J3DShapeTable::hide() {
u16 shapeNum = mShapeNum;
for (u16 i = 0; i < shapeNum; i++) {
mShapeNodePointer[i]->onFlag(1);
}
}
void J3DShapeTable::show() {
u16 shapeNum = mShapeNum;
for (u16 i = 0; i < shapeNum; i++) {
mShapeNodePointer[i]->offFlag(1);
}
}
void J3DShapeTable::initShapeNodes(J3DDrawMtxData* pMtxData, J3DVertexData* pVtxData) {
u16 shapeNum = mShapeNum;
for (u16 i = 0; i < shapeNum; i++) {
J3DShape* shapeNode = mShapeNodePointer[i];
shapeNode->setDrawMtxDataPointer(pMtxData);
shapeNode->setVertexDataPointer(pVtxData);
shapeNode->makeVcdVatCmd();
}
}
void J3DShapeTable::sortVcdVatCmd() {
u16 shapeNum = mShapeNum;
for (u16 next = 0; next < shapeNum; next++) {
for (u16 prev = 0; prev < next; prev++) {
if (mShapeNodePointer[next]->isSameVcdVatCmd(mShapeNodePointer[prev])) {
void* nodeVatCmd = mShapeNodePointer[prev]->getVcdVatCmd();
mShapeNodePointer[next]->setVcdVatCmd(nodeVatCmd);
}
}
}
}
@@ -0,0 +1,770 @@
//
// Generated By: dol2asm
// Translation Unit: J3DSkinDeform
//
#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "dol2asm.h"
#include "dolphin/os.h"
#include "string.h"
//
// Types:
//
//
// Forward References:
//
extern "C" void __ct__12J3DSkinNListFv();
extern "C" static void J3DPSWeightMTXMultVec__FPA4_ffP3VecP3Vec();
extern "C" static void J3DPSWeightMTXMultVecSR__FPA4_ffP3VecP3Vec();
extern "C" void calcSkin_VtxPosF32__12J3DSkinNListFPA4_fPvPv();
extern "C" void calcSkin_VtxNrmF32__12J3DSkinNListFPA4_fPvPv();
extern "C" void __ct__13J3DSkinDeformFv();
extern "C" void initSkinInfo__13J3DSkinDeformFP12J3DModelData();
extern "C" void initMtxIndexArray__13J3DSkinDeformFP12J3DModelData();
extern "C" void changeFastSkinDL__13J3DSkinDeformFP12J3DModelData();
extern "C" void calcNrmMtx__13J3DSkinDeformFP12J3DMtxBuffer();
extern "C" void transformVtxPosNrm__13J3DSkinDeformFP12J3DModelData();
extern "C" void calcAnmInvJointMtx__13J3DSkinDeformFP12J3DMtxBuffer();
extern "C" void deformFastVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void deformFastVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void deformVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void deformVtxPos_S16__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void deformVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBuffer();
extern "C" void deformVtxNrm_S16__13J3DSkinDeformCFP15J3DVertexBuffer();
extern "C" void deform__13J3DSkinDeformFP8J3DModel();
extern "C" void deform__13J3DSkinDeformFP15J3DVertexBufferP12J3DMtxBuffer();
extern "C" void calc__15J3DVtxColorCalcFP8J3DModel();
extern "C" void __dt__13J3DSkinDeformFv();
extern "C" extern char const* const J3DSkinDeform__stringBase0;
extern "C" u8 sWorkArea_WEvlpMixMtx__13J3DSkinDeform[4096];
extern "C" u8 sWorkArea_WEvlpMixWeight__13J3DSkinDeform[4096];
extern "C" u16 sWorkArea_MtxReg__13J3DSkinDeform[1024 + 4 /* padding */];
//
// External References:
//
extern "C" void* __nwa__FUl();
extern "C" void* __nwa__FUli();
extern "C" void __dl__FPv();
extern "C" void J3DGQRSetup7__FUlUlUlUl();
extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
extern "C" void makeVcdVatCmd__8J3DShapeFv();
extern "C" void __construct_new_array();
extern "C" void _savegpr_14();
extern "C" void _savegpr_17();
extern "C" void _savegpr_24();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_14();
extern "C" void _restgpr_17();
extern "C" void _restgpr_24();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern f32 PSMulUnit01[2];
//
// Declarations:
//
/* 8032C6E4-8032C704 327024 0020+00 1/1 0/0 0/0 .text __ct__12J3DSkinNListFv */
J3DSkinNList::J3DSkinNList() {
field_0x0 = NULL;
field_0x4 = NULL;
field_0x8 = NULL;
field_0xc = NULL;
field_0x10 = 0;
field_0x12 = 0;
}
/* 8032C704-8032C7BC 327044 00B8+00 1/1 0/0 0/0 .text J3DPSWeightMTXMultVec__FPA4_ffP3VecP3Vec */
static void J3DPSWeightMTXMultVec(f32 (*param_0)[4], f32 param_1, Vec* param_2, Vec* param_3) {
f32 f4 = param_0[0][3] + param_0[0][0] * param_2->x;
f32 f5 = param_0[1][3] + param_0[1][0] * param_2->x;
f32 f3 = param_0[2][3] + param_0[2][0] * param_2->x;
f4 += param_0[0][1] * param_2->y;
f5 += param_0[1][1] * param_2->y;
f3 += param_0[2][1] * param_2->y;
f4 += param_0[0][2] * param_2->z;
f5 += param_0[1][2] * param_2->z;
f3 += param_0[2][2] * param_2->z;
param_3->x += f4 * param_1;
param_3->y += f5 * param_1;
param_3->z += f3 * param_1;
}
/* 8032C7BC-8032C85C 3270FC 00A0+00 1/1 0/0 0/0 .text J3DPSWeightMTXMultVecSR__FPA4_ffP3VecP3Vec
*/
static void J3DPSWeightMTXMultVecSR(f32 (*param_0)[4], f32 param_1, Vec* param_2,
Vec* param_3) {
f32 f4 = param_0[0][0] * param_2->x;
f32 f5 = param_0[1][0] * param_2->x;
f32 f3 = param_0[2][0] * param_2->x;
f4 += param_0[0][1] * param_2->y;
f5 += param_0[1][1] * param_2->y;
f3 += param_0[2][1] * param_2->y;
f4 += param_0[0][2] * param_2->z;
f5 += param_0[1][2] * param_2->z;
f3 += param_0[2][2] * param_2->z;
param_3->x += f4 * param_1;
param_3->y += f5 * param_1;
param_3->z += f3 * param_1;
}
/* 8032C85C-8032C8E4 32719C 0088+00 1/1 0/0 0/0 .text calcSkin_VtxPosF32__12J3DSkinNListFPA4_fPvPv
*/
void J3DSkinNList::calcSkin_VtxPosF32(f32 (*param_0)[4], void* param_1, void* param_2) {
u16 r29 = field_0x10;
for (int i = 0; i < r29; i++) {
u16 ind = field_0x0[i];
J3DPSWeightMTXMultVec(param_0, field_0x8[i], ((Vec*)param_1 + ind), ((Vec*)param_2 + ind));
}
}
/* 8032C8E4-8032C96C 327224 0088+00 1/1 0/0 0/0 .text calcSkin_VtxNrmF32__12J3DSkinNListFPA4_fPvPv
*/
void J3DSkinNList::calcSkin_VtxNrmF32(f32 (*param_0)[4], void* param_1, void* param_2) {
u16 r29 = field_0x12;
for (int i = 0; i < r29; i++) {
u16 ind = field_0x4[i];
J3DPSWeightMTXMultVecSR(param_0, field_0xc[i], ((Vec*)param_1 + ind), ((Vec*)param_2 + ind));
}
}
/* ############################################################################################## */
/* 8032C96C-8032C9B0 3272AC 0044+00 0/0 0/0 2/2 .text __ct__13J3DSkinDeformFv */
J3DSkinDeform::J3DSkinDeform() {
mPosData = NULL;
mNrmData = NULL;
mPosMtx = NULL;
mNrmMtx = NULL;
mFlags = 3;
field_0x18 = 1;
field_0x19 = 0;
field_0x1c = 0;
field_0x20 = 0;
mSkinNList = NULL;
}
/* ############################################################################################## */
/* 80437218-80438218 063F38 1000+00 1/1 0/0 0/0 .bss sWorkArea_WEvlpMixMtx__13J3DSkinDeform */
u16* J3DSkinDeform::sWorkArea_WEvlpMixMtx[1024];
/* 80438218-80439218 064F38 1000+00 1/1 0/0 0/0 .bss sWorkArea_WEvlpMixWeight__13J3DSkinDeform */
f32* J3DSkinDeform::sWorkArea_WEvlpMixWeight[1024];
/* 8032C9B0-8032CF44 3272F0 0594+00 0/0 1/1 0/0 .text
* initSkinInfo__13J3DSkinDeformFP12J3DModelData */
void J3DSkinDeform::initSkinInfo(J3DModelData* param_0) {
u16 wevlpMtxNum = param_0->getWEvlpMtxNum();
u16* wevlpMtxIndex = param_0->getWEvlpMixMtxIndex();
f32* wevlpMixWeights = param_0->getWEvlpMixWeight();
int currentOffset = 0;
for (int i = 0; i < wevlpMtxNum; i++) {
sWorkArea_WEvlpMixMtx[i] = wevlpMtxIndex + currentOffset;
sWorkArea_WEvlpMixWeight[i] = wevlpMixWeights + currentOffset;
currentOffset += param_0->getWEvlpMixMtxNum(i);
}
if (param_0->getJointNum() != 0) {
mSkinNList = new J3DSkinNList[param_0->getJointNum()];
}
for (int i = 0; i < param_0->getVtxNum(); i++) {
u16 uVar8 = mPosData[i];
if (uVar8 != 0xffff) {
if (param_0->getDrawMtxFlag(uVar8) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
mSkinNList[drawMtxIndex].field_0x10++;
} else {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
for (int j = 0; j < wevlpMtxNum; j++) {
mSkinNList[indices[j]].field_0x10++;
}
}
}
}
for (int i = 0; i < param_0->getNrmNum(); i++) {
u16 uVar8 = mNrmData[i];
if (uVar8 != 0xffff) {
if (param_0->getDrawMtxFlag(uVar8) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
mSkinNList[drawMtxIndex].field_0x12++;
} else {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
for (int j = 0; j < wevlpMtxNum; j++) {
mSkinNList[indices[j]].field_0x12++;
}
}
}
}
for (u16 i = 0; i < param_0->getJointNum(); i++) {
if (mSkinNList[i].field_0x10) {
mSkinNList[i].field_0x0 = new u16[mSkinNList[i].field_0x10];
mSkinNList[i].field_0x8 = new f32[mSkinNList[i].field_0x10];
mSkinNList[i].field_0x10 = 0;
}
if (mSkinNList[i].field_0x12) {
mSkinNList[i].field_0x4 = new u16[mSkinNList[i].field_0x12];
mSkinNList[i].field_0xc = new f32[mSkinNList[i].field_0x12];
mSkinNList[i].field_0x12 = 0;
}
}
for (int i = 0; i < param_0->getVtxNum(); i++) {
u16 uVar8 = mPosData[i];
if (uVar8 != 0xffff) {
if (param_0->getDrawMtxFlag(uVar8) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
u16 uVar9 = mSkinNList[drawMtxIndex].field_0x10++;
mSkinNList[drawMtxIndex].field_0x0[uVar9] = i;
mSkinNList[drawMtxIndex].field_0x8[uVar9] = 1.0f;
} else {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
f32* weights = sWorkArea_WEvlpMixWeight[drawMtxIndex];
for (int j = 0; j < wevlpMtxNum; j++) {
u16 uVar9 = mSkinNList[indices[j]].field_0x10++;
mSkinNList[indices[j]].field_0x0[uVar9] = i;
mSkinNList[indices[j]].field_0x8[uVar9] = weights[j];
}
}
}
}
for (int i = 0; i < param_0->getNrmNum(); i++) {
u16 uVar8 = mNrmData[i];
if (uVar8 != 0xffff) {
if (param_0->getDrawMtxFlag(uVar8) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
u16 uVar9 = mSkinNList[drawMtxIndex].field_0x12++;
mSkinNList[drawMtxIndex].field_0x4[uVar9] = i;
mSkinNList[drawMtxIndex].field_0xc[uVar9] = 1.0f;
} else {
u16 drawMtxIndex = param_0->getDrawMtxIndex(uVar8);
wevlpMtxNum = param_0->getWEvlpMixMtxNum(drawMtxIndex);
u16* indices = sWorkArea_WEvlpMixMtx[drawMtxIndex];
f32* weights = sWorkArea_WEvlpMixWeight[drawMtxIndex];
for (int j = 0; j < wevlpMtxNum; j++) {
u16 uVar9 = mSkinNList[indices[j]].field_0x12++;
mSkinNList[indices[j]].field_0x4[uVar9] = i;
mSkinNList[indices[j]].field_0xc[uVar9] = weights[j];
}
}
}
}
}
/* ############################################################################################## */
/* 803A2008-803A2018 02E668 0010+00 1/1 0/0 0/0 .rodata @1142 */
SECTION_RODATA static u32 const lit_1142[4] = {
0, 1, 1, 2,
};
COMPILER_STRIP_GATE(0x803A2008, &lit_1142);
/* 803A2028-803A2028 02E688 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_803A2028 =
" Invlid Data : CPU Pipeline process GX_INDEX16 D"
"ata Only\n";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_803A2062 = "\0\0\0\0\0";
#pragma pop
/* 80439218-80439A20 065F38 0800+08 1/1 0/0 0/0 .bss sWorkArea_MtxReg__13J3DSkinDeform
*/
u16 J3DSkinDeform::sWorkArea_MtxReg[1024 + 4 /* padding */];
/* 8032CF44-8032D378 327884 0434+00 0/0 1/1 0/0 .text
* initMtxIndexArray__13J3DSkinDeformFP12J3DModelData */
// Several register order and regalloc issues
#ifdef NONMATCHING
int J3DSkinDeform::initMtxIndexArray(J3DModelData* param_0) {
if (mPosData != NULL && mNrmData != NULL) {
return 0;
}
mPosData = new u16[param_0->getVtxNum()];
if (mPosData == NULL) {
return 4;
}
for (int i = 0; i < param_0->getVtxNum(); i++) {
mPosData[i] = 0xffff;
}
if (param_0->getNrmNum()) {
mNrmData = new u16[param_0->getNrmNum()];
if (mNrmData == NULL) {
return 4;
}
for (int i = 0; i < param_0->getNrmNum(); i++) {
mNrmData[i] = 0;
}
} else {
mNrmData = NULL;
}
mPosMtx = new Mtx[param_0->getJointNum()];
mNrmMtx = new (32) Mtx33[param_0->getDrawMtxNum()];
if (mPosMtx == NULL) {
return 4;
}
if (mNrmMtx == NULL) {
return 4;
}
for (u16 local_6c = 0; local_6c < param_0->getShapeNum(); local_6c++) {
u32 local_28[4] = {0,1,1,2};
int r26 = -1;
int r25 = -1;
int r24 = -1;
int r23 = 0;
for (GXVtxDescList* local_4c = param_0->getShapeNodePointer(local_6c)->getVtxDesc(); local_4c->attr != 0xff; local_4c++) {
switch (local_4c->attr) {
case GX_VA_PNMTXIDX:
r26 = r23;
break;
case GX_VA_POS:
r25 = r23;
if (local_4c->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
return 6;
}
break;
case GX_VA_NRM:
r24 = r23;
if (local_4c->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
return 6;
}
break;
case GX_VA_TEX0:
if (local_4c->type != GX_INDEX16) {
OSReport(" Invlid Data : CPU Pipeline process GX_INDEX16 Data Only\n");
return 6;
}
break;
}
r23 += local_28[(int)local_4c->type];
}
for (u16 local_6e = 0; local_6e < param_0->getShapeNodePointer(local_6c)->getMtxGroupNum(); local_6e++) {
J3DShapeMtx* piVar8 = param_0->getShapeNodePointer(local_6c)->getShapeMtx(local_6e);
u8* pcVar10 = param_0->getShapeNodePointer(local_6c)->getShapeDraw(local_6e)->getDisplayList();
u16 uVar13;
for (u8* local_58 = pcVar10;
(int)local_58 - (int)pcVar10 < param_0->getShapeNodePointer(local_6c)->getShapeDraw(local_6e)->getDisplayListSize();
local_58 += r23 * uVar13, local_58 += 3) {
if (*local_58 != 0xA0 && *local_58 != 0x98) {
break;
}
uVar13 = *(u16*)(local_58 + 1);
for (int local_60 = 0; local_60 < uVar13; local_60++) {
u8* iVar5 = local_58;
iVar5 += r23 * local_60 + 3;
u8 bVar3 = *(iVar5 + r26) / 3U;
u16 uVar1 = *(u16*)(iVar5 + r25);
u16 uVar2 = *(u16*)(iVar5 + r24);
u32 local_76 = piVar8->getUseMtxIndex(bVar3);
if ((u16)local_76 == 0xffff) {
local_76 = sWorkArea_MtxReg[bVar3];
} else if (r26 != -1) {
sWorkArea_MtxReg[bVar3] = local_76;
}
mPosData[uVar1] = local_76;
if (r24 != -1) {
mNrmData[uVar2] = local_76;
}
}
}
if (r24 == -1) {
param_0->getShapeNodePointer(local_6c)->onFlag(0x100);
param_0->getShapeNodePointer(local_6c)->offFlag(8);
}
}
}
for (int local_68 = 0; local_68 < param_0->getVtxNum(); local_68++) {
if (mPosData[local_68] == 0xffff) {
field_0x18 = 0x0;
mPosData[local_68] = 0;
}
}
return 0;
}
#else
int J3DSkinDeform::initMtxIndexArray(J3DModelData* param_0) {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 803A2018-803A2028 02E678 0010+00 1/1 0/0 0/0 .rodata @1270 */
SECTION_RODATA static u8 const lit_1270[16] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
};
COMPILER_STRIP_GATE(0x803A2018, &lit_1270);
/* 8032D378-8032D5C4 327CB8 024C+00 0/0 1/1 0/0 .text
* changeFastSkinDL__13J3DSkinDeformFP12J3DModelData */
// regalloc, display list access issues
#ifdef NONMATCHING
void J3DSkinDeform::changeFastSkinDL(J3DModelData* param_0) {
for (u16 i = 0; i < param_0->getShapeNum(); i++) {
u32 local_28[4] = {0,1,1,2};
s32 local_30 = -1;
s32 local_34 = 0;
J3DShape* pShapeNode = param_0->getShapeNodePointer(i);
for (GXVtxDescList* local_3c = pShapeNode->getVtxDesc(); local_3c->attr != GX_VA_NULL; local_3c++) {
if (local_3c->attr == GX_VA_PNMTXIDX) {
local_30 = local_34;
}
local_34 += local_28[(int)local_3c->type];
}
if (local_30 != -1) {
for (u16 j = 0; j < pShapeNode->getMtxGroupNum(); j++) {
u8* puVar5 = pShapeNode->getShapeDraw(j)->getDisplayList();
u8* puVar10 = puVar5;
u8* local_44 = puVar5;
while ((int)local_44 - (int)puVar5 < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
u8 cVar1 = *(u8*)local_44;
*puVar10++ = cVar1;
if ((cVar1 != 0xA0) && (cVar1 != 0x98))
break;
u16 uVar9 = *(u16*)((int)local_44 + 1);
*(u16*)puVar10 = uVar9;
puVar10 += 2;
for (int local_4c = 0; local_4c < uVar9; local_4c++) {
u8* dst;
memcpy(puVar10, &local_44[(local_34 * local_4c) + 4], local_34 - 1);
puVar10 = (u8*)((int)puVar10 + local_34 - 1);
}
local_44 += local_34 * uVar9;
local_44 += 3;
}
int pcVar2 = ((int)puVar10 - (int)puVar5 + 0x1f) & ~0x1f;
while ((int)puVar10 - (int)puVar5 < pShapeNode->getShapeDraw(j)->getDisplayListSize()) {
*puVar10++ = 0;
}
pShapeNode->getShapeDraw(j)->setDisplayListSize(pcVar2);
DCStoreRange(puVar5, pShapeNode->getShapeDraw(j)->getDisplayListSize());
}
}
}
for (u16 i = 0; i < param_0->getShapeNum(); i++) {
J3DShape* pShape = param_0->getShapeNodePointer(i);
GXVtxDescList* local_60 = pShape->getVtxDesc();
for (GXVtxDescList*local_5c = local_60; local_5c->attr != GX_VA_NULL; local_5c++) {
if (local_5c->attr != GX_VA_PNMTXIDX) {
local_60->attr = local_5c->attr;
local_60->type = local_5c->type;
local_60++;
}
}
local_60->attr = GX_VA_NULL;
local_60->type = GX_NONE;
pShape->makeVcdVatCmd();
}
}
#else
void J3DSkinDeform::changeFastSkinDL(J3DModelData* param_0) {
// NONMATCHING
}
#endif
/* 8032D5C4-8032D738 327F04 0174+00 1/1 0/0 0/0 .text calcNrmMtx__13J3DSkinDeformFP12J3DMtxBuffer
*/
void J3DSkinDeform::calcNrmMtx(J3DMtxBuffer* param_0) {
J3DJointTree* jointTree = param_0->getJointTree();
u16 drawMtxNum = jointTree->getDrawMtxNum();
for (u16 i = 0; i < drawMtxNum; i++) {
if (jointTree->getDrawMtxFlag(i) == 0) {
if (param_0->getScaleFlag(jointTree->getDrawMtxIndex(i)) == 1) {
setNrmMtx(i, param_0->getAnmMtx(jointTree->getDrawMtxIndex(i)));
} else {
J3DPSCalcInverseTranspose(param_0->getAnmMtx(jointTree->getDrawMtxIndex(i)), getNrmMtx(i));
}
} else {
if (param_0->getEnvScaleFlag(jointTree->getDrawMtxIndex(i)) == 1) {
setNrmMtx(i, param_0->getWeightAnmMtx(jointTree->getDrawMtxIndex(i)));
} else {
J3DPSCalcInverseTranspose(param_0->getWeightAnmMtx(jointTree->getDrawMtxIndex(i)), getNrmMtx(i));
}
}
}
}
/* 8032D738-8032D87C 328078 0144+00 0/0 1/1 0/0 .text
* transformVtxPosNrm__13J3DSkinDeformFP12J3DModelData */
void J3DSkinDeform::transformVtxPosNrm(J3DModelData* param_0) {
if (param_0->getWEvlpMtxNum() != 0 && field_0x19 == 0) {
int vtmNum = param_0->getVtxNum();
int nrmNum = param_0->getNrmNum();
for (int i = 0; i < vtmNum; i++) {
u16 posIndex = mPosData[i];
if (param_0->getDrawMtxFlag(posIndex) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(posIndex);
Vec* pos = ((Vec*)param_0->getVtxPosArray()) + i;
Mtx invMtx;
MTXInverse(param_0->getInvJointMtx(drawMtxIndex), invMtx);
MTXMultVec(invMtx, pos, pos);
}
}
for (int i = 0; i < nrmNum; i++) {
u16 nrmIndex = mNrmData[i];
if (param_0->getDrawMtxFlag(nrmIndex) == 0) {
u16 drawMtxIndex = param_0->getDrawMtxIndex(nrmIndex);
Vec* nrm = ((Vec*)param_0->getVtxNrmArray()) + i;
Mtx invMtx;
MTXInverse(param_0->getInvJointMtx(drawMtxIndex), invMtx);
MTXMultVecSR(invMtx, nrm, nrm);
}
}
field_0x19 = 1;
}
}
/* 8032D87C-8032D8F4 3281BC 0078+00 1/1 0/0 0/0 .text
* calcAnmInvJointMtx__13J3DSkinDeformFP12J3DMtxBuffer */
void J3DSkinDeform::calcAnmInvJointMtx(J3DMtxBuffer* param_0) {
if (param_0->getJointTree()->getWEvlpMtxNum() != 0) {
u16 jointNum = param_0->getJointTree()->getJointNum();
Mtx* anmMtx = (Mtx*)param_0->getAnmMtx(0);
Mtx* invJointMtx = &param_0->getJointTree()->getInvJointMtx(0);
Mtx* posMtx = mPosMtx;
for (int i = 0; i < jointNum; i++) {
MTXConcat(anmMtx[i], invJointMtx[i], posMtx[i]);
}
}
}
/* 8032D8F4-8032DA1C 328234 0128+00 1/1 0/0 0/0 .text
* deformFastVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
void J3DSkinDeform::deformFastVtxPos_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
param_0->swapTransformedVtxPos();
J3DJointTree* jointTree = param_1->getJointTree();
u32 vtxNum = param_0->getVertexData()->getVtxNum();
void* currentVtxPos = param_0->getCurrentVtxPos();
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
J3DFillZero32B(transformedVtxPos, (vtxNum * sizeof(Vec) + 0x1f) & ~0x1f);
if (jointTree->getWEvlpMtxNum() != 0) {
u16 jointNum = jointTree->getJointNum();
for (u16 i = 0; i < jointNum; i++) {
mSkinNList[i].calcSkin_VtxPosF32(mPosMtx[i], currentVtxPos, transformedVtxPos);
}
} else {
u16 jointNum = jointTree->getJointNum();
for (u16 i = 0; i < jointNum; i++) {
J3DSkinNList* skinList = mSkinNList + i;
skinList->calcSkin_VtxPosF32(param_1->getAnmMtx(i), currentVtxPos, transformedVtxPos);
}
}
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(Vec));
param_0->setCurrentVtxPos(transformedVtxPos);
}
/* ############################################################################################## */
/* 8032DA1C-8032DB50 32835C 0134+00 1/1 0/0 0/0 .text
* deformFastVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
void J3DSkinDeform::deformFastVtxNrm_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
param_0->swapTransformedVtxNrm();
J3DJointTree* jointTree = param_1->getJointTree();
int nrmNum = param_0->getVertexData()->getNrmNum();
void* currentVtxNrm = param_0->getCurrentVtxNrm();
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
for (int i = 0; i < nrmNum; i++) {
((Vec*)transformedVtxNrm)[i].x = 0.0f;
((Vec*)transformedVtxNrm)[i].y = 0.0f;
((Vec*)transformedVtxNrm)[i].z = 0.0f;
}
if (jointTree->getWEvlpMtxNum() != 0) {
u16 jointNum = jointTree->getJointNum();
for (u16 i = 0; i < jointNum; i++) {
mSkinNList[i].calcSkin_VtxNrmF32(mPosMtx[i], currentVtxNrm, transformedVtxNrm);
}
} else {
u16 jointNum = jointTree->getJointNum();
for (u16 i = 0; i < jointNum; i++) {
J3DSkinNList* skinList = mSkinNList + i;
skinList->calcSkin_VtxNrmF32(param_1->getAnmMtx(i), currentVtxNrm, transformedVtxNrm);
}
}
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(Vec));
param_0->setCurrentVtxNrm(transformedVtxNrm);
}
/* 8032DB50-8032DC74 328490 0124+00 1/1 0/0 0/0 .text
* deformVtxPos_F32__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
// J3DPSMulMtxVec regalloc
#ifdef NONMATCHING
void J3DSkinDeform::deformVtxPos_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
Mtx* anmMtxs[2];
anmMtxs[0] = (Mtx*)param_1->getAnmMtx(0);
anmMtxs[1] = (Mtx*)param_1->getWeightAnmMtx(0);
param_0->swapTransformedVtxPos();
J3DJointTree* jointTree = param_1->getJointTree();
int vtxNum = param_0->getVertexData()->getVtxNum();
void* currentVtxPos = param_0->getCurrentVtxPos();
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
for (int i = 0; i < vtxNum; i++) {
Mtx* anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
J3DPSMulMtxVec(anmMtx[jointTree->getDrawMtxIndex(mPosData[i])], ((Vec*)currentVtxPos) + i, ((Vec*)transformedVtxPos) + i);
}
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(Vec));
param_0->setCurrentVtxPos(transformedVtxPos);
}
#else
void J3DSkinDeform::deformVtxPos_F32(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
// NONMATCHING
}
#endif
/* 8032DC74-8032DDB8 3285B4 0144+00 1/1 0/0 0/0 .text
* deformVtxPos_S16__13J3DSkinDeformCFP15J3DVertexBufferP12J3DMtxBuffer */
// J3DPSMulMtxVec regalloc
#ifdef NONMATCHING
void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
Mtx* anmMtxs[2];
anmMtxs[0] = (Mtx*)param_1->getAnmMtx(0);
anmMtxs[1] = (Mtx*)param_1->getWeightAnmMtx(0);
u8 vtxPosFrac = param_0->getVertexData()->getVtxPosFrac();
J3DGQRSetup7(vtxPosFrac, 7, vtxPosFrac, 7);
param_0->swapTransformedVtxPos();
J3DJointTree* jointTree = param_1->getJointTree();
int vtxNum = param_0->getVertexData()->getVtxNum();
void* currentVtxPos = param_0->getCurrentVtxPos();
void* transformedVtxPos = param_0->getTransformedVtxPos(0);
for (int i = 0; i < vtxNum; i++) {
Mtx* anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
J3DPSMulMtxVec(anmMtx[jointTree->getDrawMtxIndex(mPosData[i])], ((SVec*)currentVtxPos) + i, ((SVec*)transformedVtxPos) + i);
}
DCStoreRange(param_0->getTransformedVtxPos(0), param_0->getVertexData()->getVtxNum() * sizeof(SVec));
param_0->setCurrentVtxPos(transformedVtxPos);
}
#else
void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) const {
// NONMATCHING
}
#endif
/* 8032DDB8-8032DEBC 3286F8 0104+00 1/1 0/0 0/0 .text
* deformVtxNrm_F32__13J3DSkinDeformCFP15J3DVertexBuffer */
// J3DPSMulMtxVec regalloc
#ifdef NONMATCHING
void J3DSkinDeform::deformVtxNrm_F32(J3DVertexBuffer* param_0) const {
param_0->swapTransformedVtxNrm();
int nrmNum = param_0->getVertexData()->getNrmNum();
void* currentVtxNrm = param_0->getCurrentVtxNrm();
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
for (int i = 0; i < nrmNum; i++) {
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], ((Vec*)currentVtxNrm) + i, ((Vec*)transformedVtxNrm) + i);
}
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(Vec));
param_0->setCurrentVtxNrm(transformedVtxNrm);
}
#else
void J3DSkinDeform::deformVtxNrm_F32(J3DVertexBuffer* param_0) const {
// NONMATCHING
}
#endif
/* 8032DEBC-8032DFDC 3287FC 0120+00 1/1 0/0 0/0 .text
* deformVtxNrm_S16__13J3DSkinDeformCFP15J3DVertexBuffer */
// J3DPSMulMtxVec regalloc
#ifdef NONMATCHING
void J3DSkinDeform::deformVtxNrm_S16(J3DVertexBuffer* param_0) const {
u8 vtxNrmFrac = param_0->getVertexData()->getVtxNrmFrac();
J3DGQRSetup7(vtxNrmFrac, 7, vtxNrmFrac, 7);
param_0->swapTransformedVtxNrm();
int nrmNum = param_0->getVertexData()->getNrmNum();
void* currentVtxNrm = param_0->getCurrentVtxNrm();
void* transformedVtxNrm = param_0->getTransformedVtxNrm(0);
for (int i = 0; i < nrmNum; i++) {
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], ((SVec*)currentVtxNrm) + i, ((SVec*)transformedVtxNrm) + i);
}
DCStoreRange(param_0->getTransformedVtxNrm(0), param_0->getVertexData()->getNrmNum() * sizeof(SVec));
param_0->setCurrentVtxNrm(transformedVtxNrm);
}
#else
void J3DSkinDeform::deformVtxNrm_S16(J3DVertexBuffer* param_0) const {
// NONMATCHING
}
#endif
/* 8032DFDC-8032E064 32891C 0088+00 0/0 1/1 0/0 .text deform__13J3DSkinDeformFP8J3DModel
*/
void J3DSkinDeform::deform(J3DModel* param_0) {
if (param_0->checkFlag(4)) {
onFlag(2);
} else {
offFlag(2);
}
if (param_0->checkFlag(8)) {
onFlag(1);
} else {
offFlag(1);
}
deform(param_0->getVertexBuffer(), param_0->getMtxBuffer());
}
/* 8032E064-8032E180 3289A4 011C+00 1/0 0/0 0/0 .text
* deform__13J3DSkinDeformFP15J3DVertexBufferP12J3DMtxBuffer */
void J3DSkinDeform::deform(J3DVertexBuffer* param_0, J3DMtxBuffer* param_1) {
if (param_1->getJointTree()->checkFlag(0x100)) {
calcAnmInvJointMtx(param_1);
}
if (checkFlag(2) != 0) {
if (param_1->getJointTree()->checkFlag(0x100)) {
deformFastVtxPos_F32(param_0, param_1);
} else {
if (param_0->getVertexData()->getVtxPosType() == 4) {
deformVtxPos_F32(param_0, param_1);
} else {
deformVtxPos_S16(param_0, param_1);
}
}
}
if (checkFlag(1) != 0) {
if (param_1->getJointTree()->checkFlag(0x100)) {
deformFastVtxNrm_F32(param_0, param_1);
} else {
calcNrmMtx(param_1);
if (param_0->getVertexData()->getVtxNrmType() == 4) {
deformVtxNrm_F32(param_0);
} else {
deformVtxNrm_S16(param_0);
}
}
}
}
/* 8032E180-8032E1B0 328AC0 0030+00 0/0 1/1 0/0 .text calc__15J3DVtxColorCalcFP8J3DModel
*/
void J3DVtxColorCalc::calc(J3DModel* param_0) {
calc(param_0->getVertexBuffer());
}
/* 8032E1B0-8032E1F8 328AF0 0048+00 1/0 0/0 0/0 .text __dt__13J3DSkinDeformFv */
J3DSkinDeform::~J3DSkinDeform() {}
/* 803A2028-803A2028 02E688 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+243
View File
@@ -0,0 +1,243 @@
/**
* J3DDrawBuffer.cpp
*
*/
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/JKernel/JKRHeap.h"
void J3DDrawBuffer::calcZRatio() {
mZRatio = (mZFar - mZNear) / (f32)mBufSize;
}
void J3DDrawBuffer::initialize() {
mDrawType = DRAW_HEAD;
mSortType = SORT_MAT;
mZNear = 1.0f;
mZFar = 10000.0f;
mpZMtx = NULL;
mpCallBackPacket = NULL;
mBufSize = 0x20;
calcZRatio();
}
J3DError J3DDrawBuffer::allocBuffer(u32 bufSize) {
mpBuf = new (0x20) J3DPacket*[bufSize];
if (mpBuf == NULL)
return kJ3DError_Alloc;
mBufSize = bufSize;
frameInit();
calcZRatio();
return kJ3DError_Success;
}
J3DDrawBuffer::~J3DDrawBuffer() {
frameInit();
delete[] mpBuf;
mpBuf = NULL;
}
/* 80325068-8032509C 31F9A8 0034+00 2/2 1/1 0/0 .text frameInit__13J3DDrawBufferFv */
void J3DDrawBuffer::frameInit() {
u32 bufSize = mBufSize;
for (u32 i = 0; i < bufSize; i++)
mpBuf[i] = NULL;
mpCallBackPacket = NULL;
}
/* 8032509C-803251E4 31F9DC 0148+00 2/1 0/0 0/0 .text
* entryMatSort__13J3DDrawBufferFP12J3DMatPacket */
int J3DDrawBuffer::entryMatSort(J3DMatPacket* pMatPacket) {
pMatPacket->drawClear();
pMatPacket->getShapePacket()->drawClear();
if (pMatPacket->isChanged()) {
pMatPacket->setNextPacket(mpBuf[0]);
mpBuf[0] = pMatPacket;
return 1;
}
J3DTexture* texture = j3dSys.getTexture();
u32 hash;
u16 texNo = pMatPacket->getMaterial()->getTexNo(0);
if (texNo == 0xFFFF) {
hash = 0;
} else {
hash = ((u32)texture->getResTIMG(texNo) + texture->getResTIMG(texNo)->imageOffset) >> 5;
}
u32 slot = hash & (mBufSize - 1);
if (mpBuf[slot] == NULL) {
mpBuf[slot] = pMatPacket;
return 1;
} else {
for (J3DMatPacket* pkt = (J3DMatPacket*)mpBuf[slot]; pkt != NULL;
pkt = (J3DMatPacket*)pkt->getNextPacket())
{
if (pkt->isSame(pMatPacket)) {
pkt->addShapePacket(pMatPacket->getShapePacket());
return 0;
}
}
pMatPacket->setNextPacket(mpBuf[slot]);
mpBuf[slot] = pMatPacket;
return 1;
}
}
/* 803251E4-8032529C 31FB24 00B8+00 1/0 0/0 0/0 .text
* entryMatAnmSort__13J3DDrawBufferFP12J3DMatPacket */
int J3DDrawBuffer::entryMatAnmSort(J3DMatPacket* pMatPacket) {
J3DMaterialAnm* pMaterialAnm = pMatPacket->mpMaterialAnm;
u32 slot = (u32)pMaterialAnm & (mBufSize - 1);
if (pMaterialAnm == NULL) {
return entryMatSort(pMatPacket);
} else {
pMatPacket->drawClear();
pMatPacket->getShapePacket()->drawClear();
if (mpBuf[slot] == NULL) {
mpBuf[slot] = pMatPacket;
return 1;
} else {
for (J3DMatPacket* pkt = (J3DMatPacket*)mpBuf[slot]; pkt != NULL;
pkt = (J3DMatPacket*)pkt->getNextPacket())
{
if (pkt->mpMaterialAnm == pMaterialAnm) {
pkt->addShapePacket(pMatPacket->getShapePacket());
return 0;
}
}
pMatPacket->setNextPacket(mpBuf[slot]);
mpBuf[slot] = pMatPacket;
return 1;
}
}
}
/* 8032529C-803253B4 31FBDC 0118+00 1/0 0/0 0/0 .text entryZSort__13J3DDrawBufferFP12J3DMatPacket
*/
int J3DDrawBuffer::entryZSort(J3DMatPacket* i_packet) {
i_packet->drawClear();
i_packet->getShapePacket()->drawClear();
Vec tmp;
tmp.x = mpZMtx[0][3];
tmp.y = mpZMtx[1][3];
tmp.z = mpZMtx[2][3];
f32 value = -J3DCalcZValue(j3dSys.getViewMtx(), tmp);
u32 uvar4;
if (mZNear + mZRatio < value) {
if (mZFar - mZRatio > value) {
uvar4 = value / mZRatio;
} else {
uvar4 = mBufSize - 1;
}
} else {
uvar4 = 0;
}
u32 idx = (mBufSize - 1) - uvar4;
i_packet->setNextPacket(mpBuf[idx]);
mpBuf[idx] = i_packet;
return 1;
}
/* 803253B4-80325404 31FCF4 0050+00 1/0 0/0 0/0 .text
* entryModelSort__13J3DDrawBufferFP12J3DMatPacket */
int J3DDrawBuffer::entryModelSort(J3DMatPacket* i_packet) {
i_packet->drawClear();
i_packet->getShapePacket()->drawClear();
if (mpCallBackPacket != NULL) {
mpCallBackPacket->addChildPacket(i_packet);
return 1;
}
return 0;
}
/* 80325404-80325458 31FD44 0054+00 1/0 0/0 0/0 .text
* entryInvalidSort__13J3DDrawBufferFP12J3DMatPacket */
int J3DDrawBuffer::entryInvalidSort(J3DMatPacket* i_packet) {
i_packet->drawClear();
i_packet->getShapePacket()->drawClear();
if (mpCallBackPacket != NULL) {
mpCallBackPacket->addChildPacket(i_packet->getShapePacket());
return 1;
}
return 0;
}
int J3DDrawBuffer::entryNonSort(J3DMatPacket* i_packet) {
i_packet->drawClear();
i_packet->mpShapePacket->drawClear();
i_packet->setNextPacket(mpBuf[0]);
mpBuf[0] = i_packet;
return 1;
}
int J3DDrawBuffer::entryImm(J3DPacket* i_packet, u16 index) {
i_packet->setNextPacket(mpBuf[index]);
mpBuf[index] = i_packet;
return 1;
}
/* 803CEC30-803CEC78 02BD50 0048+00 0/1 1/1 0/0 .data sortFuncTable__13J3DDrawBuffer */
sortFunc J3DDrawBuffer::sortFuncTable[6] = {
&J3DDrawBuffer::entryMatSort, &J3DDrawBuffer::entryMatAnmSort, &J3DDrawBuffer::entryZSort,
&J3DDrawBuffer::entryModelSort, &J3DDrawBuffer::entryInvalidSort, &J3DDrawBuffer::entryNonSort,
};
/* 803CEC90-803CECA8 02BDB0 0018+00 1/2 0/0 0/0 .data drawFuncTable__13J3DDrawBuffer */
drawFunc J3DDrawBuffer::drawFuncTable[2] = {
&J3DDrawBuffer::drawHead,
&J3DDrawBuffer::drawTail,
};
/* 803254AC-80325500 31FDEC 0054+00 0/0 2/2 0/0 .text draw__13J3DDrawBufferCFv */
void J3DDrawBuffer::draw() const {
drawFunc func = drawFuncTable[mDrawType];
(this->*func)();
}
/* 80325500-80325578 31FE40 0078+00 1/0 0/0 0/0 .text drawHead__13J3DDrawBufferCFv */
void J3DDrawBuffer::drawHead() const {
u32 size = mBufSize;
J3DPacket** buf = mpBuf;
for (u32 i = 0; i < size; i++) {
for (J3DPacket* packet = buf[i]; packet != NULL; packet = packet->getNextPacket()) {
packet->draw();
}
}
}
/* 80325578-803255F0 31FEB8 0078+00 1/0 0/0 0/0 .text drawTail__13J3DDrawBufferCFv */
void J3DDrawBuffer::drawTail() const {
int num = mBufSize - 1;
for (int i = num; i >= 0; i--) {
for (J3DPacket* packet = mpBuf[i]; packet != NULL; packet = packet->getNextPacket()) {
packet->draw();
}
}
}
/* ############################################################################################## */
/* 804515E0-804515E8 000AE0 0004+04 0/0 1/1 0/0 .sbss entryNum__13J3DDrawBuffer */
int J3DDrawBuffer::entryNum;
+665
View File
@@ -0,0 +1,665 @@
//
// J3DGD
//
#include "JSystem/J3DGraphBase/J3DGD.h"
#include "dolphin/gd.h"
#include "dolphin/os.h"
/* 8030D098-8030D210 3079D8 0178+00 0/0 1/1 0/0 .text J3DGDSetGenMode__FUcUcUcUc11_GXCullMode */
void J3DGDSetGenMode(u8 texGenNum, u8 colorChanNum, u8 tevStageNum, u8 indTexStageNum,
GXCullMode cullMode) {
GDOverflowCheck(0xa);
J3DGDWriteBPCmd(0xfe07fc3f);
static u8 cm2hw[4] = {0, 2, 1, 3};
J3DGDWriteBPCmd(texGenNum | colorChanNum << 4 | (tevStageNum - 1) << 0xa |
cm2hw[cullMode] << 0xe | indTexStageNum << 0x10);
}
/* 8030D210-8030D364 307B50 0154+00 0/0 1/1 0/0 .text J3DGDSetGenMode_3Param__FUcUcUc */
void J3DGDSetGenMode_3Param(u8 texGenNum, u8 tevStageNum, u8 indTexStageNum) {
GDOverflowCheck(0xa);
J3DGDWriteBPCmd(0xfe073c0f);
J3DGDWriteBPCmd(texGenNum | (tevStageNum - 1) << 0xa | indTexStageNum << 0x10);
}
/* 8030D364-8030D65C 307CA4 02F8+00 0/0 1/1 0/0 .text J3DGDSetLightAttn__F10_GXLightIDffffff */
void J3DGDSetLightAttn(GXLightID id, f32 a0, f32 a1, f32 a2, f32 k0, f32 k1, f32 k2) {
J3DGDWriteXFCmdHdr(0x0604 + __GDLightID2Offset(id), 6);
J3DGDWrite_f32(a0);
J3DGDWrite_f32(a1);
J3DGDWrite_f32(a2);
J3DGDWrite_f32(k0);
J3DGDWrite_f32(k1);
J3DGDWrite_f32(k2);
}
/* 8030D65C-8030D76C 307F9C 0110+00 0/0 1/1 0/0 .text J3DGDSetLightColor__F10_GXLightID8_GXColor
*/
void J3DGDSetLightColor(GXLightID id, GXColor color) {
J3DGDWriteXFCmd(0x0603 + __GDLightID2Offset(id),
(color.r << 24) | (color.g << 16) | (color.b << 8) | (color.a << 0));
}
/* 8030D76C-8030D938 3080AC 01CC+00 0/0 1/1 0/0 .text J3DGDSetLightPos__F10_GXLightIDfff
*/
void J3DGDSetLightPos(GXLightID id, f32 x, f32 y, f32 z) {
J3DGDWriteXFCmdHdr(0x060A + __GDLightID2Offset(id), 3);
J3DGDWrite_f32(x);
J3DGDWrite_f32(y);
J3DGDWrite_f32(z);
}
/* 8030D938-8030DB04 308278 01CC+00 0/0 1/1 0/0 .text J3DGDSetLightDir__F10_GXLightIDfff
*/
void J3DGDSetLightDir(GXLightID id, f32 x, f32 y, f32 z) {
J3DGDWriteXFCmdHdr(0x060D + __GDLightID2Offset(id), 3);
J3DGDWrite_f32(x);
J3DGDWrite_f32(y);
J3DGDWrite_f32(z);
}
/* 8030DB04-8030E064 308444 0560+00 1/0 1/1 0/0 .text
* J3DGDSetVtxAttrFmtv__F9_GXVtxFmtPC17_GXVtxAttrFmtListb */
void J3DGDSetVtxAttrFmtv(GXVtxFmt fmt, GXVtxAttrFmtList const* fmtList, bool param_2) {
u32 pos_cnt = GX_POS_XYZ;
u32 pos_type = GX_F32;
u32 pos_shift = 0;
u32 nrm_cnt = GX_NRM_XYZ;
u32 nrm_type = GX_F32;
u32 local_34 = 0;
u32 clr0_cnt = GX_CLR_RGBA;
u32 clr0_type = GX_RGBA8;
u32 clr1_cnt = GX_CLR_RGBA;
u32 clr1_type = GX_RGBA8;
u32 tex0_cnt = GX_TEX_ST;
u32 tex0_type = GX_F32;
u32 tex0_shift = 0;
u32 tex1_cnt = GX_TEX_ST;
u32 tex1_type = GX_F32;
u32 tex1_shift = 0;
u32 tex2_cnt = GX_TEX_ST;
u32 tex2_type = GX_F32;
u32 tex2_shift = 0;
u32 tex3_cnt = GX_TEX_ST;
u32 tex3_type = GX_F32;
u32 tex3_shift = 0;
u32 tex4_cnt = GX_TEX_ST;
u32 tex4_type = GX_F32;
u32 tex4_shift = 0;
u32 tex5_cnt = GX_TEX_ST;
u32 tex5_type = GX_F32;
u32 tex5_shift = 0;
u32 tex6_cnt = GX_TEX_ST;
u32 tex6_type = GX_F32;
u32 tex6_shift = 0;
u32 tex7_cnt = GX_TEX_ST;
u32 tex7_type = GX_F32;
u32 tex7_shift = 0;
for (; fmtList->mAttrib != GX_VA_NULL; fmtList++) {
switch (fmtList->mAttrib) {
case GX_VA_POS:
pos_cnt = fmtList->mCompCnt;
pos_type = fmtList->mCompType;
pos_shift = fmtList->mCompShift;
break;
case GX_VA_NRM:
case GX_VA_NBT:
nrm_type = fmtList->mCompType;
if (fmtList->mCompCnt == GX_NRM_NBT3) {
nrm_cnt = GX_NRM_NBT;
local_34 = 1;
} else {
if (param_2) {
nrm_cnt = GX_NRM_NBT;
} else {
nrm_cnt = fmtList->mCompCnt;
}
local_34 = 0;
}
break;
case GX_VA_CLR0:
clr0_cnt = fmtList->mCompCnt;
clr0_type = fmtList->mCompType;
break;
case GX_VA_CLR1:
clr1_cnt = fmtList->mCompCnt;
clr1_type = fmtList->mCompType;
break;
case GX_VA_TEX0:
tex0_cnt = fmtList->mCompCnt;
tex0_type = fmtList->mCompType;
tex0_shift = fmtList->mCompShift;
break;
case GX_VA_TEX1:
tex1_cnt = fmtList->mCompCnt;
tex1_type = fmtList->mCompType;
tex1_shift = fmtList->mCompShift;
break;
case GX_VA_TEX2:
tex2_cnt = fmtList->mCompCnt;
tex2_type = fmtList->mCompType;
tex2_shift = fmtList->mCompShift;
break;
case GX_VA_TEX3:
tex3_cnt = fmtList->mCompCnt;
tex3_type = fmtList->mCompType;
tex3_shift = fmtList->mCompShift;
break;
case GX_VA_TEX4:
tex4_cnt = fmtList->mCompCnt;
tex4_type = fmtList->mCompType;
tex4_shift = fmtList->mCompShift;
break;
case GX_VA_TEX5:
tex5_cnt = fmtList->mCompCnt;
tex5_type = fmtList->mCompType;
tex5_shift = fmtList->mCompShift;
break;
case GX_VA_TEX6:
tex6_cnt = fmtList->mCompCnt;
tex6_type = fmtList->mCompType;
tex6_shift = fmtList->mCompShift;
break;
case GX_VA_TEX7:
tex7_cnt = fmtList->mCompCnt;
tex7_type = fmtList->mCompType;
tex7_shift = fmtList->mCompShift;
break;
}
}
GDOverflowCheck(0x12);
J3DGDWriteCPCmd(GX_CP_REG_VAT_GRP0 + fmt,
pos_cnt | pos_type << 1 | pos_shift << 4 | nrm_cnt << 9 | nrm_type << 0xa |
clr0_cnt << 0xd | clr0_type << 0xe | clr1_cnt << 0x11 | clr1_type << 0x12 |
tex0_cnt << 0x15 | tex0_type << 0x16 | tex0_shift << 0x19 | 0x40000000 |
local_34 << 0x1f);
J3DGDWriteCPCmd(GX_CP_REG_VAT_GRP1 + fmt,
tex1_cnt | tex1_type << 1 | tex1_shift << 4 | tex2_cnt << 9 | tex2_type << 0xa |
tex2_shift << 0xd | tex3_cnt << 0x12 | tex3_type << 0x13 |
tex3_shift << 0x16 | tex4_cnt << 0x1b | tex4_type << 0x1c | 0x80000000);
J3DGDWriteCPCmd(GX_CP_REG_VAT_GRP2 + fmt,
tex4_shift | tex5_cnt << 5 | tex5_type << 6 | tex5_shift << 9 |
tex6_cnt << 0xe | tex6_type << 0xf | tex6_shift << 0x12 | tex7_cnt << 0x17 |
tex7_type << 0x18 | tex7_shift << 0x1b);
}
/* 8030E064-8030E234 3089A4 01D0+00 1/0 1/1 0/0 .text
* J3DGDSetTexCoordGen__F13_GXTexGenType12_GXTexGenSrc */
void J3DGDSetTexCoordGen(GXTexGenType texGenType, GXTexGenSrc texGenSrc) {
u32 input_form = 0;
u32 proj_type = 0;
u32 src_row = 5;
u32 bump_src_tex = 5;
u32 bump_src_light = 0;
u32 texgen_type;
switch (texGenSrc) {
case GX_TG_POS:
src_row = 0;
input_form = 1;
break;
case GX_TG_NRM:
src_row = 1;
input_form = 1;
break;
case GX_TG_BINRM:
src_row = 3;
input_form = 1;
break;
case GX_TG_TANGENT:
src_row = 4;
input_form = 1;
break;
case GX_TG_COLOR0:
src_row = 2;
break;
case GX_TG_COLOR1:
src_row = 2;
break;
case GX_TG_TEX0:
src_row = 5;
break;
case GX_TG_TEX1:
src_row = 6;
break;
case GX_TG_TEX2:
src_row = 7;
break;
case GX_TG_TEX3:
src_row = 8;
break;
case GX_TG_TEX4:
src_row = 9;
break;
case GX_TG_TEX5:
src_row = 10;
break;
case GX_TG_TEX6:
src_row = 11;
break;
case GX_TG_TEX7:
src_row = 12;
break;
case GX_TG_TEXCOORD0:
bump_src_tex = 0;
break;
case GX_TG_TEXCOORD1:
bump_src_tex = 1;
break;
case GX_TG_TEXCOORD2:
bump_src_tex = 2;
break;
case GX_TG_TEXCOORD3:
bump_src_tex = 3;
break;
case GX_TG_TEXCOORD4:
bump_src_tex = 4;
break;
case GX_TG_TEXCOORD5:
bump_src_tex = 5;
break;
case GX_TG_TEXCOORD6:
bump_src_tex = 6;
break;
}
switch (texGenType) {
case GX_TG_MTX2x4:
texgen_type = 0;
break;
case GX_TG_MTX3x4:
texgen_type = 0;
proj_type = 1;
break;
case GX_TG_BUMP0:
case GX_TG_BUMP1:
case GX_TG_BUMP2:
case GX_TG_BUMP3:
case GX_TG_BUMP4:
case GX_TG_BUMP5:
case GX_TG_BUMP6:
case GX_TG_BUMP7:
texgen_type = 1;
bump_src_light = texGenType - 2;
break;
case GX_TG_SRTG:
if (texGenSrc == GX_TG_COLOR0) {
texgen_type = 2;
} else {
texgen_type = 3;
}
break;
}
J3DGDWrite_u32(
proj_type << (31 - GX_XF_TEX_PROJTYPE_END) | input_form << (31 - GX_XF_TEX_INPUTFORM_END) |
texgen_type << (31 - GX_XF_TEX_TEXGENTYPE_END) | src_row << (31 - GX_XF_TEX_SRCROW_END) |
bump_src_tex << (31 - GX_XF_TEX_BUMPSRCTEX_END) |
bump_src_light << (31 - GX_XF_TEX_BUMPSRCLIGHT_END));
}
/* 8030E234-8030E438 308B74 0204+00 0/0 16/16 0/0 .text
* J3DGDSetTexCoordScale2__F13_GXTexCoordIDUsUcUcUsUcUc */
void J3DGDSetTexCoordScale2(GXTexCoordID param_0, u16 param_1, u8 param_2, u8 param_3, u16 param_4,
u8 param_5, u8 param_6) {
GDOverflowCheck(0xf);
J3DGDWriteBPCmd(0xfe03ffff);
J3DGDWriteBPCmd((param_1 - 1) | param_2 << 0x10 | param_3 << 0x11 |
(param_0 * 2 + 0x30) << 0x18);
J3DGDWriteBPCmd((param_4 - 1) | param_5 << 0x10 | param_6 << 0x11 |
(param_0 * 2 + 0x31) << 0x18);
}
/* 8045090C-80450914 00038C 0008+00 1/1 0/0 0/0 .sdata J3DGDTexMode0Ids */
static u8 J3DGDTexMode0Ids[8] = {
0x80, 0x81, 0x82, 0x83, 0xA0, 0xA1, 0xA2, 0xA3,
};
/* 80450914-8045091C 000394 0008+00 1/1 0/0 0/0 .sdata J3DGDTexMode1Ids */
static u8 J3DGDTexMode1Ids[8] = {
0x84, 0x85, 0x86, 0x87, 0xA4, 0xA5, 0xA6, 0xA7,
};
/* 8045091C-80450924 00039C 0008+00 1/1 0/0 0/0 .sdata J3DGDTexImage0Ids */
static u8 J3DGDTexImage0Ids[8] = {
0x88, 0x89, 0x8A, 0x8B, 0xA8, 0xA9, 0xAA, 0xAB,
};
/* 80450924-8045092C 0003A4 0008+00 2/2 0/0 0/0 .sdata J3DGDTexImage3Ids */
static u8 J3DGDTexImage3Ids[8] = {
0x94, 0x95, 0x96, 0x97, 0xB4, 0xB5, 0xB6, 0xB7,
};
/* 8045092C-80450934 0003AC 0008+00 1/1 0/0 0/0 .sdata J3DGDTexTlutIds */
static u8 J3DGDTexTlutIds[8] = {
0x98, 0x99, 0x9A, 0x9B, 0xB8, 0xB9, 0xBA, 0xBB,
};
/* 80450934-8045093C 0003B4 0006+02 1/1 0/0 0/0 .sdata GX2HWFiltConv */
static u8 GX2HWFiltConv[6] = {
0x00, 0x04, 0x01, 0x05, 0x02, 0x06,
};
/* 8030E438-8030E5D4 308D78 019C+00 0/0 1/1 0/0 .text
* J3DGDSetTexLookupMode__F11_GXTexMapID14_GXTexWrapMode14_GXTexWrapMode12_GXTexFilter12_GXTexFilterfffUcUc13_GXAnisotropy
*/
void J3DGDSetTexLookupMode(GXTexMapID param_0, GXTexWrapMode param_1, GXTexWrapMode param_2,
GXTexFilter param_3, GXTexFilter param_4, f32 param_5, f32 param_6,
f32 param_7, u8 param_8, u8 param_9, GXAnisotropy param_10) {
J3DGDWriteBPCmd(param_1 | param_2 << 2 | (param_4 == GX_LINEAR) << 4 |
GX2HWFiltConv[param_3] << 5 | (param_9 == 0) << 8 |
((int)(param_7 * 32.0f) & 0xff) << 9 | param_10 << 0x13 | param_8 << 0x15 |
J3DGDTexMode0Ids[param_0] << 0x18);
J3DGDWriteBPCmd(((int)(param_5 * 16.0f) & 0xff) | ((int)(param_6 * 16.0f) & 0xff) << 8 |
J3DGDTexMode1Ids[param_0] << 0x18);
}
/* 8030E5D4-8030E67C 308F14 00A8+00 0/0 1/1 0/0 .text
* J3DGDSetTexImgAttr__F11_GXTexMapIDUsUs9_GXTexFmt */
void J3DGDSetTexImgAttr(GXTexMapID param_0, u16 param_1, u16 param_2, GXTexFmt param_3) {
J3DGDWriteBPCmd((param_1 - 1) | (param_2 - 1) << 0xa | param_3 << 0x14 |
J3DGDTexImage0Ids[param_0] << 0x18);
}
/* 8030E67C-8030E70C 308FBC 0090+00 0/0 1/1 0/0 .text J3DGDSetTexImgPtr__F11_GXTexMapIDPv
*/
void J3DGDSetTexImgPtr(GXTexMapID param_0, void* param_1) {
J3DGDWriteBPCmd(OSCachedToPhysical(param_1) >> 5 | J3DGDTexImage3Ids[param_0] << 0x18);
}
/* 8030E70C-8030E7E0 30904C 00D4+00 0/0 1/1 0/0 .text J3DGDSetTexImgPtrRaw__F11_GXTexMapIDUl */
void J3DGDSetTexImgPtrRaw(GXTexMapID param_0, u32 param_1) {
GDOverflowCheck(5);
J3DGDWriteBPCmd(param_1 | J3DGDTexImage3Ids[param_0] << 0x18);
}
/* 8030E7E0-8030E878 309120 0098+00 0/0 1/1 0/0 .text
* J3DGDSetTexTlut__F11_GXTexMapIDUl10_GXTlutFmt */
void J3DGDSetTexTlut(GXTexMapID param_0, u32 param_1, GXTlutFmt param_2) {
J3DGDWriteBPCmd((param_1 - 0x80000) >> 9 | param_2 << 0xa | J3DGDTexTlutIds[param_0] << 0x18);
}
/* 8030E878-8030EB30 3091B8 02B8+00 0/0 1/1 0/0 .text J3DGDLoadTlut__FPvUl11_GXTlutSize
*/
void J3DGDLoadTlut(void* param_0, u32 param_1, GXTlutSize param_2) {
J3DGDWriteBPCmd(0xfeffff00);
J3DGDWriteBPCmd(0x0f000000);
J3DGDWriteBPCmd(OSCachedToPhysical(param_0) >> 5 | 0x64000000);
J3DGDWriteBPCmd((param_1 - 0x80000) >> 9 | param_2 << 0xa | 0x65000000);
J3DGDWriteBPCmd(0xfeffff00);
J3DGDWriteBPCmd(0x0f000000);
}
/* 8030EB30-8030EE10 309470 02E0+00 0/0 2/2 0/0 .text J3DGDSetIndTexMtx__F14_GXIndTexMtxIDPA3_fSc
*/
void J3DGDSetIndTexMtx(GXIndTexMtxID id, Mtx3P mtx, s8 exp) {
s32 mtx32[6];
u32 idx;
switch (id) {
case GX_ITM_0:
case GX_ITM_1:
case GX_ITM_2:
idx = (u32)(id - GX_ITM_0);
break;
case GX_ITM_S0:
case GX_ITM_S1:
case GX_ITM_S2:
idx = (u32)(id - GX_ITM_S0);
break;
case GX_ITM_T0:
case GX_ITM_T1:
case GX_ITM_T2:
idx = (u32)(id - GX_ITM_T0);
break;
default:
idx = 0;
break;
}
exp += 17;
mtx32[0] = (s32)(mtx[0][0] * 1024.0f) & 0x7FF;
mtx32[1] = (s32)(mtx[1][0] * 1024.0f) & 0x7FF;
mtx32[2] = (s32)(mtx[0][1] * 1024.0f) & 0x7FF;
mtx32[3] = (s32)(mtx[1][1] * 1024.0f) & 0x7FF;
mtx32[4] = (s32)(mtx[0][2] * 1024.0f) & 0x7FF;
mtx32[5] = (s32)(mtx[1][2] * 1024.0f) & 0x7FF;
GDOverflowCheck(15);
J3DGDWriteBPCmd((mtx32[0] << 0) | (mtx32[1] << 11) | (((exp >> 0) & 0x03) << 22) |
(0x06 + idx * 3) << 24);
J3DGDWriteBPCmd((mtx32[2] << 0) | (mtx32[3] << 11) | (((exp >> 2) & 0x03) << 22) |
(0x07 + idx * 3) << 24);
J3DGDWriteBPCmd((mtx32[4] << 0) | (mtx32[5] << 11) | (((exp >> 4) & 0x03) << 22) |
(0x08 + idx * 3) << 24);
}
/* 8030EE10-8030EF08 309750 00F8+00 0/0 2/2 0/0 .text
* J3DGDSetIndTexCoordScale__F16_GXIndTexStageID14_GXIndTexScale14_GXIndTexScale14_GXIndTexScale14_GXIndTexScale
*/
void J3DGDSetIndTexCoordScale(GXIndTexStageID stage, GXIndTexScale scale0, GXIndTexScale scale1,
GXIndTexScale scale2, GXIndTexScale scale3) {
GDOverflowCheck(5);
J3DGDWriteBPCmd(scale0 | scale1 << 4 | scale2 << 8 | scale3 << 0xc |
((stage >> 1) + GX_BP_REG_RAS1_SS0) << 0x18);
}
/* 8030EF08-8030F108 309848 0200+00 0/0 2/2 0/0 .text
* J3DGDSetIndTexOrder__FUl13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID13_GXTexCoordID11_GXTexMapID
*/
void J3DGDSetIndTexOrder(u32 count, GXTexCoordID coord0, GXTexMapID map0, GXTexCoordID coord1,
GXTexMapID map1, GXTexCoordID coord2, GXTexMapID map2, GXTexCoordID coord3,
GXTexMapID map3) {
GDOverflowCheck(0xa);
J3DGDWriteBPCmd(map0 & 7 | (coord0 & 7) << 3 | (map1 & 7) << 6 | (coord1 & 7) << 9 |
(map2 & 7) << 0xc | (coord2 & 7) << 0xf | (map3 & 7) << 0x12 |
(coord3 & 7) << 0x15 | GX_BP_REG_RAS1_IREF << 0x18);
u32 imask = 0;
for (u32 i = 0; i < count; i++) {
switch (i) {
case 0:
imask |= 1 << (map0 & 7);
break;
case 1:
imask |= 1 << (map1 & 7);
break;
case 2:
imask |= 1 << (map2 & 7);
break;
case 3:
imask |= 1 << (map3 & 7);
break;
}
}
J3DGDWriteBPCmd(imask | GX_BP_REG_INDIMASK << 0x18);
}
/* 8030F108-8030F294 309A48 018C+00 0/0 9/9 0/0 .text
* J3DGDSetTevOrder__F13_GXTevStageID13_GXTexCoordID11_GXTexMapID12_GXChannelID13_GXTexCoordID11_GXTexMapID12_GXChannelID
*/
void J3DGDSetTevOrder(GXTevStageID stage, GXTexCoordID coord0, GXTexMapID map0,
GXChannelID channel0, GXTexCoordID coord1, GXTexMapID map1,
GXChannelID channel1) {
coord0 = coord0 >= GX_MAXCOORD ? GX_TEXCOORD0 : coord0;
coord1 = coord1 >= GX_MAXCOORD ? GX_TEXCOORD0 : coord1;
GDOverflowCheck(5);
static u8 c2r[32] = {0, 1, 0, 1, 0, 1, 7, 5, 6, 0, 0, 0, 0, 0, 0, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
J3DGDWriteBPCmd((map0 & 7) | coord0 << 3 |
(map0 != GX_TEXMAP_NULL && !(map0 & GX_TEXMAP_DISABLE)) << 6 |
c2r[channel0 & 0xf] << 7 | (map1 & 7) << 0xc | coord1 << 0xf |
(map1 != GX_TEXMAP_NULL && !(map1 & GX_TEXMAP_DISABLE)) << 0x12 |
c2r[channel1 & 0xf] << 0x13 | (stage / 2 + GX_BP_REG_RAS1_TREF0) << 0x18);
}
/* 8030F294-8030F3FC 309BD4 0168+00 0/0 11/11 0/0 .text
* J3DGDSetTevKColor__F14_GXTevKColorID8_GXColor */
void J3DGDSetTevKColor(GXTevKColorID id, GXColor color) {
u32 cmd0 = color.r | color.a << 0xc | 0x800000 | (id * 2 + GX_BP_REG_TEVREG0LO) << 0x18;
u32 cmd1 = color.b | color.g << 0xc | 0x800000 | (id * 2 + GX_BP_REG_TEVREG0HI) << 0x18;
GDOverflowCheck(0xa);
J3DGDWriteBPCmd(cmd0);
J3DGDWriteBPCmd(cmd1);
}
/* 8030F3FC-8030F630 309D3C 0234+00 0/0 11/11 0/0 .text
* J3DGDSetTevColorS10__F11_GXTevRegID11_GXColorS10 */
void J3DGDSetTevColorS10(GXTevRegID id, GXColorS10 color) {
u32 cmd0 =
(color.r & 0x7ff) | (color.a & 0x7ff) << 0xc | (id * 2 + GX_BP_REG_TEVREG0LO) << 0x18;
u32 cmd1 =
(color.b & 0x7ff) | (color.g & 0x7ff) << 0xc | (id * 2 + GX_BP_REG_TEVREG0HI) << 0x18;
GDOverflowCheck(0x14);
J3DGDWriteBPCmd(cmd0);
J3DGDWriteBPCmd(cmd1);
J3DGDWriteBPCmd(cmd1);
J3DGDWriteBPCmd(cmd1);
}
/* 8030F630-8030F994 309F70 0364+00 0/0 3/3 0/0 .text J3DGDSetFog__F10_GXFogTypeffff8_GXColor */
void J3DGDSetFog(GXFogType fogType, f32 param_1, f32 param_2, f32 nearZ, f32 farZ, GXColor color) {
f32 fvar1, fvar2, fvar3;
if (farZ == nearZ || param_2 == param_1) {
fvar1 = 0.0f;
fvar2 = 0.5f;
fvar3 = 0.0f;
} else {
fvar1 = (farZ * nearZ) / ((farZ - nearZ) * (param_2 - param_1));
fvar2 = farZ / (farZ - nearZ);
fvar3 = param_1 / (param_2 - param_1);
}
u32 shift = 1;
for (; fvar2 > 1.0; fvar2 *= 0.5f) {
shift++;
}
for (; fvar2 > 0.0f && fvar2 < 0.5; fvar2 *= 2.0f) {
shift--;
}
f32 fvar4 = (fvar1 / (1 << shift));
u32 param1 = fvar2 * 8388638.0f;
u32 param0 = *(u32*)&fvar4;
u32 param3 = *(u32*)&fvar3;
J3DGDWriteBPCmd(param0 >> 0xc | GX_BP_REG_FOGPARAM0 << 0x18);
J3DGDWriteBPCmd(param1 | GX_BP_REG_FOGPARAM1 << 0x18);
J3DGDWriteBPCmd(shift | GX_BP_REG_FOGPARAM2 << 0x18);
J3DGDWriteBPCmd(param3 >> 0xc | fogType << 0x15 | GX_BP_REG_FOGPARAM3 << 0x18);
J3DGDWriteBPCmd(color.b | color.g << 8 | color.r << 0x10 | GX_BP_REG_FOGCOLOR << 0x18);
}
/* 8030F994-8030FAE0 30A2D4 014C+00 0/0 3/3 0/0 .text J3DGDSetFogRangeAdj__FUcUsP14_GXFogAdjTable
*/
void J3DGDSetFogRangeAdj(u8 param_0, u16 param_1, GXFogAdjTable* table) {
if (param_0 != 0) {
for (int i = 0; i < 0xa; i += 2) {
J3DGDWriteBPCmd((i / 2 + GX_BP_REG_FOGRANGEK0) << 0x18 | table->fogVals[i + 1] << 0xc |
table->fogVals[i]);
}
}
u32 cmd = GX_BP_REG_FOGRANGE << 0x18 | (param_1 + 0x156) | param_0 << 0xa;
J3DGDWriteBPCmd(cmd);
}
/* 8030FAE0-8030FB60 30A420 0080+00 0/0 10/10 0/0 .text J3DFifoLoadPosMtxImm__FPA4_fUl */
void J3DFifoLoadPosMtxImm(MtxP mtx, u32 addr) {
J3DFifoWriteXFCmdHdr((addr & 0x3fff) << 2, 0xc);
J3DGXCmd1f32ptr(&mtx[0][0]);
J3DGXCmd1f32ptr(&mtx[0][1]);
J3DGXCmd1f32ptr(&mtx[0][2]);
J3DGXCmd1f32ptr(&mtx[0][3]);
J3DGXCmd1f32ptr(&mtx[1][0]);
J3DGXCmd1f32ptr(&mtx[1][1]);
J3DGXCmd1f32ptr(&mtx[1][2]);
J3DGXCmd1f32ptr(&mtx[1][3]);
J3DGXCmd1f32ptr(&mtx[2][0]);
J3DGXCmd1f32ptr(&mtx[2][1]);
J3DGXCmd1f32ptr(&mtx[2][2]);
J3DGXCmd1f32ptr(&mtx[2][3]);
}
/* 8030FB60-8030FBCC 30A4A0 006C+00 0/0 9/9 0/0 .text J3DFifoLoadNrmMtxImm__FPA4_fUl */
void J3DFifoLoadNrmMtxImm(MtxP mtx, u32 addr) {
J3DFifoWriteXFCmdHdr(addr * 3 + 0x400, 9);
J3DGXCmd1f32ptr(&mtx[0][0]);
J3DGXCmd1f32ptr(&mtx[0][1]);
J3DGXCmd1f32ptr(&mtx[0][2]);
J3DGXCmd1f32ptr(&mtx[1][0]);
J3DGXCmd1f32ptr(&mtx[1][1]);
J3DGXCmd1f32ptr(&mtx[1][2]);
J3DGXCmd1f32ptr(&mtx[2][0]);
J3DGXCmd1f32ptr(&mtx[2][1]);
J3DGXCmd1f32ptr(&mtx[2][2]);
}
/* 8030FBCC-8030FC38 30A50C 006C+00 0/0 3/3 0/0 .text J3DFifoLoadNrmMtxImm3x3__FPA3_fUl
*/
void J3DFifoLoadNrmMtxImm3x3(Mtx3P mtx, u32 addr) {
J3DFifoWriteXFCmdHdr(addr * 3 + 0x400, 9);
J3DGXCmd1f32ptr(&mtx[0][0]);
J3DGXCmd1f32ptr(&mtx[0][1]);
J3DGXCmd1f32ptr(&mtx[0][2]);
J3DGXCmd1f32ptr(&mtx[1][0]);
J3DGXCmd1f32ptr(&mtx[1][1]);
J3DGXCmd1f32ptr(&mtx[1][2]);
J3DGXCmd1f32ptr(&mtx[2][0]);
J3DGXCmd1f32ptr(&mtx[2][1]);
J3DGXCmd1f32ptr(&mtx[2][2]);
}
/* 8030FC38-8030FCD0 30A578 0098+00 0/0 4/4 0/0 .text J3DFifoLoadNrmMtxToTexMtx__FPA4_fUl
*/
void J3DFifoLoadNrmMtxToTexMtx(MtxP mtx, u32 addr) {
J3DFifoWriteXFCmdHdr((addr & 0x3fff) << 2, 0xc);
J3DGXCmd1f32ptr(&mtx[0][0]);
J3DGXCmd1f32ptr(&mtx[0][1]);
J3DGXCmd1f32ptr(&mtx[0][2]);
J3DGXCmd1f32(0.0f);
J3DGXCmd1f32ptr(&mtx[1][0]);
J3DGXCmd1f32ptr(&mtx[1][1]);
J3DGXCmd1f32ptr(&mtx[1][2]);
J3DGXCmd1f32(0.0f);
J3DGXCmd1f32ptr(&mtx[2][0]);
J3DGXCmd1f32ptr(&mtx[2][1]);
J3DGXCmd1f32ptr(&mtx[2][2]);
J3DGXCmd1f32(0.0f);
}
/* 8030FCD0-8030FD68 30A610 0098+00 0/0 2/2 0/0 .text J3DFifoLoadNrmMtxToTexMtx3x3__FPA3_fUl */
void J3DFifoLoadNrmMtxToTexMtx3x3(Mtx3P mtx, u32 addr) {
J3DFifoWriteXFCmdHdr((addr & 0x3fff) << 2, 0xc);
J3DGXCmd1f32ptr(&mtx[0][0]);
J3DGXCmd1f32ptr(&mtx[0][1]);
J3DGXCmd1f32ptr(&mtx[0][2]);
J3DGXCmd1f32(0.0f);
J3DGXCmd1f32ptr(&mtx[1][0]);
J3DGXCmd1f32ptr(&mtx[1][1]);
J3DGXCmd1f32ptr(&mtx[1][2]);
J3DGXCmd1f32(0.0f);
J3DGXCmd1f32ptr(&mtx[2][0]);
J3DGXCmd1f32ptr(&mtx[2][1]);
J3DGXCmd1f32ptr(&mtx[2][2]);
J3DGXCmd1f32(0.0f);
}
/* 8045093C-80450944 0003BC 0008+00 1/1 0/0 0/0 .sdata J3DTexImage1Ids */
static u8 J3DTexImage1Ids[8] = {
0x8C, 0x8D, 0x8E, 0x8F, 0xAC, 0xAD, 0xAE, 0xAF,
};
/* 80450944-8045094C 0003C4 0008+00 1/1 0/0 0/0 .sdata J3DTexImage2Ids */
static u8 J3DTexImage2Ids[8] = {
0x90, 0x91, 0x92, 0x93, 0xB0, 0xB1, 0xB2, 0xB3,
};
/* 8030FD68-8030FDE8 30A6A8 0080+00 0/0 1/1 0/0 .text
* J3DFifoLoadTexCached__F11_GXTexMapIDUl15_GXTexCacheSizeUl15_GXTexCacheSize */
void J3DFifoLoadTexCached(GXTexMapID id, u32 param_1, GXTexCacheSize param_2, u32 param_3,
GXTexCacheSize param_4) {
J3DFifoLoadBPCmd(param_1 >> 5 | (param_2 + 3) << 0xf | (param_2 + 3) << 0x12 |
J3DTexImage1Ids[id] << 0x18);
if (param_4 != GX_TEXCACHE_NONE && param_3 < 0x100000) {
J3DFifoLoadBPCmd(param_3 >> 5 | (param_4 + 3) << 0xf | (param_4 + 3) << 0x12 |
J3DTexImage2Ids[id] << 0x18);
}
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+403
View File
@@ -0,0 +1,403 @@
#include "JSystem/J3DGraphBase/J3DPacket.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/J3DGraphBase/J3DDrawBuffer.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dolphin/os/OSCache.h"
#include "dolphin/os/OSInterrupt.h"
#include "string.h"
J3DError J3DDisplayListObj::newDisplayList(u32 capacity) {
mCapacity = ALIGN_NEXT(capacity, 0x20);
mpData[0] = new (0x20) char[mCapacity];
mpData[1] = new (0x20) char[mCapacity];
mSize = 0;
if (mpData[0] == NULL || mpData[1] == NULL)
return kJ3DError_Alloc;
return kJ3DError_Success;
}
J3DError J3DDisplayListObj::newSingleDisplayList(u32 capacity) {
mCapacity = ALIGN_NEXT(capacity, 0x20);
mpData[0] = new (0x20) char[mCapacity];
mpData[1] = mpData[0];
mSize = 0;
if (mpData[0] == NULL)
return kJ3DError_Alloc;
return kJ3DError_Success;
}
/* 8031256C-803125E4 30CEAC 0078+00 0/0 1/1 0/0 .text single_To_Double__17J3DDisplayListObjFv */
J3DError J3DDisplayListObj::single_To_Double() {
if (mpData[0] == mpData[1]) {
mpData[1] = new (0x20) char[mCapacity];
if (mpData[1] == NULL)
return kJ3DError_Alloc;
memcpy(mpData[1], mpData[0], mCapacity);
DCStoreRange(mpData[1], mCapacity);
}
return kJ3DError_Success;
}
void J3DDisplayListObj::setSingleDisplayList(void* pDLData, u32 size) {
mCapacity = ALIGN_NEXT(size, 0x20);
mpData[0] = pDLData;
mpData[1] = mpData[0];
mSize = size;
}
void J3DDisplayListObj::swapBuffer() {
void* pTmp = mpData[0];
mpData[0] = mpData[1];
mpData[1] = pTmp;
}
void J3DDisplayListObj::callDL() const {
GXCallDisplayList(mpData[0], mSize);
}
/* ############################################################################################## */
/* 80434C70-80434C80 061990 0010+00 2/2 3/3 0/0 .bss sGDLObj__17J3DDisplayListObj */
GDLObj J3DDisplayListObj::sGDLObj;
/* 804515A0-804515A8 000AA0 0004+04 3/3 0/0 0/0 .sbss sInterruptFlag__17J3DDisplayListObj
*/
s32 J3DDisplayListObj::sInterruptFlag;
/* 80312644-80312698 30CF84 0054+00 2/2 1/1 0/0 .text beginDL__17J3DDisplayListObjFv */
void J3DDisplayListObj::beginDL() {
swapBuffer();
sInterruptFlag = OSDisableInterrupts();
GDInitGDLObj(&sGDLObj, (u8*)mpData[0], mCapacity);
GDSetCurrent(&sGDLObj);
}
/* 80312698-803126F4 30CFD8 005C+00 1/1 1/1 0/0 .text endDL__17J3DDisplayListObjFv */
u32 J3DDisplayListObj::endDL() {
GDPadCurr32();
OSRestoreInterrupts(sInterruptFlag);
mSize = GDGetGDLObjOffset(&sGDLObj);
GDFlushCurrToMem();
GDSetCurrent(NULL);
return mSize;
}
/* 803126F4-80312714 30D034 0020+00 0/0 1/1 0/0 .text beginPatch__17J3DDisplayListObjFv
*/
void J3DDisplayListObj::beginPatch() {
beginDL();
}
/* 80312714-80312750 30D054 003C+00 0/0 1/1 0/0 .text endPatch__17J3DDisplayListObjFv */
u32 J3DDisplayListObj::endPatch() {
OSRestoreInterrupts(sInterruptFlag);
GDSetCurrent(NULL);
return mSize;
}
/* 80312750-80312758 30D090 0008+00 3/0 16/0 10/0 .text entry__9J3DPacketFP13J3DDrawBuffer */
int J3DPacket::entry(J3DDrawBuffer*) {
return 1;
}
void J3DPacket::addChildPacket(J3DPacket* pPacket) {
if (mpFirstChild == NULL) {
mpFirstChild = pPacket;
} else {
pPacket->mpNextPacket = mpFirstChild;
mpFirstChild = pPacket;
}
}
/* ############################################################################################## */
/* 803CD900-803CD920 02AA20 0020+00 1/1 0/0 0/0 .data sDifferedRegister */
static u32 sDifferedRegister[8] = {
0x00000004, 0x00000001, 0x00000002, 0x01000000, 0x10000000, 0x20000000, 0x02000000, 0x08000000,
};
/* 803CD920-803CD940 02AA40 0020+00 1/1 0/0 0/0 .data sSizeOfDiffered */
static s32 sSizeOfDiffered[8] = {
13, 13, 21, 120, 55, 15, 19, 45,
};
/* 80312778-803127B0 30D0B8 0038+00 2/2 0/0 0/0 .text __ct__13J3DDrawPacketFv */
J3DDrawPacket::J3DDrawPacket() {
mFlags = 0;
mpDisplayListObj = NULL;
mpTexMtxObj = NULL;
}
/* 803127B0-8031280C 30D0F0 005C+00 3/2 0/0 0/0 .text __dt__13J3DDrawPacketFv */
J3DDrawPacket::~J3DDrawPacket() {}
/* 8031280C-80312898 30D14C 008C+00 1/1 1/1 0/0 .text newDisplayList__13J3DDrawPacketFUl
*/
J3DError J3DDrawPacket::newDisplayList(u32 size) {
mpDisplayListObj = new J3DDisplayListObj();
if (mpDisplayListObj == NULL)
return kJ3DError_Alloc;
J3DError ret = mpDisplayListObj->newDisplayList(size);
if (ret != kJ3DError_Success)
return ret;
return kJ3DError_Success;
}
/* 80312898-80312924 30D1D8 008C+00 0/0 1/1 0/0 .text newSingleDisplayList__13J3DDrawPacketFUl */
J3DError J3DDrawPacket::newSingleDisplayList(u32 size) {
mpDisplayListObj = new J3DDisplayListObj();
if (mpDisplayListObj == NULL)
return kJ3DError_Alloc;
J3DError ret = mpDisplayListObj->newSingleDisplayList(size);
if (ret != kJ3DError_Success)
return ret;
return kJ3DError_Success;
}
void J3DDrawPacket::draw() {
mpDisplayListObj->callDL();
}
/* 80312948-803129A4 30D288 005C+00 0/0 1/1 0/0 .text __ct__12J3DMatPacketFv */
J3DMatPacket::J3DMatPacket() {
mpInitShapePacket = NULL;
mpShapePacket = NULL;
mpMaterial = NULL;
mDiffFlag = -1;
mpTexture = NULL;
mpMaterialAnm = NULL;
}
/* 803129A4-80312A04 30D2E4 0060+00 1/0 1/1 0/0 .text __dt__12J3DMatPacketFv */
J3DMatPacket::~J3DMatPacket() {}
void J3DMatPacket::addShapePacket(J3DShapePacket* pShape) {
if (mpShapePacket == NULL) {
mpShapePacket = pShape;
} else {
pShape->mpNextPacket = mpShapePacket;
mpShapePacket = pShape;
}
}
void J3DMatPacket::beginDiff() {
mpInitShapePacket->mpDisplayListObj->beginDL();
}
void J3DMatPacket::endDiff() {
mpInitShapePacket->mpDisplayListObj->endDL();
}
/* 80312A74-80312A9C 30D3B4 0028+00 0/0 1/1 0/0 .text isSame__12J3DMatPacketCFP12J3DMatPacket */
bool J3DMatPacket::isSame(J3DMatPacket* pOther) const {
bool isSame = false;
if (mDiffFlag == pOther->mDiffFlag && !(mDiffFlag >> 0x1F)) {
isSame = true;
}
return isSame;
}
/* 80312A9C-80312B20 30D3DC 0084+00 1/0 0/0 0/0 .text draw__12J3DMatPacketFv */
void J3DMatPacket::draw() {
mpMaterial->load();
callDL();
J3DShapePacket* packet = getShapePacket();
J3DShape* shape = packet->getShape();
shape->loadPreDrawSetting();
while (packet != NULL) {
if (packet->getDisplayListObj() != NULL) {
packet->getDisplayListObj()->callDL();
}
packet->drawFast();
packet = (J3DShapePacket*)packet->getNextPacket();
}
shape->resetVcdVatCache();
}
/* 80312B20-80312B74 30D460 0054+00 0/0 1/1 0/0 .text __ct__14J3DShapePacketFv */
J3DShapePacket::J3DShapePacket() {
mpShape = NULL;
mpMtxBuffer = NULL;
mpBaseMtxPtr = NULL;
mDiffFlag = 0;
mpModel = NULL;
}
/* 80312B74-80312BD4 30D4B4 0060+00 1/0 1/1 0/0 .text __dt__14J3DShapePacketFv */
J3DShapePacket::~J3DShapePacket() {}
/* 80312BD4-80312DBC 30D514 01E8+00 1/1 0/0 0/0 .text calcDifferedBufferSize__14J3DShapePacketFUl
*/
u32 J3DShapePacket::calcDifferedBufferSize(u32 flag) {
int iVar5 = 0;
for (int i = 0; i < 8; i++) {
if ((flag & sDifferedRegister[i]) != 0) {
iVar5 += sSizeOfDiffered[i];
}
}
iVar5 += getDiffFlag_LightObjNum(flag) * 0x48;
u32 uVar2 = getDiffFlag_TexGenNum(flag);
if (uVar2 != 0) {
u32 local_4c = mpShape->getMaterial()->getTexGenNum();
if (uVar2 > local_4c) {
local_4c = uVar2;
}
if ((flag & 0x1000)) {
iVar5 += calcDifferedBufferSize_TexGenSize(local_4c);
} else {
iVar5 += calcDifferedBufferSize_TexMtxSize(local_4c);
}
}
uVar2 = getDiffFlag_TexNoNum(flag);
if (uVar2 != 0) {
u8 local_58;
if (mpShape->getMaterial()->getTevStageNum() > 8) {
local_58 = 8;
} else {
local_58 = mpShape->getMaterial()->getTevStageNum();
}
u32 local_50 = local_58;
local_50 = uVar2 > local_50 ? uVar2 : local_50;
if ((flag & 0x4000000)) {
iVar5 += calcDifferedBufferSize_TexNoAndTexCoordScaleSize(local_50);
} else {
iVar5 += calcDifferedBufferSize_TexNoSize(local_50);
}
}
uVar2 = getDiffFlag_TevStageNum(flag);
if (uVar2 != 0) {
u8 local_58;
if (mpShape->getMaterial()->getTevStageNum() > 8) {
local_58 = 8;
} else {
local_58 = mpShape->getMaterial()->getTevStageNum();
}
u32 local_50 = local_58;
local_50 = uVar2 > local_50 ? uVar2 : local_50;
iVar5 += calcDifferedBufferSize_TevStageSize(local_50);
if (flag & 0x8000000) {
iVar5 += calcDifferedBufferSize_TevStageDirectSize(local_50);
}
}
return (iVar5 + 0x1f) & ~0x1f;
}
/* 80312DBC-80312E08 30D6FC 004C+00 0/0 1/1 0/0 .text newDifferedDisplayList__14J3DShapePacketFUl
*/
J3DError J3DShapePacket::newDifferedDisplayList(u32 flag) {
mDiffFlag = flag;
u32 bufSize = calcDifferedBufferSize(flag);
J3DError error = newDisplayList(bufSize);
if (error != kJ3DError_Success) {
return error;
}
setDisplayListObj(getDisplayListObj());
return kJ3DError_Success;
}
/* 80312E08-80312F24 30D748 011C+00 2/2 0/0 0/0 .text prepareDraw__14J3DShapePacketCFv */
void J3DShapePacket::prepareDraw() const {
mpModel->getVertexBuffer()->setArray();
j3dSys.setModel(mpModel);
j3dSys.setShapePacket((J3DShapePacket*)this);
// the way that the LOD flag is set seems to be wrong...
J3DShapeMtx::setLODFlag(mpModel->checkFlag(0x10));
if (mpModel->checkFlag(J3DMdlFlag_SkinPosCpu)) {
mpShape->onFlag(J3DShpFlag_SkinPosCpu);
} else {
mpShape->offFlag(J3DShpFlag_SkinPosCpu);
}
if (mpModel->checkFlag(J3DMdlFlag_SkinNrmCpu) &&
mpShape->checkFlag(J3DShpFlag_EnableLod) == false)
{
mpShape->onFlag(J3DShpFlag_SkinNrmCpu);
} else {
mpShape->offFlag(J3DShpFlag_SkinNrmCpu);
}
J3DMtxBuffer* buffer = mpMtxBuffer;
mpShape->setCurrentViewNoPtr(buffer->getCurrentViewNoPtr());
mpShape->setScaleFlagArray(buffer->getScaleFlagArray());
mpShape->setDrawMtx(buffer->getDrawMtxPtrPtr());
if (!mpShape->getNBTFlag()) {
mpShape->setNrmMtx(buffer->getNrmMtxPtrPtr());
} else {
mpShape->setNrmMtx(buffer->getBumpMtxPtrPtr()[mpShape->getBumpMtxOffset()]);
}
mpModel->getModelData()->syncJ3DSysFlags();
}
/* 80312F24-80312FBC 30D864 0098+00 1/0 0/0 0/0 .text draw__14J3DShapePacketFv */
void J3DShapePacket::draw() {
if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) {
prepareDraw();
if (mpTexMtxObj != NULL) {
J3DMaterial* material = mpShape->getMaterial();
J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock();
J3DDifferedTexMtx::sTexMtxObj = getTexMtxObj();
} else {
J3DDifferedTexMtx::sTexGenBlock = NULL;
}
if (mpDisplayListObj != NULL) {
mpDisplayListObj->callDL();
}
mpShape->draw();
}
}
/* 80312FBC-80313044 30D8FC 0088+00 1/1 2/2 1/1 .text drawFast__14J3DShapePacketFv */
void J3DShapePacket::drawFast() {
if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) {
prepareDraw();
if (mpTexMtxObj != NULL) {
J3DMaterial* material = mpShape->getMaterial();
J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock();
J3DDifferedTexMtx::sTexMtxObj = getTexMtxObj();
} else {
J3DDifferedTexMtx::sTexGenBlock = NULL;
}
mpShape->drawFast();
}
}
/* 80313044-80313048 30D984 0004+00 1/0 0/0 0/0 .text draw__9J3DPacketFv */
void J3DPacket::draw() {}
/* 80313048-803130A8 30D988 0060+00 1/0 0/0 0/0 .text entry__12J3DMatPacketFP13J3DDrawBuffer */
int J3DMatPacket::entry(J3DDrawBuffer* i_buffer) {
sortFunc func = J3DDrawBuffer::sortFuncTable[i_buffer->mSortType];
return (i_buffer->*func)(this);
}
+354
View File
@@ -0,0 +1,354 @@
#include "JSystem/J3DGraphBase/J3DShape.h"
#include "JSystem/J3DGraphBase/J3DPacket.h"
#include "JSystem/J3DGraphBase/J3DVertex.h"
#include "dolphin/gd.h"
#include "dolphin/os.h"
void J3DGDSetVtxAttrFmtv(_GXVtxFmt, GXVtxAttrFmtList const*, bool);
void J3DFifoLoadPosMtxImm(Mtx, u32);
void J3DFifoLoadNrmMtxImm(Mtx, u32);
enum {
kVcdVatDLSize = 0xC0,
};
void J3DShape::initialize() {
mMaterial = NULL;
mIndex = -1;
mMtxGroupNum = 0;
mFlags = 0;
mRadius = 0.0f;
mMin.x = 0.0f;
mMin.y = 0.0f;
mMin.z = 0.0f;
mMax.x = 0.0f;
mMax.y = 0.0f;
mMax.z = 0.0f;
mVtxDesc = NULL;
mShapeMtx = NULL;
mShapeDraw = NULL;
mVertexData = NULL;
mDrawMtxData = NULL;
mScaleFlagArray = NULL;
mDrawMtx = NULL;
mNrmMtx = NULL;
mCurrentViewNo = &j3dDefaultViewNo;
mHasNBT = false;
mHasPNMTXIdx = false;
}
/* 80314BB8-80314CBC 30F4F8 0104+00 0/0 1/1 0/0 .text addTexMtxIndexInDL__8J3DShapeF7_GXAttrUl */
void J3DShape::addTexMtxIndexInDL(GXAttr attr, u32 valueBase) {
u32 kSize[] = {0, 1, 1, 2};
s32 pnmtxidxOffs = -1;
s32 attrOffs = -1;
s32 stride = 0;
bool found = false;
for (GXVtxDescList* vtxDesc = mVtxDesc; vtxDesc->attr != GX_VA_NULL; vtxDesc++) {
if (vtxDesc->attr == GX_VA_PNMTXIDX)
pnmtxidxOffs = stride;
if (attr < vtxDesc->attr && !found) {
attrOffs = stride;
found = true;
}
stride = stride + kSize[vtxDesc->type];
}
if (pnmtxidxOffs == -1)
return;
for (u16 i = 0; i < getMtxGroupNum(); i++)
getShapeDraw(i)->addTexMtxIndexInDL(stride, attrOffs, (s32)valueBase);
}
/* 80314CBC-80314DA8 30F5FC 00EC+00 0/0 1/1 0/0 .text addTexMtxIndexInVcd__8J3DShapeF7_GXAttr */
void J3DShape::addTexMtxIndexInVcd(GXAttr attr) {
s32 attrIdx = -1;
GXVtxDescList* vtxDesc = mVtxDesc;
s32 attrCount = 0;
for (; vtxDesc->attr != GX_VA_NULL; attrCount++, vtxDesc++) {
if (vtxDesc->attr == GX_VA_PNMTXIDX)
attrIdx = 0;
}
if (attrIdx == -1)
return;
GXVtxDescList* newVtxDesc = new GXVtxDescList[attrCount + 2];
bool inserted = false;
vtxDesc = mVtxDesc;
GXVtxDescList* dst = newVtxDesc;
for (; vtxDesc->attr != GX_VA_NULL; dst++, vtxDesc++) {
if ((attr < vtxDesc->attr) && !inserted) {
dst->attr = attr;
dst->type = GX_DIRECT;
inserted = true;
dst++;
}
*dst = *vtxDesc;
}
dst->attr = GX_VA_NULL;
dst->type = GX_NONE;
mVtxDesc = newVtxDesc;
makeVcdVatCmd();
}
/* 80314DA8-80314E28 30F6E8 0080+00 0/0 1/1 0/0 .text
* calcNBTScale__8J3DShapeFRC3VecPA3_A3_fPA3_A3_f */
void J3DShape::calcNBTScale(Vec const& param_0, f32 (*param_1)[3][3], f32 (*param_2)[3][3]) {
for (u16 i = 0; i < getMtxGroupNum(); i++)
getShapeMtx(i)->calcNBTScale(param_0, param_1, param_2);
}
/* 80314E28-80314E98 30F768 0070+00 0/0 1/1 0/0 .text countBumpMtxNum__8J3DShapeCFv */
u32 J3DShape::countBumpMtxNum() const {
u32 num = 0;
for (u16 i = 0; i < getMtxGroupNum(); i++)
num += getShapeMtx(i)->getUseMtxNum();
return num;
}
/* 80314E98-80314EB0 30F7D8 0018+00 1/1 0/0 0/0 .text J3DLoadCPCmd__FUcUl */
void J3DLoadCPCmd(u8 cmd, u32 param) {
GXWGFifo.u8 = GX_CMD_LOAD_CP_REG;
GXWGFifo.u8 = cmd;
GXWGFifo.u32 = param;
}
/* 80314EB0-80314EEC 30F7F0 003C+00 1/1 0/0 0/0 .text J3DLoadArrayBasePtr__F7_GXAttrPv */
static void J3DLoadArrayBasePtr(_GXAttr attr, void* data) {
u32 idx = (attr == GX_VA_NBT) ? 1 : (attr - GX_VA_POS);
J3DLoadCPCmd(0xA0 + idx, ((u32)data & 0x7FFFFFFF));
}
/* 80314EEC-80314F5C 30F82C 0070+00 3/3 0/0 0/0 .text loadVtxArray__8J3DShapeCFv */
void J3DShape::loadVtxArray() const {
J3DLoadArrayBasePtr(GX_VA_POS, j3dSys.getVtxPos());
if (!mHasNBT) {
J3DLoadArrayBasePtr(GX_VA_NRM, j3dSys.getVtxNrm());
}
J3DLoadArrayBasePtr(GX_VA_CLR0, j3dSys.getVtxCol());
}
/* 80314F5C-80314F98 30F89C 003C+00 0/0 1/1 0/0 .text isSameVcdVatCmd__8J3DShapeFP8J3DShape */
bool J3DShape::isSameVcdVatCmd(J3DShape* other) {
u8* a = other->mVcdVatCmd;
u8* b = mVcdVatCmd;
for (u32 i = 0; i < kVcdVatDLSize; i++)
if (a[i] != b[i])
return false;
return true;
}
/* 80314F98-80315260 30F8D8 02C8+00 1/1 0/0 0/0 .text makeVtxArrayCmd__8J3DShapeFv */
void J3DShape::makeVtxArrayCmd() {
GXVtxAttrFmtList* vtxAttr = mVertexData->getVtxAttrFmtList();
u8 stride[0x0C];
void* array[0x0C];
for (u32 i = 0; i < 0x0C; i++) {
stride[i] = 0;
array[i] = 0;
}
for (; vtxAttr->mAttrib != GX_VA_NULL; vtxAttr++) {
switch (vtxAttr->mAttrib) {
case GX_VA_POS: {
if (vtxAttr->mCompType == GX_F32)
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x0C;
else
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x06;
array[vtxAttr->mAttrib - GX_VA_POS] = mVertexData->getVtxPosArray();
mVertexData->setVtxPosFrac(vtxAttr->mCompShift);
mVertexData->setVtxPosType((GXCompType)vtxAttr->mCompType);
} break;
case GX_VA_NRM: {
if (vtxAttr->mCompType == GX_F32)
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x0C;
else
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x06;
array[vtxAttr->mAttrib - GX_VA_POS] = mVertexData->getVtxNrmArray();
mVertexData->setVtxNrmFrac(vtxAttr->mCompShift);
mVertexData->setVtxNrmType((GXCompType)vtxAttr->mCompType);
} break;
case GX_VA_CLR0:
case GX_VA_CLR1: {
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x04;
array[vtxAttr->mAttrib - GX_VA_POS] =
mVertexData->getVtxColorArray(vtxAttr->mAttrib - GX_VA_CLR0);
} break;
case GX_VA_TEX0:
case GX_VA_TEX1:
case GX_VA_TEX2:
case GX_VA_TEX3:
case GX_VA_TEX4:
case GX_VA_TEX5:
case GX_VA_TEX6:
case GX_VA_TEX7: {
if (vtxAttr->mCompType == GX_F32)
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x08;
else
stride[vtxAttr->mAttrib - GX_VA_POS] = 0x04;
array[vtxAttr->mAttrib - GX_VA_POS] =
mVertexData->getVtxTexCoordArray(vtxAttr->mAttrib - GX_VA_TEX0);
} break;
default:
break;
}
}
GXVtxDescList* vtxDesc = mVtxDesc;
mHasPNMTXIdx = false;
for (; vtxDesc->attr != GX_VA_NULL; vtxDesc++) {
if (vtxDesc->attr == GX_VA_NBT && vtxDesc->type != GX_NONE) {
mHasNBT = true;
stride[GX_VA_NRM - GX_VA_POS] *= 3;
array[GX_VA_NRM - GX_VA_POS] = mVertexData->getVtxNBTArray();
} else if (vtxDesc->attr == GX_VA_PNMTXIDX && vtxDesc->type != GX_NONE) {
mHasPNMTXIdx = true;
}
}
for (u32 i = 0; i < 0x0C; i++) {
if (array[i] != 0)
GDSetArray((GXAttr)(i + GX_VA_POS), array[i], stride[i]);
else
GDSetArrayRaw((GXAttr)(i + GX_VA_POS), NULL, stride[i]);
}
}
/* ############################################################################################## */
/* 804515C8-804515CC 000AC8 0004+00 1/1 0/0 0/0 .sbss sInterruptFlag$903 */
static s32 sInterruptFlag;
/* 804515CC-804515D0 000ACC 0004+00 1/1 0/0 0/0 .sbss None */
static s8 sInitInterruptFlag;
/* 80315260-80315300 30FBA0 00A0+00 1/1 2/2 0/0 .text makeVcdVatCmd__8J3DShapeFv */
void J3DShape::makeVcdVatCmd() {
if (!sInitInterruptFlag) {
sInterruptFlag = OSDisableInterrupts();
sInitInterruptFlag = true;
}
OSDisableScheduler();
GDLObj gdl_obj;
GDInitGDLObj(&gdl_obj, mVcdVatCmd, kVcdVatDLSize);
GDSetCurrent(&gdl_obj);
GDSetVtxDescv(mVtxDesc);
makeVtxArrayCmd();
J3DGDSetVtxAttrFmtv(GX_VTXFMT0, mVertexData->getVtxAttrFmtList(), mHasNBT);
GDPadCurr32();
GDFlushCurrToMem();
GDSetCurrent(NULL);
OSEnableScheduler();
OSRestoreInterrupts(sInterruptFlag);
}
/* ############################################################################################## */
/* 804515D0-804515D4 000AD0 0004+00 5/5 25/25 9/9 .sbss sOldVcdVatCmd__8J3DShape */
void* J3DShape::sOldVcdVatCmd;
/* 80315300-80315398 30FC40 0098+00 2/2 6/6 3/3 .text loadPreDrawSetting__8J3DShapeCFv */
void J3DShape::loadPreDrawSetting() const {
if (sOldVcdVatCmd != mVcdVatCmd) {
GXCallDisplayList(mVcdVatCmd, kVcdVatDLSize);
sOldVcdVatCmd = mVcdVatCmd;
}
mCurrentMtx.load();
}
/* ############################################################################################## */
/* 804515D4-804515D8 000AD4 0004+00 3/3 0/0 0/0 .sbss None */
static u8 data_804515D4[4];
/* 80315398-8031544C 30FCD8 00B4+00 1/1 0/0 0/0 .text setArrayAndBindPipeline__8J3DShapeCFv */
void J3DShape::setArrayAndBindPipeline() const {
J3DShapeMtx::setCurrentPipeline(getPipeline());
loadVtxArray();
j3dSys.setModelDrawMtx(mDrawMtx[*mCurrentViewNo]);
j3dSys.setModelNrmMtx(mNrmMtx[*mCurrentViewNo]);
J3DShapeMtx::sCurrentScaleFlag = mScaleFlagArray;
// The below struct_804515B0 is actually a continuation of sCurrentScaleFlag, I believe?
// Also, there seems to be an extra entry in the array that's only there in DEBUG builds.
J3DShapeMtx::sNBTFlag = mHasNBT;
data_804515D4[0] = mHasPNMTXIdx;
J3DShapeMtx::sTexMtxLoadType = getTexMtxLoadType();
}
/* 8031544C-803155E0 30FD8C 0194+00 1/0 0/0 0/0 .text drawFast__8J3DShapeCFv */
void J3DShape::drawFast() const {
if (sOldVcdVatCmd != mVcdVatCmd) {
GXCallDisplayList(mVcdVatCmd, kVcdVatDLSize);
sOldVcdVatCmd = mVcdVatCmd;
}
if (data_804515D4[0] != 0 && !mHasPNMTXIdx)
mCurrentMtx.load();
setArrayAndBindPipeline();
if (!checkFlag(J3DShpFlag_NoMtx)) {
// LOD flag shenanigans
if (J3DShapeMtx::getLODFlag() != 0)
J3DShapeMtx::resetMtxLoadCache();
for (u16 n = getMtxGroupNum(), i = 0; i < n; i++) {
if (getShapeMtx(i) != NULL)
getShapeMtx(i)->load();
if (getShapeDraw(i) != NULL)
getShapeDraw(i)->draw();
}
} else {
J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), GX_PNMTX0);
J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), GX_PNMTX0);
for (u16 n = getMtxGroupNum(), i = 0; i < n; i++)
if (getShapeDraw(i) != NULL)
getShapeDraw(i)->draw();
}
}
/* 803155E0-80315628 30FF20 0048+00 1/0 0/0 0/0 .text draw__8J3DShapeCFv */
void J3DShape::draw() const {
sOldVcdVatCmd = NULL;
loadPreDrawSetting();
drawFast();
}
/* 80315628-803156AC 30FF68 0084+00 1/0 0/0 0/0 .text simpleDraw__8J3DShapeCFv */
void J3DShape::simpleDraw() const {
resetVcdVatCache();
loadPreDrawSetting();
J3DShapeMtx::setCurrentPipeline(getPipeline());
loadVtxArray();
for (u16 n = getMtxGroupNum(), i = 0; i < n; i++) {
if (getShapeDraw(i) != NULL) {
getShapeDraw(i)->draw();
}
}
}
/* 803156AC-803157A0 30FFEC 00F4+00 1/0 0/0 0/0 .text simpleDrawCache__8J3DShapeCFv */
void J3DShape::simpleDrawCache() const {
if (sOldVcdVatCmd != mVcdVatCmd) {
GXCallDisplayList(mVcdVatCmd, kVcdVatDLSize);
sOldVcdVatCmd = mVcdVatCmd;
}
if (data_804515D4[0] != 0 && !mHasPNMTXIdx)
mCurrentMtx.load();
loadVtxArray();
for (u16 n = getMtxGroupNum(), i = 0; i < n; i++)
if (getShapeDraw(i) != NULL)
getShapeDraw(i)->draw();
}
+100
View File
@@ -0,0 +1,100 @@
//
// Generated By: dol2asm
// Translation Unit: J3DShapeDraw
//
#include "JSystem/J3DGraphBase/J3DShapeDraw.h"
#include "string.h"
#include "dolphin/gx.h"
#include "dolphin/os/OSCache.h"
#include "global.h"
//
// External References:
//
extern "C" void countVertex__12J3DShapeDrawFUl();
extern "C" void* __nwa__FUli();
extern "C" void __dl__FPv();
extern "C" void _savegpr_18();
extern "C" void _restgpr_18();
/* 80314924-80314974 30F264 0050+00 1/1 0/0 0/0 .text countVertex__12J3DShapeDrawFUl */
u32 J3DShapeDraw::countVertex(u32 stride) {
u32 count = 0;
u32 dlStart = (u32)getDisplayList();
for (u8* dl = (u8*)dlStart; ((u32)dl - dlStart) < getDisplayListSize();) {
if (*dl != GX_TRIANGLEFAN && *dl != GX_TRIANGLESTRIP)
break;
u16 vtxNum = *((u16*)(dl + 1));
count += vtxNum;
dl += stride * vtxNum;
dl += 3;
}
return count;
}
#ifdef NONMATCHING
/* 80314974-80314ABC 30F2B4 0148+00 0/0 1/1 0/0 .text addTexMtxIndexInDL__12J3DShapeDrawFUlUlUl */
void J3DShapeDraw::addTexMtxIndexInDL(u32 stride, u32 attrOffs, u32 valueBase) {
u32 byteNum = countVertex(stride);
u32 newSize = ALIGN_NEXT(mDisplayListSize + byteNum, 0x20);
u8* newDLStart = new (0x20) u8[newSize];
u8* oldDLStart = getDisplayList();
u8* oldDL = oldDLStart;
u8* newDL = newDLStart;
for (; (oldDL - oldDLStart) < mDisplayListSize;) {
// Copy command
u8 h = *oldDL;
*newDL++ = h;
if (h != GX_TRIANGLEFAN && h != GX_TRIANGLESTRIP)
break;
// Copy count
// regalloc (I suspect there's a way to shove this in a u16 temp without an mr)
u32 vtxNum = *((u16*)(oldDL + 1));
*((u16*)newDL) = vtxNum;
newDL += 2;
for (s32 i = 0; i < (u16)vtxNum; i++) {
// mul arg swap
u8* oldDLVtx = (&oldDL[stride * i + 3]);
u8 pnmtxidx = *oldDLVtx;
memcpy(newDL, oldDLVtx, attrOffs);
u8* newDL1 = &newDL[attrOffs];
*newDL1++ = valueBase + pnmtxidx;
memcpy(newDL1, oldDLVtx + attrOffs, stride - attrOffs);
newDL = newDL1 + (stride - attrOffs);
}
oldDL += stride * vtxNum;
oldDL += 3;
}
u32 realSize = ALIGN_NEXT((u32)newDL - (u32)newDLStart, 0x20);
for (; (newDL - newDLStart) < newSize; newDL++)
*newDL = 0;
mDisplayListSize = realSize;
mDisplayList = newDLStart;
DCStoreRange(newDLStart, mDisplayListSize);
}
#else
void J3DShapeDraw::addTexMtxIndexInDL(u32 param_0, u32 param_1, u32 param_2) {
// NONMATCHING
}
#endif
/* 80314ABC-80314AD4 30F3FC 0018+00 0/0 1/1 0/0 .text __ct__12J3DShapeDrawFPCUcUl */
J3DShapeDraw::J3DShapeDraw(u8 const* displayList, u32 displayListSize) {
mDisplayList = (void*)displayList;
mDisplayListSize = displayListSize;
}
/* 80314AD4-80314B00 30F414 002C+00 0/0 3/3 0/0 .text draw__12J3DShapeDrawCFv */
void J3DShapeDraw::draw() const {
GXCallDisplayList(mDisplayList, mDisplayListSize);
}
/* 80314B00-80314B48 30F440 0048+00 1/0 0/0 0/0 .text __dt__12J3DShapeDrawFv */
J3DShapeDraw::~J3DShapeDraw() {}
+760
View File
@@ -0,0 +1,760 @@
//
// Generated By: dol2asm
// Translation Unit: J3DShapeMtx
//
#include "JSystem/J3DGraphBase/J3DShapeMtx.h"
#include "JSystem/J3DGraphAnimator/J3DModel.h"
#include "JSystem/J3DGraphBase/J3DGD.h"
#include "dol2asm.h"
#include "dolphin/types.h"
//
// Forward References:
//
extern "C" void resetMtxLoadCache__11J3DShapeMtxFv();
extern "C" void loadMtxIndx_PNGP__11J3DShapeMtxCFiUs();
extern "C" void loadMtxIndx_PCPU__11J3DShapeMtxCFiUs();
extern "C" void loadMtxIndx_NCPU__11J3DShapeMtxCFiUs();
extern "C" void loadMtxIndx_PNCPU__11J3DShapeMtxCFiUs();
extern "C" void loadExecute__17J3DDifferedTexMtxFPA4_Cf();
extern "C" void loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs();
extern "C" void loadMtxConcatView_PCPU__21J3DShapeMtxConcatViewCFiUs();
extern "C" void loadMtxConcatView_NCPU__21J3DShapeMtxConcatViewCFiUs();
extern "C" void loadMtxConcatView_PNCPU__21J3DShapeMtxConcatViewCFiUs();
extern "C" void loadMtxConcatView_PNGP_LOD__21J3DShapeMtxConcatViewCFiUs();
extern "C" void load__11J3DShapeMtxCFv();
extern "C" void calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f();
extern "C" void load__21J3DShapeMtxConcatViewCFv();
extern "C" void loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f();
extern "C" void load__16J3DShapeMtxMultiCFv();
extern "C" void calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f();
extern "C" void load__26J3DShapeMtxMultiConcatViewCFv();
extern "C" void loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f();
extern "C" void load__27J3DShapeMtxBBoardConcatViewCFv();
extern "C" void load__28J3DShapeMtxYBBoardConcatViewCFv();
extern "C" void __dt__28J3DShapeMtxYBBoardConcatViewFv();
extern "C" void getType__28J3DShapeMtxYBBoardConcatViewCFv();
extern "C" void loadNrmMtx__21J3DShapeMtxConcatViewCFiUs();
extern "C" void getUseMtxIndex__11J3DShapeMtxCFUs();
extern "C" void __dt__27J3DShapeMtxBBoardConcatViewFv();
extern "C" void getType__27J3DShapeMtxBBoardConcatViewCFv();
extern "C" void __dt__26J3DShapeMtxMultiConcatViewFv();
extern "C" void getType__26J3DShapeMtxMultiConcatViewCFv();
extern "C" void getUseMtxNum__26J3DShapeMtxMultiConcatViewCFv();
extern "C" void getUseMtxIndex__26J3DShapeMtxMultiConcatViewCFUs();
extern "C" void loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUs();
extern "C" void __dt__16J3DShapeMtxMultiFv();
extern "C" void getType__16J3DShapeMtxMultiCFv();
extern "C" void getUseMtxNum__16J3DShapeMtxMultiCFv();
extern "C" void getUseMtxIndex__16J3DShapeMtxMultiCFUs();
extern "C" void __dt__21J3DShapeMtxConcatViewFv();
extern "C" void getType__21J3DShapeMtxConcatViewCFv();
extern "C" void __dt__11J3DShapeMtxFv();
extern "C" void getType__11J3DShapeMtxCFv();
extern "C" void __sinit_J3DShapeMtx_cpp();
extern "C" u8 sMtxLoadPipeline__11J3DShapeMtx[48];
extern "C" u8 sMtxLoadPipeline__21J3DShapeMtxConcatView[48];
extern "C" u8 sMtxLoadLODPipeline__21J3DShapeMtxConcatView[48];
extern "C" u8 sMtxLoadCache__11J3DShapeMtx[20 + 4 /* padding */];
extern "C" u8 sCurrentPipeline__11J3DShapeMtx[4];
extern "C" u8 sCurrentScaleFlag__11J3DShapeMtx[4];
extern "C" u8 sTexMtxLoadType__11J3DShapeMtx[4];
extern "C" u8 sMtxPtrTbl__21J3DShapeMtxConcatView[8];
extern "C" u8 sTexGenBlock__17J3DDifferedTexMtx[4];
extern "C" u8 sTexMtxObj__17J3DDifferedTexMtx[4];
//
// External References:
//
void J3DFifoLoadPosMtxImm(Mtx, u32);
void J3DFifoLoadNrmMtxImm(Mtx, u32);
void J3DFifoLoadNrmMtxImm3x3(Mtx33, u32);
void J3DFifoLoadNrmMtxToTexMtx(Mtx, u32);
void J3DFifoLoadNrmMtxToTexMtx33(Mtx33, u32);
extern "C" bool getUseMtxNum__11J3DShapeMtxCFv();
extern "C" void __dl__FPv();
extern "C" void J3DFifoLoadPosMtxImm__FPA4_fUl();
extern "C" void J3DFifoLoadNrmMtxImm__FPA4_fUl();
extern "C" void J3DFifoLoadNrmMtxImm3x3__FPA3_fUl();
extern "C" void J3DFifoLoadNrmMtxToTexMtx__FPA4_fUl();
extern "C" void J3DFifoLoadNrmMtxToTexMtx3x3__FPA3_fUl();
extern "C" void loadPosMtxIndx__6J3DSysCFiUs();
extern "C" void loadNrmMtxIndx__6J3DSysCFiUs();
extern "C" void J3DCalcBBoardMtx__FPA4_f();
extern "C" void J3DCalcYBBoardMtx__FPA4_f();
extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
extern "C" void J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f();
extern "C" void J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f();
extern "C" void J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f();
extern "C" void J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f();
extern "C" void J3DScaleNrmMtx__FPA4_fRC3Vec();
extern "C" void J3DScaleNrmMtx33__FPA3_fRC3Vec();
extern "C" void J3DMtxProjConcat__FPA4_fPA4_fPA4_f();
extern "C" void __ptmf_scall();
extern "C" void _savegpr_22();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_22();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* ############################################################################################## */
/* 80434C80-80434C98 0619A0 0014+04 2/2 0/0 0/0 .bss sMtxLoadCache__11J3DShapeMtx */
u16 J3DShapeMtx::sMtxLoadCache[10 + 2 /* padding */];
/* 803130A8-803130E4 30D9E8 003C+00 0/0 1/1 0/0 .text resetMtxLoadCache__11J3DShapeMtxFv
*/
void J3DShapeMtx::resetMtxLoadCache() {
sMtxLoadCache[9] = 0xFFFF;
sMtxLoadCache[8] = 0xFFFF;
sMtxLoadCache[7] = 0xFFFF;
sMtxLoadCache[6] = 0xFFFF;
sMtxLoadCache[5] = 0xFFFF;
sMtxLoadCache[4] = 0xFFFF;
sMtxLoadCache[3] = 0xFFFF;
sMtxLoadCache[2] = 0xFFFF;
sMtxLoadCache[1] = 0xFFFF;
sMtxLoadCache[0] = 0xFFFF;
}
/* 803130E4-80313128 30DA24 0044+00 1/0 0/0 0/0 .text loadMtxIndx_PNGP__11J3DShapeMtxCFiUs */
void J3DShapeMtx::loadMtxIndx_PNGP(int slot, u16 indx) const {
// inlined J3DFifoLoadPosMtxIndx
J3DFifoLoadIndx(GX_CMD_LOAD_INDX_A, indx, 0xB000 | ((u16)(slot * 0x0C)));
// inlined J3DFifoLoadNrmMtxIndx3x3
J3DFifoLoadIndx(GX_CMD_LOAD_INDX_B, indx, 0x8000 | ((u16)((slot * 0x09) + 0x400)));
}
/* 80313128-80313188 30DA68 0060+00 1/0 0/0 0/0 .text loadMtxIndx_PCPU__11J3DShapeMtxCFiUs */
void J3DShapeMtx::loadMtxIndx_PCPU(int slot, u16 indx) const {
J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
j3dSys.loadNrmMtxIndx(slot, indx);
}
/* 80313188-803131D4 30DAC8 004C+00 1/0 0/0 0/0 .text loadMtxIndx_NCPU__11J3DShapeMtxCFiUs */
void J3DShapeMtx::loadMtxIndx_NCPU(int slot, u16 indx) const {
j3dSys.loadPosMtxIndx(slot, indx);
J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
}
/* 803131D4-8031322C 30DB14 0058+00 1/0 0/0 0/0 .text loadMtxIndx_PNCPU__11J3DShapeMtxCFiUs */
void J3DShapeMtx::loadMtxIndx_PNCPU(int slot, u16 indx) const {
J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
}
/* 803CD9C0-803CD9F0 02AAE0 0030+00 2/3 0/0 0/0 .data sMtxLoadPipeline__11J3DShapeMtx */
J3DShapeMtx_LoadFunc J3DShapeMtx::sMtxLoadPipeline[4] = {
&loadMtxIndx_PNGP,
&loadMtxIndx_PCPU,
&loadMtxIndx_NCPU,
&loadMtxIndx_PNCPU,
};
/* 803CDA20-803CDA50 02AB40 0030+00 2/3 0/0 0/0 .data sMtxLoadPipeline__21J3DShapeMtxConcatView */
J3DShapeMtxConcatView_LoadFunc J3DShapeMtxConcatView::sMtxLoadPipeline[4] = {
&loadMtxConcatView_PNGP,
&loadMtxConcatView_PCPU,
&loadMtxConcatView_NCPU,
&loadMtxConcatView_PNCPU,
};
/* 803CDA80-803CDAB0 02ABA0 0030+00 1/2 0/0 0/0 .data sMtxLoadLODPipeline__21J3DShapeMtxConcatView
*/
J3DShapeMtxConcatView_LoadFunc J3DShapeMtxConcatView::sMtxLoadLODPipeline[4] = {
&loadMtxConcatView_PNGP_LOD,
&loadMtxConcatView_PCPU,
&loadMtxConcatView_NCPU,
&loadMtxConcatView_PNCPU,
};
#ifndef NONMATCHING
/* 803CDAB0-803CDAE0 02ABD0 0030+00 1/1 0/0 0/0 .data qMtx$895 */
SECTION_DATA static u8 qMtx[48] = {
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803CDAE0-803CDB10 02AC00 0030+00 1/1 0/0 0/0 .data qMtx2$896 */
SECTION_DATA static u8 qMtx2[48] = {
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803CDB10-803CDB40 -00001 0030+00 1/1 0/0 0/0 .data @1035 */
SECTION_DATA static void* lit_1035[12] = {
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x5B4),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3CC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x370),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x5B4),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3DC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x390),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x3CC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x370),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x510),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x46C),
};
/* 803CDB40-803CDB70 -00001 0030+00 1/1 0/0 0/0 .data @1034 */
SECTION_DATA static void* lit_1034[12] = {
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x2B8),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xE0),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xB8),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x2B8),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x110),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xCC),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xE0),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0xB8),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x224),
(void*)(((char*)loadExecute__17J3DDifferedTexMtxFPA4_Cf) + 0x190),
};
#endif
/* 804515A8-804515AC 000AA8 0004+00 4/4 2/2 0/0 .sbss sCurrentPipeline__11J3DShapeMtx */
u32 J3DShapeMtx::sCurrentPipeline;
/* 804515AC-804515B0 000AAC 0004+00 3/3 1/1 0/0 .sbss sCurrentScaleFlag__11J3DShapeMtx */
u8* J3DShapeMtx::sCurrentScaleFlag;
// This below is technically part of J3DScaleFlag.
/* 804515B0-804515B4 -00001 0004+00 5/5 3/3 0/0 .sbss None */
/* 804515B0 0001+00 data_804515B0 None */
/* 804515B1 0003+00 data_804515B1 None */
extern u8 struct_804515B0; // temporary
u8 J3DShapeMtx::sNBTFlag;
u8 J3DShapeMtx::sLODFlag;
/* 804515B4-804515B8 000AB4 0004+00 4/4 1/1 0/0 .sbss sTexMtxLoadType__11J3DShapeMtx */
u32 J3DShapeMtx::sTexMtxLoadType;
/* 804515B8-804515C0 000AB8 0008+00 2/2 0/0 0/0 .sbss sMtxPtrTbl__21J3DShapeMtxConcatView
*/
MtxP J3DShapeMtxConcatView::sMtxPtrTbl[2];
/* 804515C0-804515C4 000AC0 0004+00 6/6 2/2 0/0 .sbss sTexGenBlock__17J3DDifferedTexMtx
*/
J3DTexGenBlock* J3DDifferedTexMtx::sTexGenBlock;
/* 804515C4-804515C8 000AC4 0004+00 1/1 2/2 0/0 .sbss sTexMtxObj__17J3DDifferedTexMtx */
J3DTexMtxObj* J3DDifferedTexMtx::sTexMtxObj;
/* 80456398-8045639C 004998 0004+00 2/2 0/0 0/0 .sdata2 @1032 */
SECTION_SDATA2 static u8 lit_1032[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 8031322C-80313828 30DB6C 05FC+00 7/5 0/0 0/0 .text loadExecute__17J3DDifferedTexMtxFPA4_Cf */
#ifdef NONMATCHING
void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
// regalloc
static Mtx qMtx = {
{0.5f, 0.0f, 0.5f, 0.0f},
{0.0f, -0.5f, 0.5f, 0.0f},
{0.0f, 0.0f, 1.0f, 0.0f},
};
static Mtx qMtx2 = {
{0.5f, 0.0f, 0.0f, 0.5f},
{0.0f, -0.5f, 0.0f, 0.5f},
{0.0f, 0.0f, 1.0f, 0.0f}
};
J3DTexCoord* tex_coord;
J3DTexMtx* tex_mtx;
Mtx* mtx;
Mtx44* eff_mtx;
Mtx tmp2;
Mtx44 tmp1, tmp0;
J3DTexMtxInfo* tex_mtx_info;
J3DTexGenBlock* tex_gen_block = sTexGenBlock;
J3DTexMtxObj* tex_mtx_obj = sTexMtxObj;
u16 tex_mtx_num = tex_mtx_obj->getNumTexMtx();
if ((j3dSys.checkFlag(J3DSysFlag_PostTexMtx))) {
for (u16 i = 0; i < (u16)tex_mtx_num; i++) {
tex_coord = tex_gen_block->getTexCoord(i);
int tex_gen_type = tex_coord->getTexGenType();
if (tex_gen_type == 1 || tex_gen_type == 0) {
tex_mtx = tex_gen_block->getTexMtx(i);
u8 tex_gen_src = tex_mtx->getTexMtxInfo().mInfo;
u32 unk;
switch (tex_gen_src & 0x3f) {
case 3:
case 9:
Mtx& tmp5 = tex_mtx_obj->getMtx(i);
mtx = &tmp5;
break;
case 1:
case 6:
case 7:
Mtx& tmp6 = tex_mtx_obj->getMtx(i);
mtx = &tmp6;
break;
case 2:
case 8:
PSMTXInverse(j3dSys.mViewMtx, tmp2);
PSMTXConcat(tex_mtx_obj->getMtx(i), tmp2, tmp2);
mtx = &tmp2;
break;
case 5:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
case 10:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx2, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
case 11:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
default:
Mtx& tmp7 = tex_mtx_obj->getMtx(i);
mtx = &tmp7;
break;
}
GXLoadTexMtxImm(*mtx, i * 3 + 0x40, GX_MTX3x4);
}
}
} else {
for (u16 i = 0; i < (u16)tex_mtx_num; i++) {
int tex_gen_type = tex_gen_block->getTexCoord(i)->getTexGenType();
if (tex_gen_type == 1 || tex_gen_type == 0) {
tex_mtx = tex_gen_block->getTexMtx(i);
u8 tex_gen_src = tex_mtx->getTexMtxInfo().mInfo;
u32 unk;
switch (tex_gen_src & 0x3f) {
case 3:
case 9:
PSMTXConcat(tex_mtx_obj->getMtx(i), param_0, tmp2);
mtx = &tmp2;
break;
case 1:
case 6:
case 7:
PSMTXCopy(param_0, tmp1);
tmp1[2][3] = 0.0f;
tmp1[1][3] = 0.0f;
tmp1[0][3] = 0.0f;
PSMTXConcat(tex_mtx_obj->getMtx(i), tmp1, tmp2);
mtx = &tmp2;
break;
case 2:
case 8:
mtx = &tex_mtx_obj->getMtx(i);
break;
case 5:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
PSMTXConcat(tmp2, param_0, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
case 10:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx2, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
PSMTXConcat(tmp2, param_0, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
case 11:
tex_mtx_info = &tex_mtx->getTexMtxInfo();
unk = (tex_gen_src & 0x80) >> 7;
if (unk == 0) {
J3DGetTextureMtxOld(tex_mtx_info->mSRT, tex_mtx_info->mCenter, tmp0);
} else if (unk == 1) {
J3DGetTextureMtxMayaOld(tex_mtx_info->mSRT, tmp0);
}
PSMTXConcat(tmp0, qMtx, tmp0);
eff_mtx = &tex_mtx_obj->getEffectMtx(i);
J3DMtxProjConcat(tmp0, *eff_mtx, tmp2);
PSMTXInverse(j3dSys.mViewMtx, tmp1);
PSMTXConcat(tmp2, tmp1, tmp2);
PSMTXConcat(tmp2, param_0, tmp2);
tmp2[2][3] = 0.0f;
tmp2[1][3] = 0.0f;
tmp2[0][3] = 0.0f;
mtx = &tmp2;
break;
default:
mtx = &tex_mtx_obj->getMtx(i);
break;
}
GXLoadTexMtxImm(*mtx, i * 3 + 0x1e,
(GXTexMtxType)tex_mtx->getTexMtxInfo().mProjection);
}
}
}
}
#else
void J3DDifferedTexMtx::loadExecute(f32 const (*param_0)[4]) {
// NONMATCHING
}
#endif
/* 80313828-803138C8 30E168 00A0+00 1/0 0/0 0/0 .text
* loadMtxConcatView_PNGP__21J3DShapeMtxConcatViewCFiUs */
void J3DShapeMtxConcatView::loadMtxConcatView_PNGP(int slot, u16 drw) const {
Mtx m;
MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
J3DDifferedTexMtx::load(m);
J3DFifoLoadPosMtxImm(m, slot * 3);
loadNrmMtx(slot, drw, m);
}
/* 803138C8-8031396C 30E208 00A4+00 2/0 0/0 0/0 .text
* loadMtxConcatView_PCPU__21J3DShapeMtxConcatViewCFiUs */
void J3DShapeMtxConcatView::loadMtxConcatView_PCPU(int slot, u16 drw) const {
Mtx m;
MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
J3DDifferedTexMtx::load(m);
J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
loadNrmMtx(slot, drw, m);
}
/* 8031396C-80313A14 30E2AC 00A8+00 2/0 0/0 0/0 .text
* loadMtxConcatView_NCPU__21J3DShapeMtxConcatViewCFiUs */
void J3DShapeMtxConcatView::loadMtxConcatView_NCPU(int slot, u16 drw) const {
Mtx m;
MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
J3DDifferedTexMtx::load(m);
J3DFifoLoadPosMtxImm(m, slot * 3);
J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
if (J3DShapeMtx::sTexMtxLoadType == 0x2000)
J3DFifoLoadNrmMtxToTexMtx(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3 + GX_TEXMTX0);
}
/* 80313A14-80313AC8 30E354 00B4+00 2/0 0/0 0/0 .text
* loadMtxConcatView_PNCPU__21J3DShapeMtxConcatViewCFiUs */
void J3DShapeMtxConcatView::loadMtxConcatView_PNCPU(int slot, u16 drw) const {
Mtx m;
if (J3DDifferedTexMtx::sTexGenBlock != NULL) {
MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
J3DDifferedTexMtx::loadExecute(m);
}
J3DFifoLoadPosMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
J3DFifoLoadNrmMtxImm(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3);
if (J3DShapeMtx::sTexMtxLoadType == 0x2000)
J3DFifoLoadNrmMtxToTexMtx(*j3dSys.getShapePacket()->getBaseMtxPtr(), slot * 3 + GX_TEXMTX0);
}
/* 80313AC8-80313B94 30E408 00CC+00 1/0 0/0 0/0 .text
* loadMtxConcatView_PNGP_LOD__21J3DShapeMtxConcatViewCFiUs */
void J3DShapeMtxConcatView::loadMtxConcatView_PNGP_LOD(int slot, u16 drw) const {
Mtx m;
MTXConcat(*j3dSys.getShapePacket()->getBaseMtxPtr(), j3dSys.getModelDrawMtx(drw), m);
MTXConcat(m, j3dSys.mModel->getModelData()->getInvJointMtx(drw), m);
J3DDifferedTexMtx::load(m);
J3DFifoLoadPosMtxImm(m, slot * 3);
loadNrmMtx(slot, drw, m);
}
/* 80313B94-80313BF0 30E4D4 005C+00 1/0 0/0 0/0 .text load__11J3DShapeMtxCFv */
void J3DShapeMtx::load() const {
J3DShapeMtx_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
(this->*func)(0, mUseMtxIndex);
}
/* 80313BF0-80313C54 30E530 0064+00 5/0 0/0 0/0 .text
* calcNBTScale__11J3DShapeMtxFRC3VecPA3_A3_fPA3_A3_f */
void J3DShapeMtx::calcNBTScale(Vec const& param_0, Mtx33* param_1, Mtx33* param_2) {
J3DPSMtx33Copy(param_1[mUseMtxIndex], param_2[mUseMtxIndex]);
J3DScaleNrmMtx33(param_2[mUseMtxIndex], param_0);
}
/* 80313C54-80313D28 30E594 00D4+00 1/0 0/0 0/0 .text load__21J3DShapeMtxConcatViewCFv */
void J3DShapeMtxConcatView::load() const {
sMtxPtrTbl[0] = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(0);
sMtxPtrTbl[1] = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(0);
J3DShapeMtxConcatView_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
u32 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[draw_mtx_flag]);
u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
(this->*func)(0, draw_mtx_index);
}
/* 80313D28-80313E4C 30E668 0124+00 3/0 0/0 0/0 .text
* loadNrmMtx__21J3DShapeMtxConcatViewCFiUsPA4_f */
void J3DShapeMtxConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param_2) const {
if (sCurrentScaleFlag[param_1] == 1) {
if (sTexMtxLoadType == 0x2000) {
J3DFifoLoadNrmMtxToTexMtx(param_2, 0x1e);
}
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(param_2, 0);
} else {
Mtx33 mtx;
Vec* scale = j3dSys.getNBTScale();
J3DPSMtx33CopyFrom34(param_2, mtx);
J3DScaleNrmMtx33(mtx, *scale);
J3DFifoLoadNrmMtxImm3x3(mtx, 0);
}
} else {
Mtx33 mtx;
J3DPSCalcInverseTranspose(param_2, mtx);
if (sTexMtxLoadType == 0x2000) {
J3DFifoLoadNrmMtxToTexMtx3x3(mtx, 0x1e);
}
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm3x3(mtx, 0);
} else {
Vec* scale = j3dSys.getNBTScale();
J3DScaleNrmMtx33(mtx, *scale);
J3DFifoLoadNrmMtxImm3x3(mtx, 0);
}
}
}
/* 80313E4C-80313EEC 30E78C 00A0+00 1/0 0/0 0/0 .text load__16J3DShapeMtxMultiCFv */
void J3DShapeMtxMulti::load() const {
J3DShapeMtx_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
int use_mtx_num = mUseMtxNum;
for (int i = 0; i < use_mtx_num; i++) {
u16 use_mtx_index = mUseMtxIndexTable[i];
if (use_mtx_index != 0xffff) {
(this->*func)(i, use_mtx_index);
}
}
}
/* 80313EEC-80313FA4 30E82C 00B8+00 1/0 0/0 0/0 .text
* calcNBTScale__16J3DShapeMtxMultiFRC3VecPA3_A3_fPA3_A3_f */
void J3DShapeMtxMulti::calcNBTScale(Vec const& param_0, Mtx33* param_1, Mtx33* param_2) {
int use_mtx_num = mUseMtxNum;
for (int i = 0; i < use_mtx_num; i++) {
u16 use_mtx_index = mUseMtxIndexTable[i];
if (use_mtx_index != 0xffff) {
J3DPSMtx33Copy(param_1[use_mtx_index], param_2[use_mtx_index]);
J3DScaleNrmMtx33(param_2[mUseMtxIndexTable[i]], param_0);
}
}
}
/* 80313FA4-8031419C 30E8E4 01F8+00 1/0 0/0 0/0 .text load__26J3DShapeMtxMultiConcatViewCFv */
void J3DShapeMtxMultiConcatView::load() const {
sMtxPtrTbl[0] = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(0);
sMtxPtrTbl[1] = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(0);
if (!sLODFlag) {
J3DShapeMtxConcatView_LoadFunc func = sMtxLoadPipeline[sCurrentPipeline];
int use_mtx_num = mUseMtxNum;
for (int i = 0; i < use_mtx_num; i++) {
u16 use_mtx_index = mUseMtxIndexTable[i];
if (use_mtx_index != 0xffff) {
u16 draw_mtx_index =
j3dSys.getModel()->getModelData()->getDrawMtxIndex(use_mtx_index);
u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(use_mtx_index);
j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[draw_mtx_flag]);
(this->*func)(i, draw_mtx_index);
}
}
} else {
u16* important_mtx_indices = j3dSys.getModel()->getModelData()->getWEvlpImportantMtxIndex();
j3dSys.setModelDrawMtx((Mtx*)sMtxPtrTbl[0]);
int use_mtx_num = mUseMtxNum;
for (int i = 0; i < use_mtx_num; i++) {
u32 current_pipeline = sCurrentPipeline;
J3DShapeMtxConcatView_LoadFunc func = sMtxLoadLODPipeline[current_pipeline];
u16 use_mtx_index = mUseMtxIndexTable[i];
if (use_mtx_index != 0xffff) {
u16 important_mtx_index = important_mtx_indices[use_mtx_index];
if (important_mtx_index != sMtxLoadCache[i]) {
u8 draw_mtx_flag =
j3dSys.getModel()->getModelData()->getDrawMtxFlag(use_mtx_index);
if (draw_mtx_flag == 0) {
func = sMtxLoadPipeline[current_pipeline];
}
(this->*func)(i, important_mtx_index);
sMtxLoadCache[i] = important_mtx_index;
}
}
}
}
}
/* 8031419C-803142D4 30EADC 0138+00 1/0 0/0 0/0 .text
* loadNrmMtx__26J3DShapeMtxMultiConcatViewCFiUsPA4_f */
void J3DShapeMtxMultiConcatView::loadNrmMtx(int param_0, u16 param_1, MtxP param_2) const {
Mtx33 mtx1, mtx2;
if (sCurrentScaleFlag[param_1] == 1) {
if (sTexMtxLoadType == 0x2000) {
J3DFifoLoadNrmMtxToTexMtx(param_2, param_0 * 3 + 0x1e);
}
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(param_2, param_0 * 3);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DPSMtx33CopyFrom34(param_2, mtx1);
J3DScaleNrmMtx33(mtx1, *nbt_scale);
J3DFifoLoadNrmMtxImm3x3(mtx1, 0);
}
} else {
J3DPSCalcInverseTranspose(param_2, mtx2);
if (sTexMtxLoadType == 0x2000) {
J3DFifoLoadNrmMtxToTexMtx3x3(mtx2, param_0 * 3 + 0x1e);
}
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm3x3(mtx2, param_0 * 3);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DScaleNrmMtx33(mtx2, *nbt_scale);
J3DFifoLoadNrmMtxImm3x3(mtx2, param_0 * 3);
}
}
}
/* 803142D4-803143E4 30EC14 0110+00 1/0 0/0 0/0 .text load__27J3DShapeMtxBBoardConcatViewCFv */
void J3DShapeMtxBBoardConcatView::load() const {
Mtx mtx;
u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
if (draw_mtx_flag == 0) {
MtxP user_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(draw_mtx_index);
PSMTXConcat(j3dSys.getViewMtx(), user_anm_mtx, mtx);
} else {
MtxP weight_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(draw_mtx_index);
PSMTXConcat(j3dSys.getViewMtx(), weight_anm_mtx, mtx);
}
J3DCalcBBoardMtx(mtx);
J3DFifoLoadPosMtxImm(mtx, 0);
mtx[0][0] = 1.0f / mtx[0][0];
mtx[1][1] = 1.0f / mtx[1][1];
mtx[2][2] = 1.0f / mtx[2][2];
mtx[0][3] = FLOAT_LABEL(lit_1032); // 0.0f;
mtx[1][3] = FLOAT_LABEL(lit_1032); // 0.0f;
mtx[2][3] = FLOAT_LABEL(lit_1032); // 0.0f;
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(mtx, 0);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DScaleNrmMtx(mtx, *nbt_scale);
J3DFifoLoadNrmMtxImm(mtx, 0);
}
}
/* 803143E4-80314520 30ED24 013C+00 1/0 0/0 0/0 .text load__28J3DShapeMtxYBBoardConcatViewCFv */
void J3DShapeMtxYBBoardConcatView::load() const {
Mtx mtx1;
Mtx33 mtx2;
u16 draw_mtx_index = j3dSys.getModel()->getModelData()->getDrawMtxIndex(mUseMtxIndex);
u8 draw_mtx_flag = j3dSys.getModel()->getModelData()->getDrawMtxFlag(mUseMtxIndex);
if (draw_mtx_flag == 0) {
MtxP user_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getUserAnmMtx(draw_mtx_index);
PSMTXConcat(j3dSys.getViewMtx(), user_anm_mtx, mtx1);
} else {
MtxP weight_anm_mtx = j3dSys.getModel()->getMtxBuffer()->getWeightAnmMtx(draw_mtx_index);
PSMTXConcat(j3dSys.getViewMtx(), weight_anm_mtx, mtx1);
}
J3DCalcYBBoardMtx(mtx1);
J3DFifoLoadPosMtxImm(mtx1, 0);
if (sCurrentScaleFlag[mUseMtxIndex] == 1) {
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm(mtx1, 0);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DScaleNrmMtx(mtx1, *nbt_scale);
J3DFifoLoadNrmMtxImm(mtx1, 0);
}
} else {
J3DPSCalcInverseTranspose(mtx1, mtx2);
if (!sNBTFlag) {
J3DFifoLoadNrmMtxImm3x3(mtx2, 0);
} else {
Vec* nbt_scale = j3dSys.getNBTScale();
J3DScaleNrmMtx33(mtx2, *nbt_scale);
J3DFifoLoadNrmMtxImm3x3(mtx2, 0);
}
}
}
/* ############################################################################################## */
/* 803CDB70-803CDB84 02AC90 0014+00 0/0 0/0 0/0 .data mtxCache$1263 */
#pragma push
#pragma force_active on
SECTION_DATA static u8 mtxCache[20] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
#pragma pop
+75
View File
@@ -0,0 +1,75 @@
//
// J3DStruct
//
#include "JSystem/J3DGraphBase/J3DStruct.h"
#include "JSystem/JMath/JMath.h"
/* 803256C4-80325718 320004 0054+00 0/0 11/11 24/24 .text __as__12J3DLightInfoFRC12J3DLightInfo */
J3DLightInfo& J3DLightInfo::operator=(J3DLightInfo const& param_0) {
JMath::gekko_ps_copy6(&mLightPosition, &param_0.mLightPosition);
mColor = param_0.mColor;
JMath::gekko_ps_copy6(&mCosAtten, &param_0.mCosAtten);
return *this;
}
/* 80325718-80325794 320058 007C+00 0/0 4/4 0/0 .text __as__13J3DTexMtxInfoFRC13J3DTexMtxInfo */
J3DTexMtxInfo& J3DTexMtxInfo::operator=(J3DTexMtxInfo const& param_0) {
mProjection = param_0.mProjection;
mInfo = param_0.mInfo;
JMath::gekko_ps_copy3(&mCenter, &param_0.mCenter);
mSRT = param_0.mSRT;
JMath::gekko_ps_copy16(&mEffectMtx, &param_0.mEffectMtx);
return *this;
}
// Helper functions to set float literal order
static f32 dummyLiteralOrder() {
return 1.0f;
}
/* 80325794-803257DC 3200D4 0048+00 0/0 2/2 7/7 .text setEffectMtx__13J3DTexMtxInfoFPA4_f
*/
void J3DTexMtxInfo::setEffectMtx(Mtx param_0) {
JMath::gekko_ps_copy12(&mEffectMtx, param_0);
register f32 zero = 0.0f;
register f32* mtx = (f32*)mEffectMtx;
asm {
psq_st zero, 0x30(mtx), 0, 0
};
mEffectMtx[3][2] = 0.0f;
mEffectMtx[3][3] = 1.0f;
}
/* 803257DC-80325800 32011C 0024+00 0/0 5/5 0/0 .text
* __as__16J3DIndTexMtxInfoFRC16J3DIndTexMtxInfo */
J3DIndTexMtxInfo& J3DIndTexMtxInfo::operator=(J3DIndTexMtxInfo const& param_0) {
JMath::gekko_ps_copy6(field_0x0, param_0.field_0x0);
field_0x18 = param_0.field_0x18;
return *this;
}
/* 80325800-8032587C 320140 007C+00 0/0 6/6 0/0 .text __as__10J3DFogInfoFRC10J3DFogInfo
*/
J3DFogInfo& J3DFogInfo::operator=(J3DFogInfo const& param_0) {
mType = param_0.mType;
mAdjEnable = param_0.mAdjEnable;
mCenter = param_0.mCenter;
mStartZ = param_0.mStartZ;
mEndZ = param_0.mEndZ;
mNearZ = param_0.mNearZ;
mFarZ = param_0.mFarZ;
mColor = param_0.mColor;
for (int i = 0; i < 10; i++) {
mFogAdjTable.fogVals[i] = param_0.mFogAdjTable.fogVals[i];
}
return *this;
}
/* 8032587C-803258A0 3201BC 0024+00 0/0 6/6 0/0 .text __as__15J3DNBTScaleInfoFRC15J3DNBTScaleInfo
*/
J3DNBTScaleInfo& J3DNBTScaleInfo::operator=(J3DNBTScaleInfo const& param_0) {
mbHasScale = param_0.mbHasScale;
mScale = param_0.mScale;
return *this;
}
+400
View File
@@ -0,0 +1,400 @@
//
// Generated By: dol2asm
// Translation Unit: J3DSys
//
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "dol2asm.h"
#include "dolphin/gx/GXPixel.h"
#include "dolphin/os.h"
#include "dolphin/types.h"
#include "global.h"
#include "JSystem/J3DGraphBase/J3DTevs.h"
#include "JSystem/J3DGraphBase/J3DTexture.h"
#include "JSystem/J3DGraphBase/J3DGD.h"
//
// Forward References:
//
extern void J3DFifoLoadTexCached(GXTexMapID, u32, GXTexCacheSize, u32, GXTexCacheSize);
extern void makeTexCoordTable();
extern void makeAlphaCmpTable();
extern void makeZModeTable();
extern void makeTevSwapTable();
extern "C" void GXInvalidateVtxCache();
extern "C" extern const GXColor j3dDefaultColInfo;
extern "C" extern u8 data_804563C8;
//
// Declarations:
//
/* ############################################################################################## */
/* 80434AC8-80434BE4 0617E8 011C+00 1/1 151/151 486/486 .bss j3dSys */
J3DSys j3dSys;
/* 80434BE4-80434C14 061904 0030+00 0/0 17/17 154/154 .bss mCurrentMtx__6J3DSys */
Mtx J3DSys::mCurrentMtx;
/* 80434C14-80434C20 061934 000C+00 0/0 6/6 0/0 .bss mCurrentS__6J3DSys */
Vec J3DSys::mCurrentS;
/* 80434C20-80434C2C 061940 000C+00 0/0 5/5 0/0 .bss mParentS__6J3DSys */
Vec J3DSys::mParentS;
/* 80434C2C-80434C70 06194C 0040+04 1/1 17/17 0/0 .bss sTexCoordScaleTable__6J3DSys */
J3DTexCoordScaleInfo J3DSys::sTexCoordScaleTable[8];
/* 8030FDE8-8030FEC0 30A728 00D8+00 1/1 0/0 0/0 .text __ct__6J3DSysFv */
J3DSys::J3DSys() {
makeTexCoordTable();
makeTevSwapTable();
makeAlphaCmpTable();
makeZModeTable();
mFlags = 0;
MTXIdentity(mViewMtx);
mDrawMode = 1;
mMaterialMode = 0;
mModel = NULL;
mShape = NULL;
for (u32 i = 0; i < ARRAY_SIZE(mDrawBuffer); i++)
mDrawBuffer[i] = NULL;
mTexture = NULL;
mMatPacket = NULL;
mShapePacket = NULL;
mModelDrawMtx = NULL;
mModelNrmMtx = NULL;
mVtxPos = NULL;
mVtxNrm = NULL;
mVtxCol = NULL;
for (u32 i = 0; i < 8; i++) {
sTexCoordScaleTable[i].field_0x00 = 1;
sTexCoordScaleTable[i].field_0x02 = 1;
sTexCoordScaleTable[i].field_0x04 = 0;
sTexCoordScaleTable[i].field_0x06 = 0;
}
}
/* 8030FEC0-8030FEE4 30A800 0024+00 0/0 1/1 0/0 .text loadPosMtxIndx__6J3DSysCFiUs */
void J3DSys::loadPosMtxIndx(int addr, u16 indx) const {
J3DFifoLoadIndx(GX_CMD_LOAD_INDX_A, indx, 0xB000 | ((u16)(addr * 0x0C)));
}
/* 8030FEE4-8030FF0C 30A824 0028+00 0/0 1/1 0/0 .text loadNrmMtxIndx__6J3DSysCFiUs */
void J3DSys::loadNrmMtxIndx(int addr, u16 indx) const {
J3DFifoLoadIndx(GX_CMD_LOAD_INDX_B, indx, 0x8000 | ((u16)((addr * 0x09) + 0x400)));
}
/* 8030FF0C-803100BC 30A84C 01B0+00 1/1 0/0 0/0 .text setTexCacheRegion__6J3DSysF15_GXTexCacheSize
*/
void J3DSys::setTexCacheRegion(GXTexCacheSize size) {
const u32 kSize[] = {
0x00008000,
0x00020000,
0x00080000,
0x00000000,
};
const u32 kRegionNum[] = {8, 4, 1, 0};
u32 regionNum = kRegionNum[size];
mTexCacheRegionNum = regionNum;
if (!!(mFlags & 0x80000000)) {
for (u32 i = 0; i < regionNum; i++) {
if (!!(i & 1)) {
GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size] + 0x80000, size,
i * kSize[size], size);
J3DFifoLoadTexCached((GXTexMapID)i, i * kSize[size] + 0x80000, size,
i * kSize[size], size);
} else {
GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size], size,
i * kSize[size] + 0x80000, size);
J3DFifoLoadTexCached((GXTexMapID)i, i * kSize[size], size,
i * kSize[size] + 0x80000, size);
}
}
} else {
for (u32 i = 0; i < regionNum; i++) {
GXInitTexCacheRegion(&mTexCacheRegion[i], GX_FALSE, i * kSize[size], size,
i * kSize[size] + 0x80000, size);
J3DFifoLoadTexCached((GXTexMapID)i, i * kSize[size], size, i * kSize[size] + 0x80000,
size);
}
}
}
/* 803CD8A0-803CD8B0 02A9C0 0010+00 1/1 0/0 0/0 .data NullTexData */
SECTION_DATA static u8 NullTexData[16] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803CD8B0-803CD8E0 02A9D0 0030+00 1/1 0/0 0/0 .data j3dIdentityMtx */
SECTION_DATA static Mtx j3dIdentityMtx = {
1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f,
};
/* 803100BC-8031073C 30A9FC 0680+00 0/0 3/3 0/0 .text drawInit__6J3DSysFv */
void J3DSys::drawInit() {
GXInvalidateVtxCache();
GXSetCurrentMtx(GX_PNMTX0);
GXSetCullMode(GX_CULL_BACK);
GXSetCoPlanar(GX_FALSE);
GXSetClipMode(GX_CLIP_ENABLE);
GXSetColorUpdate(GX_TRUE);
GXSetDither(GX_TRUE);
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_NOOP);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
GXSetZCompLoc(GX_TRUE);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR1, GX_CLR_RGBA, GX_RGBA8, 0);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 7);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX1, GX_CLR_RGBA, GX_RGBA4, 7);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX2, GX_CLR_RGBA, GX_RGBA4, 7);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX3, GX_CLR_RGBA, GX_RGBA4, 7);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX4, GX_CLR_RGBA, GX_RGBA4, 7);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX5, GX_CLR_RGBA, GX_RGBA4, 7);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX6, GX_CLR_RGBA, GX_RGBA4, 7);
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX7, GX_CLR_RGBA, GX_RGBA4, 7);
GXSetNumIndStages(0);
reinitTexture();
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE10, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE11, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE12, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE13, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE14, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE15, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
for (u32 i = 0; i < 10; i++)
GXLoadTexMtxImm(j3dIdentityMtx, GX_TEXMTX0 + i * 3, GX_MTX3x4);
Mtx23 indTexMtx = {
{0.5f, 0.0f, 0.0f},
{0.0f, 0.5f, 0.0f},
};
u8 i;
for (i = 0; i < 3; i++)
GXSetIndTexMtx((GXIndTexMtxID)(GX_ITM_0 + i), (f32*)indTexMtx, 1);
GXSetChanMatColor(GX_COLOR0A0, j3dDefaultColInfo);
GXSetChanMatColor(GX_COLOR1A1, j3dDefaultColInfo);
GXSetNumChans(data_804563C8);
GXSetNumTexGens(1);
GXSetNumTevStages(1);
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_CLAMP, GX_AF_NONE);
for (i = 0; i < GX_MAX_TEXMAP; i++)
GXSetTexCoordGen2((GXTexCoordID)i, (GXTexGenType)j3dDefaultTexCoordInfo[i].mTexGenType,
(GXTexGenSrc)j3dDefaultTexCoordInfo[i].mTexGenSrc,
j3dDefaultTexCoordInfo[i].mTexGenMtx, GX_FALSE, GX_PTIDENTITY);
for (i = 0; i < GX_MAX_INDTEXSTAGE; i++)
GXSetIndTexCoordScale((GXIndTexStageID)i, GX_ITS_1, GX_ITS_1);
for (i = 0; i < GX_MAX_TEVREG; i++)
GXSetTevKColor((GXTevKColorID)i, j3dDefaultTevKColor);
for (i = 0; i < GX_MAX_TEVREG; i++)
GXSetTevColorS10((GXTevRegID)i, j3dDefaultTevColor);
for (i = 0; i < GX_MAX_TEVSTAGE; i++) {
GXSetTevColorIn((GXTevStageID)i, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
GXSetTevColorOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
GXSetTevAlphaIn((GXTevStageID)i, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
GXSetTevAlphaOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
}
for (i = 0; i < GX_MAX_TEVSTAGE; i++)
GXSetTevSwapMode((GXTevStageID)i, GX_TEV_SWAP0, GX_TEV_SWAP0);
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA);
GXSetTevSwapModeTable(GX_TEV_SWAP2, GX_CH_GREEN, GX_CH_GREEN, GX_CH_GREEN, GX_CH_ALPHA);
GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA);
for (i = 0; i < GX_MAX_TEVSTAGE; i++)
GXSetTevIndirect((GXTevStageID)i, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_NONE, GX_ITM_OFF,
GX_ITW_OFF, GX_ITW_OFF, GX_FALSE, GX_FALSE, GX_ITBA_OFF);
OSInitFastCast();
setTexCacheRegion(GX_TEXCACHE_32K);
}
/* 8031073C-8031079C 30B07C 0060+00 0/0 16/16 6/6 .text reinitGX__6J3DSysFv */
void J3DSys::reinitGX() {
reinitGenMode();
reinitLighting();
reinitTransform();
reinitTexture();
reinitTevStages();
reinitIndStages();
reinitPixelProc();
GXFlush();
}
/* 8031079C-803107E8 30B0DC 004C+00 1/1 0/0 0/0 .text reinitGenMode__6J3DSysFv */
void J3DSys::reinitGenMode() {
GXSetNumChans(0);
GXSetNumTexGens(1);
GXSetNumTevStages(1);
GXSetNumIndStages(0);
GXSetCullMode(GX_CULL_BACK);
GXSetCoPlanar(GX_FALSE);
}
/* ############################################################################################## */
/* 80450950-80450954 0003D0 0004+00 2/2 0/0 0/0 .sdata ColorBlack */
SECTION_SDATA static GXColor ColorBlack = {0x00, 0x00, 0x00, 0x00};
/* 80450954-80450958 0003D4 0004+00 2/2 0/0 0/0 .sdata ColorWhite */
SECTION_SDATA static GXColor ColorWhite = {0xFF, 0xFF, 0xFF, 0xFF};
/* 803107E8-80310894 30B128 00AC+00 1/1 0/0 0/0 .text reinitLighting__6J3DSysFv */
void J3DSys::reinitLighting() {
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
GX_AF_NONE);
GXSetChanCtrl(GX_COLOR1A1, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE,
GX_AF_NONE);
GXSetChanAmbColor(GX_COLOR0A0, ColorBlack);
GXSetChanAmbColor(GX_COLOR1A1, ColorBlack);
GXSetChanMatColor(GX_COLOR0A0, ColorWhite);
GXSetChanMatColor(GX_COLOR1A1, ColorWhite);
}
/* 80310894-80310998 30B1D4 0104+00 1/1 0/0 0/0 .text reinitTransform__6J3DSysFv */
void J3DSys::reinitTransform() {
GXSetCurrentMtx(GX_PNMTX0);
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX1, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD2, GX_TG_MTX2x4, GX_TG_TEX2, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD3, GX_TG_MTX2x4, GX_TG_TEX3, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD4, GX_TG_MTX2x4, GX_TG_TEX4, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD5, GX_TG_MTX2x4, GX_TG_TEX5, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD6, GX_TG_MTX2x4, GX_TG_TEX6, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
GXSetTexCoordGen2(GX_TEXCOORD7, GX_TG_MTX2x4, GX_TG_TEX7, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
}
/* 80310998-80310A3C 30B2D8 00A4+00 2/2 0/0 0/0 .text reinitTexture__6J3DSysFv */
void J3DSys::reinitTexture() {
GXTexObj texObj;
GXInitTexObj(&texObj, NullTexData, 4, 4, GX_TF_IA8, GX_CLAMP, GX_CLAMP, GX_FALSE);
GXLoadTexObj(&texObj, GX_TEXMAP0);
GXLoadTexObj(&texObj, GX_TEXMAP1);
GXLoadTexObj(&texObj, GX_TEXMAP2);
GXLoadTexObj(&texObj, GX_TEXMAP3);
GXLoadTexObj(&texObj, GX_TEXMAP4);
GXLoadTexObj(&texObj, GX_TEXMAP5);
GXLoadTexObj(&texObj, GX_TEXMAP6);
GXLoadTexObj(&texObj, GX_TEXMAP7);
}
/* 80310A3C-80310D44 30B37C 0308+00 1/1 0/0 0/0 .text reinitTevStages__6J3DSysFv */
void J3DSys::reinitTevStages() {
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE1, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE2, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE3, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE4, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE5, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE6, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE7, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE8, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE9, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE10, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE11, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE12, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE13, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE14, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevOrder(GX_TEVSTAGE15, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
GXSetTevColor(GX_TEVREG0, ColorWhite);
GXSetTevColor(GX_TEVREG1, ColorWhite);
GXSetTevColor(GX_TEVREG2, ColorWhite);
GXSetTevKColor(GX_KCOLOR0, ColorWhite);
GXSetTevKColor(GX_KCOLOR1, ColorWhite);
GXSetTevKColor(GX_KCOLOR2, ColorWhite);
GXSetTevKColor(GX_KCOLOR3, ColorWhite);
for (u32 i = 0; i < GX_MAX_TEVSTAGE; i++) {
GXSetTevColorIn((GXTevStageID)i, GX_CC_RASC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO);
GXSetTevColorOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
GXSetTevAlphaIn((GXTevStageID)i, GX_CA_RASA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO);
GXSetTevAlphaOp((GXTevStageID)i, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE,
GX_TEVPREV);
GXSetTevKColorSel((GXTevStageID)i, GX_TEV_KCSEL_1_4);
GXSetTevKAlphaSel((GXTevStageID)i, GX_TEV_KASEL_1);
GXSetTevSwapMode((GXTevStageID)i, GX_TEV_SWAP0, GX_TEV_SWAP0);
}
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
GXSetTevSwapModeTable(GX_TEV_SWAP1, GX_CH_RED, GX_CH_RED, GX_CH_RED, GX_CH_ALPHA);
GXSetTevSwapModeTable(GX_TEV_SWAP2, GX_CH_GREEN, GX_CH_GREEN, GX_CH_GREEN, GX_CH_ALPHA);
GXSetTevSwapModeTable(GX_TEV_SWAP3, GX_CH_BLUE, GX_CH_BLUE, GX_CH_BLUE, GX_CH_ALPHA);
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
}
/* ############################################################################################## */
/* 803CD8E0-803CD8F8 02AA00 0018+00 1/1 0/0 0/0 .data IndMtx */
SECTION_DATA static Mtx23 IndMtx = {0.5f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f};
/* 80310D44-80310E3C 30B684 00F8+00 1/1 0/0 0/0 .text reinitIndStages__6J3DSysFv */
void J3DSys::reinitIndStages() {
for (u32 i = 0; i < GX_MAX_TEVSTAGE; i++) {
GXSetTevDirect((GXTevStageID)i);
}
GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD0, GX_TEXMAP0);
GXSetIndTexOrder(GX_INDTEXSTAGE1, GX_TEXCOORD1, GX_TEXMAP1);
GXSetIndTexOrder(GX_INDTEXSTAGE2, GX_TEXCOORD2, GX_TEXMAP2);
GXSetIndTexOrder(GX_INDTEXSTAGE3, GX_TEXCOORD3, GX_TEXMAP3);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
GXSetIndTexCoordScale(GX_INDTEXSTAGE1, GX_ITS_1, GX_ITS_1);
GXSetIndTexCoordScale(GX_INDTEXSTAGE2, GX_ITS_1, GX_ITS_1);
GXSetIndTexCoordScale(GX_INDTEXSTAGE3, GX_ITS_1, GX_ITS_1);
GXSetIndTexMtx(GX_ITM_0, (f32*)IndMtx, 1);
GXSetIndTexMtx(GX_ITM_1, (f32*)IndMtx, 1);
GXSetIndTexMtx(GX_ITM_2, (f32*)IndMtx, 1);
}
/* 80310E3C-80310ED0 30B77C 0094+00 1/1 0/0 0/0 .text reinitPixelProc__6J3DSysFv */
void J3DSys::reinitPixelProc() {
GXSetBlendMode(GX_BM_NONE, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
GXSetColorUpdate(GX_TRUE);
GXSetAlphaUpdate(GX_FALSE);
GXSetDither(GX_TRUE);
GXSetFog(GX_FOG_NONE, 0.0f, 1.0f, 0.1f, 1.0f, ColorBlack);
GXSetFogRangeAdj(GX_FALSE, 0, NULL);
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE);
GXSetZCompLoc(GX_TRUE);
}
/* ############################################################################################## */
/* 80451598-804515A0 000A98 0004+04 0/0 1/1 0/0 .sbss j3dDefaultViewNo */
u32 j3dDefaultViewNo;
+565
View File
@@ -0,0 +1,565 @@
//
// J3DTevs
//
#include "JSystem/J3DGraphBase/J3DTevs.h"
#include "JSystem/J3DGraphBase/J3DGD.h"
#include "JSystem/J3DGraphBase/J3DMatBlock.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "JSystem/J3DGraphBase/J3DTransform.h"
static void J3DGDLoadTexMtxImm(f32 (*)[4], u32, _GXTexMtxType);
static void J3DGDLoadPostTexMtxImm(f32 (*)[4], u32);
/* 80323590-80323644 31DED0 00B4+00 0/0 3/3 0/0 .text load__11J3DLightObjCFUl */
void J3DLightObj::load(u32 lightIdx) const {
GDOverflowCheck(0x48);
J3DGDSetLightPos(GXLightID(1 << lightIdx), mInfo.mLightPosition.x, mInfo.mLightPosition.y, mInfo.mLightPosition.z);
J3DGDSetLightAttn(GXLightID(1 << lightIdx), mInfo.mCosAtten.x, mInfo.mCosAtten.y, mInfo.mCosAtten.z, mInfo.mDistAtten.x, mInfo.mDistAtten.y, mInfo.mDistAtten.z);
J3DGDSetLightColor(GXLightID(1 << lightIdx), mInfo.mColor);
J3DGDSetLightDir(GXLightID(1 << lightIdx), mInfo.mLightDirection.x, mInfo.mLightDirection.y, mInfo.mLightDirection.z);
}
/* 80323644-803238C4 31DF84 0280+00 0/0 3/3 0/0 .text loadTexCoordGens__FUlP11J3DTexCoord
*/
void loadTexCoordGens(u32 param_0, J3DTexCoord* param_1) {
GDOverflowCheck(param_0 * 8 + 10);
J3DGDWriteXFCmdHdr(0x1040, param_0);
for (int i = 0; i < param_0; i++) {
J3DGDSetTexCoordGen(
GXTexGenType(param_1[i].getTexGenType()),
GXTexGenSrc(param_1[i].getTexGenSrc())
);
}
J3DGDWriteXFCmdHdr(0x1050, param_0);
if (j3dSys.checkFlag(0x40000000)) {
for (int i = 0; i < param_0; i++) {
J3DGDWrite_u32(param_1[i].getTexGenMtx() == 60 ? 61 : i * 3);
}
} else {
for (int i = 0; i < param_0; i++) {
J3DGDWrite_u32(61);
}
}
}
/* 803238C4-80323900 31E204 003C+00 0/0 6/6 0/0 .text load__9J3DTexMtxCFUl */
void J3DTexMtx::load(u32 mtxIdx) const {
if (j3dSys.checkFlag(J3DSysFlag_PostTexMtx)) {
loadPostTexMtx(mtxIdx);
} else {
loadTexMtx(mtxIdx);
}
}
/* 80323900-80323920 31E240 0020+00 0/0 2/2 0/0 .text calc__9J3DTexMtxFPA4_Cf */
void J3DTexMtx::calc(f32 const (*param_0)[4]) {
calcTexMtx(param_0);
}
/* 80323920-80323C0C 31E260 02EC+00 2/1 0/0 0/0 .text calcTexMtx__9J3DTexMtxFPA4_Cf */
void J3DTexMtx::calcTexMtx(const Mtx param_0) {
Mtx44 mtx1;
Mtx44 mtx2;
static Mtx qMtx = {
0.5f, 0.0f, 0.5f, 0.0f,
0.0f, -0.5f, 0.5f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
};
static Mtx qMtx2 = {
0.5f, 0.0f, 0.0f, 0.5f,
0.0f, -0.5f, 0.0f, 0.5f,
0.0f, 0.0f, 1.0f, 0.0f,
};
u8 r28 = mTexMtxInfo.mInfo & 0x3f;
u32 r30 = (mTexMtxInfo.mInfo >> 7) & 1;
switch (r28) {
case 8:
case 9:
case 11:
if (r30 == 0) {
J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx2);
}
MTXConcat(mtx2, qMtx, mtx2);
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
MTXConcat(mtx1, param_0, mMtx);
break;
case 7:
if (r30 == 0) {
J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
} else if (r30 == 1) {
J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx1);
}
MTXConcat(mtx1, qMtx, mtx1);
MTXConcat(mtx1, param_0, mMtx);
break;
case 10:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
}
MTXConcat(mtx2, qMtx2, mtx2);
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
MTXConcat(mtx1, param_0, mMtx);
break;
case 6:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx1);
}
MTXConcat(mtx1, qMtx2, mtx1);
MTXConcat(mtx1, param_0, mMtx);
break;
case 1:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx1);
}
MTXConcat(mtx1, param_0, mMtx);
break;
case 2:
case 3:
case 5:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
}
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
MTXConcat(mtx1, param_0, mMtx);
break;
case 4:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
}
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mMtx);
break;
default:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mMtx);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mMtx);
}
break;
}
}
/* 80323C0C-80323F64 31E54C 0358+00 1/0 2/2 0/0 .text calcPostTexMtx__9J3DTexMtxFPA4_Cf
*/
void J3DTexMtx::calcPostTexMtx(const Mtx param_0) {
Mtx44 mtx1;
Mtx44 mtx2;
static Mtx qMtx = {
0.5f, 0.0f, 0.5f, 0.0f,
0.0f, -0.5f, 0.5f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
};
static Mtx qMtx2 = {
0.5f, 0.0f, 0.0f, 0.5f,
0.0f, -0.5f, 0.0f, 0.5f,
0.0f, 0.0f, 1.0f, 0.0f,
};
u8 r29 = mTexMtxInfo.mInfo & 0x3f;
u32 r30 = (mTexMtxInfo.mInfo >> 7) & 1;
switch (r29) {
case 8:
case 11:
if (r30 == 0) {
J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx2);
}
MTXConcat(mtx2, qMtx, mtx2);
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
MTXConcat(mtx1, param_0, mMtx);
break;
case 9:
if (r30 == 0) {
J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx2);
}
MTXConcat(mtx2, qMtx, mtx2);
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mMtx);
break;
case 7:
if (r30 == 0) {
J3DGetTextureMtx(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
} else if (r30 == 1) {
J3DGetTextureMtxMaya(mTexMtxInfo.mSRT, mtx1);
}
MTXConcat(mtx1, qMtx, mMtx);
break;
case 10:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
}
MTXConcat(mtx2, qMtx2, mtx2);
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
MTXConcat(mtx1, param_0, mMtx);
break;
case 6:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx1);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx1);
}
MTXConcat(mtx1, qMtx2, mMtx);
break;
case 1:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mMtx);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mMtx);
}
break;
case 2:
case 5:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
}
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mtx1);
MTXConcat(mtx1, param_0, mMtx);
break;
case 3:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
}
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mMtx);
break;
case 4:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mtx2);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mtx2);
}
J3DMtxProjConcat(mtx2, mTexMtxInfo.mEffectMtx, mMtx);
break;
default:
if (r30 == 0) {
J3DGetTextureMtxOld(mTexMtxInfo.mSRT, mTexMtxInfo.mCenter, mMtx);
} else if (r30 == 1) {
J3DGetTextureMtxMayaOld(mTexMtxInfo.mSRT, mMtx);
}
break;
}
}
/* 80323F64-80323F88 31E8A4 0024+00 0/0 1/1 0/0 .text isTexNoReg__FPv */
bool isTexNoReg(void* param_0) {
u8 r31 = ((u8*)param_0)[1];
if (r31 >= 0x80 && r31 <= 0xbb) {
return true;
}
return false;
}
/* 80323F88-80323F94 31E8C8 000C+00 0/0 1/1 0/0 .text getTexNoReg__FPv */
u16 getTexNoReg(void* param_0) {
return *(u32*)((u8*)param_0 + 1);
}
/* 80323F94-8032413C 31E8D4 01A8+00 0/0 20/20 0/0 .text loadTexNo__FUlRCUs */
void loadTexNo(u32 param_0, u16 const& param_1) {
ResTIMG* resTIMG = j3dSys.getTexture()->getResTIMG(param_1);
J3DSys::sTexCoordScaleTable[param_0].field_0x00 = resTIMG->width;
J3DSys::sTexCoordScaleTable[param_0].field_0x02 = resTIMG->height;
GDOverflowCheck(0x14);
J3DGDSetTexImgPtr(GXTexMapID(param_0), (u8*)resTIMG + resTIMG->imageOffset);
J3DGDSetTexImgAttr(GXTexMapID(param_0), resTIMG->width, resTIMG->height, GXTexFmt(resTIMG->format & 0x0f));
J3DGDSetTexLookupMode(GXTexMapID(param_0), GXTexWrapMode(resTIMG->wrapS), GXTexWrapMode(resTIMG->wrapT), GXTexFilter(resTIMG->minFilter), GXTexFilter(resTIMG->magFilter), resTIMG->minLOD * 0.125f, resTIMG->maxLOD * 0.125f, resTIMG->LODBias * 0.01f, resTIMG->biasClamp, resTIMG->doEdgeLOD, GXAnisotropy(resTIMG->maxAnisotropy));
if (resTIMG->indexTexture == true) {
GXTlutSize tlutSize = resTIMG->numColors > 16 ? GX_TLUT_256 : GX_TLUT_16;
GDOverflowCheck(0x14);
J3DGDLoadTlut((u8*)resTIMG + resTIMG->paletteOffset, (param_0 << 13) + 0xf0000, tlutSize);
J3DGDSetTexTlut(GXTexMapID(param_0), (param_0 << 13) + 0xf0000, GXTlutFmt(resTIMG->colorFormat));
}
}
/* 8032413C-80324160 31EA7C 0024+00 0/0 2/2 0/0 .text patchTexNo_PtrToIdx__FUlRCUs */
void patchTexNo_PtrToIdx(u32 texID, u16 const& idx) {
J3DGDSetTexImgPtrRaw(GXTexMapID(texID), idx);
}
/* 80324160-80324194 31EAA0 0034+00 0/0 2/2 0/0 .text loadNBTScale__FR11J3DNBTScale */
void loadNBTScale(J3DNBTScale& param_0) {
if (param_0.mbHasScale == true) {
j3dSys.setNBTScale(&param_0.mScale);
} else {
j3dSys.setNBTScale(NULL);
}
}
/* ############################################################################################## */
/* 803A1EC8-803A1EFC 02E528 0034+00 0/0 9/9 24/24 .rodata j3dDefaultLightInfo */
extern const J3DLightInfo j3dDefaultLightInfo = {
0.0f, 0.0f, 0.0f,
0.0f, -1.0f, 0.0f,
0xff, 0xff, 0xff, 0xff,
1.0f, 0.0f, 0.0f,
1.0f, 0.0f, 0.0f,
};
/* 803A1EFC-803A1F1C 02E55C 0020+00 0/0 5/5 0/0 .rodata j3dDefaultTexCoordInfo */
extern J3DTexCoordInfo const j3dDefaultTexCoordInfo[8] = {
{GX_MTX2x4, GX_TG_TEX0, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX1, GX_IDENTITY, 0},
{GX_MTX2x4, GX_TG_TEX2, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX3, GX_IDENTITY, 0},
{GX_MTX2x4, GX_TG_TEX4, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX5, GX_IDENTITY, 0},
{GX_MTX2x4, GX_TG_TEX6, GX_IDENTITY, 0}, {GX_MTX2x4, GX_TG_TEX7, GX_IDENTITY, 0},
};
/* 803A1F1C-803A1F80 02E57C 0064+00 0/0 1/1 0/0 .rodata j3dDefaultTexMtxInfo */
extern J3DTexMtxInfo const j3dDefaultTexMtxInfo = {
0x01,
0x00,
0xFF,
0xFF,
{0.0f, 0.0f, 0.0f},
{1.0f, 1.0f, 0, 0.0f, 0.0f},
{1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
1.0f},
};
/* 803A1F80-803A1F9C 02E5E0 001C+00 0/0 2/2 0/0 .rodata j3dDefaultIndTexMtxInfo */
extern J3DIndTexMtxInfo const j3dDefaultIndTexMtxInfo = {
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f,
1
};
/* 803A1F9C-803A1FB0 02E5FC 0014+00 0/0 1/1 0/0 .rodata j3dDefaultTevStageInfo */
extern J3DTevStageInfo const j3dDefaultTevStageInfo = {
0x04, 0x0A, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
0x05, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
};
/* 803A1FB0-803A1FBC 02E610 000C+00 0/0 2/2 0/0 .rodata j3dDefaultIndTevStageInfo */
extern J3DIndTevStageInfo const j3dDefaultIndTevStageInfo = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/* 803A1FBC-803A1FE8 02E61C 002C+00 0/0 3/3 0/0 .rodata j3dDefaultFogInfo */
extern J3DFogInfo const j3dDefaultFogInfo = {
0x00, 0x00, 0x0140, 0.0f, 0.0f, 0.1f, 10000.0f, 0xFF, 0xFF, 0xFF, 0x00,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
};
/* 803A1FE8-803A1FF8 02E648 0010+00 0/0 3/3 0/0 .rodata j3dDefaultNBTScaleInfo */
extern J3DNBTScaleInfo const j3dDefaultNBTScaleInfo = {
0x00, 1.0f, 1.0f, 1.0f,
};
/* 80434C98-80436A60 0619B8 1DC7+01 1/1 0/0 0/0 .bss j3dTexCoordTable */
static u8 j3dTexCoordTable[7623 + 1 /* padding */];
/* 80324194-8032423C 31EAD4 00A8+00 0/0 1/1 0/0 .text makeTexCoordTable__Fv */
void makeTexCoordTable() {
u8 texMtx[] = {
GX_TEXMTX0,
GX_TEXMTX1,
GX_TEXMTX2,
GX_TEXMTX3,
GX_TEXMTX4,
GX_TEXMTX5,
GX_TEXMTX6,
GX_TEXMTX7,
GX_TEXMTX8,
GX_TEXMTX9,
GX_IDENTITY,
};
u8* table = j3dTexCoordTable;
for (u32 i = 0; i < 11; i++) {
for (u32 j = 0; j < 21; j++) {
for (int k = 0; k < ARRAY_SIZE(texMtx); k++) {
u32 idx = j * 11 + i * 0xe7 + k;
table[idx * 3 + 0] = i;
table[idx * 3 + 1] = j;
table[idx * 3 + 2] = texMtx[k];
}
}
}
}
/* ############################################################################################## */
/* 80436A60-80436E60 063780 0400+00 1/1 3/3 0/0 .bss j3dTevSwapTableTable */
u8 j3dTevSwapTableTable[1024];
/* 80436E60-80437160 063B80 0300+00 1/1 2/2 0/0 .bss j3dAlphaCmpTable */
u8 j3dAlphaCmpTable[768];
/* 8032423C-803242A8 31EB7C 006C+00 0/0 1/1 0/0 .text makeAlphaCmpTable__Fv */
void makeAlphaCmpTable() {
u8* table = j3dAlphaCmpTable;
for (u32 i = 0; i < 8; i++) {
for (int j = 0; j < 4; j++) {
for (u32 k = 0; k < 8; k++) {
u32 idx = i * 32 + j * 8 + k;
table[idx * 3] = i;
table[idx * 3 + 1] = j;
table[idx * 3 + 2] = k;
}
}
}
}
/* ############################################################################################## */
/* 80437160-804371C0 063E80 0060+00 1/1 4/4 5/5 .bss j3dZModeTable */
extern u8 j3dZModeTable[96];
u8 j3dZModeTable[96];
/* 803242A8-80324314 31EBE8 006C+00 0/0 1/1 0/0 .text makeZModeTable__Fv */
void makeZModeTable() {
u8* table = j3dZModeTable;
for (int i = 0; i < 2; i++) {
for (u32 j = 0; j < 8; j++) {
for (int k = 0; k < 2; k++) {
u32 idx = j * 2 + i * 16 + k;
table[idx * 3 + 0] = i;
table[idx * 3 + 1] = j;
table[idx * 3 + 2] = k;
}
}
}
}
/* 80324314-80324358 31EC54 0044+00 0/0 1/1 0/0 .text makeTevSwapTable__Fv */
void makeTevSwapTable() {
u8* table = j3dTevSwapTableTable;
int i = 0;
do {
table[0] = i >> 6;
table[1] = (i >> 4) & 3;
table[2] = (i >> 2) & 3;
table[3] = i & 3;
i++;
table += 4;
} while (i < 256);
}
/* 80324358-803243BC 31EC98 0064+00 1/1 0/0 0/0 .text loadTexMtx__9J3DTexMtxCFUl */
void J3DTexMtx::loadTexMtx(u32 param_0) const {
GDOverflowCheck(0x35);
J3DGDLoadTexMtxImm((MtxP)mMtx, param_0 * 3 + 30, (_GXTexMtxType)mTexMtxInfo.mProjection);
}
/* 803243BC-8032441C 31ECFC 0060+00 1/1 0/0 0/0 .text loadPostTexMtx__9J3DTexMtxCFUl */
void J3DTexMtx::loadPostTexMtx(u32 param_0) const {
GDOverflowCheck(0x35);
J3DGDLoadPostTexMtxImm((MtxP)mMtx, param_0 * 3 + 0x40);
}
/* 8032441C-8032499C 31ED5C 0580+00 1/1 0/0 0/0 .text J3DGDLoadTexMtxImm__FPA4_fUl13_GXTexMtxType
*/
static void J3DGDLoadTexMtxImm(f32 (*param_1)[4], u32 param_2, _GXTexMtxType param_3) {
u16 addr = param_2 << 2;
u8 len = param_3 == GX_MTX2x4 ? 8 : 12;
J3DGDWriteXFCmdHdr(addr & 0xffff, len);
J3DGDWrite_f32(param_1[0][0]);
J3DGDWrite_f32(param_1[0][1]);
J3DGDWrite_f32(param_1[0][2]);
J3DGDWrite_f32(param_1[0][3]);
J3DGDWrite_f32(param_1[1][0]);
J3DGDWrite_f32(param_1[1][1]);
J3DGDWrite_f32(param_1[1][2]);
J3DGDWrite_f32(param_1[1][3]);
if (param_3 == GX_MTX3x4) {
J3DGDWrite_f32(param_1[2][0]);
J3DGDWrite_f32(param_1[2][1]);
J3DGDWrite_f32(param_1[2][2]);
J3DGDWrite_f32(param_1[2][3]);
}
}
/* 8032499C-80324F08 31F2DC 056C+00 1/1 0/0 0/0 .text J3DGDLoadPostTexMtxImm__FPA4_fUl */
static void J3DGDLoadPostTexMtxImm(f32 (*param_1)[4], u32 param_2) {
u16 addr = (param_2 - 0x40) * 4 + 0x500;
J3DGDWriteXFCmdHdr(addr, 12);
J3DGDWrite_f32(param_1[0][0]);
J3DGDWrite_f32(param_1[0][1]);
J3DGDWrite_f32(param_1[0][2]);
J3DGDWrite_f32(param_1[0][3]);
J3DGDWrite_f32(param_1[1][0]);
J3DGDWrite_f32(param_1[1][1]);
J3DGDWrite_f32(param_1[1][2]);
J3DGDWrite_f32(param_1[1][3]);
J3DGDWrite_f32(param_1[2][0]);
J3DGDWrite_f32(param_1[2][1]);
J3DGDWrite_f32(param_1[2][2]);
J3DGDWrite_f32(param_1[2][3]);
}
/* ############################################################################################## */
/* 804563C0-804563C4 0049C0 0004+00 0/0 4/4 0/0 .sdata2 j3dDefaultColInfo */
extern const GXColor j3dDefaultColInfo = {0xFF, 0xFF, 0xFF, 0xFF};
/* 804563C4-804563C8 0049C4 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultAmbInfo */
extern const GXColor j3dDefaultAmbInfo = {0x32, 0x32, 0x32, 0x32};
/* 804563C8-804563CC 0049C8 0004+00 0/0 1/1 0/0 .sdata2 None */
extern const u8 data_804563C8 = 0x01;
/* 804563CC-804563D0 0049CC 0004+00 0/0 3/3 0/0 .sdata2 j3dDefaultTevOrderInfoNull */
extern const J3DTevOrderInfo j3dDefaultTevOrderInfoNull = {0xFF, 0xFF, 0xFF, 0x00};
/* 804563D0-804563D4 0049D0 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultIndTexOrderNull */
extern const J3DIndTexOrderInfo j3dDefaultIndTexOrderNull = {0xFF, 0xFF, 0x00, 0x00};
/* 804563D4-804563D8 0049D4 0004+00 0/0 5/5 0/0 .sdata2 j3dDefaultTevColor */
extern const GXColorS10 j3dDefaultTevColor = {0xFF, 0xFF, 0xFF, 0xFF};
/* 804563DC-804563E0 0049DC 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultIndTexCoordScaleInfo */
extern const J3DIndTexCoordScaleInfo j3dDefaultIndTexCoordScaleInfo = {
0x00,
0x00,
0x00,
0x00,
};
/* 804563E0-804563E4 0049E0 0004+00 0/0 5/5 0/0 .sdata2 j3dDefaultTevKColor */
extern const GXColor j3dDefaultTevKColor = {0xFF, 0xFF, 0xFF, 0xFF};
/* 804563E4-804563E8 0049E4 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultTevSwapMode */
extern J3DTevSwapModeInfo const j3dDefaultTevSwapMode = {
0x00,
0x00,
0x00,
0x00,
};
/* 804563E8-804563EC 0049E8 0004+00 0/0 2/2 0/0 .sdata2 j3dDefaultTevSwapModeTable */
extern const J3DTevSwapModeTableInfo j3dDefaultTevSwapModeTable = {0x00, 0x01, 0x02, 0x03};
/* 804563EC-804563F0 0049EC 0004+00 0/0 3/3 0/0 .sdata2 j3dDefaultBlendInfo */
extern const J3DBlendInfo j3dDefaultBlendInfo = {GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_NOOP};
/* 804563F0-804563F8 0049F0 0008+00 0/0 3/3 0/0 .sdata2 j3dDefaultColorChanInfo */
extern const J3DColorChanInfo j3dDefaultColorChanInfo = {
0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0xFF, 0xFF,
};
/* 804563F8-804563FA 0049F8 0002+00 0/0 1/1 0/0 .sdata2 None */
extern const u16 data_804563F8 = 0x1B00;
/* 804563FA-804563FC 0049FA 0002+00 0/0 1/1 0/0 .sdata2 j3dDefaultAlphaCmpID */
const u16 j3dDefaultAlphaCmpID = 0x00E7;
/* 804563FC-80456400 0049FC 0002+02 0/0 3/3 0/0 .sdata2 j3dDefaultZModeID */
const u16 j3dDefaultZModeID = 0x0017;
+70
View File
@@ -0,0 +1,70 @@
//
// Generated By: dol2asm
// Translation Unit: J3DTexture
//
#include "JSystem/J3DGraphBase/J3DTexture.h"
#include "dolphin/gx.h"
/* 8031204C-803121A4 30C98C 0158+00 0/0 1/1 0/0 .text loadGX__10J3DTextureCFUs11_GXTexMapID */
void J3DTexture::loadGX(u16 idx, GXTexMapID texMapID) const {
ResTIMG* timg = getResTIMG(idx);
GXTexObj texObj;
if (!timg->indexTexture) {
GXInitTexObj(&texObj, ((u8*)timg) + timg->imageOffset, timg->width, timg->height,
(GXTexFmt)timg->format, (GXTexWrapMode)timg->wrapS, (GXTexWrapMode)timg->wrapT,
(GXBool)timg->mipmapEnabled);
} else {
GXTlutObj tlutObj;
GXInitTexObjCI(&texObj, ((u8*)timg) + timg->imageOffset, timg->width, timg->height,
(GXCITexFmt)timg->format, (GXTexWrapMode)timg->wrapS,
(GXTexWrapMode)timg->wrapT, (GXBool)timg->mipmapEnabled, (u32)texMapID);
GXInitTlutObj(&tlutObj, ((u8*)timg) + timg->paletteOffset, (GXTlutFmt)timg->colorFormat,
timg->numColors);
GXLoadTlut(&tlutObj, texMapID);
}
const f32 kLODClampScale = 1.0f / 8.0f;
const f32 kLODBiasScale = 1.0f / 100.0f;
GXInitTexObjLOD(&texObj, (GXTexFilter)timg->minFilter, (GXTexFilter)timg->magFilter,
timg->minLOD * kLODClampScale, timg->maxLOD * kLODClampScale,
timg->LODBias * kLODBiasScale, (GXBool)timg->biasClamp, (GXBool)timg->doEdgeLOD,
(GXAnisotropy)timg->maxAnisotropy);
GXLoadTexObj(&texObj, texMapID);
}
/* 803121A4-8031221C 30CAE4 0078+00 1/1 0/0 0/0 .text entryNum__10J3DTextureFUs */
void J3DTexture::entryNum(u16 num) {
mNum = num;
mpRes = new ResTIMG[num]();
for (s32 i = 0; i < mNum; i++) {
mpRes[i].paletteOffset = 0;
mpRes[i].imageOffset = 0;
}
}
/* 8031221C-80312488 30CB5C 026C+00 0/0 1/1 0/0 .text addResTIMG__10J3DTextureFUsPC7ResTIMG */
void J3DTexture::addResTIMG(u16 newNum, ResTIMG const* newRes) {
if (newNum == 0)
return;
u16 oldNum = mNum;
ResTIMG* oldRes = mpRes;
entryNum(mNum + newNum);
for (u16 i = 0; i < oldNum; i++) {
mpRes[i] = oldRes[i];
mpRes[i].imageOffset = (u32)(&oldRes[i]) + mpRes[i].imageOffset - (u32)(&mpRes[i]);
mpRes[i].paletteOffset = (u32)(&oldRes[i]) + mpRes[i].paletteOffset - (u32)(&mpRes[i]);
}
for (u16 i = oldNum; i < mNum; i++) {
mpRes[i] = newRes[i];
mpRes[i].imageOffset = (u32)(&newRes[i]) + mpRes[i].imageOffset - (u32)(&mpRes[i]);
mpRes[i].paletteOffset = (u32)(&newRes[i]) + mpRes[i].paletteOffset - (u32)(&mpRes[i]);
}
}
+378
View File
@@ -0,0 +1,378 @@
//
// Generated By: dol2asm
// Translation Unit: J3DTransform
//
#include "JSystem/J3DGraphBase/J3DTransform.h"
#include "JSystem/JMath/JMATrigonometric.h"
#include "JSystem/J3DGraphBase/J3DStruct.h"
#include "dol2asm.h"
#include "dolphin/base/PPCArch.h"
//
// Forward References:
//
extern "C" void __MTGQR7__FUl();
extern "C" void J3DGQRSetup7__FUlUlUlUl();
extern "C" void J3DCalcBBoardMtx__FPA4_f();
extern "C" void J3DCalcYBBoardMtx__FPA4_f();
extern "C" void J3DPSCalcInverseTranspose__FPA4_fPA3_f();
extern "C" void J3DGetTranslateRotateMtx__FRC16J3DTransformInfoPA4_f();
extern "C" void J3DGetTranslateRotateMtx__FsssfffPA4_f();
extern "C" void J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f();
extern "C" void J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f();
extern "C" void J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f();
extern "C" void J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f();
extern "C" void J3DScaleNrmMtx__FPA4_fRC3Vec();
extern "C" void J3DScaleNrmMtx33__FPA3_fRC3Vec();
extern "C" void J3DMtxProjConcat__FPA4_fPA4_fPA4_f();
extern "C" void J3DPSMtxArrayConcat__FPA4_fPA4_fPA4_fUl();
extern "C" extern f32 PSMulUnit01[2];
//
// External References:
//
extern "C" u8 sincosTable___5JMath[65536];
//
// Declarations:
//
/* 80311630-80311638 -00001 0008+00 0/0 0/0 0/0 .text __MTGQR7__FUl */
void __MTGQR7(register u32 v) {
// clang-format off
asm {
mtspr GQR7, v
}
// clang-format on
}
/* 80311638-80311670 30BF78 0038+00 0/0 2/2 0/0 .text J3DGQRSetup7__FUlUlUlUl */
void J3DGQRSetup7(u32 r0, u32 r1, u32 r2, u32 r3) {
u32 v = (((r0 << 8) + r1) << 16) | ((r2 << 8) + r3);
__MTGQR7(v);
}
/* ############################################################################################## */
/* 80456378-8045637C 004978 0004+00 6/6 0/0 0/0 .sdata2 @435 */
SECTION_SDATA2 static u8 lit_435[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80311670-80311760 30BFB0 00F0+00 0/0 2/2 0/0 .text J3DCalcBBoardMtx__FPA4_f */
// this uses a non-standard sqrtf, not sure why or how its supposed to be setup
#ifdef NONMATCHING
static inline f32 sqrtf2(f32 x) {
if (x > 0.0f) {
f32 guess = (f32)__frsqrte(x);
return (f32)(x * guess);
}
return x;
}
void J3DCalcBBoardMtx(Mtx mtx) {
f32 x = (mtx[0][0] * mtx[0][0]) + (mtx[1][0] * mtx[1][0]) + (mtx[2][0] * mtx[2][0]);
f32 y = (mtx[0][1] * mtx[0][1]) + (mtx[1][1] * mtx[1][1]) + (mtx[2][1] * mtx[2][1]);
f32 z = (mtx[0][2] * mtx[0][2]) + (mtx[1][2] * mtx[1][2]) + (mtx[2][2] * mtx[2][2]);
if (x > 0.0f) {
x *= sqrtf2(x);
}
if (y > 0.0f) {
y *= sqrtf2(y);
}
if (z > 0.0f) {
z *= sqrtf2(z);
}
mtx[0][0] = x;
mtx[0][1] = 0.0f;
mtx[0][2] = 0.0f;
mtx[1][0] = 0.0f;
mtx[1][1] = y;
mtx[1][2] = 0.0f;
mtx[2][0] = 0.0f;
mtx[2][1] = 0.0f;
mtx[2][2] = z;
}
#else
void J3DCalcBBoardMtx(f32 (*param_0)[4]) {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 803A1E30-803A1E50 02E490 0020+00 0/0 1/1 0/0 .rodata j3dDefaultTransformInfo */
extern J3DTransformInfo const j3dDefaultTransformInfo = {
{1.0f, 1.0f, 1.0f}, {0, 0, 0}, {0.0f, 0.0f, 0.0f}};
/* 803A1E50-803A1E5C 02E4B0 000C+00 0/0 1/1 0/0 .rodata j3dDefaultScale */
extern Vec const j3dDefaultScale = {1.0f, 1.0f, 1.0f};
/* 803A1E5C-803A1E8C 02E4BC 0030+00 0/0 8/8 7/7 .rodata j3dDefaultMtx */
extern Mtx const j3dDefaultMtx = {
{1.0f, 0.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 1.0f, 0.0f}};
/* 803A1E8C-803A1E98 02E4EC 000C+00 1/1 0/0 0/0 .rodata @443 */
SECTION_RODATA static u8 const lit_443[12] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
COMPILER_STRIP_GATE(0x803A1E8C, &lit_443);
/* 80311760-8031189C 30C0A0 013C+00 0/0 2/2 0/0 .text J3DCalcYBBoardMtx__FPA4_f */
void J3DCalcYBBoardMtx(f32 (*param_0)[4]) {
// NONMATCHING
}
/* 8031189C-80311964 30C1DC 00C8+00 0/0 6/6 0/0 .text J3DPSCalcInverseTranspose__FPA4_fPA3_f */
void J3DPSCalcInverseTranspose(f32 (*param_0)[4], f32 (*param_1)[3]) {
// NONMATCHING
}
/* 80311964-80311A24 30C2A4 00C0+00 0/0 2/2 2/2 .text
* J3DGetTranslateRotateMtx__FRC16J3DTransformInfoPA4_f */
void J3DGetTranslateRotateMtx(const J3DTransformInfo& tx, Mtx dst) {
f32 sx = JMASSin(tx.mRotation.x), cx = JMASCos(tx.mRotation.x);
f32 sy = JMASSin(tx.mRotation.y), cy = JMASCos(tx.mRotation.y);
f32 sz = JMASSin(tx.mRotation.z), cz = JMASCos(tx.mRotation.z);
dst[2][0] = -sy;
dst[0][0] = cz * cy;
dst[1][0] = sz * cy;
dst[2][1] = cy * sx;
dst[2][2] = cy * cx;
f32 cxsz = cx * sz;
f32 sxcz = sx * cz;
dst[0][1] = sxcz * sy - cxsz;
dst[1][2] = cxsz * sy - sxcz;
f32 sxsz = sx * sz;
f32 cxcz = cx * cz;
dst[0][2] = cxcz * sy + sxsz;
dst[1][1] = sxsz * sy + cxcz;
dst[0][3] = tx.mTranslate.x;
dst[1][3] = tx.mTranslate.y;
dst[2][3] = tx.mTranslate.z;
}
/* 80311A24-80311ACC 30C364 00A8+00 0/0 1/1 0/0 .text J3DGetTranslateRotateMtx__FsssfffPA4_f */
void J3DGetTranslateRotateMtx(s16 rx, s16 ry, s16 rz, f32 tx, f32 ty, f32 tz, Mtx dst) {
f32 sx = JMASSin(rx), cx = JMASCos(rx);
f32 sy = JMASSin(ry), cy = JMASCos(ry);
f32 sz = JMASSin(rz), cz = JMASCos(rz);
dst[2][0] = -sy;
dst[0][0] = cz * cy;
dst[1][0] = sz * cy;
dst[2][1] = cy * sx;
dst[2][2] = cy * cx;
f32 cxsz = cx * sz;
f32 sxcz = sx * cz;
dst[0][1] = sxcz * sy - cxsz;
dst[1][2] = cxsz * sy - sxcz;
f32 sxsz = sx * sz;
f32 cxcz = cx * cz;
dst[0][2] = cxcz * sy + sxsz;
dst[1][1] = sxsz * sy + cxcz;
dst[0][3] = tx;
dst[1][3] = ty;
dst[2][3] = tz;
}
/* ############################################################################################## */
/* 8045637C-80456380 00497C 0004+00 4/4 0/0 0/0 .sdata2 @526 */
SECTION_SDATA2 static f32 lit_526 = 1.0f;
/* 80311ACC-80311B80 30C40C 00B4+00 0/0 3/3 0/0 .text
* J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f */
void J3DGetTextureMtx(const J3DTextureSRTInfo& srt, const Vec& center, Mtx dst) {
f32 sr = JMASSin(srt.mRotation), cr = JMASCos(srt.mRotation);
f32 cx = srt.mScaleX * cr;
f32 sx = srt.mScaleX * sr;
f32 sy = srt.mScaleY * sr;
f32 cy = srt.mScaleY * cr;
dst[0][0] = cx;
dst[0][1] = -sx;
dst[0][2] = (-cx * center.x + sx * center.y) + center.x + srt.mTranslationX;
dst[1][0] = sy;
dst[1][1] = cy;
dst[1][2] = (-sy * center.x - cy * center.y) + center.y + srt.mTranslationY;
dst[2][3] = 0.0f;
dst[2][1] = 0.0f;
dst[2][0] = 0.0f;
dst[1][3] = 0.0f;
dst[0][3] = 0.0f;
dst[2][2] = 1.0f;
}
/* 80311B80-80311C34 30C4C0 00B4+00 0/0 3/3 0/0 .text
* J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f */
void J3DGetTextureMtxOld(const J3DTextureSRTInfo& srt, const Vec& center, Mtx dst) {
f32 sr = JMASSin(srt.mRotation), cr = JMASCos(srt.mRotation);
f32 cx = srt.mScaleX * cr;
f32 sx = srt.mScaleX * sr;
f32 sy = srt.mScaleY * sr;
f32 cy = srt.mScaleY * cr;
dst[0][0] = cx;
dst[0][1] = -sx;
dst[0][3] = (-cx * center.x + sx * center.y) + center.x + srt.mTranslationX;
dst[1][0] = sy;
dst[1][1] = cy;
dst[1][3] = (-sy * center.x - cy * center.y) + center.y + srt.mTranslationY;
dst[2][3] = 0.0f;
dst[2][1] = 0.0f;
dst[2][0] = 0.0f;
dst[1][2] = 0.0f;
dst[0][2] = 0.0f;
dst[2][2] = 1.0f;
}
/* ############################################################################################## */
/* 80456380-80456388 004980 0004+04 2/2 0/0 0/0 .sdata2 @557 */
SECTION_SDATA2 static f32 lit_557[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 80311C34-80311CE4 30C574 00B0+00 0/0 3/3 0/0 .text
* J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f */
void J3DGetTextureMtxMaya(const J3DTextureSRTInfo& srt, Mtx dst) {
f32 sr = JMASSin(srt.mRotation), cr = JMASCos(srt.mRotation);
f32 tx = srt.mTranslationX - 0.5f;
f32 ty = srt.mTranslationY - 0.5f;
dst[0][0] = srt.mScaleX * cr;
dst[0][1] = srt.mScaleY * sr;
dst[0][2] = tx * cr - sr * (ty + srt.mScaleY) + 0.5f;
dst[1][0] = -srt.mScaleX * sr;
dst[1][1] = srt.mScaleY * cr;
dst[1][2] = -tx * sr - cr * (ty + srt.mScaleY) + 0.5f;
dst[2][3] = 0.0f;
dst[2][1] = 0.0f;
dst[2][0] = 0.0f;
dst[1][3] = 0.0f;
dst[0][3] = 0.0f;
dst[2][2] = 1.0f;
}
/* 80311CE4-80311D94 30C624 00B0+00 0/0 3/3 0/0 .text
* J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f */
void J3DGetTextureMtxMayaOld(const J3DTextureSRTInfo& srt, Mtx dst) {
f32 sr = JMASSin(srt.mRotation), cr = JMASCos(srt.mRotation);
f32 tx = srt.mTranslationX - 0.5f;
f32 ty = srt.mTranslationY - 0.5f;
dst[0][0] = srt.mScaleX * cr;
dst[0][1] = srt.mScaleY * sr;
dst[0][3] = tx * cr - sr * (ty + srt.mScaleY) + 0.5f;
dst[1][0] = -srt.mScaleX * sr;
dst[1][1] = srt.mScaleY * cr;
dst[1][3] = -tx * sr - cr * (ty + srt.mScaleY) + 0.5f;
dst[2][3] = 0.0f;
dst[2][1] = 0.0f;
dst[2][0] = 0.0f;
dst[1][2] = 0.0f;
dst[0][2] = 0.0f;
dst[2][2] = 1.0f;
}
/* 80311D94-80311DF8 30C6D4 0064+00 0/0 2/2 0/0 .text J3DScaleNrmMtx__FPA4_fRC3Vec */
#ifdef NONMATCHING
void J3DScaleNrmMtx(register Mtx mtx, const register Vec& scl) {
register f32 mtx_xy, mtx_z_, scl_xy, scl_z_;
asm {
/* Row 0 */
psq_l scl_xy, 0(scl), 0, 0
psq_l mtx_xy, 0(mtx), 0, 0
lfs scl_z_, 8(scl)
lfs mtx_z_, 8(mtx)
ps_mul f4, mtx_xy, scl_xy
psq_st f4, 0(mtx), 0, 0
fmuls f4, mtx_z_, scl_z_
stfs f4, 8(mtx)
/* Row 1 */
psq_l scl_xy, 0(scl), 0, 0
psq_l mtx_xy, 16(mtx), 0, 0
lfs scl_z_, 8(scl)
lfs mtx_z_, 24(mtx)
ps_mul f4, mtx_xy, scl_xy
psq_st f4, 16(mtx), 0, 0
fmuls f4, mtx_z_, scl_z_
stfs f4, 24(mtx)
/* Row 2 */
psq_l scl_xy, 0(scl), 0, 0
psq_l mtx_xy, 32(mtx), 0, 0
lfs scl_z_, 8(scl)
lfs mtx_z_, 40(mtx)
ps_mul f4, mtx_xy, scl_xy
psq_st f4, 32(mtx), 0, 0
fmuls f4, mtx_z_, scl_z_
stfs f4, 40(mtx)
}
}
#else
void J3DScaleNrmMtx(f32 (*param_0)[4], Vec const& param_1) {
// NONMATCHING
}
#endif
/* 80311DF8-80311E4C 30C738 0054+00 0/0 5/5 0/0 .text J3DScaleNrmMtx33__FPA3_fRC3Vec */
void J3DScaleNrmMtx33(f32 (*param_0)[3], Vec const& param_1) {
// NONMATCHING
}
/* 80311E4C-80311F70 30C78C 0124+00 0/0 3/3 0/0 .text J3DMtxProjConcat__FPA4_fPA4_fPA4_f
*/
void J3DMtxProjConcat(f32 (*param_0)[4], f32 (*param_1)[4], f32 (*param_2)[4]) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80450958-80450960 0003D8 0008+00 1/1 0/0 0/0 .sdata Unit01 */
SECTION_SDATA static u8 Unit01[8] = {
0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x00, 0x00,
};
/* 80311F70-8031204C 30C8B0 00DC+00 0/0 1/1 0/0 .text J3DPSMtxArrayConcat__FPA4_fPA4_fPA4_fUl */
void J3DPSMtxArrayConcat(f32 (*param_0)[4], f32 (*param_1)[4], f32 (*param_2)[4], u32 param_3) {
// NONMATCHING
}
/* ############################################################################################## */
/* 803CD8F8-803CD900 02AA18 0008+00 0/0 2/2 0/0 .data PSMulUnit01 */
SECTION_DATA extern f32 PSMulUnit01[2] = {
0.0f,
-1.0f,
};
+244
View File
@@ -0,0 +1,244 @@
//
// Generated By: dol2asm
// Translation Unit: J3DVertex
//
#include "JSystem/J3DGraphBase/J3DVertex.h"
#include "JSystem/J3DGraphAnimator/J3DJointTree.h"
#include "JSystem/J3DGraphBase/J3DSys.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "string.h"
#include "dolphin/os/OSCache.h"
/* 80310EF8-80310F78 30B838 0080+00 0/0 1/1 0/0 .text __ct__13J3DVertexDataFv */
J3DVertexData::J3DVertexData() {
mVtxNum = 0;
mNrmNum = 0;
mColNum = 0;
mTexCoordNum = 0;
mPacketNum = 0;
mVtxAttrFmtList = NULL;
mVtxPosArray = NULL;
mVtxNrmArray = NULL;
mVtxNBTArray = NULL;
for (int i = 0; i < ARRAY_SIZE(mVtxColorArray); i++)
mVtxColorArray[i] = NULL;
for (int i = 0; i < ARRAY_SIZE(mVtxTexCoordArray); i++)
mVtxTexCoordArray[i] = NULL;
mVtxPosFrac = 0;
mVtxPosType = GX_F32;
mVtxNrmFrac = 0;
mVtxNrmType = GX_F32;
}
/* 80310F78-80310FD8 30B8B8 0060+00 0/0 1/1 0/0 .text
* setVertexData__15J3DVertexBufferFP13J3DVertexData */
void J3DVertexBuffer::setVertexData(J3DVertexData* pVtxData) {
mVtxData = pVtxData;
mVtxPosArray[0] = pVtxData->getVtxPosArray();
mVtxNrmArray[0] = pVtxData->getVtxNrmArray();
mVtxColArray[0] = pVtxData->getVtxColorArray(0);
mVtxPosArray[1] = NULL;
mVtxNrmArray[1] = NULL;
mVtxColArray[1] = NULL;
mTransformedVtxPosArray[0] = pVtxData->getVtxPosArray();
mTransformedVtxNrmArray[0] = pVtxData->getVtxNrmArray();
mTransformedVtxPosArray[1] = NULL;
mTransformedVtxNrmArray[1] = NULL;
frameInit();
}
/* 80310FD8-80311030 30B918 0058+00 0/0 3/3 0/0 .text init__15J3DVertexBufferFv */
void J3DVertexBuffer::init() {
mVtxData = NULL;
mVtxPosArray[1] = NULL;
mVtxPosArray[0] = NULL;
mVtxNrmArray[1] = NULL;
mVtxNrmArray[0] = NULL;
mVtxColArray[1] = NULL;
mVtxColArray[0] = NULL;
mTransformedVtxPosArray[1] = NULL;
mTransformedVtxPosArray[0] = NULL;
mTransformedVtxNrmArray[1] = NULL;
mTransformedVtxNrmArray[0] = NULL;
mCurrentVtxPos = NULL;
mCurrentVtxNrm = NULL;
mCurrentVtxCol = NULL;
frameInit();
}
/* 80311030-8031106C 30B970 003C+00 0/0 1/1 0/0 .text __dt__15J3DVertexBufferFv */
J3DVertexBuffer::~J3DVertexBuffer() {}
/* 8031106C-80311090 30B9AC 0024+00 0/0 1/1 0/0 .text setArray__15J3DVertexBufferCFv */
void J3DVertexBuffer::setArray() const {
j3dSys.setVtxPos(mCurrentVtxPos);
j3dSys.setVtxNrm(mCurrentVtxNrm);
j3dSys.setVtxCol(mCurrentVtxCol);
}
/* 80311090-803111B0 30B9D0 0120+00 1/1 0/0 0/0 .text copyLocalVtxPosArray__15J3DVertexBufferFUl
*/
s32 J3DVertexBuffer::copyLocalVtxPosArray(u32 flag) {
if (flag & 1) {
for (int i = 0; i < 2; i++) {
mVtxPosArray[i] = new (0x20) Vec[mVtxData->getVtxNum()];
if (mVtxPosArray[i] == NULL) {
return kJ3DError_Alloc;
}
memcpy(mVtxPosArray[i], mVtxData->getVtxPosArray(), mVtxData->getVtxNum() * 12);
DCStoreRange(mVtxPosArray[i], mVtxData->getVtxNum() * 12);
}
} else {
mVtxPosArray[0] = mVtxData->getVtxPosArray();
if (mVtxPosArray[1] == NULL) {
mVtxPosArray[1] = new (0x20) Vec[mVtxData->getVtxNum()];
if (mVtxPosArray[1] == NULL) {
return kJ3DError_Alloc;
}
}
memcpy(mVtxPosArray[1], mVtxData->getVtxPosArray(), mVtxData->getVtxNum() * 12);
DCStoreRange(mVtxPosArray[1], mVtxData->getVtxNum() * 12);
}
return kJ3DError_Success;
}
/* 803111B0-803112D0 30BAF0 0120+00 1/1 0/0 0/0 .text copyLocalVtxNrmArray__15J3DVertexBufferFUl
*/
s32 J3DVertexBuffer::copyLocalVtxNrmArray(u32 flag) {
if (flag & 1) {
for (int i = 0; i < 2; i++) {
mVtxNrmArray[i] = new (0x20) VertexNormal[mVtxData->getNrmNum()];
if (mVtxNrmArray[i] == NULL) {
return kJ3DError_Alloc;
}
memcpy(mVtxNrmArray[i], mVtxData->getVtxNrmArray(), mVtxData->getNrmNum() * 12);
DCStoreRange(mVtxNrmArray[i], mVtxData->getNrmNum() * 12);
}
} else {
mVtxNrmArray[0] = mVtxData->getVtxNrmArray();
if (mVtxNrmArray[1] == NULL) {
mVtxNrmArray[1] = new (0x20) VertexNormal[mVtxData->getNrmNum()];
if (mVtxNrmArray[1] == NULL) {
return kJ3DError_Alloc;
}
}
memcpy(mVtxNrmArray[1], mVtxData->getVtxNrmArray(), mVtxData->getNrmNum() * 12);
DCStoreRange(mVtxNrmArray[1], mVtxData->getNrmNum() * 12);
}
return kJ3DError_Success;
}
/* 803112D0-80311478 30BC10 01A8+00 0/0 1/1 0/0 .text copyLocalVtxArray__15J3DVertexBufferFUl */
s32 J3DVertexBuffer::copyLocalVtxArray(u32 flag) {
void* oldPosArray[2];
void* oldNrmArray[2];
for (int i = 0; i < 2; i++)
oldPosArray[i] = mVtxPosArray[i];
if (~flag & 2) {
s32 ret = copyLocalVtxPosArray(flag);
if (ret != 0) {
for (int i = 0; i < 2; i++) {
if (oldPosArray[i] != mVtxPosArray[i]) {
if (mVtxPosArray[i] != mVtxData->getVtxPosArray())
delete mVtxPosArray[i];
mVtxPosArray[i] = oldPosArray[i];
}
}
return ret;
}
} else {
mVtxPosArray[0] = mVtxPosArray[1] = mVtxData->getVtxPosArray();
}
for (int i = 0; i < 2; i++)
oldNrmArray[i] = mVtxNrmArray[i];
if (~flag & 4) {
s32 ret = copyLocalVtxNrmArray(flag);
if (ret != 0) {
for (int i = 0; i < 2; i++) {
if (oldPosArray[i] != mVtxPosArray[i]) {
if (mVtxPosArray[i] != mVtxData->getVtxPosArray())
delete mVtxPosArray[i];
mVtxPosArray[i] = oldPosArray[i];
}
if (oldNrmArray[i] != mVtxNrmArray[i]) {
if (mVtxNrmArray[i] != mVtxData->getVtxNrmArray())
delete mVtxNrmArray[i];
mVtxNrmArray[i] = oldNrmArray[i];
}
}
return ret;
}
} else {
mVtxNrmArray[0] = mVtxNrmArray[1] = mVtxData->getVtxNrmArray();
}
return kJ3DError_Success;
}
/* 80311478-8031152C 30BDB8 00B4+00 0/0 1/1 0/0 .text
* allocTransformedVtxPosArray__15J3DVertexBufferFv */
s32 J3DVertexBuffer::allocTransformedVtxPosArray() {
if (mTransformedVtxPosArray[0] != NULL && mTransformedVtxPosArray[1] != NULL)
return kJ3DError_Success;
for (int i = 0; i < 2; i++) {
if (i == 0 || mTransformedVtxPosArray[i] == NULL) {
mTransformedVtxPosArray[i] = new (0x20) Vec[mVtxData->getVtxNum()];
if (mTransformedVtxPosArray[i] == NULL)
return kJ3DError_Alloc;
}
}
return kJ3DError_Success;
}
/* 8031152C-803115E0 30BE6C 00B4+00 0/0 1/1 0/0 .text
* allocTransformedVtxNrmArray__15J3DVertexBufferFv */
s32 J3DVertexBuffer::allocTransformedVtxNrmArray() {
if (mTransformedVtxNrmArray[0] != NULL && mTransformedVtxNrmArray[1] != NULL)
return kJ3DError_Success;
for (int i = 0; i < 2; i++) {
if (i == 0 || mTransformedVtxNrmArray[i] == NULL) {
mTransformedVtxNrmArray[i] = new (0x20) VertexNormal[mVtxData->getNrmNum()];
if (mTransformedVtxNrmArray[i] == NULL)
return kJ3DError_Alloc;
}
}
return kJ3DError_Success;
}
/* 803115E0-803115F4 30BF20 0014+00 0/0 1/1 0/0 .text __ct__14J3DDrawMtxDataFv */
J3DDrawMtxData::J3DDrawMtxData() {
mEntryNum = 0;
mDrawMtxFlag = NULL;
mDrawMtxIndex = NULL;
}
/* 803115F4-80311630 30BF34 003C+00 0/0 2/2 0/0 .text __dt__14J3DDrawMtxDataFv */
J3DDrawMtxData::~J3DDrawMtxData() {}
+945
View File
@@ -0,0 +1,945 @@
//
// Generated By: dol2asm
// Translation Unit: J3DAnmLoader
//
#include "JSystem/J3DGraphLoader/J3DAnmLoader.h"
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
#include "JSystem/JSupport/JSupport.h"
#include "dol2asm.h"
#include "dolphin/os.h"
//
// Types:
//
class J3DAnmLoader {
public:
virtual J3DAnmBase* load(const void*) = 0;
virtual void setResource(J3DAnmBase*, const void*) = 0;
/* 80339800 */ virtual ~J3DAnmLoader() {}
};
class J3DAnmKeyLoader_v15 : public J3DAnmLoader {
public:
/* 803384E0 */ J3DAnmKeyLoader_v15();
/* 80338FEC */ void readAnmTransform(J3DAnmTransformKeyData const*);
/* 80339014 */ void setAnmTransform(J3DAnmTransformKey*, J3DAnmTransformKeyData const*);
/* 803390B0 */ void readAnmTextureSRT(J3DAnmTextureSRTKeyData const*);
/* 803390D8 */ void setAnmTextureSRT(J3DAnmTextureSRTKey*, J3DAnmTextureSRTKeyData const*);
/* 803392B0 */ void readAnmColor(J3DAnmColorKeyData const*);
/* 803392D8 */ void setAnmColor(J3DAnmColorKey*, J3DAnmColorKeyData const*);
/* 803393C4 */ void readAnmCluster(J3DAnmClusterKeyData const*);
/* 803393EC */ void setAnmCluster(J3DAnmClusterKey*, J3DAnmClusterKeyData const*);
/* 80339458 */ void readAnmTevReg(J3DAnmTevRegKeyData const*);
/* 80339480 */ void setAnmTevReg(J3DAnmTevRegKey*, J3DAnmTevRegKeyData const*);
/* 8033960C */ void readAnmVtxColor(J3DAnmVtxColorKeyData const*);
/* 80339634 */ void setAnmVtxColor(J3DAnmVtxColorKey*, J3DAnmVtxColorKeyData const*);
/* 80338D44 */ virtual J3DAnmBase* load(void const*);
/* 80338E8C */ virtual void setResource(J3DAnmBase*, void const*);
/* 803384FC */ virtual ~J3DAnmKeyLoader_v15();
/* 0x4 */ J3DAnmBase* mAnm;
};
class J3DAnmFullLoader_v15 : public J3DAnmLoader {
public:
/* 80338468 */ J3DAnmFullLoader_v15();
/* 80338800 */ void readAnmTransform(J3DAnmTransformFullData const*);
/* 80338828 */ void setAnmTransform(J3DAnmTransformFull*, J3DAnmTransformFullData const*);
/* 803388BC */ void readAnmColor(J3DAnmColorFullData const*);
/* 803388E4 */ void setAnmColor(J3DAnmColorFull*, J3DAnmColorFullData const*);
/* 803389B0 */ void readAnmTexPattern(J3DAnmTexPatternFullData const*);
/* 803389D8 */ void setAnmTexPattern(J3DAnmTexPattern*, J3DAnmTexPatternFullData const*);
/* 80338A7C */ void readAnmVisibility(J3DAnmVisibilityFullData const*);
/* 80338AA4 */ void setAnmVisibility(J3DAnmVisibilityFull*, J3DAnmVisibilityFullData const*);
/* 80338B20 */ void readAnmCluster(J3DAnmClusterFullData const*);
/* 80338B48 */ void setAnmCluster(J3DAnmClusterFull*, J3DAnmClusterFullData const*);
/* 80338BB4 */ void readAnmVtxColor(J3DAnmVtxColorFullData const*);
/* 80338BDC */ void setAnmVtxColor(J3DAnmVtxColorFull*, J3DAnmVtxColorFullData const*);
/* 80338558 */ virtual J3DAnmBase* load(void const*);
/* 803386A0 */ virtual void setResource(J3DAnmBase*, void const*);
/* 80338484 */ virtual ~J3DAnmFullLoader_v15();
/* 0x4 */ J3DAnmBase* mAnm;
};
//
// Forward References:
//
extern "C" void load__20J3DAnmLoaderDataBaseFPCv24J3DAnmLoaderDataBaseFlag();
extern "C" void setResource__20J3DAnmLoaderDataBaseFP10J3DAnmBasePCv();
extern "C" void __ct__20J3DAnmFullLoader_v15Fv();
extern "C" void __dt__20J3DAnmFullLoader_v15Fv();
extern "C" void __ct__19J3DAnmKeyLoader_v15Fv();
extern "C" void __dt__19J3DAnmKeyLoader_v15Fv();
extern "C" void load__20J3DAnmFullLoader_v15FPCv();
extern "C" void setResource__20J3DAnmFullLoader_v15FP10J3DAnmBasePCv();
extern "C" void readAnmTransform__20J3DAnmFullLoader_v15FPC23J3DAnmTransformFullData();
extern "C" void
setAnmTransform__20J3DAnmFullLoader_v15FP19J3DAnmTransformFullPC23J3DAnmTransformFullData();
extern "C" void readAnmColor__20J3DAnmFullLoader_v15FPC19J3DAnmColorFullData();
extern "C" void setAnmColor__20J3DAnmFullLoader_v15FP15J3DAnmColorFullPC19J3DAnmColorFullData();
extern "C" void readAnmTexPattern__20J3DAnmFullLoader_v15FPC24J3DAnmTexPatternFullData();
extern "C" void
setAnmTexPattern__20J3DAnmFullLoader_v15FP16J3DAnmTexPatternPC24J3DAnmTexPatternFullData();
extern "C" void readAnmVisibility__20J3DAnmFullLoader_v15FPC24J3DAnmVisibilityFullData();
extern "C" void
setAnmVisibility__20J3DAnmFullLoader_v15FP20J3DAnmVisibilityFullPC24J3DAnmVisibilityFullData();
extern "C" void readAnmCluster__20J3DAnmFullLoader_v15FPC21J3DAnmClusterFullData();
extern "C" void
setAnmCluster__20J3DAnmFullLoader_v15FP17J3DAnmClusterFullPC21J3DAnmClusterFullData();
extern "C" void readAnmVtxColor__20J3DAnmFullLoader_v15FPC22J3DAnmVtxColorFullData();
extern "C" void
setAnmVtxColor__20J3DAnmFullLoader_v15FP18J3DAnmVtxColorFullPC22J3DAnmVtxColorFullData();
extern "C" void load__19J3DAnmKeyLoader_v15FPCv();
extern "C" void setResource__19J3DAnmKeyLoader_v15FP10J3DAnmBasePCv();
extern "C" void readAnmTransform__19J3DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData();
extern "C" void
setAnmTransform__19J3DAnmKeyLoader_v15FP18J3DAnmTransformKeyPC22J3DAnmTransformKeyData();
extern "C" void readAnmTextureSRT__19J3DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData();
extern "C" void
setAnmTextureSRT__19J3DAnmKeyLoader_v15FP19J3DAnmTextureSRTKeyPC23J3DAnmTextureSRTKeyData();
extern "C" void readAnmColor__19J3DAnmKeyLoader_v15FPC18J3DAnmColorKeyData();
extern "C" void setAnmColor__19J3DAnmKeyLoader_v15FP14J3DAnmColorKeyPC18J3DAnmColorKeyData();
extern "C" void readAnmCluster__19J3DAnmKeyLoader_v15FPC20J3DAnmClusterKeyData();
extern "C" void setAnmCluster__19J3DAnmKeyLoader_v15FP16J3DAnmClusterKeyPC20J3DAnmClusterKeyData();
extern "C" void readAnmTevReg__19J3DAnmKeyLoader_v15FPC19J3DAnmTevRegKeyData();
extern "C" void setAnmTevReg__19J3DAnmKeyLoader_v15FP15J3DAnmTevRegKeyPC19J3DAnmTevRegKeyData();
extern "C" void readAnmVtxColor__19J3DAnmKeyLoader_v15FPC21J3DAnmVtxColorKeyData();
extern "C" void
setAnmVtxColor__19J3DAnmKeyLoader_v15FP17J3DAnmVtxColorKeyPC21J3DAnmVtxColorKeyData();
extern "C" void __dt__20J3DAnmVisibilityFullFv();
extern "C" s32 getKind__20J3DAnmVisibilityFullCFv();
extern "C" void __dt__12J3DAnmLoaderFv();
extern "C" void func_80339848(void* _this, void const*, void const*);
extern "C" void func_80339860(void* _this, void const*, void const*);
extern "C" extern char const* const J3DAnmLoader__stringBase0;
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void __dl__FPv();
extern "C" void setResource__10JUTNameTabFPC7ResNTAB();
extern "C" void func_802F4260(void* _this, void const*, void const*);
extern "C" void func_802F42C0(void* _this, void const*, void const*);
extern "C" void func_8030A458(void* _this, void const*, void const*);
extern "C" void func_8030A470(void* _this, void const*, void const*);
extern "C" void func_8030A488(void* _this, void const*, void const*);
extern "C" void func_8030A4A0(void* _this, void const*, void const*);
extern "C" void func_8030A4B8(void* _this, void const*, void const*);
extern "C" void func_8030A4D0(void* _this, void const*, void const*);
extern "C" void func_8030A4E8(void* _this, void const*, void const*);
extern "C" void func_8030A500(void* _this, void const*, void const*);
extern "C" void func_8030A518(void* _this, void const*, void const*);
extern "C" void func_8030A530(void* _this, void const*, void const*);
extern "C" void func_8030A548(void* _this, void const*, void const*);
extern "C" void func_8030A560(void* _this, void const*, void const*);
extern "C" void func_8030A578(void* _this, void const*, void const*);
extern "C" void __ct__15J3DAnmTransformFsPfPsPf();
extern "C" void __ct__19J3DAnmTextureSRTKeyFv();
extern "C" void __ct__18J3DAnmVtxColorFullFv();
extern "C" void __ct__17J3DAnmVtxColorKeyFv();
extern "C" void __ct__15J3DAnmColorFullFv();
extern "C" void __ct__14J3DAnmColorKeyFv();
extern "C" void __ct__15J3DAnmTevRegKeyFv();
extern "C" void __ct__16J3DAnmTexPatternFv();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__10J3DAnmBase[4];
extern "C" extern void* __vt__18J3DAnmTransformKey[5];
extern "C" extern void* __vt__16J3DAnmClusterKey[5];
extern "C" extern void* __vt__13J3DAnmCluster[5];
extern "C" extern void* __vt__17J3DAnmClusterFull[5];
extern "C" extern void* __vt__27J3DAnmTransformFullWithLerp[5];
extern "C" extern void* __vt__19J3DAnmTransformFull[5 + 1 /* padding */];
//
// Declarations:
//
/* ############################################################################################## */
/* 803A2130-803A2130 02E790 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_803A2130 =
"J3DAnmLoader: this is not a J3D Binary.\n";
#pragma pop
/* 803CF238-803CF24C 02C358 0014+00 2/2 0/0 0/0 .data __vt__19J3DAnmKeyLoader_v15 */
SECTION_DATA extern void* __vt__19J3DAnmKeyLoader_v15[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)load__19J3DAnmKeyLoader_v15FPCv,
(void*)setResource__19J3DAnmKeyLoader_v15FP10J3DAnmBasePCv,
(void*)__dt__19J3DAnmKeyLoader_v15Fv,
};
/* 803CF24C-803CF260 02C36C 0014+00 2/2 0/0 0/0 .data __vt__20J3DAnmFullLoader_v15 */
SECTION_DATA extern void* __vt__20J3DAnmFullLoader_v15[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)load__20J3DAnmFullLoader_v15FPCv,
(void*)setResource__20J3DAnmFullLoader_v15FP10J3DAnmBasePCv,
(void*)__dt__20J3DAnmFullLoader_v15Fv,
};
/* 803CF260-803CF274 02C380 0014+00 5/5 0/0 0/0 .data __vt__12J3DAnmLoader */
SECTION_DATA extern void* __vt__12J3DAnmLoader[5] = {
(void*)NULL /* RTTI */, (void*)NULL, (void*)NULL, (void*)NULL, (void*)__dt__12J3DAnmLoaderFv,
};
/* 803CF274-803CF288 02C394 0010+04 2/2 0/0 0/0 .data __vt__20J3DAnmVisibilityFull */
SECTION_DATA extern void* __vt__20J3DAnmVisibilityFull[4 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__20J3DAnmVisibilityFullFv,
(void*)getKind__20J3DAnmVisibilityFullCFv,
/* padding */
NULL,
};
/* 804564C0-804564C8 004AC0 0004+04 13/13 0/0 0/0 .sdata2 @889 */
SECTION_SDATA2 static f32 lit_889[1 + 1 /* padding */] = {
0.0f,
/* padding */
0.0f,
};
/* 80337B40-80338134 332480 05F4+00 0/0 7/7 1/1 .text
* load__20J3DAnmLoaderDataBaseFPCv24J3DAnmLoaderDataBaseFlag */
J3DAnmBase* J3DAnmLoaderDataBase::load(const void* i_data, J3DAnmLoaderDataBaseFlag flag) {
if (!i_data) {
return NULL;
}
const JUTDataFileHeader* header = (const JUTDataFileHeader*)i_data;
if (header->mMagic == 'J3D1') {
switch (header->mType) {
case 'bck1': {
J3DAnmKeyLoader_v15 loader;
loader.mAnm = new J3DAnmTransformKey();
return loader.load(i_data);
}
case 'bpk1': {
J3DAnmKeyLoader_v15 loader;
loader.mAnm = new J3DAnmColorKey();
return loader.load(i_data);
}
case 'blk1': {
J3DAnmKeyLoader_v15 loader;
loader.mAnm = new J3DAnmClusterKey();
return loader.load(i_data);
}
case 'btk1': {
J3DAnmKeyLoader_v15 loader;
loader.mAnm = new J3DAnmTextureSRTKey();
return loader.load(i_data);
}
case 'brk1': {
J3DAnmKeyLoader_v15 loader;
loader.mAnm = new J3DAnmTevRegKey();
return loader.load(i_data);
}
case 'bxk1': {
J3DAnmKeyLoader_v15 loader;
loader.mAnm = new J3DAnmVtxColorKey();
return loader.load(i_data);
}
case 'bca1': {
J3DAnmFullLoader_v15 loader;
if (flag & J3DLOADER_UNK_FLAG1) {
loader.mAnm = new J3DAnmTransformFullWithLerp();
} else {
loader.mAnm = new J3DAnmTransformFull();
}
return loader.load(i_data);
}
case 'bpa1': {
J3DAnmFullLoader_v15 loader;
loader.mAnm = new J3DAnmColorFull();
return loader.load(i_data);
}
case 'btp1': {
J3DAnmFullLoader_v15 loader;
loader.mAnm = new J3DAnmTexPattern();
return loader.load(i_data);
}
case 'bva1': {
J3DAnmFullLoader_v15 loader;
loader.mAnm = new J3DAnmVisibilityFull();
return loader.load(i_data);
}
case 'bla1': {
J3DAnmFullLoader_v15 loader;
loader.mAnm = new J3DAnmClusterFull();
return loader.load(i_data);
}
case 'bxa1': {
J3DAnmFullLoader_v15 loader;
loader.mAnm = new J3DAnmVtxColorFull();
return loader.load(i_data);
}
default:
OSReport("J3DAnmLoader: this is not a J3D Binary.\n");
return NULL;
}
}
return NULL;
}
/* 80338134-80338468 332A74 0334+00 0/0 1/1 0/0 .text
* setResource__20J3DAnmLoaderDataBaseFP10J3DAnmBasePCv */
void J3DAnmLoaderDataBase::setResource(J3DAnmBase* param_1, const void* param_2) {
const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_2;
if (!header) {
return;
}
if (header->mMagic != 'J3D1') {
return;
}
switch (header->mType) {
case 'bck1': {
J3DAnmKeyLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'bpk1': {
J3DAnmKeyLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'blk1': {
J3DAnmKeyLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'btk1': {
J3DAnmKeyLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'brk1': {
J3DAnmKeyLoader_v15 loader;
if (param_1->getKind() == 5) {
loader.setResource(param_1, param_2);
}
break;
}
case 'bxk1': {
J3DAnmKeyLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'bca1': {
J3DAnmFullLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'bpa1': {
J3DAnmFullLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'btp1': {
J3DAnmFullLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'bla1': {
J3DAnmFullLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'bxa1': {
J3DAnmFullLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
case 'bva1': {
J3DAnmFullLoader_v15 loader;
loader.setResource(param_1, param_2);
break;
}
default: {
OSReport("J3DAnmLoader: this is not a J3D Binary.\n");
break;
}
}
}
/* 80338468-80338484 332DA8 001C+00 2/2 0/0 0/0 .text __ct__20J3DAnmFullLoader_v15Fv */
J3DAnmFullLoader_v15::J3DAnmFullLoader_v15() {}
/* 80338484-803384E0 332DC4 005C+00 3/2 0/0 0/0 .text __dt__20J3DAnmFullLoader_v15Fv */
J3DAnmFullLoader_v15::~J3DAnmFullLoader_v15() {}
/* 803384E0-803384FC 332E20 001C+00 2/2 0/0 0/0 .text __ct__19J3DAnmKeyLoader_v15Fv */
J3DAnmKeyLoader_v15::J3DAnmKeyLoader_v15() {}
/* 803384FC-80338558 332E3C 005C+00 3/2 0/0 0/0 .text __dt__19J3DAnmKeyLoader_v15Fv */
J3DAnmKeyLoader_v15::~J3DAnmKeyLoader_v15() {}
/* ############################################################################################## */
/* 803A2130-803A2130 02E790 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_803A2159 = "Unknown data block\n";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_803A216D = "\0\0";
#pragma pop
/* 80338558-803386A0 332E98 0148+00 2/1 0/0 0/0 .text load__20J3DAnmFullLoader_v15FPCv */
J3DAnmBase* J3DAnmFullLoader_v15::load(const void* param_1) {
const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_1;
const JUTDataBlockHeader* block = &header->mFirstBlock;
for (int i = 0; i < header->mBlockNum; i++) {
switch (block->mType) {
case 'ANF1':
readAnmTransform((J3DAnmTransformFullData*)block);
break;
case 'PAF1':
readAnmColor((J3DAnmColorFullData*)block);
break;
case 'TPT1':
readAnmTexPattern((J3DAnmTexPatternFullData*)block);
break;
case 'CLF1':
readAnmCluster((J3DAnmClusterFullData*)block);
break;
case 'VAF1':
readAnmVisibility((J3DAnmVisibilityFullData*)block);
break;
case 'VCF1':
readAnmVtxColor((J3DAnmVtxColorFullData*)block);
break;
default:
OSReport("Unknown data block\n");
break;
}
block = block->getNext();
}
return mAnm;
}
/* 803386A0-80338800 332FE0 0160+00 2/1 0/0 0/0 .text
* setResource__20J3DAnmFullLoader_v15FP10J3DAnmBasePCv */
void J3DAnmFullLoader_v15::setResource(J3DAnmBase* param_1, const void* param_2) {
const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_2;
const JUTDataBlockHeader* block = &header->mFirstBlock;
for (int i = 0; i < header->mBlockNum; i++) {
switch (block->mType) {
case 'ANF1':
setAnmTransform((J3DAnmTransformFull*)param_1, (const J3DAnmTransformFullData*)block);
break;
case 'PAF1':
setAnmColor((J3DAnmColorFull*)param_1, (const J3DAnmColorFullData*)block);
break;
case 'TPT1':
setAnmTexPattern((J3DAnmTexPattern*)param_1, (const J3DAnmTexPatternFullData*)block);
break;
case 'CLF1':
setAnmCluster((J3DAnmClusterFull*)param_1, (const J3DAnmClusterFullData*)block);
break;
case 'VAF1':
setAnmVisibility((J3DAnmVisibilityFull*)param_1,
(const J3DAnmVisibilityFullData*)block);
break;
case 'VCF1':
setAnmVtxColor((J3DAnmVtxColorFull*)param_1, (const J3DAnmVtxColorFullData*)block);
break;
default:
OSReport("Unknown data block\n");
break;
}
block = block->getNext();
}
}
/* 80338800-80338828 333140 0028+00 1/1 0/0 0/0 .text
* readAnmTransform__20J3DAnmFullLoader_v15FPC23J3DAnmTransformFullData */
void J3DAnmFullLoader_v15::readAnmTransform(const J3DAnmTransformFullData* param_1) {
setAnmTransform((J3DAnmTransformFull*)mAnm, param_1);
}
/* 80338828-803388BC 333168 0094+00 2/2 0/0 0/0 .text
* setAnmTransform__20J3DAnmFullLoader_v15FP19J3DAnmTransformFullPC23J3DAnmTransformFullData */
void J3DAnmFullLoader_v15::setAnmTransform(J3DAnmTransformFull* param_1,
const J3DAnmTransformFullData* param_2) {
param_1->field_0x1e = param_2->field_0xc;
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mFrame = 0.0f;
param_1->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmTransformFullTable>(param_2, (void*)param_2->mTableOffset);
param_1->mScaleData = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->mScaleValOffset);
param_1->mRotData = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mRotValOffset);
param_1->mTransData = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->mTransValOffset);
}
/* 803388BC-803388E4 3331FC 0028+00 1/1 0/0 0/0 .text
* readAnmColor__20J3DAnmFullLoader_v15FPC19J3DAnmColorFullData */
void J3DAnmFullLoader_v15::readAnmColor(const J3DAnmColorFullData* param_1) {
setAnmColor((J3DAnmColorFull*)mAnm, param_1);
}
/* 803388E4-803389B0 333224 00CC+00 2/2 0/0 0/0 .text
* setAnmColor__20J3DAnmFullLoader_v15FP15J3DAnmColorFullPC19J3DAnmColorFullData */
void J3DAnmFullLoader_v15::setAnmColor(J3DAnmColorFull* param_1,
const J3DAnmColorFullData* param_2) {
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mFrame = 0.0f;
param_1->mUpdateMaterialNum = param_2->mUpdateMaterialNum;
param_1->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmColorFullTable>(param_2, (void*)param_2->mTableOffset);
param_1->mColorR = JSUConvertOffsetToPtr<u8>(param_2, param_2->mRValuesOffset);
param_1->mColorG = JSUConvertOffsetToPtr<u8>(param_2, param_2->mGValuesOffset);
param_1->mColorB = JSUConvertOffsetToPtr<u8>(param_2, param_2->mBValuesOffset);
param_1->mColorA = JSUConvertOffsetToPtr<u8>(param_2, param_2->mAValuesOffset);
param_1->mUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->mUpdateMaterialIDOffset);
param_1->mUpdateMaterialName.setResource(
JSUConvertOffsetToPtr<ResNTAB>(param_2, (void*)param_2->mNameTabOffset));
}
/* 803389B0-803389D8 3332F0 0028+00 1/1 0/0 0/0 .text
* readAnmTexPattern__20J3DAnmFullLoader_v15FPC24J3DAnmTexPatternFullData */
void J3DAnmFullLoader_v15::readAnmTexPattern(const J3DAnmTexPatternFullData* param_1) {
setAnmTexPattern((J3DAnmTexPattern*)mAnm, param_1);
}
/* 803389D8-80338A7C 333318 00A4+00 2/2 0/0 0/0 .text
* setAnmTexPattern__20J3DAnmFullLoader_v15FP16J3DAnmTexPatternPC24J3DAnmTexPatternFullData */
void J3DAnmFullLoader_v15::setAnmTexPattern(J3DAnmTexPattern* param_1,
const J3DAnmTexPatternFullData* param_2) {
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mFrame = 0.0f;
param_1->mUpdateMaterialNum = param_2->field_0xc;
param_1->field_0x14 = param_2->field_0xe;
param_1->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmTexPatternFullTable>(param_2, (void*)param_2->mTableOffset);
param_1->mTextureIndex = JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->mValuesOffset);
param_1->mUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->mUpdateMaterialIDOffset);
param_1->mUpdateMaterialName.setResource(
JSUConvertOffsetToPtr<ResNTAB>(param_2, (void*)param_2->mNameTabOffset));
}
/* 80338A7C-80338AA4 3333BC 0028+00 1/1 0/0 0/0 .text
* readAnmVisibility__20J3DAnmFullLoader_v15FPC24J3DAnmVisibilityFullData */
void J3DAnmFullLoader_v15::readAnmVisibility(const J3DAnmVisibilityFullData* param_1) {
setAnmVisibility((J3DAnmVisibilityFull*)mAnm, param_1);
}
/* 80338AA4-80338B20 3333E4 007C+00 2/2 0/0 0/0 .text
* setAnmVisibility__20J3DAnmFullLoader_v15FP20J3DAnmVisibilityFullPC24J3DAnmVisibilityFullData */
void J3DAnmFullLoader_v15::setAnmVisibility(J3DAnmVisibilityFull* param_1,
const J3DAnmVisibilityFullData* param_2) {
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mFrame = 0.0f;
param_1->mUpdateMaterialNum = param_2->field_0xc;
param_1->field_0xe = param_2->field_0xe;
param_1->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmVisibilityFullTable>(param_2, (void*)param_2->mTableOffset);
param_1->mVisibility = JSUConvertOffsetToPtr<u8>(param_2, param_2->mValuesOffset);
}
/* 80338B20-80338B48 333460 0028+00 1/1 0/0 0/0 .text
* readAnmCluster__20J3DAnmFullLoader_v15FPC21J3DAnmClusterFullData */
void J3DAnmFullLoader_v15::readAnmCluster(const J3DAnmClusterFullData* param_1) {
setAnmCluster((J3DAnmClusterFull*)mAnm, param_1);
}
/* 80338B48-80338BB4 333488 006C+00 2/2 0/0 0/0 .text
* setAnmCluster__20J3DAnmFullLoader_v15FP17J3DAnmClusterFullPC21J3DAnmClusterFullData */
void J3DAnmFullLoader_v15::setAnmCluster(J3DAnmClusterFull* param_1,
const J3DAnmClusterFullData* param_2) {
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mFrame = 0.0f;
param_1->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmClusterFullTable>(param_2, (void*)param_2->mTableOffset);
param_1->mWeight = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->mWeightOffset);
}
/* 80338BB4-80338BDC 3334F4 0028+00 1/1 0/0 0/0 .text
* readAnmVtxColor__20J3DAnmFullLoader_v15FPC22J3DAnmVtxColorFullData */
void J3DAnmFullLoader_v15::readAnmVtxColor(const J3DAnmVtxColorFullData* param_1) {
setAnmVtxColor((J3DAnmVtxColorFull*)mAnm, param_1);
}
/* 80338BDC-80338D44 33351C 0168+00 2/2 0/0 0/0 .text
* setAnmVtxColor__20J3DAnmFullLoader_v15FP18J3DAnmVtxColorFullPC22J3DAnmVtxColorFullData */
void J3DAnmFullLoader_v15::setAnmVtxColor(J3DAnmVtxColorFull* dst,
const J3DAnmVtxColorFullData* data) {
dst->mFrameMax = data->mFrameMax;
dst->mAttribute = data->field_0x8;
dst->mFrame = 0.0f;
dst->mAnmTableNum[0] = data->mAnmTableNum[0];
dst->mAnmTableNum[1] = data->mAnmTableNum[1];
dst->mpTable[0] =
JSUConvertOffsetToPtr<J3DAnmColorFullTable>(data, (void*)data->mTableOffsets[0]);
dst->mpTable[1] =
JSUConvertOffsetToPtr<J3DAnmColorFullTable>(data, (void*)data->mTableOffsets[1]);
dst->mAnmVtxColorIndexData[0] = JSUConvertOffsetToPtr<J3DAnmVtxColorIndexData>(
data, (void*)data->mVtxColorIndexDataOffsets[0]);
dst->mAnmVtxColorIndexData[1] = JSUConvertOffsetToPtr<J3DAnmVtxColorIndexData>(
data, (void*)data->mVtxColorIndexDataOffsets[1]);
void* indexPtr0 =
JSUConvertOffsetToPtr<u16>(data, (void*)data->mVtxColorIndexPointerOffsets[0]);
void* indexPtr1 =
JSUConvertOffsetToPtr<u16>(data, (void*)data->mVtxColorIndexPointerOffsets[1]);
for (s32 i = 0; i < dst->mAnmTableNum[0]; i++)
dst->mAnmVtxColorIndexData[0][i].mpData =
(void*)((s32)indexPtr0 + (s32)dst->mAnmVtxColorIndexData[0][i].mpData * 2);
for (s32 i = 0; i < dst->mAnmTableNum[1]; i++)
dst->mAnmVtxColorIndexData[1][i].mpData =
(void*)((s32)indexPtr1 + (s32)dst->mAnmVtxColorIndexData[1][i].mpData * 2);
dst->mColorR = JSUConvertOffsetToPtr<u8>(data, data->mRValuesOffset);
dst->mColorG = JSUConvertOffsetToPtr<u8>(data, data->mGValuesOffset);
dst->mColorB = JSUConvertOffsetToPtr<u8>(data, data->mBValuesOffset);
dst->mColorA = JSUConvertOffsetToPtr<u8>(data, data->mAValuesOffset);
}
/* 80338D44-80338E8C 333684 0148+00 2/1 0/0 0/0 .text load__19J3DAnmKeyLoader_v15FPCv */
J3DAnmBase* J3DAnmKeyLoader_v15::load(const void* param_1) {
const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_1;
const JUTDataBlockHeader* block = &header->mFirstBlock;
for (int i = 0; i < header->mBlockNum; i++) {
switch (block->mType) {
case 'ANK1':
readAnmTransform((J3DAnmTransformKeyData*)block);
break;
case 'PAK1':
readAnmColor((J3DAnmColorKeyData*)block);
break;
case 'CLK1':
readAnmCluster((J3DAnmClusterKeyData*)block);
break;
case 'TTK1':
readAnmTextureSRT((J3DAnmTextureSRTKeyData*)block);
break;
case 'TRK1':
readAnmTevReg((J3DAnmTevRegKeyData*)block);
break;
case 'VCK1':
readAnmVtxColor((J3DAnmVtxColorKeyData*)block);
break;
default:
OSReport("Unknown data block\n");
break;
}
block = block->getNext();
}
return mAnm;
}
/* 80338E8C-80338FEC 3337CC 0160+00 2/1 0/0 0/0 .text
* setResource__19J3DAnmKeyLoader_v15FP10J3DAnmBasePCv */
void J3DAnmKeyLoader_v15::setResource(J3DAnmBase* param_1, const void* param_2) {
const JUTDataFileHeader* header = (const JUTDataFileHeader*)param_2;
const JUTDataBlockHeader* block = &header->mFirstBlock;
for (int i = 0; i < header->mBlockNum; i++) {
switch (block->mType) {
case 'ANK1':
setAnmTransform((J3DAnmTransformKey*)param_1, (const J3DAnmTransformKeyData*)block);
break;
case 'PAK1':
setAnmColor((J3DAnmColorKey*)param_1, (const J3DAnmColorKeyData*)block);
break;
case 'CLK1':
setAnmCluster((J3DAnmClusterKey*)param_1, (const J3DAnmClusterKeyData*)block);
break;
case 'TTK1':
setAnmTextureSRT((J3DAnmTextureSRTKey*)param_1, (const J3DAnmTextureSRTKeyData*)block);
break;
case 'TRK1':
setAnmTevReg((J3DAnmTevRegKey*)param_1, (const J3DAnmTevRegKeyData*)block);
break;
case 'VCK1':
setAnmVtxColor((J3DAnmVtxColorKey*)param_1, (const J3DAnmVtxColorKeyData*)block);
break;
default:
OSReport("Unknown data block\n");
break;
}
block = block->getNext();
}
}
/* 80338FEC-80339014 33392C 0028+00 1/1 0/0 0/0 .text
* readAnmTransform__19J3DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData */
void J3DAnmKeyLoader_v15::readAnmTransform(const J3DAnmTransformKeyData* param_1) {
setAnmTransform((J3DAnmTransformKey*)mAnm, param_1);
}
/* 80339014-803390B0 333954 009C+00 2/2 0/0 0/0 .text
* setAnmTransform__19J3DAnmKeyLoader_v15FP18J3DAnmTransformKeyPC22J3DAnmTransformKeyData */
void J3DAnmKeyLoader_v15::setAnmTransform(J3DAnmTransformKey* param_1,
const J3DAnmTransformKeyData* param_2) {
param_1->field_0x1e = param_2->field_0xc;
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mDecShift = param_2->field_0x9;
param_1->mFrame = 0.0f;
param_1->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmTransformKeyTable>(param_2, (void*)param_2->mTableOffset);
param_1->mScaleData = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->field_0x18);
param_1->mRotData = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->field_0x1c);
param_1->mTransData = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->field_0x20);
}
/* 803390B0-803390D8 3339F0 0028+00 1/1 0/0 0/0 .text
* readAnmTextureSRT__19J3DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData */
void J3DAnmKeyLoader_v15::readAnmTextureSRT(const J3DAnmTextureSRTKeyData* param_1) {
setAnmTextureSRT((J3DAnmTextureSRTKey*)mAnm, param_1);
}
/* 803390D8-803392B0 333A18 01D8+00 2/2 0/0 0/0 .text
* setAnmTextureSRT__19J3DAnmKeyLoader_v15FP19J3DAnmTextureSRTKeyPC23J3DAnmTextureSRTKeyData */
void J3DAnmKeyLoader_v15::setAnmTextureSRT(J3DAnmTextureSRTKey* param_1,
const J3DAnmTextureSRTKeyData* param_2) {
param_1->mTrackNum = param_2->field_0xc;
param_1->mFrameMax = param_2->field_0xa;
param_1->mAttribute = param_2->field_0x8;
param_1->mDecShift = param_2->field_0x9;
param_1->mFrame = 0.0f;
param_1->mTrackNum = param_2->field_0xc;
param_1->mScaleNum = param_2->field_0xe;
param_1->mRotNum = param_2->field_0x10;
param_1->mTransNum = param_2->field_0x12;
param_1->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmTransformKeyTable>(param_2, (void*)param_2->mTableOffset);
param_1->mUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->mUpdateMatIDOffset);
param_1->mUpdateMaterialName.setResource(
JSUConvertOffsetToPtr<ResNTAB>(param_2, (void*)param_2->mNameTab1Offset));
param_1->mUpdateTexMtxID =
JSUConvertOffsetToPtr<u8>(param_2, param_2->mUpdateTexMtxIDOffset);
param_1->mSRTCenter = JSUConvertOffsetToPtr<Vec>(param_2, (void*)param_2->unkOffset);
param_1->mScaleData = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->mScaleValOffset);
param_1->mRotData = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mRotValOffset);
param_1->mTransData = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->mTransValOffset);
if (param_2->mNameTab2Offset) {
param_1->mPostUpdateMaterialName.setResource(
JSUConvertOffsetToPtr<ResNTAB>(param_2, (void*)param_2->mNameTab2Offset));
}
param_1->field_0x4a = param_2->field_0x34;
param_1->field_0x44 = param_2->field_0x36;
param_1->field_0x46 = param_2->field_0x38;
param_1->field_0x48 = param_2->field_0x3a;
param_1->field_0x58 =
JSUConvertOffsetToPtr<J3DAnmTransformKeyTable>(param_2, (void*)param_2->mInfoTable2Offset);
param_1->mPostUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->field_0x40);
param_1->mPostUpdateTexMtxID = JSUConvertOffsetToPtr<u8>(param_2, param_2->field_0x48);
param_1->mPostSRTCenter = JSUConvertOffsetToPtr<Vec>(param_2, (void*)param_2->field_0x4c);
param_1->field_0x4c = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->field_0x50);
param_1->field_0x50 = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->field_0x54);
param_1->field_0x54 = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->field_0x58);
switch (param_2->field_0x5c) {
case 0:
case 1:
param_1->mTexMtxCalcType = param_2->field_0x5c;
break;
default:
param_1->mTexMtxCalcType = 0;
break;
}
}
/* 803392B0-803392D8 333BF0 0028+00 1/1 0/0 0/0 .text
* readAnmColor__19J3DAnmKeyLoader_v15FPC18J3DAnmColorKeyData */
void J3DAnmKeyLoader_v15::readAnmColor(const J3DAnmColorKeyData* param_1) {
setAnmColor((J3DAnmColorKey*)mAnm, param_1);
}
/* 803392D8-803393C4 333C18 00EC+00 2/2 0/0 0/0 .text
* setAnmColor__19J3DAnmKeyLoader_v15FP14J3DAnmColorKeyPC18J3DAnmColorKeyData */
void J3DAnmKeyLoader_v15::setAnmColor(J3DAnmColorKey* param_1, const J3DAnmColorKeyData* param_2) {
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mFrame = 0.0f;
param_1->mUpdateMaterialNum = param_2->mUpdateMaterialNum;
param_1->field_0xc = param_2->field_0x10;
param_1->field_0xe = param_2->field_0x12;
param_1->field_0x10 = param_2->field_0x14;
param_1->field_0x12 = param_2->field_0x16;
param_1->field_0x3c =
JSUConvertOffsetToPtr<J3DAnmColorKeyTable>(param_2, (void*)param_2->mTableOffset);
param_1->field_0x2c = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mRValOffset);
param_1->field_0x30 = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mGValOffset);
param_1->field_0x34 = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mBValOffset);
param_1->field_0x38 = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mAValOffset);
param_1->mUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->mUpdateMaterialIDOffset);
param_1->mUpdateMaterialName.setResource(
JSUConvertOffsetToPtr<ResNTAB>(param_2, (void*)param_2->mNameTabOffset));
}
/* 803393C4-803393EC 333D04 0028+00 1/1 0/0 0/0 .text
* readAnmCluster__19J3DAnmKeyLoader_v15FPC20J3DAnmClusterKeyData */
void J3DAnmKeyLoader_v15::readAnmCluster(const J3DAnmClusterKeyData* param_1) {
setAnmCluster((J3DAnmClusterKey*)mAnm, param_1);
}
/* 803393EC-80339458 333D2C 006C+00 2/2 0/0 0/0 .text
* setAnmCluster__19J3DAnmKeyLoader_v15FP16J3DAnmClusterKeyPC20J3DAnmClusterKeyData */
void J3DAnmKeyLoader_v15::setAnmCluster(J3DAnmClusterKey* param_1,
const J3DAnmClusterKeyData* param_2) {
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mFrame = 0.0f;
param_1->mAnmTable =
JSUConvertOffsetToPtr<J3DAnmClusterKeyTable>(param_2, (void*)param_2->mTableOffset);
param_1->mWeight = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->mWeightOffset);
}
/* 80339458-80339480 333D98 0028+00 1/1 0/0 0/0 .text
* readAnmTevReg__19J3DAnmKeyLoader_v15FPC19J3DAnmTevRegKeyData */
void J3DAnmKeyLoader_v15::readAnmTevReg(const J3DAnmTevRegKeyData* param_1) {
setAnmTevReg((J3DAnmTevRegKey*)mAnm, param_1);
}
/* 80339480-8033960C 333DC0 018C+00 2/2 0/0 0/0 .text
* setAnmTevReg__19J3DAnmKeyLoader_v15FP15J3DAnmTevRegKeyPC19J3DAnmTevRegKeyData */
void J3DAnmKeyLoader_v15::setAnmTevReg(J3DAnmTevRegKey* param_1,
const J3DAnmTevRegKeyData* param_2) {
param_1->mFrameMax = param_2->mFrameMax;
param_1->mAttribute = param_2->field_0x8;
param_1->mFrame = 0.0f;
param_1->mCRegUpdateMaterialNum = param_2->mCRegUpdateMaterialNum;
param_1->mAnmCRegKeyTable =
JSUConvertOffsetToPtr<J3DAnmCRegKeyTable>(param_2, (void*)param_2->mCRegTableOffset);
param_1->mCRegUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->mCRegUpdateMaterialIDOffset);
param_1->mCRegUpdateMaterialName.setResource(
JSUConvertOffsetToPtr<ResNTAB>(param_2, (void*)param_2->mCRegNameTabOffset));
param_1->mKRegUpdateMaterialNum = param_2->mKRegUpdateMaterialNum;
param_1->mAnmKRegKeyTable =
JSUConvertOffsetToPtr<J3DAnmKRegKeyTable>(param_2, (void*)param_2->mKRegTableOffset);
param_1->mKRegUpdateMaterialID =
JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->mKRegUpdateMaterialIDOffset);
param_1->mKRegUpdateMaterialName.setResource(
JSUConvertOffsetToPtr<ResNTAB>(param_2, (void*)param_2->mKRegNameTabOffset));
param_1->mCRegDataCountR = param_2->field_0x10;
param_1->mCRegDataCountG = param_2->field_0x12;
param_1->mCRegDataCountB = param_2->field_0x14;
param_1->mCRegDataCountA = param_2->field_0x16;
param_1->mAnmCRegDataR = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mCRValuesOffset);
param_1->mAnmCRegDataG = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mCGValuesOffset);
param_1->mAnmCRegDataB = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mCBValuesOffset);
param_1->mAnmCRegDataA = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mCAValuesOffset);
param_1->mKRegDataCountR = param_2->field_0x18;
param_1->mKRegDataCountG = param_2->field_0x1a;
param_1->mKRegDataCountB = param_2->field_0x1c;
param_1->mKRegDataCountA = param_2->field_0x1e;
param_1->mAnmKRegDataR = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mKRValuesOffset);
param_1->mAnmKRegDataG = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mKGValuesOffset);
param_1->mAnmKRegDataB = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mKBValuesOffset);
param_1->mAnmKRegDataA = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mKAValuesOffset);
}
/* 8033960C-80339634 333F4C 0028+00 1/1 0/0 0/0 .text
* readAnmVtxColor__19J3DAnmKeyLoader_v15FPC21J3DAnmVtxColorKeyData */
void J3DAnmKeyLoader_v15::readAnmVtxColor(const J3DAnmVtxColorKeyData* param_1) {
setAnmVtxColor((J3DAnmVtxColorKey*)mAnm, param_1);
}
/* 80339634-8033979C 333F74 0168+00 2/2 0/0 0/0 .text
* setAnmVtxColor__19J3DAnmKeyLoader_v15FP17J3DAnmVtxColorKeyPC21J3DAnmVtxColorKeyData */
void J3DAnmKeyLoader_v15::setAnmVtxColor(J3DAnmVtxColorKey* dst,
const J3DAnmVtxColorKeyData* data) {
dst->mFrameMax = data->mFrameMax;
dst->mAttribute = data->field_0x8;
dst->mFrame = 0.0f;
dst->mAnmTableNum[0] = data->mAnmTableNum[0];
dst->mAnmTableNum[1] = data->mAnmTableNum[1];
dst->mpTable[0] =
JSUConvertOffsetToPtr<J3DAnmColorKeyTable>(data, (void*)data->mTableOffsets[0]);
dst->mpTable[1] =
JSUConvertOffsetToPtr<J3DAnmColorKeyTable>(data, (void*)data->mTableOffsets[1]);
dst->mAnmVtxColorIndexData[0] = JSUConvertOffsetToPtr<J3DAnmVtxColorIndexData>(
data, (void*)data->mVtxColoIndexDataOffset[0]);
dst->mAnmVtxColorIndexData[1] = JSUConvertOffsetToPtr<J3DAnmVtxColorIndexData>(
data, (void*)data->mVtxColoIndexDataOffset[1]);
void* indexPtr0 = JSUConvertOffsetToPtr<u16>(data, (void*)data->mVtxColoIndexPointerOffset[0]);
void* indexPtr1 = JSUConvertOffsetToPtr<u16>(data, (void*)data->mVtxColoIndexPointerOffset[1]);
for (s32 i = 0; i < dst->mAnmTableNum[0]; i++)
dst->mAnmVtxColorIndexData[0][i].mpData =
(void*)((s32)indexPtr0 + (s32)dst->mAnmVtxColorIndexData[0][i].mpData * 2);
for (s32 i = 0; i < dst->mAnmTableNum[1]; i++)
dst->mAnmVtxColorIndexData[1][i].mpData =
(void*)((s32)indexPtr1 + (s32)dst->mAnmVtxColorIndexData[1][i].mpData * 2);
dst->mColorR = JSUConvertOffsetToPtr<s16>(data, (void*)data->mRValOffset);
dst->mColorG = JSUConvertOffsetToPtr<s16>(data, (void*)data->mGValOffset);
dst->mColorB = JSUConvertOffsetToPtr<s16>(data, (void*)data->mBValOffset);
dst->mColorA = JSUConvertOffsetToPtr<s16>(data, (void*)data->mAValOffset);
}
/* 8033979C-803397F8 3340DC 005C+00 1/0 0/0 0/0 .text __dt__20J3DAnmVisibilityFullFv */
J3DAnmVisibilityFull::~J3DAnmVisibilityFull() {
// NONMATCHING
}
/* 803397F8-80339800 334138 0008+00 1/0 0/0 0/0 .text getKind__20J3DAnmVisibilityFullCFv
*/
s32 J3DAnmVisibilityFull::getKind() const {
return 6;
}
/* 80339800-80339848 334140 0048+00 1/0 0/0 0/0 .text __dt__12J3DAnmLoaderFv */
// J3DAnmLoader::~J3DAnmLoader() {
extern "C" void __dt__12J3DAnmLoaderFv() {
// NONMATCHING
}
/* 80339848-80339860 334188 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<21J3DAnmClusterKeyTable>__FPCvPCv */
extern "C" void func_80339848(void* _this, void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 80339860-80339878 3341A0 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<22J3DAnmClusterFullTable>__FPCvPCv */
extern "C" void func_80339860(void* _this, void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 803A2130-803A2130 02E790 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -0,0 +1,201 @@
//
// Generated By: dol2asm
// Translation Unit: J3DClusterLoader
//
#include "JSystem/J3DGraphLoader/J3DClusterLoader.h"
#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h"
#include "JSystem/JSupport/JSupport.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "dol2asm.h"
#include "dolphin/os.h"
#include "string.h"
//
// Forward References:
//
extern "C" void load__24J3DClusterLoaderDataBaseFPCv();
extern "C" void __ct__20J3DClusterLoader_v15Fv();
extern "C" void __dt__20J3DClusterLoader_v15Fv();
extern "C" void load__20J3DClusterLoader_v15FPCv();
extern "C" void readCluster__20J3DClusterLoader_v15FPC15J3DClusterBlock();
extern "C" void __dt__16J3DClusterLoaderFv();
extern "C" void func_80334644(void* _this, void const*, void const*);
extern "C" void func_8033465C(void* _this, void const*, void const*);
extern "C" void func_80334674(void* _this, void const*, void const*);
extern "C" extern char const* const J3DClusterLoader__stringBase0;
//
// External References:
//
extern "C" void* __nw__FUl();
extern "C" void* __nwa__FUl();
extern "C" void* __nwa__FUli();
extern "C" void __dl__FPv();
extern "C" void __ct__10JUTNameTabFPC7ResNTAB();
extern "C" void func_802F42C0(void* _this, void const*, void const*);
extern "C" void func_8030A530(void* _this, void const*, void const*);
extern "C" void func_8030A560(void* _this, void const*, void const*);
extern "C" void __ct__13J3DDeformDataFv();
extern "C" void __ct__11J3DDeformerFP13J3DDeformData();
extern "C" void _savegpr_23();
extern "C" void _savegpr_26();
extern "C" void _restgpr_23();
extern "C" void _restgpr_26();
//
// Declarations:
//
/* 80334130-803341CC 32EA70 009C+00 0/0 1/1 0/0 .text load__24J3DClusterLoaderDataBaseFPCv */
void* J3DClusterLoaderDataBase::load(const void* i_data) {
const JUTDataFileHeader* fileHeader = (JUTDataFileHeader*)i_data;
if (fileHeader->mMagic == 'J3D1' && fileHeader->mType == 'bls1') {
J3DClusterLoader_v15 loader;
return loader.load(i_data);
} else if (fileHeader->mMagic == 'J3D2' && fileHeader->mType == 'bls2') {
return NULL;
}
return NULL;
}
/* ############################################################################################## */
/* 803CF0E8-803CF0F8 02C208 0010+00 2/2 0/0 0/0 .data __vt__20J3DClusterLoader_v15 */
SECTION_DATA extern void* __vt__20J3DClusterLoader_v15[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)load__20J3DClusterLoader_v15FPCv,
(void*)__dt__20J3DClusterLoader_v15Fv,
};
/* 803CF0F8-803CF108 02C218 0010+00 3/3 0/0 0/0 .data __vt__16J3DClusterLoader */
SECTION_DATA extern void* __vt__16J3DClusterLoader[4] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)NULL,
(void*)__dt__16J3DClusterLoaderFv,
};
/* 803341CC-803341E8 32EB0C 001C+00 1/1 0/0 0/0 .text __ct__20J3DClusterLoader_v15Fv */
J3DClusterLoader_v15::J3DClusterLoader_v15() {}
/* 803341E8-80334244 32EB28 005C+00 2/1 0/0 0/0 .text __dt__20J3DClusterLoader_v15Fv */
J3DClusterLoader_v15::~J3DClusterLoader_v15() {}
/* 80334244-803342F8 32EB84 00B4+00 2/1 0/0 0/0 .text load__20J3DClusterLoader_v15FPCv */
void* J3DClusterLoader_v15::load(const void* i_data) {
mpDeformData = new J3DDeformData();
const JUTDataFileHeader* fileHeader = (JUTDataFileHeader*)i_data;
const JUTDataBlockHeader* block = &fileHeader->mFirstBlock;
for (int i = 0; i < fileHeader->mBlockNum; i++) {
switch (block->mType) {
case 'CLS1':
readCluster((J3DClusterBlock*)block);
break;
default:
OSReport("Unknown data block\n");
break;
}
block = block->getNext();
}
return mpDeformData;
}
/* 803342F8-803345FC 32EC38 0304+00 1/1 0/0 0/0 .text
* readCluster__20J3DClusterLoader_v15FPC15J3DClusterBlock */
void J3DClusterLoader_v15::readCluster(const J3DClusterBlock* block) {
mpDeformData->mClusterNum = block->mClusterNum;
mpDeformData->mClusterKeyNum = block->mClusterKeyNum;
mpDeformData->mVtxPosNum = block->mVtxPosNum;
mpDeformData->mVtxNrmNum = block->mVtxNrmNum;
mpDeformData->mClusterVertexNum = block->mClusterVertexNum;
if (block->mClusterName != NULL) {
mpDeformData->mClusterName =
new JUTNameTab(JSUConvertOffsetToPtr<ResNTAB>(block, block->mClusterName));
} else {
mpDeformData->mClusterName = NULL;
}
if (block->mClusterKeyName != NULL) {
mpDeformData->mClusterKeyName =
new JUTNameTab(JSUConvertOffsetToPtr<ResNTAB>(block, block->mClusterKeyName));
} else {
mpDeformData->mClusterKeyName = NULL;
}
mpDeformData->mVtxPos = JSUConvertOffsetToPtr<f32>(block, block->mVtxPos);
mpDeformData->mVtxNrm = JSUConvertOffsetToPtr<f32>(block, block->mVtxNrm);
void* clusterPointer = block->mClusterPointer;
int clusterKeyPointerSize = (int)block->mClusterKeyPointer - (int)clusterPointer;
int clusterVertexPointerSize = (int)block->mClusterVertex - (int)clusterPointer;
int vtxPosSize = (int)block->mVtxPos - (int)clusterPointer;
u8* arr = new (0x20) u8[vtxPosSize];
memcpy(arr, JSUConvertOffsetToPtr<J3DCluster>(block, clusterPointer), vtxPosSize);
mpDeformData->mClusterPointer = (J3DCluster*)arr;
mpDeformData->mClusterKeyPointer = (J3DClusterKey*)&arr[clusterKeyPointerSize];
mpDeformData->mClusterVertex = (J3DClusterVertex*)&arr[clusterVertexPointerSize];
for (int i = 0; i < mpDeformData->getClusterNum(); i++) {
J3DCluster* cluster = &mpDeformData->mClusterPointer[i];
cluster->mClusterKey = JSUConvertOffsetToPtr<J3DClusterKey>(arr - (int)clusterPointer, cluster->mClusterKey);
cluster->field_0x18 = JSUConvertOffsetToPtr<u16>(block, cluster->field_0x18);
cluster->mClusterVertex =
JSUConvertOffsetToPtr<J3DClusterVertex>(arr - (int)clusterPointer, cluster->mClusterVertex);
J3DDeformer* deformer = new J3DDeformer(mpDeformData);
if (cluster->field_0x14 != 0) {
deformer->field_0xc = new f32[cluster->field_0x14 * 3];
} else {
deformer->field_0xc = NULL;
}
deformer->mFlags = cluster->mFlags;
deformer->field_0x8 = new f32[cluster->mKeyNum];
cluster->setDeformer(deformer);
}
for (int i = 0; i < mpDeformData->getClusterKeyNum(); i++) {
J3DClusterKey* clusterKey = &mpDeformData->mClusterKeyPointer[i];
clusterKey->field_0x4 = JSUConvertOffsetToPtr<u16>(block, clusterKey->field_0x4);
clusterKey->field_0x8 = JSUConvertOffsetToPtr<u16>(block, clusterKey->field_0x8);
}
for (int i = 0; i < mpDeformData->mClusterVertexNum; i++) {
J3DClusterVertex* clusterVertex = &mpDeformData->mClusterVertex[i];
clusterVertex->field_0x4 = JSUConvertOffsetToPtr<u16>(block, clusterVertex->field_0x4);
clusterVertex->field_0x8 = JSUConvertOffsetToPtr<u16>(block, clusterVertex->field_0x8);
}
DCStoreRange(arr, vtxPosSize);
}
/* 803345FC-80334644 32EF3C 0048+00 1/0 0/0 0/0 .text __dt__16J3DClusterLoaderFv */
// Remove when JSUConvertOffsetToPtr is ok
void __dt__16J3DClusterLoaderFv() {
//asm J3DClusterLoader::~J3DClusterLoader() {
// NONMATCHING
}
/* 80334644-8033465C 32EF84 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<16J3DClusterVertex>__FPCvPCv */
extern "C" void func_80334644(void* _this, void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 8033465C-80334674 32EF9C 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<13J3DClusterKey>__FPCvPCv */
extern "C" void func_8033465C(void* _this, void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 80334674-8033468C 32EFB4 0018+00 1/1 0/0 0/0 .text JSUConvertOffsetToPtr<10J3DCluster>__FPCvPCv
*/
extern "C" void func_80334674(void* _this, void const* param_0, void const* param_1) {
// NONMATCHING
}
/* 803A2098-803A2098 02E6F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -0,0 +1,48 @@
//
// Generated By: dol2asm
// Translation Unit: J3DJointFactory
//
#include "JSystem/J3DGraphLoader/J3DJointFactory.h"
#include "JSystem/J3DGraphLoader/J3DModelLoader.h"
#include "JSystem/J3DGraphAnimator/J3DJoint.h"
#include "JSystem/JSupport/JSupport.h"
//
// Types:
//
extern "C" u16* func_8033677C(const void*, const void*); // JSUConvertOffsetToPtr<u16>
extern "C" void* __nw__FUl();
extern "C" void __ct__8J3DJointFv();
/* 80337178-803371D0 331AB8 0058+00 0/0 1/1 0/0 .text __ct__15J3DJointFactoryFRC13J3DJointBlock */
J3DJointFactory::J3DJointFactory(J3DJointBlock const& block) {
mJointInitData = JSUConvertOffsetToPtr<J3DJointInitData>(&block, block.mpJointInitData);
// Fix when we have our ODR working.
// mIndexTable = JSUConvertOffsetToPtr<u16>(&block, block.mpIndexTable);
mIndexTable = func_8033677C(&block, block.mpIndexTable);
}
/* 803371D0-80337338 331B10 0168+00 0/0 1/1 0/0 .text create__15J3DJointFactoryFi */
J3DJoint* J3DJointFactory::create(int param_0) {
// NONMATCHING
}
/* J3DJoint* J3DJointFactory::create(int no) {
J3DJoint* joint = new J3DJoint();
joint->mJntNo = no;
joint->mKind = getKind(no);
joint->mScaleCompensate = getScaleCompensate(no);
joint->mTransformInfo = getTransformInfo(no);
joint->mBoundingSphereRadius = getRadius(no);
joint->mMin = getMin(no);
joint->mMax = getMax(no);
joint->mMtxCalc = NULL;
if (joint->mScaleCompensate == 0xFF)
joint->mScaleCompensate = 0;
return joint;
} */
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,396 @@
//
// Generated By: dol2asm
// Translation Unit: J3DMaterialFactory_v21
//
#include "JSystem/J3DGraphLoader/J3DMaterialFactory_v21.h"
#include "JSystem/JSupport/JSupport.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void __ct__22J3DMaterialFactory_v21FRC20J3DMaterialBlock_v21();
extern "C" void countUniqueMaterials__22J3DMaterialFactory_v21Fv();
extern "C" void countTexGens__22J3DMaterialFactory_v21CFi();
extern "C" void countStages__22J3DMaterialFactory_v21CFi();
extern "C" void create__22J3DMaterialFactory_v21CFP11J3DMaterialiUl();
extern "C" void newMatColor__22J3DMaterialFactory_v21CFii();
extern "C" void newColorChanNum__22J3DMaterialFactory_v21CFi();
extern "C" void newColorChan__22J3DMaterialFactory_v21CFii();
extern "C" void newTexGenNum__22J3DMaterialFactory_v21CFi();
extern "C" void newTexCoord__22J3DMaterialFactory_v21CFii();
extern "C" void newTexMtx__22J3DMaterialFactory_v21CFii();
extern "C" void newCullMode__22J3DMaterialFactory_v21CFi();
extern "C" void newTexNo__22J3DMaterialFactory_v21CFii();
extern "C" void newTevOrder__22J3DMaterialFactory_v21CFii();
extern "C" void newTevColor__22J3DMaterialFactory_v21CFii();
extern "C" void newTevKColor__22J3DMaterialFactory_v21CFii();
extern "C" void newTevStageNum__22J3DMaterialFactory_v21CFi();
extern "C" void newTevStage__22J3DMaterialFactory_v21CFii();
extern "C" void newTevSwapModeTable__22J3DMaterialFactory_v21CFii();
extern "C" void newFog__22J3DMaterialFactory_v21CFi();
extern "C" void newAlphaComp__22J3DMaterialFactory_v21CFi();
extern "C" void newBlend__22J3DMaterialFactory_v21CFi();
extern "C" void newZMode__22J3DMaterialFactory_v21CFi();
extern "C" void newZCompLoc__22J3DMaterialFactory_v21CFi();
extern "C" void newDither__22J3DMaterialFactory_v21CFi();
extern "C" void newNBTScale__22J3DMaterialFactory_v21CFi();
extern "C" void func_80334118(void* _this, void const*, void const*);
//
// External References:
//
extern "C" void __ct__11J3DTevStageFv();
extern "C" void __ct__11J3DTevStageFRC15J3DTevStageInfo();
extern "C" void* __nw__FUl();
extern "C" GXColorS10* func_802F41E8(void const*, void const*);
extern "C" u8* func_802F4260(void const*, void const*);
extern "C" GXColor* func_802F4278(void const*, void const*);
extern "C" GXCullMode* func_802F4290(void const*, void const*);
extern "C" u16* func_802F42C0(void const*, void const*);
extern "C" void createColorBlock__11J3DMaterialFUl();
extern "C" void createTexGenBlock__11J3DMaterialFUl();
extern "C" void createTevBlock__11J3DMaterialFi();
extern "C" void createIndBlock__11J3DMaterialFi();
extern "C" void createPEBlock__11J3DMaterialFUlUl();
extern "C" void initialize__11J3DMaterialFv();
extern "C" void __as__13J3DTexMtxInfoFRC13J3DTexMtxInfo();
extern "C" void __as__10J3DFogInfoFRC10J3DFogInfo();
extern "C" void func_80332C24(void* _this, void const*, void const*);
extern "C" void func_80332C3C(void* _this, void const*, void const*);
extern "C" void func_80332C54(void* _this, void const*, void const*);
extern "C" void func_80332C6C(void* _this, void const*, void const*);
extern "C" void func_80332C84(void* _this, void const*, void const*);
extern "C" void func_80332C9C(void* _this, void const*, void const*);
extern "C" void func_80332CB4(void* _this, void const*, void const*);
extern "C" void func_80332CCC(void* _this, void const*, void const*);
extern "C" void func_80332CE4(void* _this, void const*, void const*);
extern "C" void func_80332CFC(void* _this, void const*, void const*);
extern "C" void func_80332D14(void* _this, void const*, void const*);
extern "C" void func_80332D2C(void* _this, void const*, void const*);
extern "C" void func_80332D5C(void* _this, void const*, void const*);
extern "C" void _savegpr_19();
extern "C" void _savegpr_29();
extern "C" void _restgpr_19();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__11J3DMaterial[12];
//
// Declarations:
//
/* 80332DA4-80332F84 32D6E4 01E0+00 0/0 2/2 0/0 .text
* __ct__22J3DMaterialFactory_v21FRC20J3DMaterialBlock_v21 */
J3DMaterialFactory_v21::J3DMaterialFactory_v21(J3DMaterialBlock_v21 const& i_block) {
mMaterialNum = i_block.mMaterialNum;
mpMaterialInitData = JSUConvertOffsetToPtr<J3DMaterialInitData_v21>(&i_block, i_block.mpMaterialInitData);
mpMaterialID = JSUConvertOffsetToPtr<u16>(&i_block, i_block.mpMaterialID);
mpCullMode = JSUConvertOffsetToPtr<GXCullMode>(&i_block, i_block.mpCullMode);
mpMatColor = JSUConvertOffsetToPtr<GXColor>(&i_block, i_block.mpMatColor);
mpColorChanNum = JSUConvertOffsetToPtr<u8>(&i_block, i_block.mpColorChanNum);
mpColorChanInfo = JSUConvertOffsetToPtr<J3DColorChanInfo>(&i_block, i_block.mpColorChanInfo);
mpTexGenNum = JSUConvertOffsetToPtr<u8>(&i_block, i_block.mpTexGenNum);
mpTexCoordInfo = JSUConvertOffsetToPtr<J3DTexCoordInfo>(&i_block, i_block.mpTexCoordInfo);
mpTexCoord2Info = JSUConvertOffsetToPtr<J3DTexCoord2Info>(&i_block, i_block.mpTexCoord2Info);
mpTexMtxInfo = JSUConvertOffsetToPtr<J3DTexMtxInfo>(&i_block, i_block.mpTexMtxInfo);
field_0x28 = JSUConvertOffsetToPtr<J3DTexMtxInfo>(&i_block, i_block.field_0x38);
mpTexNo = JSUConvertOffsetToPtr<u16>(&i_block, i_block.mpTexNo);
mpTevOrderInfo = JSUConvertOffsetToPtr<J3DTevOrderInfo>(&i_block, i_block.mpTevOrderInfo);
mpTevColor = JSUConvertOffsetToPtr<GXColorS10>(&i_block, i_block.mpTevColor);
mpTevKColor = JSUConvertOffsetToPtr<GXColor>(&i_block, i_block.mpTevKColor);
mpTevStageNum = JSUConvertOffsetToPtr<u8>(&i_block, i_block.mpTevStageNum);
mpTevStageInfo = JSUConvertOffsetToPtr<J3DTevStageInfo>(&i_block, i_block.mpTevStageInfo);
mpTevSwapModeInfo = JSUConvertOffsetToPtr<J3DTevSwapModeInfo>(&i_block, i_block.mpTevSwapModeInfo);
mpTevSwapModeTableInfo = JSUConvertOffsetToPtr<J3DTevSwapModeTableInfo>(&i_block, i_block.mpTevSwapModeTableInfo);
mpFogInfo = JSUConvertOffsetToPtr<J3DFogInfo>(&i_block, i_block.mpFogInfo);
mpAlphaCompInfo = JSUConvertOffsetToPtr<J3DAlphaCompInfo>(&i_block, i_block.mpAlphaCompInfo);
mpBlendInfo = JSUConvertOffsetToPtr<J3DBlendInfo>(&i_block, i_block.mpBlendInfo);
mpZModeInfo = JSUConvertOffsetToPtr<J3DZModeInfo>(&i_block, i_block.mpZModeInfo);
mpZCompLoc = JSUConvertOffsetToPtr<u8>(&i_block, i_block.mpZCompLoc);
mpDither = JSUConvertOffsetToPtr<u8>(&i_block, i_block.mpDither);
mpNBTScaleInfo = JSUConvertOffsetToPtr<J3DNBTScaleInfo>(&i_block, i_block.mpNBTScaleInfo);
}
/* 80332F84-80332FA8 32D8C4 0024+00 0/0 1/1 0/0 .text
* countUniqueMaterials__22J3DMaterialFactory_v21Fv */
u16 J3DMaterialFactory_v21::countUniqueMaterials() {
u16 i;
for (i = 0; i < mMaterialNum; i++) {
}
return i;
}
/* 80332FA8-80332FE0 32D8E8 0038+00 1/1 0/0 0/0 .text countTexGens__22J3DMaterialFactory_v21CFi */
u32 J3DMaterialFactory_v21::countTexGens(int i_idx) const {
u8 tex_gen_num_index = mpMaterialInitData[mpMaterialID[i_idx]].mTexGenNumIdx;
if (tex_gen_num_index != 0xff) {
return mpTexGenNum[tex_gen_num_index];
}
return 0;
}
/* 80332FE0-80333068 32D920 0088+00 1/1 0/0 0/0 .text countStages__22J3DMaterialFactory_v21CFi */
u32 J3DMaterialFactory_v21::countStages(int i_idx) const {
J3DMaterialInitData_v21* init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
u32 count1 = 0;
u32 count2 = 0;
u8 tev_stage_num_index = init_data->mTevStageNumIdx;
if (tev_stage_num_index != 0xff) {
count2 = mpTevStageNum[tev_stage_num_index];
}
for (int i = 0; i < 8; i++) {
if (init_data->mTexNoIdx[i] != 0xffff) {
count1++;
}
}
if (count2 != count1 && count1 != 0) {
if (count2 > count1) {
return count2;
} else {
return count1;
}
}
return count2;
}
/* 80333068-803337D8 32D9A8 0770+00 0/0 2/2 0/0 .text
* create__22J3DMaterialFactory_v21CFP11J3DMaterialiUl */
J3DMaterial* J3DMaterialFactory_v21::create(J3DMaterial* param_0, int param_1, u32 param_2) const {
// NONMATCHING
}
/* 803337D8-80333834 32E118 005C+00 1/1 0/0 0/0 .text newMatColor__22J3DMaterialFactory_v21CFii */
J3DGXColor J3DMaterialFactory_v21::newMatColor(int i_idx, int i_no) const {
GXColor defaultColor = {0xff,0xff,0xff,0xff};
J3DGXColor defaultJ3DGXColor = J3DGXColor(defaultColor);
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mMatColorIdx[i_no] != 0xffff) {
return J3DGXColor(mpMatColor[mtl_init_data->mMatColorIdx[i_no]]);
}
return J3DGXColor(defaultJ3DGXColor);
}
/* 80333834-8033386C 32E174 0038+00 1/1 0/0 0/0 .text newColorChanNum__22J3DMaterialFactory_v21CFi
*/
u8 J3DMaterialFactory_v21::newColorChanNum(int i_idx) const {
u8 color_chan_num_index = mpMaterialInitData[mpMaterialID[i_idx]].mColorChanNumIdx;
if (color_chan_num_index != 0xff) {
return mpColorChanNum[color_chan_num_index];
} else {
return 0;
}
}
/* 8033386C-80333A10 32E1AC 01A4+00 1/1 0/0 0/0 .text newColorChan__22J3DMaterialFactory_v21CFii
*/
// J3DColorChan ctor
#ifdef NONMATCHING
J3DColorChan J3DMaterialFactory_v21::newColorChan(int i_idx, int i_no) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mColorChanIdx[i_no] != 0xffff) {
return J3DColorChan(mpColorChanInfo[mtl_init_data->mColorChanIdx[i_no]]);
} else {
return J3DColorChan();
}
}
#else
J3DColorChan J3DMaterialFactory_v21::newColorChan(int param_0, int param_1) const {
// NONMATCHING
}
#endif
/* 80333A10-80333A48 32E350 0038+00 1/1 0/0 0/0 .text newTexGenNum__22J3DMaterialFactory_v21CFi */
u32 J3DMaterialFactory_v21::newTexGenNum(int i_idx) const {
u8 tex_gen_num_index = mpMaterialInitData[mpMaterialID[i_idx]].mTexGenNumIdx;
if (tex_gen_num_index != 0xff) {
return mpTexGenNum[tex_gen_num_index];
} else {
return 0;
}
}
/* 80333A48-80333AA8 32E388 0060+00 1/1 0/0 0/0 .text newTexCoord__22J3DMaterialFactory_v21CFii */
J3DTexCoord J3DMaterialFactory_v21::newTexCoord(int i_idx, int i_no) const {
u16 tex_coord_index = mpMaterialInitData[mpMaterialID[i_idx]].mTexCoordIdx[i_no];
if (tex_coord_index != 0xffff) {
return J3DTexCoord(mpTexCoordInfo[tex_coord_index]);
} else {
return J3DTexCoord();
}
}
/* 80333AA8-80333B30 32E3E8 0088+00 1/1 0/0 0/0 .text newTexMtx__22J3DMaterialFactory_v21CFii */
J3DTexMtx* J3DMaterialFactory_v21::newTexMtx(int i_idx, int i_no) const {
J3DTexMtx* tex_mtx = NULL;
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mTexMtxIdx[i_no] != 0xffff) {
tex_mtx = new J3DTexMtx(mpTexMtxInfo[mtl_init_data->mTexMtxIdx[i_no]]);
}
return tex_mtx;
}
/* 80333B30-80333B70 32E470 0040+00 1/1 0/0 0/0 .text newCullMode__22J3DMaterialFactory_v21CFi */
u8 J3DMaterialFactory_v21::newCullMode(int i_idx) const {
u8 cull_mode_index = mpMaterialInitData[mpMaterialID[i_idx]].mCullModeIdx;
if (cull_mode_index != 0xff) {
return mpCullMode[cull_mode_index];
} else {
return 0xff;
}
}
/* 80333B70-80333BB8 32E4B0 0048+00 1/1 0/0 0/0 .text newTexNo__22J3DMaterialFactory_v21CFii */
u16 J3DMaterialFactory_v21::newTexNo(int i_idx, int i_no) const {
u16 tex_no_index = mpMaterialInitData[mpMaterialID[i_idx]].mTexNoIdx[i_no];
if (tex_no_index != 0xffff) {
return mpTexNo[tex_no_index];
} else {
return 0xffff;
}
}
/* 80333BB8-80333C04 32E4F8 004C+00 1/1 0/0 0/0 .text newTevOrder__22J3DMaterialFactory_v21CFii */
J3DTevOrder J3DMaterialFactory_v21::newTevOrder(int i_idx, int i_no) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mTevOrderIdx[i_no] != 0xffff) {
return J3DTevOrder(mpTevOrderInfo[mtl_init_data->mTevOrderIdx[i_no]]);
} else {
return J3DTevOrder();
}
}
/* 80333C04-80333C74 32E544 0070+00 1/1 0/0 0/0 .text newTevColor__22J3DMaterialFactory_v21CFii */
J3DGXColorS10 J3DMaterialFactory_v21::newTevColor(int i_idx, int i_no) const {
GXColorS10 defaultTevColor = {0,0,0,0};
J3DGXColorS10 dflt = defaultTevColor;
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mTevColorIdx[i_no] != 0xffff) {
return mpTevColor[mtl_init_data->mTevColorIdx[i_no]];
} else {
return defaultTevColor;
}
}
/* 80333C74-80333CD0 32E5B4 005C+00 1/1 0/0 0/0 .text newTevKColor__22J3DMaterialFactory_v21CFii
*/
J3DGXColor J3DMaterialFactory_v21::newTevKColor(int i_idx, int param_1) const {
GXColor defaultColor = {0xff,0xff,0xff,0xff};
J3DGXColor defaultJ3DGXColor = J3DGXColor(defaultColor);
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mTevKColorIdx[param_1] != 0xffff) {
return J3DGXColor(mpTevKColor[mtl_init_data->mTevKColorIdx[param_1]]);
}
return J3DGXColor(defaultJ3DGXColor);
}
/* 80333CD0-80333D08 32E610 0038+00 1/1 0/0 0/0 .text newTevStageNum__22J3DMaterialFactory_v21CFi
*/
u8 J3DMaterialFactory_v21::newTevStageNum(int i_idx) const {
u8 tev_stage_num_index = mpMaterialInitData[mpMaterialID[i_idx]].mTevStageNumIdx;
if (tev_stage_num_index != 0xff) {
return mpTevStageNum[tev_stage_num_index];
} else {
return 0xff;
}
}
/* 80333D08-80333D68 32E648 0060+00 1/1 0/0 0/0 .text newTevStage__22J3DMaterialFactory_v21CFii */
J3DTevStage J3DMaterialFactory_v21::newTevStage(int i_idx, int i_no) const {
u16 tev_stage_index = mpMaterialInitData[mpMaterialID[i_idx]].mTevStageIdx[i_no];
if (tev_stage_index != 0xffff) {
return J3DTevStage(mpTevStageInfo[tev_stage_index]);
} else {
return J3DTevStage();
}
}
/* 80333D68-80333E04 32E6A8 009C+00 1/1 0/0 0/0 .text
* newTevSwapModeTable__22J3DMaterialFactory_v21CFii */
J3DTevSwapModeTable J3DMaterialFactory_v21::newTevSwapModeTable(int i_idx, int param_1) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mTevSwapModeTableIdx[param_1] != 0xffff) {
return J3DTevSwapModeTable(mpTevSwapModeTableInfo[mtl_init_data->mTevSwapModeTableIdx[param_1]]);
}
return J3DTevSwapModeTable(j3dDefaultTevSwapModeTable);
}
/* 80333E04-80333EE0 32E744 00DC+00 1/1 0/0 0/0 .text newFog__22J3DMaterialFactory_v21CFi
*/
J3DFog J3DMaterialFactory_v21::newFog(int i_idx) const {
J3DFog fog;
u16 fog_index = mpMaterialInitData[mpMaterialID[i_idx]].mFogIdx;
if (fog_index != 0xffff) {
fog.setFogInfo(mpFogInfo[fog_index]);
}
return fog;
}
/* 80333EE0-80333F60 32E820 0080+00 1/1 0/0 0/0 .text newAlphaComp__22J3DMaterialFactory_v21CFi */
// calcAlphaCmpID issue
#ifdef NONMATCHING
J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int i_idx) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mAlphaCompIdx != 0xffff) {
return J3DAlphaComp(mpAlphaCompInfo[mtl_init_data->mAlphaCompIdx]);
}
return J3DAlphaComp(0xffff);
}
#else
J3DAlphaComp J3DMaterialFactory_v21::newAlphaComp(int param_0) const {
// NONMATCHING
}
#endif
/* 80333F60-80333FA4 32E8A0 0044+00 1/1 0/0 0/0 .text newBlend__22J3DMaterialFactory_v21CFi */
J3DBlend J3DMaterialFactory_v21::newBlend(int i_idx) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mBlendIdx != 0xffff) {
return J3DBlend(mpBlendInfo[mtl_init_data->mBlendIdx]);
} else {
return J3DBlend(j3dDefaultBlendInfo);
}
}
/* 80333FA4-80334004 32E8E4 0060+00 1/1 0/0 0/0 .text newZMode__22J3DMaterialFactory_v21CFi */
J3DZMode J3DMaterialFactory_v21::newZMode(int i_idx) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mZModeIdx != 0xff) {
return J3DZMode(mpZModeInfo[mtl_init_data->mZModeIdx]);
} else {
return J3DZMode();
}
}
/* 80334004-8033403C 32E944 0038+00 1/1 0/0 0/0 .text newZCompLoc__22J3DMaterialFactory_v21CFi */
u8 J3DMaterialFactory_v21::newZCompLoc(int i_idx) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mZCompLocIdx != 0xff){
return mpZCompLoc[mtl_init_data->mZCompLocIdx];
} else {
return 0;
}
}
/* 8033403C-80334074 32E97C 0038+00 1/1 0/0 0/0 .text newDither__22J3DMaterialFactory_v21CFi */
u8 J3DMaterialFactory_v21::newDither(int i_idx) const {
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mDitherIdx != 0xff){
return mpDither[mtl_init_data->mDitherIdx];
} else {
return 1;
}
}
/* 80334074-80334118 32E9B4 00A4+00 1/1 0/0 0/0 .text newNBTScale__22J3DMaterialFactory_v21CFi */
J3DNBTScale J3DMaterialFactory_v21::newNBTScale(int i_idx) const {
J3DNBTScale dflt(j3dDefaultNBTScaleInfo);
J3DMaterialInitData_v21* mtl_init_data = &mpMaterialInitData[mpMaterialID[i_idx]];
if (mtl_init_data->mNBTScaleIdx != 0xffff) {
return J3DNBTScale(mpNBTScaleInfo[mtl_init_data->mNBTScaleIdx]);
} else {
return dflt;
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,407 @@
//
// Generated By: dol2asm
// Translation Unit: J3DModelLoaderCalcSize
//
#include "JSystem/J3DGraphLoader/J3DModelLoaderCalcSize.h"
#include "JSystem/J3DGraphLoader/J3DModelLoader.h"
#include "JSystem/J3DGraphLoader/J3DShapeFactory.h"
#include "JSystem/J3DGraphLoader/J3DMaterialFactory.h"
#include "JSystem/J3DGraphBase/J3DMaterial.h"
#include "JSystem/J3DGraphAnimator/J3DModelData.h"
#include "JSystem/JSupport/JSupport.h"
#include "dolphin/os.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void countMaterialNum__14J3DModelLoaderFPCv();
extern "C" void calcLoadSize__14J3DModelLoaderFPCvUl();
extern "C" void calcLoadMaterialTableSize__14J3DModelLoaderFPCv();
extern "C" void calcLoadBinaryDisplayListSize__14J3DModelLoaderFPCvUl();
extern "C" void calcSizeInformation__14J3DModelLoaderFPC17J3DModelInfoBlockUl();
extern "C" void calcSizeJoint__14J3DModelLoaderFPC13J3DJointBlock();
extern "C" void calcSizeEnvelope__14J3DModelLoaderFPC16J3DEnvelopeBlock();
extern "C" void calcSizeDraw__14J3DModelLoaderFPC12J3DDrawBlock();
extern "C" void calcSizeMaterial__18J3DModelLoader_v26FPC16J3DMaterialBlockUl();
extern "C" void calcSizeShape__14J3DModelLoaderFPC13J3DShapeBlockUl();
extern "C" void calcSizeTexture__14J3DModelLoaderFPC15J3DTextureBlock();
extern "C" void calcSizeMaterialTable__18J3DModelLoader_v26FPC16J3DMaterialBlockUl();
extern "C" void calcSizeTextureTable__14J3DModelLoaderFPC15J3DTextureBlock();
extern "C" void calcSizePatchedMaterial__14J3DModelLoaderFPC16J3DMaterialBlockUl();
extern "C" void calcSizeMaterialDL__14J3DModelLoaderFPC18J3DMaterialDLBlockUl();
extern "C" extern char const* const J3DModelLoaderCalcSize__stringBase0;
//
// External References:
//
extern "C" void __ct__18J3DMaterialFactoryFRC16J3DMaterialBlock();
extern "C" void __ct__18J3DMaterialFactoryFRC18J3DMaterialDLBlock();
extern "C" void countUniqueMaterials__18J3DMaterialFactoryFv();
extern "C" void
calcSize__18J3DMaterialFactoryCFP11J3DMaterialQ218J3DMaterialFactory12MaterialTypeiUl();
extern "C" void func_8033674C(void* _this, void const*, void const*);
extern "C" void __ct__15J3DShapeFactoryFRC13J3DShapeBlock();
extern "C" void calcSize__15J3DShapeFactoryFiUl();
extern "C" void calcSizeVcdVatCmdBuffer__15J3DShapeFactoryFUl();
extern "C" void _savegpr_22();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _restgpr_22();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
//
// Declarations:
//
/* 80336794-803367D4 3310D4 0040+00 0/0 3/0 0/0 .text countMaterialNum__14J3DModelLoaderFPCv */
u16 J3DModelLoader::countMaterialNum(const void* stream) {
const J3DModelFileData* header = (const J3DModelFileData*)stream;
const J3DModelBlock* block = header->mBlocks;
for (int i = 0; i < header->mBlockNum; block = (const J3DModelBlock*)((u8*)block + block->mBlockSize), i++)
{
if (block->mBlockType == 'MAT3') {
return ((const J3DMaterialBlock*)block)->mMaterialNum;
}
}
return 0;
}
/* ############################################################################################## */
/* 803A20E8-803A20E8 02E748 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_803A20E8 = "Unknown data block\n";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_803A20FC = "\0\0\0";
#pragma pop
/* 803367D4-803369A0 331114 01CC+00 0/0 3/0 0/0 .text calcLoadSize__14J3DModelLoaderFPCvUl */
// size load issue.
#ifdef NONMATCHING
u32 J3DModelLoader::calcLoadSize(void const* stream, u32 flags_) {
int flags = flags_;
const J3DModelFileData* header = static_cast<const J3DModelFileData*>(stream);
size_t size;
const J3DModelBlock* nextBlock = header->mBlocks;
u32 i = 0;
// TODO: What sizeof will get us a size of 0xE4?
size = 0xE4;
for (; i < header->mBlockNum; i++) {
switch (nextBlock->mBlockType) {
case 'INF1':
size += calcSizeInformation((const J3DModelInfoBlock*)nextBlock, flags);
break;
case 'JNT1':
size += calcSizeJoint((const J3DJointBlock*)nextBlock);
break;
case 'MAT2':
break;
case 'MAT3':
size += calcSizeMaterial((const J3DMaterialBlock*)nextBlock, flags);
break;
case 'SHP1':
size += calcSizeShape((const J3DShapeBlock*)nextBlock, flags);
break;
case 'TEX1':
size += calcSizeTexture((const J3DTextureBlock*)nextBlock);
break;
case 'EVP1':
size += calcSizeEnvelope((const J3DEnvelopeBlock*)nextBlock);
break;
case 'DRW1':
size += calcSizeDraw((const J3DDrawBlock*)nextBlock);
break;
case 'VTX1':
break;
default:
OSReport("Unknown data block\n");
break;
}
nextBlock = (const J3DModelBlock*)((u8*)nextBlock + nextBlock->mBlockSize);
}
return size;
}
#else
u32 J3DModelLoader::calcLoadSize(void const* param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 803369A0-80336A98 3312E0 00F8+00 0/0 3/0 0/0 .text
* calcLoadMaterialTableSize__14J3DModelLoaderFPCv */
u32 J3DModelLoader::calcLoadMaterialTableSize(const void* stream) {
size_t size;
const J3DModelBlock* nextBlock;
bool hasTextureTable;
u32 i;
const J3DModelFileData* header = reinterpret_cast<const J3DModelFileData*>(stream);
nextBlock = header->mBlocks;
hasTextureTable = false;
i = 0;
// TODO: What sizeof will get us a size of 0x20? Is this just the file header???
size = 0x20;
for (; i < header->mBlockNum; i++) {
switch (nextBlock->mBlockType) {
case 'MAT2':
break;
case 'MAT3':
size +=
calcSizeMaterialTable((const J3DMaterialBlock*)nextBlock,
J3DMLF_21 | J3DMLF_Material_UseIndirect |
J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn);
break;
case 'TEX1':
size += calcSizeTextureTable((const J3DTextureBlock*)nextBlock);
hasTextureTable = true;
break;
default:
OSReport("Unknown data block\n");
break;
}
nextBlock = (const J3DModelBlock*)((u8*)nextBlock + nextBlock->mBlockSize);
}
if (!hasTextureTable) {
size += 12;
}
return size;
}
/* 80336A98-80336CD8 3313D8 0240+00 0/0 3/0 0/0 .text
* calcLoadBinaryDisplayListSize__14J3DModelLoaderFPCvUl */
// flags issue
#ifdef NONMATCHING
u32 J3DModelLoader::calcLoadBinaryDisplayListSize(const void* stream, u32 flags) {
const J3DModelFileData* header = (const J3DModelFileData*)stream;
const J3DModelBlock* nextBlock = header->mBlocks;
u32 i = 0;
u32 matFlags = flags & (J3DMLF_Material_UseIndirect | J3DMLF_26);
int size = sizeof(J3DModelData);
for (; i < header->mBlockNum; i++) {
switch (nextBlock->mBlockType) {
case 'INF1':
size += calcSizeInformation((const J3DModelInfoBlock*)nextBlock, flags);
break;
case 'JNT1':
size += calcSizeJoint((const J3DJointBlock*)nextBlock);
break;
case 'SHP1':
size += calcSizeShape((const J3DShapeBlock*)nextBlock, flags);
break;
case 'TEX1':
size += calcSizeTexture((const J3DTextureBlock*)nextBlock);
break;
case 'MDL3':
size += calcSizeMaterialDL((const J3DMaterialDLBlock*)nextBlock, flags);
break;
case 'MAT2':
break;
case 'MAT3':
u32 flags2 = (J3DMLF_21 | J3DMLF_Material_PE_Full | J3DMLF_Material_Color_LightOn);
flags2 |= matFlags;
mpMaterialBlock = (const J3DMaterialBlock*)nextBlock;
if ((flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc)) == 0) {
field_0x18 = 1;
size += calcSizeMaterial((const J3DMaterialBlock*)nextBlock, flags2);
} else if ((flags & (J3DMLF_13 | J3DMLF_DoBdlMaterialCalc)) == J3DMLF_DoBdlMaterialCalc) {
field_0x18 = 1;
size += calcSizePatchedMaterial((const J3DMaterialBlock*)nextBlock, matFlags);
}
break;
case 'EVP1':
size += calcSizeEnvelope((const J3DEnvelopeBlock*)nextBlock);
break;
case 'DRW1':
size += calcSizeDraw((const J3DDrawBlock*)nextBlock);
break;
case 'VTX1':
break;
default:
OSReport("Unknown data block\n");
break;
}
nextBlock = (const J3DModelBlock*)((u8*)nextBlock + nextBlock->mBlockSize);
}
return size;
}
#else
u32 J3DModelLoader::calcLoadBinaryDisplayListSize(void const* param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 80336CD8-80336D64 331618 008C+00 2/2 0/0 0/0 .text
* calcSizeInformation__14J3DModelLoaderFPC17J3DModelInfoBlockUl */
u32 J3DModelLoader::calcSizeInformation(const J3DModelInfoBlock* block, u32 flags) {
int size = 0;
switch ((flags | block->mFlags) & J3DMLF_MtxTypeMask) {
case J3DMLF_None: // Basic
size = 4;
break;
case J3DMLF_MtxSoftImageCalc:
size = 4;
break;
case J3DMLF_MtxMayaCalc:
size = 4;
break;
default:
break;
}
mpModelHierarchy = JSUConvertOffsetToPtr<J3DModelHierarchy>(block, block->mpHierarchy);
return size;
}
/* 80336D64-80336D90 3316A4 002C+00 2/2 0/0 0/0 .text
* calcSizeJoint__14J3DModelLoaderFPC13J3DJointBlock */
u32 J3DModelLoader::calcSizeJoint(const J3DJointBlock* block) {
int size = 0;
if (block->mpNameTable) {
size = 0x10;
}
size += (block->mJointNum * sizeof(J3DJoint*));
size += (block->mJointNum * sizeof(J3DJoint));
return size;
}
/* 80336D90-80336DA0 3316D0 0010+00 2/2 0/0 0/0 .text
* calcSizeEnvelope__14J3DModelLoaderFPC16J3DEnvelopeBlock */
u32 J3DModelLoader::calcSizeEnvelope(const J3DEnvelopeBlock* block) {
mEnvelopeSize = block->mWEvlpMtxNum;
return 0;
}
/* 80336DA0-80336DB4 3316E0 0014+00 2/2 0/0 0/0 .text
* calcSizeDraw__14J3DModelLoaderFPC12J3DDrawBlock */
u32 J3DModelLoader::calcSizeDraw(const J3DDrawBlock* block) {
return (block->mMtxNum - mEnvelopeSize) * 2;
}
/* 80336DB4-80336EA0 3316F4 00EC+00 0/0 1/0 0/0 .text
* calcSizeMaterial__18J3DModelLoader_v26FPC16J3DMaterialBlockUl */
u32 J3DModelLoader_v26::calcSizeMaterial(const J3DMaterialBlock* block, u32 flags) {
int padding = 0;
J3DMaterialFactory factory(*block);
u32 count = block->mMaterialNum;
int uniqueCount = factory.countUniqueMaterials();
if (block->mpNameTable != NULL) {
padding = 0x10;
}
size_t size = padding + (count * sizeof(J3DMaterial*));
if ((flags & J3DMLF_UseUniqueMaterials) != 0) {
// calc for allocated materials as well
size += ALIGN_NEXT((u16)uniqueCount * sizeof(J3DMaterial), 0x20);
}
if ((flags & J3DMLF_UseUniqueMaterials) != 0) {
for (u32 i = 0; i < uniqueCount; i++) {
size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_NORMAL, i, flags);
}
}
for (u32 i = 0; i < count; i++) {
size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_NORMAL, i, flags);
}
return size;
}
/* 80336EA0-80336F44 3317E0 00A4+00 2/2 0/0 0/0 .text
* calcSizeShape__14J3DModelLoaderFPC13J3DShapeBlockUl */
u32 J3DModelLoader::calcSizeShape(const J3DShapeBlock* block, u32 flags) {
int size = 0;
J3DShapeFactory factory(*block);
int count = block->mShapeNum;
if (block->mpNameTable) {
size = 0x10;
}
size += count * sizeof(J3DShape*);
size += factory.calcSizeVcdVatCmdBuffer(count);
for (J3DModelHierarchy* hierarchy = mpModelHierarchy; hierarchy->mType != 0; hierarchy++) {
if (hierarchy->mType == 0x12) {
size += factory.calcSize(hierarchy->mValue, flags);
}
}
return size;
}
/* 80336F44-80336F60 331884 001C+00 3/3 0/0 0/0 .text
* calcSizeTexture__14J3DModelLoaderFPC15J3DTextureBlock */
u32 J3DModelLoader::calcSizeTexture(const J3DTextureBlock* block) {
// TODO: use sizeofs here.
int padding = 0;
if (block->mpNameTable) {
padding = 0x10;
}
return padding + 0xC;
}
/* 80336F60-80336FF0 3318A0 0090+00 0/0 1/0 0/0 .text
* calcSizeMaterialTable__18J3DModelLoader_v26FPC16J3DMaterialBlockUl */
u32 J3DModelLoader_v26::calcSizeMaterialTable(const J3DMaterialBlock* block, u32 flags) {
int size = 0;
u32 count = block->mMaterialNum;
J3DMaterialFactory factory(*block);
if (block->mpNameTable) {
size = 0x10;
}
size += (count * sizeof(J3DMaterial*));
for (u16 i = 0; i < count; i++) {
size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_NORMAL, i, flags);
}
return size;
}
/* 80336FF0-80337010 331930 0020+00 1/1 0/0 0/0 .text
* calcSizeTextureTable__14J3DModelLoaderFPC15J3DTextureBlock */
u32 J3DModelLoader::calcSizeTextureTable(const J3DTextureBlock* block) {
return calcSizeTexture(block);
}
/* 80337010-803370A0 331950 0090+00 1/1 0/0 0/0 .text
* calcSizePatchedMaterial__14J3DModelLoaderFPC16J3DMaterialBlockUl */
u32 J3DModelLoader::calcSizePatchedMaterial(const J3DMaterialBlock* block, u32 flags) {
int padding = 0;
u32 count = block->mMaterialNum;
J3DMaterialFactory factory(*block);
if (block->mpNameTable) {
padding = 0x10;
}
u32 size = padding + (count * sizeof(J3DMaterial*));
for (u16 i = 0; i < count; i++) {
size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_PATCHED, i, flags);
}
return size;
}
/* 803370A0-80337178 3319E0 00D8+00 1/1 0/0 0/0 .text
* calcSizeMaterialDL__14J3DModelLoaderFPC18J3DMaterialDLBlockUl */
u32 J3DModelLoader::calcSizeMaterialDL(const J3DMaterialDLBlock* block, u32 flags_) {
int flags = flags_;
size_t size = 0;
J3DMaterialFactory factory(*block);
;
if (!field_0x18) {
u32 count = block->mMaterialNum;
if (block->mpNameTable) {
size = 0x10;
}
size += count * sizeof(J3DLockedMaterial*);
for (u16 i = 0; i < count; i++) {
size += factory.calcSize(NULL, J3DMaterialFactory::MATERIAL_TYPE_LOCKED, i, flags);
}
} else {
u32 count = block->mMaterialNum;
for (u16 i = 0; i < count; i++) {
size += factory.calcSize((J3DMaterial*)this, J3DMaterialFactory::MATERIAL_TYPE_LOCKED, i, flags);
}
}
return size;
}
/* 803A20E8-803A20E8 02E748 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
@@ -0,0 +1,216 @@
//
// Generated By: dol2asm
// Translation Unit: J3DShapeFactory
//
#include "JSystem/J3DGraphLoader/J3DShapeFactory.h"
#include "JSystem/J3DGraphBase/J3DShape.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JSupport/JSupport.h"
#include "dolphin/os.h"
//
// Forward References:
//
//
// External References:
//
extern "C" J3DShapeInitData* func_80336764(const void*,
const void*); // JSUConvertOffsetToPtr<J3DShapeInitData>
extern "C" u16* func_8033677C(const void*, const void*); // JSUConvertOffsetToPtr<u16>
//
// Declarations:
//
/* 80337350-80337400 331C90 00B0+00 0/0 2/2 0/0 .text __ct__15J3DShapeFactoryFRC13J3DShapeBlock */
J3DShapeFactory::J3DShapeFactory(J3DShapeBlock const& block) {
//mShapeInitData = JSUConvertOffsetToPtr<J3DShapeInitData>(&block, (u32)block.mpShapeInitData);
mShapeInitData = func_80336764(&block, block.mpShapeInitData),
//mIndexTable = JSUConvertOffsetToPtr<u16>(&block, (u32)block.mpIndexTable);
mIndexTable = func_8033677C(&block, block.mpIndexTable),
mVtxDescList = JSUConvertOffsetToPtr<GXVtxDescList>(&block, (u32)block.mpVtxDescList),
//mMtxTable = JSUConvertOffsetToPtr<u16>(&block, (u32)block.mpMtxTable);
mMtxTable = func_8033677C(&block, block.mpMtxTable),
mDisplayListData = JSUConvertOffsetToPtr<u8>(&block, (u32)block.mpDisplayListData),
mMtxInitData = JSUConvertOffsetToPtr<J3DShapeMtxInitData>(&block, (u32)block.mpMtxInitData),
mDrawInitData = JSUConvertOffsetToPtr<J3DShapeDrawInitData>(&block, (u32)block.mpDrawInitData),
mVcdVatCmdBuffer = NULL;
}
/* 80337400-803375BC 331D40 01BC+00 0/0 1/1 0/0 .text
* create__15J3DShapeFactoryFiUlP14_GXVtxDescList */
J3DShape* J3DShapeFactory::create(int no, u32 flag, GXVtxDescList* vtxDesc) {
J3DShape* shape = new J3DShape;
shape->mMtxGroupNum = getMtxGroupNum(no);
shape->mRadius = getRadius(no);
shape->mVtxDesc = getVtxDescList(no);
shape->mShapeMtx = new J3DShapeMtx*[shape->mMtxGroupNum];
shape->mShapeDraw = new J3DShapeDraw*[shape->mMtxGroupNum];
shape->mMin = getMin(no);
shape->mMax = getMax(no);
shape->mVcdVatCmd = mVcdVatCmdBuffer + no * J3DShape::kVcdVatDLSize;
for (s32 i = 0; i < shape->mMtxGroupNum; i++) {
shape->mShapeMtx[i] = newShapeMtx(flag, no, i);
shape->mShapeDraw[i] = newShapeDraw(no, i);
}
shape->mIndex = no;
return shape;
}
static inline u32 getMdlDataFlag_MtxLoadType(u32 flag) {
return flag & 0x10;
}
enum {
J3DMdlDataFlag_ConcatView = 0x10,
};
enum {
J3DShapeMtxType_Mtx = 0x00,
J3DShapeMtxType_BBoard = 0x01,
J3DShapeMtxType_YBBoard = 0x02,
J3DShapeMtxType_Multi = 0x03,
};
/* 803375BC-8033784C 331EFC 0290+00 1/1 0/0 0/0 .text newShapeMtx__15J3DShapeFactoryCFUlii */
J3DShapeMtx* J3DShapeFactory::newShapeMtx(u32 flag, int shapeNo, int mtxGroupNo) const {
J3DShapeMtx* ret = NULL;
const J3DShapeInitData& shapeInitData = mShapeInitData[mIndexTable[shapeNo]];
const J3DShapeMtxInitData& mtxInitData =
(&mMtxInitData[shapeInitData.mMtxInitDataIndex])[mtxGroupNo];
switch (getMdlDataFlag_MtxLoadType(flag)) {
case J3DMdlDataFlag_ConcatView:
switch (shapeInitData.mShapeMtxType) {
case J3DShapeMtxType_Mtx:
ret = new J3DShapeMtxConcatView(mtxInitData.mUseMtxIndex);
break;
case J3DShapeMtxType_BBoard:
ret = new J3DShapeMtxBBoardConcatView(mtxInitData.mUseMtxIndex);
break;
case J3DShapeMtxType_YBBoard:
ret = new J3DShapeMtxYBBoardConcatView(mtxInitData.mUseMtxIndex);
break;
case J3DShapeMtxType_Multi:
ret = new J3DShapeMtxMultiConcatView(mtxInitData.mUseMtxIndex, mtxInitData.mUseMtxCount,
&mMtxTable[mtxInitData.mFirstUseMtxIndex]);
break;
default:
OSReport("WRONG SHAPE MATRIX TYPE (J3DModelInit.cpp)\n");
break;
}
break;
case 0:
default:
switch (shapeInitData.mShapeMtxType) {
case J3DShapeMtxType_Mtx:
case J3DShapeMtxType_BBoard:
case J3DShapeMtxType_YBBoard:
ret = new J3DShapeMtx(mtxInitData.mUseMtxIndex);
break;
case J3DShapeMtxType_Multi:
ret = new J3DShapeMtxMulti(mtxInitData.mUseMtxIndex, mtxInitData.mUseMtxCount,
&mMtxTable[mtxInitData.mFirstUseMtxIndex]);
break;
default:
OSReport("WRONG SHAPE MATRIX TYPE (J3DModelInit.cpp)\n");
break;
}
break;
}
return ret;
}
/* 8033784C-803378D8 33218C 008C+00 1/1 0/0 0/0 .text newShapeDraw__15J3DShapeFactoryCFii
*/
J3DShapeDraw* J3DShapeFactory::newShapeDraw(int shapeNo, int mtxGroupNo) const {
const J3DShapeInitData& shapeInitData = mShapeInitData[mIndexTable[shapeNo]];
const J3DShapeDrawInitData& drawInitData =
(&mDrawInitData[shapeInitData.mDrawInitDataIndex])[mtxGroupNo];
return new J3DShapeDraw(&mDisplayListData[drawInitData.mDisplayListIndex],
drawInitData.mDisplayListSize);
}
/* 803378D8-80337944 332218 006C+00 0/0 1/1 0/0 .text allocVcdVatCmdBuffer__15J3DShapeFactoryFUl
*/
void J3DShapeFactory::allocVcdVatCmdBuffer(u32 count) {
mVcdVatCmdBuffer = new (0x20) u8[J3DShape::kVcdVatDLSize * count];
for (u32 i = 0; i < (J3DShape::kVcdVatDLSize * count) / 4; i++)
((u32*)mVcdVatCmdBuffer)[i] = 0;
}
/* 80337944-803379D8 332284 0094+00 0/0 1/1 0/0 .text calcSize__15J3DShapeFactoryFiUl */
s32 J3DShapeFactory::calcSize(int shapeNo, u32 flag) {
s32 size = 0x68;
s32 mtxGroupNo = getMtxGroupNum(shapeNo);
size += mtxGroupNo * 4;
size += mtxGroupNo * 4;
for (u32 i = 0; i < mtxGroupNo; i++) {
s32 shapeMtxSize = calcSizeShapeMtx(flag, shapeNo, i);
size += shapeMtxSize;
size += 0x0C;
}
return size;
}
/* 803379D8-803379E8 332318 0010+00 0/0 1/1 0/0 .text
* calcSizeVcdVatCmdBuffer__15J3DShapeFactoryFUl */
s32 J3DShapeFactory::calcSizeVcdVatCmdBuffer(u32 count) {
return ALIGN_NEXT(count * J3DShape::kVcdVatDLSize, 0x20);
}
/* 803379E8-80337AE0 332328 00F8+00 1/1 0/0 0/0 .text calcSizeShapeMtx__15J3DShapeFactoryCFUlii */
s32 J3DShapeFactory::calcSizeShapeMtx(u32 flag, int shapeNo, int mtxGroupNo) const {
const J3DShapeInitData& shapeInitData = mShapeInitData[mIndexTable[shapeNo]];
u32 ret = 0;
u32 mtxLoadType = getMdlDataFlag_MtxLoadType(flag);
switch (mtxLoadType) {
case J3DMdlDataFlag_ConcatView:
switch (shapeInitData.mShapeMtxType) {
case J3DShapeMtxType_Mtx:
ret = 0x08;
break;
case J3DShapeMtxType_BBoard:
ret = 0x08;
break;
case J3DShapeMtxType_YBBoard:
ret = 0x08;
break;
case J3DShapeMtxType_Multi:
ret = 0x10;
break;
default:
OSReport("WRONG SHAPE MATRIX TYPE (J3DModelInit.cpp)\n");
}
break;
case 0:
default:
switch (shapeInitData.mShapeMtxType) {
case J3DShapeMtxType_Mtx:
case J3DShapeMtxType_BBoard:
case J3DShapeMtxType_YBBoard:
ret = 0x08;
break;
case J3DShapeMtxType_Multi:
ret = 0x10;
break;
default:
OSReport("WRONG SHAPE MATRIX TYPE (J3DModelInit.cpp)\n");
}
break;
}
return ret;
}
+188
View File
@@ -0,0 +1,188 @@
//
// Generated By: dol2asm
// Translation Unit: J3DUClipper
//
#include "JSystem/J3DU/J3DUClipper.h"
#include "math.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 80273778-8027378C 26E0B8 0014+00 0/0 1/1 0/0 .text init__11J3DUClipperFv */
void J3DUClipper::init() {
mNear = 1.0f;
mFar = 100000.0f;
}
/* ############################################################################################## */
/* 8027378C-802738FC 26E0CC 0170+00 0/0 3/3 4/4 .text calcViewFrustum__11J3DUClipperFv */
void J3DUClipper::calcViewFrustum() {
static const f32 unused[3] = {0.0f};
f32 f0 = tan(0.5f * mFovY * 0.01745329238474369f);
f32 f4 = mNear * f0;
f32 f5 = mAspect * f4;
Vec tmp1 = {-f5, -f4, -mNear};
Vec tmp2 = {-f5, f4, -mNear};
Vec tmp3 = {f5, f4, -mNear};
Vec tmp4 = {f5, -f4, -mNear};
VECCrossProduct(&tmp2, &tmp1, &_04);
VECCrossProduct(&tmp3, &tmp2, &_10);
VECCrossProduct(&tmp4, &tmp3, &_1C);
VECCrossProduct(&tmp1, &tmp4, &_28);
VECNormalize(&_04, &_04);
VECNormalize(&_10, &_10);
VECNormalize(&_1C, &_1C);
VECNormalize(&_28, &_28);
}
/* 802738FC-80273A44 26E23C 0148+00 0/0 3/3 2/2 .text clip__11J3DUClipperCFPA4_Cf3Vecf */
int J3DUClipper::clip(f32 const (*param_0)[4], Vec param_1, f32 param_2) const {
Vec vec1;
MTXMultVec(param_0, &param_1, &vec1);
if (-vec1.z < mNear - param_2) {
return 1;
}
if (-vec1.z > mFar + param_2) {
return 1;
}
if (vec1.x * _04.x + vec1.y * _04.y + vec1.z * _04.z > param_2) {
return 1;
}
if (vec1.x * _10.x + vec1.y * _10.y + vec1.z * _10.z > param_2) {
return 1;
}
if (vec1.x * _1C.x + vec1.y * _1C.y + vec1.z * _1C.z > param_2) {
return 1;
}
if (vec1.x * _28.x + vec1.y * _28.y + vec1.z * _28.z > param_2) {
return 1;
}
return 0;
}
/* ############################################################################################## */
/* 80273A44-80273E08 26E384 03C4+00 0/0 3/3 2/2 .text clip__11J3DUClipperCFPA4_CfP3VecP3Vec */
int J3DUClipper::clip(f32 const (*param_1)[4], Vec* param_2, Vec* param_3) const {
s32 local_98[6];
for (int i = 0; i < 6; i++) {
local_98[i] = 0;
}
Vec local_80[8];
local_80[0].x = param_3->x;
local_80[0].y = param_3->y;
local_80[0].z = param_2->z;
local_80[1].x = param_3->x;
local_80[1].y = param_3->y;
local_80[1].z = param_3->z;
local_80[2].x = param_2->x;
local_80[2].y = param_3->y;
local_80[2].z = param_3->z;
local_80[3].x = param_2->x;
local_80[3].y = param_3->y;
local_80[3].z = param_2->z;
local_80[4].x = param_3->x;
local_80[4].y = param_2->y;
local_80[4].z = param_2->z;
local_80[5].x = param_3->x;
local_80[5].y = param_2->y;
local_80[5].z = param_3->z;
local_80[6].x = param_2->x;
local_80[6].y = param_2->y;
local_80[6].z = param_3->z;
local_80[7].x = param_2->x;
local_80[7].y = param_2->y;
local_80[7].z = param_2->z;
for (u32 i = 0; i < 8; i++) {
Vec vec1;
MTXMultVec(param_1, local_80 + i, &vec1);
s32 r4 = 0;
if (-vec1.z < mNear) {
local_98[4]++;
r4 = 1;
}
if (-vec1.z > mFar) {
local_98[5]++;
r4++;
}
if (vec1.x * _04.x + vec1.y * _04.y + vec1.z * _04.z > 0.0f) {
local_98[0]++;
r4++;
}
if (vec1.x * _10.x + vec1.y * _10.y + vec1.z * _10.z > 0.0f) {
local_98[1]++;
r4++;
}
if (vec1.x * _1C.x + vec1.y * _1C.y + vec1.z * _1C.z > 0.0f) {
local_98[2]++;
r4++;
}
if (vec1.x * _28.x + vec1.y * _28.y + vec1.z * _28.z > 0.0f) {
local_98[3]++;
r4++;
}
if (r4 == 0) {
return 0;
}
}
if (local_98[0] == 8) {
return 1;
}
if (local_98[2] == 8) {
return 1;
}
if (local_98[1] == 8) {
return 1;
}
if (local_98[3] == 8) {
return 1;
}
if (local_98[4] == 8) {
return 1;
}
if (local_98[5] == 8) {
return 1;
}
return 0;
}
/* ############################################################################################## */
/* 8039A984-8039A99D 026FE4 0019+00 0/0 0/0 0/0 .rodata None */
static char const* const stringBase_8039A984 = " J3DUClipper::mFovy = %f";
/* 8039A99D-8039A9B8 026FFD 001B+00 0/0 0/0 0/0 .rodata None */
static char const* const stringBase_8039A99D = " J3DUClipper::mAspect = %f";
/* 8039A9B8-8039A9D1 027018 0019+00 0/0 0/0 0/0 .rodata None */
static char const* const stringBase_8039A9B8 = " J3DUClipper::mNear = %f";
/* 8039A9D1-8039A9F0 027031 0018+07 0/0 0/0 0/0 .rodata None */
static char const* const stringBase_8039A9D1 = " J3DUClipper::mFar = %f";
/* @stringBase0 padding */
static char const* const pad_8039A9E9 = "\0\0\0\0\0\0";
/* 8039A984-8039A984 026FE4 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+12
View File
@@ -0,0 +1,12 @@
//
// Generated By: dol2asm
// Translation Unit: J3DUDL
//
#include "JSystem/J3DU/J3DUDL.h"
#include "JSystem/J3DGraphBase/J3DShapeMtx.h"
// Fake function to make the weak function J3DShapeMtx::getUseMtxNum appear in this TU
u32 J3DUGetUseMtxNum(J3DShapeMtx* i_shapeMtx) {
return i_shapeMtx->getUseMtxNum();
}
+3
View File
@@ -0,0 +1,3 @@
#include "JSystem/JAudio2/JAIAudible.h"
JAIAudible::~JAIAudible() {}
+3
View File
@@ -0,0 +1,3 @@
#include "JSystem/JAudio2/JAIAudience.h"
JAIAudience::~JAIAudience() {}
+242
View File
@@ -0,0 +1,242 @@
//
// Generated By: dol2asm
// Translation Unit: JAISe
//
#include "JSystem/JAudio2/JAISe.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "JSystem/JAudio2/JAISeMgr.h"
#include "dolphin/types.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 8029F03C-8029F0F8 29997C 00BC+00 0/0 1/1 0/0 .text
* __ct__5JAISeFP8JAISeMgrP27JAISoundStrategyMgr<5JAISe>Ul */
JAISe::JAISe(JAISeMgr* param_0, JAISoundStrategyMgr<JAISe>* param_1, u32 param_2) : JSULink<JAISe>(this) {
inner_.mSoundStrategyMgr = param_1;
inner_.seMgr = param_0;
inner_.mProperPriority = param_2;
}
/* 8029F0F8-8029F214 299A38 011C+00 1/1 0/0 0/0 .text mixOut___5JAISeFRC14JASSoundParams
*/
void JAISe::mixOut_(JASSoundParams const& param_0) {
inner_.track.setTempoRate(inner_.mTempoMgr.getTempo());
JASSoundParams stackParams;
params.mixOutAll(param_0, &stackParams, fader.getIntensity());
if (inner_.field_0x278) {
inner_.field_0x278->virtual4(this, stackParams);
}
if (audible_) {
int maxChannels = audience_->getMaxChannels();
for (int i = 0; i < maxChannels; i++) {
audience_->mixChannelOut(stackParams, audible_, i);
}
} else {
inner_.mSoundParams = stackParams;
}
}
/* 8029F214-8029F250 299B54 003C+00 1/1 0/0 0/0 .text stopTrack___5JAISeFv */
void JAISe::stopTrack_() {
switch (inner_.track.getStatus()) {
case 0:
break;
case 1:
inner_.track.stopSeq();
break;
case 2:
break;
}
}
/* 8029F250-8029F304 299B90 00B4+00 1/1 0/0 0/0 .text startTrack___5JAISeFRC14JASSoundParams */
void JAISe::startTrack_(JASSoundParams const& param_0) {
if (inner_.track.getStatus() == 2) {
inner_.track.init();
}
if (audible_) {
initTrack_JAISound_(&inner_.track);
} else {
params.mixOutAll(param_0, &inner_.mSoundParams, fader.getIntensity());
inner_.track.setChannelMgrCount(1);
inner_.track.assignExtBuffer(0, &inner_.mSoundParams);
}
inner_.field_0x26c = 1;
inner_.track.setSeqData(inner_.mSeqData.field_0x0, inner_.mSeqData.field_0x4);
inner_.track.startSeq();
}
/* 8029F304-8029F4CC 299C44 01C8+00 0/0 1/1 0/0 .text
* JAISeCategoryMgr_mixOut___5JAISeFbRC14JASSoundParams16JAISoundActivity */
void JAISe::JAISeCategoryMgr_mixOut_(bool param_0, JASSoundParams const& param_1, JAISoundActivity param_2) {
mixOut_(param_1);
if (isStopping()) {
stopTrack_();
} else if (param_0) {
if (status_.isPlaying()) {
if (inner_.field_0x26c) {
switch (inner_.track.getStatus()) {
case 2:
if (status_.field_0x1.flags.flag1) {
startTrack_(param_1);
} else {
stop_JAISound_();
}
break;
case 1:
inner_.track.pause(status_.isPaused() || param_2.field_0x0.flags.flag2);
inner_.track.mute(status_.isMute() || param_2.field_0x0.flags.flag1);
}
} else {
startTrack_(param_1);
}
}
} else if (status_.field_0x1.flags.flag1) {
if (status_.field_0x1.flags.flag3) {
inner_.track.pause(true);
} else {
stopTrack_();
}
} else {
stopTrack_();
stop_JAISound_();
}
}
/* 8029F4CC-8029F5C8 299E0C 00FC+00 0/0 1/1 0/0 .text JAISeCategoryMgr_calc___5JAISeFv */
void JAISe::JAISeCategoryMgr_calc_() {
prepare_();
if (calc_JAISound_()) {
inner_.mTempoMgr.calc();
if (inner_.field_0x278) {
inner_.field_0x278->calc(this);
}
}
if (isStopping() || mPriority == -1) {
inner_.mPriority = -1;
} else {
inner_.mPriority = inner_.mProperPriority + mPriority;
}
}
/* 8029F5C8-8029F650 299F08 0088+00 2/1 0/0 0/0 .text JAISound_tryDie___5JAISeFv */
bool JAISe::JAISound_tryDie_() {
switch (inner_.track.getStatus()) {
case 0:
case 2:
if (inner_.field_0x278) {
inner_.mSoundStrategyMgr->virtual4(inner_.field_0x278);
inner_.field_0x278 = NULL;
}
die_JAISound_();
return true;
case 1:
break;
}
return false;
}
/* 8029F650-8029F6D8 299F90 0088+00 0/0 1/1 0/0 .text
* JAISeMgr_startID___5JAISeF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudience */
void JAISe::JAISeMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1, JAIAudience* param_2) {
start_JAISound_(param_0, param_1, param_2);
inner_.field_0x26c = 0;
if (inner_.mSoundStrategyMgr) {
inner_.field_0x278 = inner_.mSoundStrategyMgr->calc(param_0);
} else {
inner_.field_0x278 = NULL;
}
}
/* 8029F6D8-8029F6E0 29A018 0008+00 2/1 0/0 0/0 .text getNumChild__5JAISeCFv */
s32 JAISe::getNumChild() const {
return 0;
}
/* 8029F6E0-8029F6E8 29A020 0008+00 2/1 0/0 0/0 .text getChild__5JAISeFi */
JAISoundChild* JAISe::getChild(int param_0) {
return NULL;
}
/* 8029F6E8-8029F6EC 29A028 0004+00 2/1 0/0 0/0 .text releaseChild__5JAISeFi */
void JAISe::releaseChild(int param_0) {
/* empty function */
}
/* 8029F6EC-8029F78C 29A02C 00A0+00 1/1 0/0 0/0 .text prepare_getSeqData___5JAISeFv */
bool JAISe::prepare_getSeqData_() {
switch (inner_.seMgr->getSeqDataMgr()->getSeqData(soundID, &inner_.mSeqData)) {
case 0:
status_.state.unk = 2;
return false;
case 1:
increasePrepareCount_JAISound_();
return false;
case 2:
return true;
}
return false;
}
/* 8029F78C-8029F84C 29A0CC 00C0+00 1/1 0/0 0/0 .text prepare___5JAISeFv */
void JAISe::prepare_() {
switch (status_.state.unk) {
case 6:
break;
case 2:
stop_JAISound_();
break;
case 0:
if (prepare_getSeqData_()) {
status_.state.unk = 5;
}
break;
case 1:
if (prepare_getSeqData_()) {
status_.state.unk = 3;
}
break;
case 4:
status_.state.unk = 5;
break;
case 3:
case 5:
break;
}
}
/* 8029F84C-8029F854 29A18C 0008+00 2/1 0/0 0/0 .text getTrack__5JAISeFv */
JASTrack* JAISe::getTrack() {
return &inner_.track;
}
/* 8029F854-8029F864 29A194 0010+00 2/1 0/0 0/0 .text getChildTrack__5JAISeFi */
JASTrack* JAISe::getChildTrack(int param_0) {
return inner_.track.getChild(param_0);
}
/* 8029F864-8029F868 29A1A4 0004+00 2/1 0/0 0/0 .text asSe__5JAISeFv */
JAISe* JAISe::asSe() {
return this;
}
/* 8029F868-8029F870 29A1A8 0008+00 2/1 0/0 0/0 .text getTempoMgr__5JAISeFv */
JAITempoMgr* JAISe::getTempoMgr() {
return &inner_.mTempoMgr;
}
+480
View File
@@ -0,0 +1,480 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeMgr
//
#include "JSystem/JAudio2/JAISeMgr.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JAISoundInfo.h"
#include "JSystem/JAudio2/JASReport.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void isUsingSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion();
extern "C" void releaseSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion();
extern "C" void JAISeMgr_calc___16JAISeCategoryMgrFv();
extern "C" void JAISeMgr_freeDeadSe___16JAISeCategoryMgrFv();
extern "C" void func_8029FC34(void* _this);
extern "C" void JAISeMgr_acceptsNewSe___16JAISeCategoryMgrCFUl();
extern "C" void sortByPriority___16JAISeCategoryMgrFv();
extern "C" void stop__16JAISeCategoryMgrFUl();
extern "C" void stop__16JAISeCategoryMgrFv();
extern "C" void stopSoundID__16JAISeCategoryMgrF10JAISoundID();
extern "C" void pause__16JAISeCategoryMgrFb();
extern "C" void JAISeMgr_mixOut___16JAISeCategoryMgrFRC18JAISoundParamsMove16JAISoundActivity();
extern "C" void __ct__8JAISeMgrFb();
extern "C" void isUsingSeqData__8JAISeMgrFRC16JAISeqDataRegion();
extern "C" void releaseSeqData__8JAISeMgrFRC16JAISeqDataRegion();
extern "C" void setCategoryArrangement__8JAISeMgrFRC24JAISeCategoryArrangement();
extern "C" void stop__8JAISeMgrFv();
extern "C" void stopSoundID__8JAISeMgrF10JAISoundID();
extern "C" void initParams__8JAISeMgrFv();
extern "C" void setAudience__8JAISeMgrFP11JAIAudience();
extern "C" void setSeqDataMgr__8JAISeMgrFP13JAISeqDataMgr();
extern "C" void resetSeqDataMgr__8JAISeMgrFv();
extern "C" void newSe___8JAISeMgrFiUl();
extern "C" void calc__8JAISeMgrFv();
extern "C" void mixOut__8JAISeMgrFv();
extern "C" void func_802A0768();
extern "C" void getNumActiveSe__8JAISeMgrCFv();
extern "C" void __dt__8JAISeMgrFv();
extern "C" void __ct__16JAISeCategoryMgrFv();
extern "C" extern char const* const JAISeMgr__stringBase0;
//
// External References:
//
extern "C" void __dt__16JAISeCategoryMgrFv();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void JASReport__FPCce();
extern "C" void __dt__8JASTrackFv();
extern "C" void combine__14JASSoundParamsFRC14JASSoundParamsRC14JASSoundParams();
extern "C" void func_8029F03C();
extern "C" void JAISeCategoryMgr_mixOut___5JAISeFbRC14JASSoundParams16JAISoundActivity();
extern "C" void JAISeCategoryMgr_calc___5JAISeFv();
extern "C" void func_8029F650();
extern "C" void __dt__14JAISeqDataUserFv();
extern "C" void attachHandle__8JAISoundFP14JAISoundHandle();
extern "C" void stop__8JAISoundFUl();
extern "C" void stop__8JAISoundFv();
extern "C" void __dl__FPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void __destroy_arr();
extern "C" void __construct_array();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__5JAISe[22];
extern "C" extern void* __vt__14JAISeqDataUser[5 + 1 /* padding */];
extern "C" extern u8 data_80450B5C[4];
extern "C" extern u8 data_80451310[8];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* 8029F8B0-8029F91C 29A1F0 006C+00 2/1 0/0 0/0 .text
* isUsingSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion */
bool JAISeCategoryMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
JSULink<JAISe>* link = mSeList.getFirst();
while (link != NULL) {
JAISe* obj = link->getObject();
if (param_0.intersects(*obj->getSeqData())) {
return true;
}
link = link->getNext();
}
return false;
}
/* 8029F91C-8029F9C4 29A25C 00A8+00 2/1 0/0 0/0 .text
* releaseSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion */
int JAISeCategoryMgr::releaseSeqData(JAISeqDataRegion const& param_0) {
bool bVar1 = false;
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if (param_0.intersects(*link->getObject()->getSeqData())) {
link->getObject()->stop();
bVar1 = true;
}
}
// Fake match. li 2 needs to come after clrlwi
u32 x = bVar1;
u32 y = x;
int rv = 2;
if (x) {
rv = 1;
}
return rv;
}
/* 8029F9C4-8029FB30 29A304 016C+00 1/1 0/0 0/0 .text JAISeMgr_calc___16JAISeCategoryMgrFv */
void JAISeCategoryMgr::JAISeMgr_calc_() {
mParams.calc();
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeCategoryMgr_calc_();
}
sortByPriority_();
}
/* ############################################################################################## */
/* 80434078-80434084 060D98 000C+00 2/2 0/0 0/0 .bss @744 */
static u8 lit_744[12];
/* 80434084-80434098 060DA4 0010+04 2/2 1/1 0/0 .bss
* memPool_$localstatic3$getMemPool___26JASPoolAllocObject<5JAISe>Fv */
extern u8 data_80434084[16 + 4 /* padding */];
u8 data_80434084[16 + 4 /* padding */];
/* 8029FB30-8029FC34 29A470 0104+00 1/1 0/0 0/0 .text JAISeMgr_freeDeadSe___16JAISeCategoryMgrFv
*/
// Need to setup JAISe dtor
#ifdef NONMATCHING
void JAISeCategoryMgr::JAISeMgr_freeDeadSe_() {
JSULink<JAISe>* link = mSeList.getFirst();
while (link != NULL) {
JSULink<JAISe>* link_next = link->getNext();
if (link->getObject()->status_.isDead()) {
mSeList.remove(link);
delete link->getObject();
}
link = link_next;
}
}
#else
void JAISeCategoryMgr::JAISeMgr_freeDeadSe_() {
// NONMATCHING
}
#endif
/* 8029FC34-8029FC88 29A574 0054+00 2/2 1/1 0/0 .text __dt__18JASMemPool<5JAISe>Fv */
extern "C" void func_8029FC34(void* _this) {
// NONMATCHING
}
/* ############################################################################################## */
/* 8029FC88-8029FD40 29A5C8 00B8+00 1/1 0/0 0/0 .text
* JAISeMgr_acceptsNewSe___16JAISeCategoryMgrCFUl */
u32 JAISeCategoryMgr::JAISeMgr_acceptsNewSe_(u32 param_0) const {
s32 maxSe = getMaxSe();
if (maxSe <= 0) {
return 1;
}
s32 stopCount = 0;
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if (param_0 < link->getObject()->JAISeCategoryMgr_getProperPriority_()) {
return 1;
}
if (!link->getObject()->isStopping()) {
stopCount++;
}
}
return stopCount < maxSe;
}
/* 8029FD40-8029FDE0 29A680 00A0+00 1/1 0/0 0/0 .text sortByPriority___16JAISeCategoryMgrFv */
void JAISeCategoryMgr::sortByPriority_() {
for (u32 i = mSeList.getNumLinks(); i != 0; i--) {
JSULink<JAISe>* link = mSeList.getFirst();
u32 lowestPriority = link->getObject()->JAISeCategoryMgr_getPriority_();
JSULink<JAISe>* current = link->getNext();
for (int j = 1; j < i; j++) {
u32 itemPriority = current->getObject()->JAISeCategoryMgr_getPriority_();
if (itemPriority < lowestPriority) {
lowestPriority = itemPriority;
link = current;
}
current = current->getNext();
}
mSeList.remove(link);
mSeList.append(link);
}
}
/* 8029FDE0-8029FE34 29A720 0054+00 0/0 1/1 0/0 .text stop__16JAISeCategoryMgrFUl */
void JAISeCategoryMgr::stop(u32 param_0) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
}
}
/* 8029FE34-8029FE78 29A774 0044+00 1/1 0/0 0/0 .text stop__16JAISeCategoryMgrFv */
void JAISeCategoryMgr::stop() {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
}
}
/* 8029FE78-8029FEEC 29A7B8 0074+00 1/1 0/0 0/0 .text stopSoundID__16JAISeCategoryMgrF10JAISoundID
*/
void JAISeCategoryMgr::stopSoundID(JAISoundID param_0) {
if (!param_0.isAnonymous()) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if ((u32)link->getObject()->getID() == (u32)param_0) {
link->getObject()->stop();
}
}
}
}
/* 8029FEEC-8029FF18 29A82C 002C+00 0/0 2/2 0/0 .text pause__16JAISeCategoryMgrFb */
void JAISeCategoryMgr::pause(bool param_0) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->pause(param_0);
}
}
/* ############################################################################################## */
/* 8045578C-80455790 003D8C 0004+00 4/4 0/0 0/0 .sdata2 @1040 */
SECTION_SDATA2 static f32 lit_1040 = 1.0f;
/* 80455790-80455794 003D90 0004+00 4/4 0/0 0/0 .sdata2 @1041 */
SECTION_SDATA2 static u8 lit_1041[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455794-80455798 003D94 0004+00 4/4 0/0 0/0 .sdata2 @1042 */
SECTION_SDATA2 static f32 lit_1042 = 0.5f;
/* 8029FF18-802A0074 29A858 015C+00 1/1 0/0 0/0 .text
* JAISeMgr_mixOut___16JAISeCategoryMgrFRC18JAISoundParamsMove16JAISoundActivity */
void JAISeCategoryMgr::JAISeMgr_mixOut_(JAISoundParamsMove const& param_0,
JAISoundActivity param_1) {
JASSoundParams aJStack_30;
aJStack_30.combine(param_0.mParams, mParams.mParams);
JSULink<JAISe>* this_00 = mSeList.getFirst();
int iVar1 = getMaxActiveSe();
if (iVar1 > 0) {
while (this_00 != NULL && iVar1 > 0 && !this_00->getObject()->isFarAway()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(true, aJStack_30, param_1);
this_00 = this_00->getNext();
iVar1--;
}
for (; this_00 != NULL; this_00 = this_00->getNext()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(false, aJStack_30, param_1);
}
} else {
while (this_00 != NULL && !this_00->getObject()->isFarAway()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(true, aJStack_30, param_1);
this_00 = this_00->getNext();
}
for (; this_00 != NULL; this_00 = this_00->getNext()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(false, aJStack_30, param_1);
}
}
}
/* ############################################################################################## */
/* 803C98B0-803C98C4 0269D0 0014+00 2/2 1/1 0/0 .data __vt__8JAISeMgr */
SECTION_DATA extern void* __vt__8JAISeMgr[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__8JAISeMgrFv,
(void*)isUsingSeqData__8JAISeMgrFRC16JAISeqDataRegion,
(void*)releaseSeqData__8JAISeMgrFRC16JAISeqDataRegion,
};
/* 802A0074-802A0168 29A9B4 00F4+00 0/0 1/1 0/0 .text __ct__8JAISeMgrFb */
JAISeMgr::JAISeMgr(bool param_0) : JASGlobalInstance<JAISeMgr>(param_0) {
mAudience = NULL;
mSeqDataMgr = NULL;
field_0x10 = 0;
mParams.init();
JAISoundActivity::init();
}
/* 802A0168-802A01D8 29AAA8 0070+00 1/0 0/0 0/0 .text
* isUsingSeqData__8JAISeMgrFRC16JAISeqDataRegion */
bool JAISeMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
for (int i = 0; i < 16; i++) {
if (mCategoryMgrs[i].JAISeCategoryMgr::isUsingSeqData(param_0)) {
return true;
}
}
return false;
}
/* 802A01D8-802A0268 29AB18 0090+00 1/0 0/0 0/0 .text
* releaseSeqData__8JAISeMgrFRC16JAISeqDataRegion */
int JAISeMgr::releaseSeqData(JAISeqDataRegion const& param_0) {
u8 r30 = 0;
for (int i = 0; i < 16; i++) {
switch (mCategoryMgrs[i].JAISeCategoryMgr::releaseSeqData(param_0)) {
case 0:
return 0;
case 1:
r30 = 1;
break;
}
}
return (r30 != 0) ? 1 : 0;
}
/* 802A0268-802A02A0 29ABA8 0038+00 0/0 1/1 0/0 .text
* setCategoryArrangement__8JAISeMgrFRC24JAISeCategoryArrangement */
void JAISeMgr::setCategoryArrangement(JAISeCategoryArrangement const& param_0) {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].setMaxActiveSe(param_0.mItems[i].mMaxActiveSe);
mCategoryMgrs[i].setMaxInactiveSe(param_0.mItems[i].mMaxInactiveSe);
}
}
/* 802A02A0-802A02F4 29ABE0 0054+00 0/0 1/1 0/0 .text stop__8JAISeMgrFv */
void JAISeMgr::stop() {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].stop();
}
}
/* 802A02F4-802A0358 29AC34 0064+00 0/0 1/1 0/0 .text stopSoundID__8JAISeMgrF10JAISoundID
*/
void JAISeMgr::stopSoundID(JAISoundID param_0) {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].stopSoundID(param_0);
}
}
/* 802A0358-802A03D8 29AC98 0080+00 0/0 1/1 0/0 .text initParams__8JAISeMgrFv */
void JAISeMgr::initParams() {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].getParams()->init();
}
}
/* 802A03D8-802A03E0 -00001 0008+00 0/0 0/0 0/0 .text setAudience__8JAISeMgrFP11JAIAudience */
void JAISeMgr::setAudience(JAIAudience* param_0) {
mAudience = param_0;
}
/* 802A03E0-802A0434 29AD20 0054+00 0/0 1/1 0/0 .text setSeqDataMgr__8JAISeMgrFP13JAISeqDataMgr */
void JAISeMgr::setSeqDataMgr(JAISeqDataMgr* param_0) {
resetSeqDataMgr();
mSeqDataMgr = param_0;
mSeqDataMgr->setSeqDataUser(this);
}
/* 802A0434-802A0484 29AD74 0050+00 1/1 0/0 0/0 .text resetSeqDataMgr__8JAISeMgrFv */
void JAISeMgr::resetSeqDataMgr() {
if (mSeqDataMgr) {
mSeqDataMgr->setSeqDataUser(NULL);
mSeqDataMgr = NULL;
}
}
/* 802A0484-802A0574 29ADC4 00F0+00 1/1 0/0 0/0 .text newSe___8JAISeMgrFiUl */
JAISe* JAISeMgr::newSe_(int param_0, u32 param_1) {
// NONMATCHING
}
/* 802A0574-802A0704 29AEB4 0190+00 0/0 1/1 0/0 .text calc__8JAISeMgrFv */
void JAISeMgr::calc() {
mParams.calc();
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].JAISeMgr_calc_();
}
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].JAISeMgr_freeDeadSe_();
}
}
/* 802A0704-802A0768 29B044 0064+00 0/0 1/1 0/0 .text mixOut__8JAISeMgrFv */
void JAISeMgr::mixOut() {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].JAISeMgr_mixOut_(mParams, *this);
}
}
/* ############################################################################################## */
/* 802A0768-802A08D0 29B0A8 0168+00 0/0 1/1 0/0 .text
* startSound__8JAISeMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAISeMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
if (param_1 && param_1->isSoundAttached()) {
param_1->getSound()->stop();
}
JAISoundInfo* pSoundInfo = JASGlobalInstance<JAISoundInfo>::getInstance();
u32 uVar4;
u32 categoryIndex;
if (pSoundInfo != NULL) {
categoryIndex = pSoundInfo->getCategory(param_0);
uVar4 = pSoundInfo->getPriority(param_0);
} else {
categoryIndex = param_0.mId.mBytes.b1;
uVar4 = 0;
}
JAISe* pJAISe = newSe_(categoryIndex, uVar4);
if (pJAISe == NULL) {
JASReport("cannot new Se %08x.", param_0.mId.mFullId);
return false;
}
JAIAudience* pAudience = getAudience(categoryIndex);
pJAISe->JAISeMgr_startID_(param_0, param_2, pAudience);
if (pSoundInfo != NULL) {
pSoundInfo->getSeInfo(param_0, pJAISe);
}
if (param_1 != NULL) {
pJAISe->attachHandle(param_1);
}
return true;
}
/* 802A08D0-802A08FC 29B210 002C+00 0/0 2/2 0/0 .text getNumActiveSe__8JAISeMgrCFv */
int JAISeMgr::getNumActiveSe() const {
int sum = 0;
for (int i = 0; i < 16; i++) {
sum += mCategoryMgrs[i].getNumSe();
}
return sum;
}
/* 802A08FC-802A0994 29B23C 0098+00 1/0 0/0 0/0 .text __dt__8JAISeMgrFv */
extern "C" void __dt__8JAISeMgrFv() {
// asm JAISeMgr::~JAISeMgr() {
// NONMATCHING
}
/* ############################################################################################## */
/* 803C98C4-803C98D8 0269E4 0014+00 1/1 1/1 0/0 .data __vt__16JAISeCategoryMgr */
SECTION_DATA extern void* __vt__16JAISeCategoryMgr[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16JAISeCategoryMgrFv,
(void*)isUsingSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion,
(void*)releaseSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion,
};
/* 802A0994-802A0A6C 29B2D4 00D8+00 1/1 0/0 0/0 .text __ct__16JAISeCategoryMgrFv */
JAISeCategoryMgr::JAISeCategoryMgr() {
// NONMATCHING
}
/* 8039B8F8-8039B8F8 027F58 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+425
View File
@@ -0,0 +1,425 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeq
//
#include "JSystem/JAudio2/JAISeq.h"
#include "JSystem/JAudio2/JAISeqMgr.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" static bool func_802A0A6C(JASTrack*);
extern "C" void func_802A0A8C();
extern "C" void func_802A0B64();
extern "C" void playSeqData___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" void reserveChildTracks___6JAISeqFi();
extern "C" void releaseChildTracks___6JAISeqFv();
extern "C" void prepare_getSeqData___6JAISeqFv();
extern "C" void prepare___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" void JAISeqMgr_calc___6JAISeqFv();
extern "C" void die___6JAISeqFv();
extern "C" void func_802A1268(void* _this);
extern "C" void JAISound_tryDie___6JAISeqFv();
extern "C" void mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" void JAISeqMgr_mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" s32 getNumChild__6JAISeqCFv();
extern "C" void getChild__6JAISeqFi();
extern "C" void releaseChild__6JAISeqFi();
extern "C" void getTrack__6JAISeqFv();
extern "C" void getChildTrack__6JAISeqFi();
extern "C" void asSeq__6JAISeqFv();
extern "C" void getTempoMgr__6JAISeqFv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void __ct__8JASTrackFv();
extern "C" void __dt__8JASTrackFv();
extern "C" void setChannelMgrCount__8JASTrackFUl();
extern "C" void assignExtBuffer__8JASTrackFUlP14JASSoundParams();
extern "C" void setSeqData__8JASTrackFPvUl();
extern "C" void startSeq__8JASTrackFv();
extern "C" void stopSeq__8JASTrackFv();
extern "C" void connectChild__8JASTrackFUlP8JASTrack();
extern "C" void mute__8JASTrackFb();
extern "C" void pause__8JASTrackFb();
extern "C" void setTempoRate__8JASTrackFf();
extern "C" void func_802932E0(void* _this);
extern "C" void mixOutAll__14JAISoundParamsFRC14JASSoundParamsP14JASSoundParamsf();
extern "C" void __ct__8JAISoundFv();
extern "C" void func_802A2328();
extern "C" bool asSe__8JAISoundFv();
extern "C" bool asStream__8JAISoundFv();
extern "C" void die_JAISound___8JAISoundFv();
extern "C" void increasePrepareCount_JAISound___8JAISoundFv();
extern "C" void calc_JAISound___8JAISoundFv();
extern "C" void initTrack_JAISound___8JAISoundFP8JASTrack();
extern "C" void init__13JAISoundChildFv();
extern "C" void mixOut__13JAISoundChildFP8JASTrack();
extern "C" void calc__13JAISoundChildFv();
extern "C" void __dl__FPv();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __register_global_object();
extern "C" void _savegpr_24();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_24();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern u8 data_80431B04[16 + 4 /* padding */];
extern "C" extern u8 struct_80451230[8];
extern "C" extern u8 data_80451318[8];
//
// Declarations:
//
/* 802A0A6C-802A0A8C 29B3AC 0020+00 1/1 0/0 0/0 .text
* JASTrack_isFreeOrStopped__20@unnamed@JAISeq_cpp@FP8JASTrack */
static bool func_802A0A6C(JASTrack* track) {
u8 status = track->getStatus();
return status == 0 || status == 2;
}
/* 803C98F4-803C9928 026A14 0030+04 1/1 2/2 0/0 .data __vt__6JAISeq */
SECTION_DATA extern void* __vt__6JAISeq[12 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)getNumChild__6JAISeqCFv,
(void*)getChild__6JAISeqFi,
(void*)releaseChild__6JAISeqFi,
(void*)asSe__8JAISoundFv,
(void*)asSeq__6JAISeqFv,
(void*)asStream__8JAISoundFv,
(void*)getTrack__6JAISeqFv,
(void*)getChildTrack__6JAISeqFi,
(void*)getTempoMgr__6JAISeqFv,
(void*)JAISound_tryDie___6JAISeqFv,
};
/* 80455798-8045579C 003D98 0004+00 3/3 0/0 0/0 .sdata2 @642 */
SECTION_SDATA2 static f32 lit_642 = 1.0f;
/* 8045579C-804557A0 003D9C 0004+00 4/4 0/0 0/0 .sdata2 @643 */
SECTION_SDATA2 static u8 lit_643[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 804557A0-804557A8 003DA0 0004+04 3/3 0/0 0/0 .sdata2 @644 */
SECTION_SDATA2 static f32 lit_644[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 802A0A8C-802A0B64 29B3CC 00D8+00 0/0 2/1 0/0 .text
* __ct__6JAISeqFP9JAISeqMgrP28JAISoundStrategyMgr<6JAISeq> */
JAISeq::JAISeq(JAISeqMgr* param_0, JAISoundStrategyMgr<JAISeq>* param_1) : JSULink<JAISeq>(this) {
inner_.seqMgr = param_0;
inner_.strategyMgr = param_1;
inner_.mSoundParams.init();
for (int i = 0; i < 32; i++) {
inner_.mSoundChild[i] = NULL;
}
}
/* 802A0B64-802A0C04 29B4A4 00A0+00 0/0 1/1 0/0 .text
* JAISeqMgr_startID___6JAISeqF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudienceii */
void JAISeq::JAISeqMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1, JAIAudience* param_2, int param_3, int param_4) {
inner_.field_0x39c = param_3;
reserveChildTracks_(param_4);
start_JAISound_(param_0, param_1, param_2);
if (inner_.strategyMgr) {
field_0x3a8 = inner_.strategyMgr->calc(param_0);
} else {
field_0x3a8 = NULL;
}
}
/* 802A0C04-802A0CA4 29B544 00A0+00 1/1 0/0 0/0 .text
* playSeqData___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::playSeqData_(JASSoundParams const& param_0, JAISoundActivity param_1) {
inner_.outputTrack.setSeqData(inner_.mSeqData.field_0x0, inner_.mSeqData.field_0x4);
if (audible_) {
initTrack_JAISound_(&inner_.outputTrack);
} else {
inner_.outputTrack.setChannelMgrCount(1);
inner_.outputTrack.assignExtBuffer(0, &inner_.mSoundParams);
}
mixOut_(param_0, param_1);
inner_.outputTrack.startSeq();
}
/* ############################################################################################## */
/* 80434098-804340A4 060DB8 000C+00 1/1 0/0 0/0 .bss @716 */
static u8 lit_716[12];
/* 802A0CA4-802A0E48 29B5E4 01A4+00 1/1 0/0 0/0 .text reserveChildTracks___6JAISeqFi */
void JAISeq::reserveChildTracks_(int param_0) {
for (int i = 0; i < 2; i++) {
JASPoolAllocObject_MultiThreaded<JASTrack>* allocobj = new JASPoolAllocObject_MultiThreaded<JASTrack>();
JASTrack* track = new (allocobj) JASTrack();
if (track) {
track->setAutoDelete(true);
inner_.outputTrack.connectChild(i, track);
for (int j = 0; j < 16; j++) {
if (i * 16 + j >= param_0) {
continue;
}
JASPoolAllocObject_MultiThreaded<JASTrack>* allocobj2 = new JASPoolAllocObject_MultiThreaded<JASTrack>();
JASTrack* track2 = new (allocobj2) JASTrack();
if (track2) {
track2->setAutoDelete(true);
track->connectChild(j, track2);
}
}
}
}
}
/* 802A0E48-802A0EDC 29B788 0094+00 1/1 0/0 0/0 .text releaseChildTracks___6JAISeqFv */
void JAISeq::releaseChildTracks_() {
for (u32 i = 0; i < 2; i++) {
JASTrack* track = inner_.outputTrack.getChild(i);
if (track) {
for (u32 j = 0; j < 16; j++) {
JASTrack* track2 = track->getChild(j);
if (track2) {
delete track2;
}
}
delete track;
}
}
}
/* 802A0EDC-802A0F90 29B81C 00B4+00 1/1 0/0 0/0 .text prepare_getSeqData___6JAISeqFv */
bool JAISeq::prepare_getSeqData_() {
JAISoundID id(soundID);
if (id.isAnonymous()) {
return true;
}
JAISeqDataMgr* seqDataMgr = inner_.seqMgr->getSeqDataMgr();
switch (seqDataMgr->getSeqData(id, &inner_.mSeqData)) {
case 0:
status_.state.unk = 2;
break;
case 1:
increasePrepareCount_JAISound_();
return false;
case 2:
return true;
}
return false;
}
/* 802A0F90-802A108C 29B8D0 00FC+00 2/1 0/0 0/0 .text
* prepare___6JAISeqFRC14JASSoundParams16JAISoundActivity */
bool JAISeq::prepare_(JASSoundParams const& param_0, JAISoundActivity param_1) {
switch (status_.state.unk) {
case 6:
break;
case 2:
stop_JAISound_();
break;
case 0:
if (prepare_getSeqData_()) {
status_.state.unk = 5;
playSeqData_(param_0, param_1);
return true;
}
break;
case 1:
if (prepare_getSeqData_()) {
status_.state.unk = 3;
}
return false;
case 4:
status_.state.unk = 5;
playSeqData_(param_0, param_1);
return true;
case 5:
return true;
}
return false;
}
/* 802A108C-802A1180 29B9CC 00F4+00 0/0 1/1 0/0 .text JAISeqMgr_calc___6JAISeqFv */
void JAISeq::JAISeqMgr_calc_() {
if (inner_.outputTrack.getStatus() == 2 || (inner_.outputTrack.getStatus() == 0 && status_.state.unk == 2)) {
die_();
return;
}
if (calc_JAISound_()) {
inner_.mTempoMgr.calc();
for (int i = 0; i < 32; i++) {
if (inner_.mSoundChild[i]) {
inner_.mSoundChild[i]->calc();
}
}
if (field_0x3a8) {
field_0x3a8->calc(this);
}
}
}
/* ############################################################################################## */
/* 804340A4-804340B0 060DC4 000C+00 3/3 0/0 0/0 .bss @896 */
static u8 lit_896[12];
/* 804340B0-804340C0 060DD0 0010+00 3/3 4/4 0/0 .bss
* memPool_$localstatic3$getMemPool___35JASPoolAllocObject<13JAISoundChild>Fv */
extern u8 data_804340B0[16];
u8 data_804340B0[16];
/* 802A1180-802A1268 29BAC0 00E8+00 2/2 0/0 0/0 .text die___6JAISeqFv */
void JAISeq::die_() {
for (int i = 0; i < 32; i++) {
if (inner_.mSoundChild[i]) {
delete (JASPoolAllocObject<JAISoundChild>*)inner_.mSoundChild[i];
inner_.mSoundChild[i] = NULL;
}
}
if (field_0x3a8) {
inner_.strategyMgr->virtual4(field_0x3a8);
field_0x3a8 = NULL;
}
releaseChildTracks_();
die_JAISound_();
}
/* 802A1268-802A12BC 29BBA8 0054+00 3/3 4/4 0/0 .text __dt__27JASMemPool<13JAISoundChild>Fv */
extern "C" void func_802A1268(void* _this) {
// NONMATCHING
}
/* 802A12BC-802A1348 29BBFC 008C+00 1/0 0/0 0/0 .text JAISound_tryDie___6JAISeqFv */
bool JAISeq::JAISound_tryDie_() {
if (func_802A0A6C(&inner_.outputTrack)) {
die_();
return true;
}
fader.forceOut();
status_.state.flags.flag1 = 1;
JASCriticalSection cs;
inner_.outputTrack.stopSeq();
return false;
}
/* 802A1348-802A14FC 29BC88 01B4+00 2/2 0/0 0/0 .text
* mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::mixOut_(JASSoundParams const& param_0, JAISoundActivity param_1) {
inner_.outputTrack.setTempoRate(inner_.mTempoMgr.getTempo());
inner_.outputTrack.mute(param_1.field_0x0.flags.flag1 || status_.isMute());
inner_.outputTrack.pause(param_1.field_0x0.flags.flag2 || status_.isPaused());
JASSoundParams stackParams;
params.mixOutAll(param_0, &stackParams, fader.getIntensity());
if (field_0x3a8) {
field_0x3a8->virtual4(this, stackParams);
}
if (audible_) {
int maxChannels = audience_->getMaxChannels();
for (int i = 0; i < maxChannels; i++) {
audience_->mixChannelOut(stackParams, audible_, i);
}
} else {
inner_.mSoundParams = stackParams;
for (int i = 0; i < 32; i++) {
if (inner_.mSoundChild[i]) {
JASTrack* track = JAISeq::getChildTrack(i);
if (track) {
inner_.mSoundChild[i]->mixOut(track);
}
}
}
}
}
/* 802A14FC-802A1570 29BE3C 0074+00 0/0 1/1 0/0 .text
* JAISeqMgr_mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::JAISeqMgr_mixOut_(JASSoundParams const& param_0, JAISoundActivity param_1) {
if (prepare_(param_0, param_1) && inner_.outputTrack.getStatus() == 1) {
mixOut_(param_0, param_1);
}
}
/* 802A1570-802A1578 29BEB0 0008+00 1/0 0/0 0/0 .text getNumChild__6JAISeqCFv */
s32 JAISeq::getNumChild() const {
return 32;
}
/* 802A1578-802A165C 29BEB8 00E4+00 1/0 0/0 0/0 .text getChild__6JAISeqFi */
JAISoundChild* JAISeq::getChild(int index) {
if (inner_.mSoundChild[index]) {
return inner_.mSoundChild[index];
}
JASPoolAllocObject<JAISoundChild>* allocobj = new JASPoolAllocObject<JAISoundChild>();
inner_.mSoundChild[index] = new (allocobj) JAISoundChild();
if (!inner_.mSoundChild[index]) {
return NULL;
}
return inner_.mSoundChild[index];
}
/* 802A165C-802A1728 29BF9C 00CC+00 1/0 0/0 0/0 .text releaseChild__6JAISeqFi */
void JAISeq::releaseChild(int param_0) {
if (inner_.outputTrack.getStatus() == 1 && inner_.mSoundChild[param_0]) {
JASTrack* track = getChildTrack(param_0);
if (track) {
track->assignExtBuffer(0, NULL);
}
delete (JASPoolAllocObject<JAISoundChild>*)inner_.mSoundChild[param_0];
inner_.mSoundChild[param_0] = NULL;
}
}
/* 802A1728-802A1730 29C068 0008+00 1/0 0/0 0/0 .text getTrack__6JAISeqFv */
JASTrack* JAISeq::getTrack() {
return &inner_.outputTrack;
}
/* 802A1730-802A1768 29C070 0038+00 2/1 0/0 0/0 .text getChildTrack__6JAISeqFi */
JASTrack* JAISeq::getChildTrack(int param_0) {
u32 tmp = u32(param_0) >> 4;
JASTrack* track = inner_.outputTrack.getChild(tmp);
if (track) {
JASTrack* track2 = track->getChild(param_0 - (tmp << 4));
return track2;
}
return NULL;
}
/* 802A1768-802A176C 29C0A8 0004+00 1/0 0/0 0/0 .text asSeq__6JAISeqFv */
JAISeq* JAISeq::asSeq() {
return this;
}
/* 802A176C-802A1774 29C0AC 0008+00 1/0 0/0 0/0 .text getTempoMgr__6JAISeqFv */
JAITempoMgr* JAISeq::getTempoMgr() {
return &inner_.mTempoMgr;
}
+5
View File
@@ -0,0 +1,5 @@
#include "JSystem/JAudio2/JAISeqDataMgr.h"
JAISeqDataUser::~JAISeqDataUser() {}
JAISeqDataMgr::~JAISeqDataMgr() {}
+270
View File
@@ -0,0 +1,270 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeqMgr
//
#include "JSystem/JAudio2/JAISeqMgr.h"
#include "JSystem/JAudio2/JAISeq.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JAISoundInfo.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion();
extern "C" void releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion();
extern "C" void __ct__9JAISeqMgrFb();
extern "C" void freeDeadSeq___9JAISeqMgrFv();
extern "C" void func_802A1AF4(void* _this);
extern "C" void func_802A1B48();
extern "C" void calc__9JAISeqMgrFv();
extern "C" void stop__9JAISeqMgrFv();
extern "C" void stop__9JAISeqMgrFUl();
extern "C" void stopSoundID__9JAISeqMgrF10JAISoundID();
extern "C" void mixOut__9JAISeqMgrFv();
extern "C" void beginStartSeq___9JAISeqMgrFv();
extern "C" void endStartSeq___9JAISeqMgrFP6JAISeqP14JAISoundHandle();
extern "C" void __dt__9JAISeqMgrFv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void __dt__8JASTrackFv();
extern "C" void func_802A0A8C();
extern "C" void func_802A0B64();
extern "C" void JAISeqMgr_calc___6JAISeqFv();
extern "C" void JAISeqMgr_mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity();
extern "C" void __dt__14JAISeqDataUserFv();
extern "C" void attachHandle__8JAISoundFP14JAISoundHandle();
extern "C" void stop__8JAISoundFUl();
extern "C" void stop__8JAISoundFv();
extern "C" void __dl__FPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void __dt__10JSUPtrListFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void _savegpr_25();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__6JAISeq[12 + 1 /* padding */];
extern "C" extern void* __vt__14JAISeqDataUser[5 + 1 /* padding */];
extern "C" extern u8 data_80450B5C[4];
extern "C" extern u8 data_80451320[8];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* 802A1804-802A1870 29C144 006C+00 1/0 0/0 0/0 .text
* isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion */
bool JAISeqMgr::isUsingSeqData(JAISeqDataRegion const& param_1) {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
if (param_1.intersects(link->getObject()->getSeqData())) {
return true;
}
}
return false;
}
/* 802A1870-802A1914 29C1B0 00A4+00 1/0 0/0 0/0 .text
* releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion */
int JAISeqMgr::releaseSeqData(JAISeqDataRegion const& param_1) {
bool bVar1 = false;
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
if (param_1.intersects(link->getObject()->getSeqData())) {
link->getObject()->stop();
bVar1 = true;
}
}
ReleaseSeqResult uVar4;
if (!bVar1) {
uVar4 = RELEASE_SEQ_2;
} else {
uVar4 = RELEASE_SEQ_1;
}
return uVar4;
}
/* ############################################################################################## */
/* 803C9958-803C9970 026A78 0014+04 2/2 1/1 0/0 .data __vt__9JAISeqMgr */
SECTION_DATA extern void* __vt__9JAISeqMgr[5 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__9JAISeqMgrFv,
(void*)isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion,
(void*)releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion,
/* padding */
NULL,
};
/* 804557A8-804557AC 003DA8 0004+00 1/1 0/0 0/0 .sdata2 @691 */
SECTION_SDATA2 static f32 lit_691 = 1.0f;
/* 804557AC-804557B0 003DAC 0004+00 1/1 0/0 0/0 .sdata2 @692 */
SECTION_SDATA2 static u8 lit_692[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 804557B0-804557B8 003DB0 0004+04 1/1 0/0 0/0 .sdata2 @693 */
SECTION_SDATA2 static f32 lit_693[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 802A1914-802A1A08 29C254 00F4+00 0/0 1/1 0/0 .text __ct__9JAISeqMgrFb */
JAISeqMgr::JAISeqMgr(bool param_1) : JASGlobalInstance<JAISeqMgr>(param_1), mAudience(NULL) {
seqDataMgr_ = NULL;
field_0x10 = NULL;
field_0x70 = 16;
mMove.init();
mActivity.init();
}
/* ############################################################################################## */
/* 804340C0-804340CC 060DE0 000C+00 3/3 0/0 0/0 .bss @715 */
static u8 lit_715[12];
/* 804340CC-804340E0 060DEC 0010+04 3/3 1/1 0/0 .bss
* memPool_$localstatic3$getMemPool___27JASPoolAllocObject<6JAISeq>Fv */
extern u8 data_804340CC[16 + 4 /* padding */];
u8 data_804340CC[16 + 4 /* padding */];
/* 802A1A08-802A1AF4 29C348 00EC+00 1/1 0/0 0/0 .text freeDeadSeq___9JAISeqMgrFv */
void JAISeqMgr::freeDeadSeq_() {
JSULink<JAISeq>* link = mSeqList.getFirst();
while (link != NULL) {
JAISeq* seq = link->getObject();
JSULink<JAISeq>* next = seq->getNext();
if (seq->status_.isDead()) {
mSeqList.remove(link);
delete seq;
}
link = next;
}
}
/* 802A1AF4-802A1B48 29C434 0054+00 3/3 1/1 0/0 .text __dt__19JASMemPool<6JAISeq>Fv */
extern "C" void func_802A1AF4(void* _this) {
// NONMATCHING
}
/* 802A1B48-802A1C90 29C488 0148+00 0/0 1/1 0/0 .text
* startSound__9JAISeqMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAISeqMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
JGeometry::TVec3<f32> const* param_3) {
if (param_2 != NULL && *param_2) {
(*param_2)->stop();
}
JAISoundInfo* soundInfo = JASGlobalInstance<JAISoundInfo>::getInstance();
int category = (soundInfo != NULL) ? soundInfo->getCategory(param_1) : -1;
JAISeqData aJStack_38(NULL, 0);
JUT_ASSERT(81, seqDataMgr_);
if (seqDataMgr_->getSeqData(param_1, &aJStack_38) == JAISeqDataMgr::SeqDataReturnValue_0) {
return false;
}
JAISeq* jaiSeq = beginStartSeq_();
if (jaiSeq != NULL) {
jaiSeq->JAISeqMgr_startID_(param_1, param_3, mAudience, category, field_0x70);
if (endStartSeq_(jaiSeq, param_2) != 0) {
if (soundInfo != NULL) {
soundInfo->getSeqInfo(param_1, jaiSeq);
}
return true;
}
}
return false;
}
/* 802A1C90-802A1DFC 29C5D0 016C+00 0/0 4/4 0/0 .text calc__9JAISeqMgrFv */
void JAISeqMgr::calc() {
mMove.calc();
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeqMgr_calc_();
}
freeDeadSeq_();
}
/* 802A1DFC-802A1E3C 29C73C 0040+00 0/0 1/1 0/0 .text stop__9JAISeqMgrFv */
void JAISeqMgr::stop() {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
}
}
/* 802A1E3C-802A1E8C 29C77C 0050+00 0/0 1/1 0/0 .text stop__9JAISeqMgrFUl */
void JAISeqMgr::stop(u32 param_0) {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
}
}
/* 802A1E8C-802A1EFC 29C7CC 0070+00 0/0 1/1 0/0 .text stopSoundID__9JAISeqMgrF10JAISoundID */
void JAISeqMgr::stopSoundID(JAISoundID param_1) {
if (!param_1.isAnonymous()) {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
if ((u32)link->getObject()->getID() == (u32)param_1) {
link->getObject()->stop();
}
}
}
}
/* 802A1EFC-802A1F58 29C83C 005C+00 0/0 4/4 0/0 .text mixOut__9JAISeqMgrFv */
void JAISeqMgr::mixOut() {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeqMgr_mixOut_(mMove.mParams, mActivity);
}
}
/* 802A1F58-802A1FE8 29C898 0090+00 1/1 0/0 0/0 .text beginStartSeq___9JAISeqMgrFv */
JAISeq* JAISeqMgr::beginStartSeq_() {
JAISeq* seq = new JAISeq(this, field_0x10);
if (seq == NULL) {
JUT_WARN(273, "JASPoolAllocObject::<JAISeq>::operator new failed .\n");
}
return seq;
}
/* 802A1FE8-802A20F0 29C928 0108+00 1/1 0/0 0/0 .text
* endStartSeq___9JAISeqMgrFP6JAISeqP14JAISoundHandle */
bool JAISeqMgr::endStartSeq_(JAISeq* param_1, JAISoundHandle* param_2) {
JAISeq* sound = param_1->getObject();
if (sound != NULL) {
if (sound->status_.isAlive()) {
mSeqList.append(param_1);
if (param_2 != NULL) {
sound->attachHandle(param_2);
}
return true;
}
delete sound;
}
return false;
}
/* 802A20F0-802A2184 29CA30 0094+00 1/0 0/0 0/0 .text __dt__9JAISeqMgrFv */
extern "C" void __dt__9JAISeqMgrFv() {
// asm JAISeqMgr::~JAISeqMgr() {
// NONMATCHING
}
+250
View File
@@ -0,0 +1,250 @@
//
// Generated By: dol2asm
// Translation Unit: JAISound
//
#include "JSystem/JAudio2/JAISound.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JASReport.h"
#include "JSystem/JAudio2/JASTrack.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 802A2184-802A21A0 29CAC4 001C+00 0/0 14/14 0/0 .text releaseSound__14JAISoundHandleFv
*/
void JAISoundHandle::releaseSound() {
if (sound_ == NULL) {
return;
}
sound_->handle_ = NULL;
sound_ = NULL;
}
/* 802A21A0-802A21BC 29CAE0 001C+00 3/3 3/3 0/0 .text releaseHandle__8JAISoundFv */
void JAISound::releaseHandle() {
if (handle_ == NULL) {
return;
}
handle_->sound_ = NULL;
handle_ = NULL;
}
/* 802A21BC-802A2220 29CAFC 0064+00 0/0 3/3 0/0 .text attachHandle__8JAISoundFP14JAISoundHandle */
void JAISound::attachHandle(JAISoundHandle* handle) {
if (handle->isSoundAttached()) {
handle->getSound()->stop();
}
if (isHandleAttached()) {
releaseHandle();
}
handle_ = handle;
handle_->sound_ = this;
}
/* 802A2220-802A2244 29CB60 0024+00 0/0 2/2 0/0 .text lockWhenPrepared__15JAISoundStatus_Fv */
s32 JAISoundStatus_::lockWhenPrepared() {
if (state.unk == 0) {
state.unk = 1;
return 1;
}
return 0;
}
/* 802A2244-802A2280 29CB84 003C+00 0/0 2/2 0/0 .text unlockIfLocked__15JAISoundStatus_Fv
*/
s32 JAISoundStatus_::unlockIfLocked() {
if (state.unk == 3) {
state.unk = 4;
return 1;
}
if (state.unk == 1) {
state.unk = 0;
return 1;
}
return 0;
}
/* 802A2280-802A22F8 29CBC0 0078+00 0/0 4/4 0/0 .text
* mixOutAll__14JAISoundParamsFRC14JASSoundParamsP14JASSoundParamsf */
void JAISoundParams::mixOutAll(JASSoundParams const& param_0, JASSoundParams* param_1,
f32 param_2) {
param_1->mVolume = mMove.mParams.mVolume * (param_0.mVolume * mProperty.field_0x0) * param_2;
param_1->mFxMix = mMove.mParams.mFxMix + (param_0.mFxMix + mProperty.field_0x4);
param_1->mPitch = mMove.mParams.mPitch * (param_0.mPitch * mProperty.field_0x8);
param_1->mPan = (param_0.mPan + mMove.mParams.mPan) - 0.5f;
param_1->mDolby = param_0.mDolby + mMove.mParams.mDolby;
}
/* 802A22F8-802A2328 29CC38 0030+00 0/0 3/3 0/0 .text __ct__8JAISoundFv */
JAISound::JAISound() : params() {}
/* 802A2328-802A244C 29CC68 0124+00 0/0 3/3 0/0 .text
* start_JAISound___8JAISoundF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudience */
void JAISound::start_JAISound_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1,
JAIAudience* param_2) {
handle_ = NULL;
soundID = param_0;
status_.init();
params.init();
fader.forceIn();
audience_ = param_2;
prepareCount = 0;
mCount = 0;
if (param_1 != 0 && audience_ != NULL) {
audible_ = audience_->newAudible(*param_1, soundID, NULL, 0);
} else {
audible_ = NULL;
}
mPriority = 0;
}
/* 802A244C-802A2474 29CD8C 0028+00 0/0 2/2 0/0 .text acceptsNewAudible__8JAISoundCFv */
bool JAISound::acceptsNewAudible() const {
bool accepts = false;
if (audible_ == NULL && status_.state.flags.flag2 == 0) {
accepts = true;
}
return accepts;
}
/* 802A2474-802A24DC 29CDB4 0068+00 0/0 2/2 0/0 .text
/* * newAudible__8JAISoundFRCQ29JGeometry8TVec3<f>PCQ29JGeometry8TVec3<f>UlP11JAIAudience */
void JAISound::newAudible(JGeometry::TVec3<f32> const& param_0,
JGeometry::TVec3<f32> const* param_1, u32 param_2, JAIAudience* param_3) {
if (param_3 != NULL) {
audience_ = param_3;
}
JAISoundID sound = soundID;
audible_ = audience_->newAudible(param_0, sound, param_1, param_2);
}
/* 802A24DC-802A2598 29CE1C 00BC+00 0/0 24/24 0/0 .text stop__8JAISoundFUl */
void JAISound::stop(u32 fadeCount) {
ASSERT(status_.isAlive());
if (fadeCount == 0) {
stop();
return;
} else {
fader.fadeOut(fadeCount);
removeLifeTime_();
status_.field_0x1.flags.flag2 = 0;
status_.state.flags.flag5 = 1;
status_.state.flags.flag1 = 1;
}
}
/* 802A2598-802A25D8 29CED8 0040+00 2/2 21/21 0/0 .text stop__8JAISoundFv */
void JAISound::stop() {
stop_JAISound_();
releaseHandle();
}
/* 802A25D8-802A25E0 29CF18 0008+00 1/0 2/0 0/0 .text asSe__8JAISoundFv */
JAISe* JAISound::asSe() {
return NULL;
}
/* 802A25E0-802A25E8 29CF20 0008+00 1/0 2/0 0/0 .text asSeq__8JAISoundFv */
JAISeq* JAISound::asSeq() {
return NULL;
}
/* 802A25E8-802A25F0 29CF28 0008+00 1/0 2/0 0/0 .text asStream__8JAISoundFv */
JAIStream* JAISound::asStream() {
return NULL;
}
/* 802A25F0-802A266C 29CF30 007C+00 0/0 3/3 0/0 .text die_JAISound___8JAISoundFv */
void JAISound::die_JAISound_() {
if (audible_ != NULL) {
audience_->deleteAudible(audible_);
audible_ = NULL;
audience_ = NULL;
}
fader.forceOut();
releaseHandle();
status_.state.unk = 6;
}
/* 802A266C-802A26B8 29CFAC 004C+00 0/0 3/3 0/0 .text increasePrepareCount_JAISound___8JAISoundFv
*/
void JAISound::increasePrepareCount_JAISound_() {
if ((++prepareCount & 0xFF) == 0) {
JASReport("It cost %d steps to prepare Sound(ID:%08x, Address%08x).\n", prepareCount,
(u32)soundID, this);
}
}
/* 802A26B8-802A29DC 29CFF8 0324+00 0/0 3/3 0/0 .text calc_JAISound___8JAISoundFv */
bool JAISound::calc_JAISound_() {
status_.state.flags.flag2 = 1;
if (isStopping() && JAISound_tryDie_()) {
return false;
}
ASSERT(status_.isAlive());
bool isPlaying = status_.isPlaying();
if (isPlaying) {
mCount++;
}
bool isPaused = status_.isPaused();
if (isPaused == false) {
fader.calc();
}
bool playing = isPlaying && isPaused == false;
if (playing) {
params.mMove.calc();
if (audible_ != NULL) {
audible_->calc();
}
if (status_.field_0x1.flags.flag2 != 0) {
if (lifeTime == 0) {
stop_JAISound_();
} else {
lifeTime--;
}
}
}
if (audience_ != NULL && audible_ != NULL) {
u32 priority = audience_->calcPriority(audible_);
mPriority = priority;
if (priority == 0xFFFFFFFF && status_.field_0x1.flags.flag1 == 0) {
stop_JAISound_();
}
} else {
mPriority = 0;
}
return playing;
}
/* 802A29DC-802A2AB0 29D31C 00D4+00 0/0 2/2 0/0 .text initTrack_JAISound___8JAISoundFP8JASTrack */
void JAISound::initTrack_JAISound_(JASTrack* track) {
JASSoundParams* soundParams[8];
ASSERT(audience_);
ASSERT(audible_);
int numChannels = 0;
for (int i = 0; i < audience_->getMaxChannels(); i++) {
JASSoundParams* currentParams = audible_->getOuterParams(i);
if (currentParams != NULL) {
soundParams[numChannels] = currentParams;
numChannels++;
}
}
ASSERT(numChannels >= 1);
track->setChannelMgrCount(numChannels);
for (size_t i = 0; i < track->getChannelMgrCount(); i++) {
track->assignExtBuffer(i, soundParams[i]);
}
}
+16
View File
@@ -0,0 +1,16 @@
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JAudio2/JASTrack.h"
void JAISoundChild::init() {
mMove.init();
mParams.init();
}
void JAISoundChild::mixOut(JASTrack* pTrack) {
mParams = mMove.mParams;
pTrack->assignExtBuffer(0, &mParams);
}
void JAISoundChild::calc() {
mMove.calc();
}
+38
View File
@@ -0,0 +1,38 @@
//
// Generated By: dol2asm
// Translation Unit: JAISoundHandles
//
#include "JSystem/JAudio2/JAISoundHandles.h"
//
// Forward References:
//
//
// Declarations:
//
/* 802A2C98-802A2CF4 29D5D8 005C+00 0/0 1/1 0/0 .text
* getHandleSoundID__15JAISoundHandlesF10JAISoundID */
JAISoundHandle* JAISoundHandles::getHandleSoundID(JAISoundID param_0) {
for (int i = 0; i < numHandles_; i++) {
if (mSoundHandle[i].isSoundAttached()) {
if (JAISoundID(mSoundHandle[i]->soundID) == param_0) {
return &mSoundHandle[i];
}
}
}
return NULL;
}
/* 802A2CF4-802A2D34 29D634 0040+00 0/0 2/2 0/0 .text getFreeHandle__15JAISoundHandlesFv
*/
JAISoundHandle* JAISoundHandles::getFreeHandle() {
for (int i = 0; i < numHandles_; i++) {
if (!mSoundHandle[i].isSoundAttached()) {
return &mSoundHandle[i];
}
}
return NULL;
}
+28
View File
@@ -0,0 +1,28 @@
//
// Generated By: dol2asm
// Translation Unit: JAISoundInfo
//
#include "JSystem/JAudio2/JAISoundInfo.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 802A2D34-802A2D50 29D674 001C+00 0/0 1/1 0/0 .text __ct__12JAISoundInfoFb */
JAISoundInfo::JAISoundInfo(bool param_0) : JASGlobalInstance<JAISoundInfo>(param_0) {
}
/* 802A2D50-802A2DB4 29D690 0064+00 1/0 2/2 0/0 .text __dt__12JAISoundInfoFv */
JAISoundInfo::~JAISoundInfo() {
}
+46
View File
@@ -0,0 +1,46 @@
#include "JSystem/JAudio2/JAISoundParams.h"
void JAISoundParamsMove::moveVolume(f32 newValue, u32 count) {
if (count == 0) {
mParams.mVolume = newValue;
mTransition.mVolume.mCount = 0;
} else {
mTransition.mVolume.set(newValue, mParams.mVolume, count);
}
}
void JAISoundParamsMove::movePitch(f32 newValue, u32 count) {
if (count == 0) {
mParams.mPitch = newValue;
mTransition.mPitch.mCount = 0;
} else {
mTransition.mPitch.set(newValue, mParams.mPitch, count);
}
}
void JAISoundParamsMove::moveFxMix(f32 newValue, u32 count) {
if (count == 0) {
mParams.mFxMix = newValue;
mTransition.mFxMix.mCount = 0;
} else {
mTransition.mFxMix.set(newValue, mParams.mFxMix, count);
}
}
void JAISoundParamsMove::movePan(f32 newValue, u32 count) {
if (count == 0) {
mParams.mPan = newValue;
mTransition.mPan.mCount = 0;
} else {
mTransition.mPan.set(newValue, mParams.mPan, count);
}
}
void JAISoundParamsMove::moveDolby(f32 newValue, u32 count) {
if (count == 0) {
mParams.mDolby = newValue;
mTransition.mDolby.mCount = 0;
} else {
mTransition.mDolby.set(newValue, mParams.mDolby, count);
}
}
+35
View File
@@ -0,0 +1,35 @@
//
// JAISoundStarter
//
#include "JSystem/JAudio2/JAISoundStarter.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
/* 802A2F6C-802A2F88 29D8AC 001C+00 0/0 1/1 0/0 .text __ct__15JAISoundStarterFb */
JAISoundStarter::JAISoundStarter(bool param_0) : JASGlobalInstance<JAISoundStarter>(param_0) {
}
/* 802A2F88-802A2FEC 29D8C8 0064+00 1/0 7/7 0/0 .text __dt__15JAISoundStarterFv */
JAISoundStarter::~JAISoundStarter() {
}
/* 802A2FEC-802A30D4 29D92C 00E8+00 0/0 4/4 0/0 .text
* startLevelSound__15JAISoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAISoundStarter::startLevelSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
if (*param_1) {
if (JAISoundID((u32)(*param_1)->soundID) == param_0) {
(*param_1)->updateLifeTime(1);
if (param_2 != NULL) {
(*param_1)->setPos(*param_2);
}
return true;
}
}
bool iVar2 = startSound(param_0, param_1, param_2);
if ((iVar2) && *param_1) {
(*param_1)->setLifeTime(1, false);
}
return iVar2;
}
+386
View File
@@ -0,0 +1,386 @@
//
// Generated By: dol2asm
// Translation Unit: JAIStream
//
#include "JSystem/JAudio2/JAIStream.h"
#include "JSystem/JAudio2/JAIStreamMgr.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JAudio2/JAIAudience.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" static void JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv();
extern "C" void func_802A3104();
extern "C" void func_802A319C();
extern "C" void prepare_prepareStream___9JAIStreamFv();
extern "C" void prepare___9JAIStreamFv();
extern "C" void prepare_startStream___9JAIStreamFv();
extern "C" void JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity();
extern "C" void die_JAIStream___9JAIStreamFv();
extern "C" void JAISound_tryDie___9JAIStreamFv();
extern "C" void JAIStreamMgr_calc___9JAIStreamFv();
extern "C" s32 getNumChild__9JAIStreamCFv();
extern "C" void getChild__9JAIStreamFi();
extern "C" void releaseChild__9JAIStreamFi();
extern "C" bool getTrack__9JAIStreamFv();
extern "C" bool getChildTrack__9JAIStreamFi();
extern "C" void asStream__9JAIStreamFv();
extern "C" bool getTempoMgr__9JAIStreamFv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void __ct__13JASAramStreamFv();
extern "C" void init__13JASAramStreamFUlUlPFUlP13JASAramStreamPv_vPv();
extern "C" void prepare__13JASAramStreamFli();
extern "C" void start__13JASAramStreamFv();
extern "C" void stop__13JASAramStreamFUs();
extern "C" void pause__13JASAramStreamFb();
extern "C" void cancel__13JASAramStreamFv();
extern "C" void func_802A1268(void* _this);
extern "C" void mixOutAll__14JAISoundParamsFRC14JASSoundParamsP14JASSoundParamsf();
extern "C" void __ct__8JAISoundFv();
extern "C" void func_802A2328();
extern "C" bool asSe__8JAISoundFv();
extern "C" bool asSeq__8JAISoundFv();
extern "C" void die_JAISound___8JAISoundFv();
extern "C" void increasePrepareCount_JAISound___8JAISoundFv();
extern "C" void calc_JAISound___8JAISoundFv();
extern "C" void init__13JAISoundChildFv();
extern "C" void calc__13JAISoundChildFv();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __register_global_object();
extern "C" void _savegpr_27();
extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_29();
extern "C" extern u8 data_804340B0[16];
extern "C" extern u8 data_80451318[8];
/* 802A30D4-802A3104 29DA14 0030+00 1/1 0/0 0/0 .text
* JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv */
static void JAIStream_JASAramStreamCallback_(u32 param_1, JASAramStream* param_2, void* param_3) {
switch (param_1) {
case 1:
((JAIStream*)(param_3))->field_0x2c5 = 1;
break;
case 0:
((JAIStream*)(param_3))->field_0x2c6 = 1;
break;
}
}
/* 802A3104-802A319C 29DA44 0098+00 0/0 1/1 0/0 .text
* __ct__9JAIStreamFP12JAIStreamMgrP31JAISoundStrategyMgr<9JAIStream> */
JAIStream::JAIStream(JAIStreamMgr* param_1, JAISoundStrategyMgr<JAIStream>* param_2) : JSULink<JAIStream>(this) {
field_0x290 = 0;
field_0x2c0 = param_2;
field_0x2b8 = param_1;
field_0x29c = 0;
field_0x2c5 = 0;
field_0x2c6 = 0;
for (int i = 0; i < CHANNEL_MAX; i++) {
field_0x2a0[i] = NULL;
}
}
/* 802A319C-802A3230 29DADC 0094+00 0/0 1/1 0/0 .text
* JAIStreamMgr_startID___9JAIStreamF10JAISoundIDlPCQ29JGeometry8TVec3<f>P11JAIAudiencei */
void JAIStream::JAIStreamMgr_startID_(JAISoundID param_1, s32 param_2,
JGeometry::TVec3<f32> const* param_3, JAIAudience* param_4,
int param_5) {
field_0x298 = param_5;
field_0x294 = param_2;
start_JAISound_(param_1, param_3, param_4);
field_0x290 = 0;
if (field_0x2c0 != NULL) {
field_0x2bc = field_0x2c0->calc(param_1);
} else {
field_0x2bc = NULL;
}
}
/* 802A3230-802A33F4 29DB70 01C4+00 1/1 0/0 0/0 .text prepare_prepareStream___9JAIStreamFv */
bool JAIStream::prepare_prepareStream_() {
u32 local_28;
switch (field_0x290) {
case 0:
JAIStreamAramMgr* streamAramMgr = field_0x2b8->getStreamAramMgr();
JUT_ASSERT(100, streamAramMgr);
field_0x29c = streamAramMgr->newStreamAram(&local_28);
if (field_0x29c != NULL) {
field_0x0a8.field_0x0.init((u32)field_0x29c, local_28, &JAIStream_JASAramStreamCallback_, this);
field_0x290 = 1;
prepareCount = 0;
} else {
increasePrepareCount_JAISound_();
}
break;
case 1:
if (audible_ != NULL) {
JASSoundParams* soundParams = audible_->getOuterParams(0);
field_0x0a8.field_0x0.setPitch(soundParams->mPitch);
field_0x0a8.field_0x0.setVolume(soundParams->mVolume);
field_0x0a8.field_0x0.setPan(soundParams->mPan);
field_0x0a8.field_0x0.setFxmix(soundParams->mFxMix);
field_0x0a8.field_0x0.setDolby(soundParams->mDolby);
}
field_0x2c5 = 0;
if (field_0x0a8.field_0x0.prepare(field_0x294, -1)) {
field_0x290 = 2;
}
break;
case 2:
if (field_0x2c5 != 0) {
field_0x2c5 = 0;
field_0x290 = 3;
} else {
increasePrepareCount_JAISound_();
}
break;
case 3:
return true;
case 4:
JUT_WARN(155, "PC must not pass here.");
break;
}
return false;
}
/* 802A33F4-802A3498 29DD34 00A4+00 1/1 0/0 0/0 .text prepare___9JAIStreamFv */
void JAIStream::prepare_() {
if (field_0x2c6 != 0) {
return;
}
switch(status_.state.unk) {
case 0:
if (prepare_prepareStream_()) {
status_.state.unk = 5;
prepare_startStream_();
}
break;
case 1:
if (prepare_prepareStream_()) {
status_.state.unk = 3;
}
break;
case 4:
status_.state.unk = 5;
prepare_startStream_();
break;
case 5:
break;
}
}
/* 802A3498-802A34E4 29DDD8 004C+00 1/1 0/0 0/0 .text prepare_startStream___9JAIStreamFv
*/
void JAIStream::prepare_startStream_() {
if (field_0x0a8.field_0x0.start()) {
field_0x2c6 = 0;
field_0x2c4 = 0;
field_0x290 = 4;
}
}
/* ############################################################################################## */
/* 804557F0-804557F4 003DF0 0004+00 2/2 0/0 0/0 .sdata2 @864 */
SECTION_SDATA2 static f32 lit_864 = 1.0f;
/* 804557F4-804557F8 003DF4 0004+00 2/2 0/0 0/0 .sdata2 @865 */
SECTION_SDATA2 static u8 lit_865[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 804557F8-80455800 003DF8 0004+04 2/2 0/0 0/0 .sdata2 @866 */
SECTION_SDATA2 static f32 lit_866[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 802A34E4-802A3720 29DE24 023C+00 0/0 1/1 0/0 .text
* JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity */
void JAIStream::JAIStreamMgr_mixOut_(JASSoundParams const& param_1, JAISoundActivity param_2) {
bool local_54;
JASSoundParams local_4c;
params.mixOutAll(param_1, &local_4c, (status_.isMute() || param_2.field_0x0.flags.flag1) ? 0.0f : fader.getIntensity());
if (field_0x2bc != NULL) {
field_0x2bc->virtual4(this, local_4c);
}
JASSoundParams* mixParams = &local_4c;
if (audible_ != NULL && audience_ != NULL) {
for (int i = 0; i < audience_->getMaxChannels(); i++) {
JASSoundParams* outerParams = audible_->getOuterParams(i);
if (outerParams != NULL) {
audience_->mixChannelOut(local_4c, audible_, i);
mixParams = outerParams;
break;
}
}
}
for (int i = 0; i < CHANNEL_MAX; i++) {
field_0x0a8.field_0x0.setPitch(mixParams->mPitch);
if (field_0x2a0[i] != NULL) {
field_0x0a8.field_0x0.setChannelVolume(i, field_0x2a0[i]->mMove.mParams.mVolume *
mixParams->mVolume);
field_0x0a8.field_0x0.setChannelPan(
i, (field_0x2a0[i]->mMove.mParams.mPan + mixParams->mPan) - 0.5f);
field_0x0a8.field_0x0.setChannelFxmix(i, field_0x2a0[i]->mMove.mParams.mFxMix +
mixParams->mFxMix);
field_0x0a8.field_0x0.setChannelDolby(i, field_0x2a0[i]->mMove.mParams.mDolby +
mixParams->mDolby);
} else {
field_0x0a8.field_0x0.setChannelVolume(i, mixParams->mVolume);
field_0x0a8.field_0x0.setChannelPan(i, mixParams->mPan);
field_0x0a8.field_0x0.setChannelFxmix(i, mixParams->mFxMix);
field_0x0a8.field_0x0.setChannelDolby(i, mixParams->mDolby);
}
}
prepare_();
if (field_0x290 == 4) {
local_54 = false;
if (status_.isPaused() || param_2.field_0x0.flags.flag2) {
local_54 = true;
}
if (local_54 != field_0x2c4) {
field_0x0a8.field_0x0.pause(local_54);
field_0x2c4 = local_54;
}
}
}
/* ############################################################################################## */
/* 804340E0-804340F0 060E00 000C+04 3/3 0/0 0/0 .bss @881 */
static u8 lit_881[12 + 4 /* padding */];
/* 802A3720-802A37FC 29E060 00DC+00 1/1 0/0 0/0 .text die_JAIStream___9JAIStreamFv */
void JAIStream::die_JAIStream_() {
die_JAISound_();
for (int i = 0; i < CHANNEL_MAX; i++) {
if (field_0x2a0[i] != NULL) {
delete (JASPoolAllocObject<JAISoundChild>*)field_0x2a0[i];
field_0x2a0[i] = NULL;
}
}
if (field_0x2bc != NULL) {
field_0x2c0->virtual4(field_0x2bc);
field_0x2bc = NULL;
}
}
/* 802A37FC-802A388C 29E13C 0090+00 1/0 0/0 0/0 .text JAISound_tryDie___9JAIStreamFv */
bool JAIStream::JAISound_tryDie_() {
if (field_0x2c6) {
die_JAIStream_();
return true;
}
switch (field_0x290) {
case 0:
case 1:
die_JAIStream_();
return true;
case 2:
case 3:
field_0x290 = 5;
field_0x0a8.field_0x0.cancel();
break;
case 4:
field_0x290 = 6;
field_0x0a8.field_0x0.stop(10);
break;
}
return false;
}
/* 802A388C-802A3948 29E1CC 00BC+00 0/0 1/1 0/0 .text JAIStreamMgr_calc___9JAIStreamFv */
void JAIStream::JAIStreamMgr_calc_() {
if (field_0x2c6 != 0) {
field_0x290 = 0;
stop_JAISound_();
}
if (calc_JAISound_()) {
for (int i = 0; i < CHANNEL_MAX; i++) {
if (field_0x2a0[i] != NULL) {
field_0x2a0[i]->calc();
}
}
if (field_0x2bc != NULL) {
field_0x2bc->calc(this);
}
}
}
/* 802A3948-802A3950 29E288 0008+00 1/0 0/0 0/0 .text getNumChild__9JAIStreamCFv */
s32 JAIStream::getNumChild() const {
return 6;
}
/* 802A3950-802A3A24 29E290 00D4+00 1/0 0/0 0/0 .text getChild__9JAIStreamFi */
#ifdef NONMATCHING
JAISoundChild* JAIStream::getChild(int i_idx) {
if (field_0x2a0[i_idx] == NULL) {
JASPoolAllocObject<JAISoundChild>* ptr = new JASPoolAllocObject<JAISoundChild>();
field_0x2a0[i_idx] = new (ptr) JAISoundChild();
if (field_0x2a0[i_idx] == NULL) {
JUT_WARN(370, "JASPoolAllocObject::<JAISoundChild>::operator new failed .")
}
}
return field_0x2a0[i_idx];
}
#else
JAISoundChild* JAIStream::getChild(int param_0) {
// NONMATCHING
}
#endif
/* 802A3A24-802A3ABC 29E364 0098+00 1/0 0/0 0/0 .text releaseChild__9JAIStreamFi */
#ifdef NONMATCHING
void JAIStream::releaseChild(int i_idx) {
if (field_0x2a0[i_idx] != NULL) {
delete (JASPoolAllocObject<JAISoundChild>*)field_0x2a0[i_idx];
field_0x2a0[i_idx] = NULL;
}
}
#else
void JAIStream::releaseChild(int param_0) {
// NONMATCHING
}
#endif
/* 802A3ABC-802A3AC4 29E3FC 0008+00 1/0 0/0 0/0 .text getTrack__9JAIStreamFv */
JASTrack* JAIStream::getTrack() {
return NULL;
}
/* 802A3AC4-802A3ACC 29E404 0008+00 1/0 0/0 0/0 .text getChildTrack__9JAIStreamFi */
JASTrack* JAIStream::getChildTrack(int param_0) {
return NULL;
}
/* 802A3ACC-802A3AD0 29E40C 0004+00 1/0 0/0 0/0 .text asStream__9JAIStreamFv */
JAIStream* JAIStream::asStream() {
return this;
}
/* 802A3AD0-802A3AD8 29E410 0008+00 1/0 0/0 0/0 .text getTempoMgr__9JAIStreamFv */
JAITempoMgr* JAIStream::getTempoMgr() {
return NULL;
}
+5
View File
@@ -0,0 +1,5 @@
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
JAIStreamDataMgr::~JAIStreamDataMgr() {}
JAIStreamAramMgr::~JAIStreamAramMgr() {}
+217
View File
@@ -0,0 +1,217 @@
//
// Generated By: dol2asm
// Translation Unit: JAIStreamMgr
//
#include "JSystem/JAudio2/JAIStreamMgr.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
#include "JSystem/JAudio2/JAISoundInfo.h"
#include "dol2asm.h"
//
// Forward References:
//
extern "C" void __ct__12JAIStreamMgrFb();
extern "C" void func_802A3C3C();
extern "C" void freeDeadStream___12JAIStreamMgrFv();
extern "C" void func_802A3E68(void* _this);
extern "C" void calc__12JAIStreamMgrFv();
extern "C" void stop__12JAIStreamMgrFv();
extern "C" void stop__12JAIStreamMgrFUl();
extern "C" void stopSoundID__12JAIStreamMgrF10JAISoundID();
extern "C" void mixOut__12JAIStreamMgrFv();
extern "C" void newStream___12JAIStreamMgrFv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void attachHandle__8JAISoundFP14JAISoundHandle();
extern "C" void stop__8JAISoundFUl();
extern "C" void stop__8JAISoundFv();
extern "C" void func_802A3104();
extern "C" void func_802A319C();
extern "C" void JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity();
extern "C" void JAIStreamMgr_calc___9JAIStreamFv();
extern "C" void __dl__FPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void append__10JSUPtrListFP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void _savegpr_25();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__9JAIStream[12];
extern "C" extern u8 data_80450B5C[4];
extern "C" extern u8 data_80451328[8];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* ############################################################################################## */
/* 80455800-80455804 003E00 0004+00 1/1 0/0 0/0 .sdata2 @653 */
SECTION_SDATA2 static f32 lit_653 = 1.0f;
/* 80455804-80455808 003E04 0004+00 1/1 0/0 0/0 .sdata2 @654 */
SECTION_SDATA2 static u8 lit_654[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455808-80455810 003E08 0004+04 1/1 0/0 0/0 .sdata2 @655 */
SECTION_SDATA2 static f32 lit_655[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 802A3B68-802A3C3C 29E4A8 00D4+00 0/0 1/1 0/0 .text __ct__12JAIStreamMgrFb */
JAIStreamMgr::JAIStreamMgr(bool param_0) : JASGlobalInstance<JAIStreamMgr>(param_0) {
streamDataMgr_ = NULL;
mStreamAramMgr = NULL;
field_0x6c = NULL;
field_0x54 = NULL;
mParams.init();
mActivity.init();
}
/* 802A3C3C-802A3D70 29E57C 0134+00 0/0 1/1 0/0 .text
* startSound__12JAIStreamMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAIStreamMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
JGeometry::TVec3<f32> const* param_3) {
JUT_ASSERT(37, streamDataMgr_);
if (param_2 != NULL && *param_2) {
(*param_2)->stop();
}
s32 streamFileEntry = streamDataMgr_->getStreamFileEntry(param_1);
if (streamFileEntry < 0) {
JUT_WARN("Cannot find the stream file entry for ID:%08x\n", param_1)
return false;
}
JAIStream* stream = newStream_();
JAISoundInfo* piVar5 = JASGlobalInstance<JAISoundInfo>::getInstance();
int iVar2 = -1;
if (piVar5 != NULL) {
iVar2 = piVar5->getCategory(param_1);
}
if (stream == NULL) {
return false;
}
stream->JAIStreamMgr_startID_(param_1, streamFileEntry, param_3, field_0x54, iVar2);
if (piVar5 != NULL) {
piVar5->getStreamInfo(param_1, stream);
}
if (param_2 != NULL) {
stream->attachHandle(param_2);
}
return false;
}
/* ############################################################################################## */
/* 804340F0-804340FC 060E10 000C+00 2/2 0/0 0/0 .bss @745 */
static u8 lit_745[12];
/* 804340FC-80434110 060E1C 0010+04 2/2 1/1 0/0 .bss
* memPool_$localstatic3$getMemPool___30JASPoolAllocObject<9JAIStream>Fv */
extern u8 data_804340FC[16 + 4 /* padding */];
u8 data_804340FC[16 + 4 /* padding */];
/* 802A3D70-802A3E68 29E6B0 00F8+00 1/1 0/0 0/0 .text freeDeadStream___12JAIStreamMgrFv
*/
// I think this will match when all references to data_80451328 (init$localstatic4$getMemPool__30JASPoolAllocObject<9JAIStream>Fv) are not in asm
#ifdef NONMATCHING
void JAIStreamMgr::freeDeadStream_() {
JSULink<JAIStream>* link = mStreamList.getFirst();
while (link != NULL) {
JAIStream* stream = link->getObject();
JSULink<JAIStream>* next = link->getNext();
if (stream->status_.isDead()) {
mStreamList.remove(link);
void* aramAddr = stream->JAIStreamMgr_getAramAddr_();
if (aramAddr != NULL) {
mStreamAramMgr->deleteStreamAram((u32)aramAddr);
}
delete stream;
}
link = next;
}
}
#else
void JAIStreamMgr::freeDeadStream_() {
// NONMATCHING
}
#endif
/* 802A3E68-802A3EBC 29E7A8 0054+00 2/2 1/1 0/0 .text __dt__22JASMemPool<9JAIStream>Fv */
extern "C" void func_802A3E68(void* _this) {
// NONMATCHING
}
/* 802A3EBC-802A4028 29E7FC 016C+00 0/0 1/1 0/0 .text calc__12JAIStreamMgrFv */
void JAIStreamMgr::calc() {
mParams.calc();
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAIStreamMgr_calc_();
}
freeDeadStream_();
}
/* 802A4028-802A4068 29E968 0040+00 0/0 1/1 0/0 .text stop__12JAIStreamMgrFv */
void JAIStreamMgr::stop() {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
}
}
/* 802A4068-802A40B8 29E9A8 0050+00 0/0 2/2 0/0 .text stop__12JAIStreamMgrFUl */
void JAIStreamMgr::stop(u32 param_0) {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
}
}
/* 802A40B8-802A4118 29E9F8 0060+00 0/0 1/1 0/0 .text stopSoundID__12JAIStreamMgrF10JAISoundID */
void JAIStreamMgr::stopSoundID(JAISoundID param_0) {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
if ((u32)link->getObject()->getID() == (u32)param_0) {
link->getObject()->stop();
}
}
}
/* 802A4118-802A4174 29EA58 005C+00 0/0 1/1 0/0 .text mixOut__12JAIStreamMgrFv */
void JAIStreamMgr::mixOut() {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAIStreamMgr_mixOut_(mParams.mParams, mActivity);
}
}
/* 802A4174-802A4244 29EAB4 00D0+00 1/1 0/0 0/0 .text newStream___12JAIStreamMgrFv */
JAIStream* JAIStreamMgr::newStream_() {
if (mStreamAramMgr == NULL) {
JUT_WARN(229, "JAIStreamAramMgr must be set.\n");
return NULL;
}
JAIStream* stream = new JAIStream(this, field_0x6c);
if (stream == NULL) {
JUT_WARN(235, "JASPoolAllocObject::<JAIStream>::operator new failed .\n");
return NULL;
}
mStreamList.append(stream);
return stream;
}
+479
View File
@@ -0,0 +1,479 @@
//
// Generated By: dol2asm
// Translation Unit: JASAiCtrl
//
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JASDSPInterface.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASProbe.h"
#include "JSystem/JAudio2/JASReport.h"
#include "JSystem/JAudio2/JASLfo.h"
#include "dol2asm.h"
#include "dolphin/ai.h"
#include "dolphin/os/OSCache.h"
#include "dolphin/os/OSTime.h"
//
// Types:
//
struct JASPortCmd {
/* 80291060 */ static void execAllCommand();
};
struct JASDSPChannel {
/* 8029D89C */ static void updateAll();
/* 8029D910 */ static void killActiveChannel();
};
struct JASChannel {
/* 8029BC0C */ static void initBankDisposeMsgQueue();
/* 8029BC48 */ static void receiveBankDisposeMsg();
};
//
// Forward References:
//
extern "C" void initAI__9JASDriverFPFv_v();
extern "C" void startDMA__9JASDriverFv();
extern "C" void stopDMA__9JASDriverFv();
extern "C" void setOutputRate__9JASDriverF13JASOutputRate();
extern "C" void updateDac__9JASDriverFv();
extern "C" void updateDSP__9JASDriverFv();
extern "C" void readDspBuffer__9JASDriverFPsUl();
extern "C" void finishDSPFrame__9JASDriverFv();
extern "C" void registerMixCallback__9JASDriverFPFl_Ps10JASMixMode();
extern "C" void getDacRate__9JASDriverFv();
extern "C" u32 getSubFrames__9JASDriverFv();
extern "C" void getDacSize__9JASDriverFv();
extern "C" void getFrameSamples__9JASDriverFv();
extern "C" void mixMonoTrack(s16*, u32, s16* (*)(s32));
extern "C" void mixMonoTrackWide(s16*, u32, s16* (*)(s32));
extern "C" void mixExtraTrack(s16*, u32, s16* (*)(s32));
extern "C" void mixInterleaveTrack(s16*, u32, s16* (*)(s32));
extern "C" u32 getSubFrameCounter__9JASDriverFv();
extern "C" void* const sMixFuncs__9JASDriver[4];
extern "C" extern char const* const JASAiCtrl__stringBase0;
extern "C" u8 sDmaDacBuffer__9JASDriver[12 + 4 /* padding */];
extern "C" u32 sMixMode__9JASDriver;
extern "C" f32 sDacRate__9JASDriver;
extern "C" u32 sSubFrames__9JASDriver;
extern "C" u8 sDspDacBuffer__9JASDriver[4];
extern "C" u8 sDspDacWriteBuffer__9JASDriver[4];
extern "C" u8 sDspDacReadBuffer__9JASDriver[4];
extern "C" u8 sDspStatus__9JASDriver[4];
extern "C" u8 sDspDacCallback__9JASDriver[4];
extern "C" u8 lastRspMadep__9JASDriver[4];
extern "C" u8 dacCallbackFunc__9JASDriver[4];
extern "C" u8 extMixCallback__9JASDriver[4];
extern "C" u8 sOutputRate__9JASDriver[4];
extern "C" u8 sSubFrameCounter__9JASDriver[4];
//
// External References:
//
extern "C" void imixcopy__7JASCalcFPCsPCsPsUl();
extern "C" void bzero__7JASCalcFPvUl();
extern "C" void func_8028F69C(void* _this, s32);
extern "C" void start__8JASProbeFlPCc();
extern "C" void stop__8JASProbeFl();
extern "C" void JASReport__FPCce();
extern "C" void execAllCommand__10JASPortCmdFv();
extern "C" void initBankDisposeMsgQueue__10JASChannelFv();
extern "C" void receiveBankDisposeMsg__10JASChannelFv();
extern "C" void incCounter__6JASLfoFf();
extern "C" void updateAll__13JASDSPChannelFv();
extern "C" void killActiveChannel__13JASDSPChannelFv();
extern "C" void syncFrame__6JASDspFUlUlUl();
extern "C" void invalChannelAll__6JASDspFv();
extern "C" void subframeCallback__9JASDriverFv();
extern "C" void DSPSyncCallback__9JASDriverFv();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void _savegpr_25();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" u8 sFreeRunLfo__6JASLfo[24];
extern "C" u8 snIntCount__14JASAudioThread[4 + 4 /* padding */];
//
// Declarations:
//
/* ############################################################################################## */
/* 80431C58-80431C68 05E978 000C+04 2/2 0/0 0/0 .bss sDmaDacBuffer__9JASDriver */
s16* JASDriver::sDmaDacBuffer[3];
/* 804507A8-804507AC 000228 0004+00 3/3 0/0 0/0 .sdata None */
SECTION_SDATA static u8 data_804507A8 = 3;
/* 804512A0-804512A4 0007A0 0004+00 3/3 0/0 0/0 .sbss sDspDacBuffer__9JASDriver */
s16** JASDriver::sDspDacBuffer;
/* 804512A4-804512A8 0007A4 0004+00 3/3 0/0 0/0 .sbss sDspDacWriteBuffer__9JASDriver */
s32 JASDriver::sDspDacWriteBuffer;
/* 804512A8-804512AC 0007A8 0004+00 3/3 0/0 0/0 .sbss sDspDacReadBuffer__9JASDriver */
s32 JASDriver::sDspDacReadBuffer;
/* 804512AC-804512B0 0007AC 0004+00 3/3 0/0 0/0 .sbss sDspStatus__9JASDriver */
s32 JASDriver::sDspStatus;
/* 804512B0-804512B4 0007B0 0004+00 1/1 0/0 0/0 .sbss sDspDacCallback__9JASDriver */
void (*JASDriver::sDspDacCallback)(s16*, u32);
/* 804512B4-804512B8 0007B4 0004+00 1/1 0/0 0/0 .sbss lastRspMadep__9JASDriver */
s16* JASDriver::lastRspMadep;
/* 804512B8-804512BC 0007B8 0004+00 1/1 0/0 0/0 .sbss dacCallbackFunc__9JASDriver */
void (*JASDriver::dacCallbackFunc)(s16*, u32);
/* 804512BC-804512C0 0007BC 0004+00 2/2 0/0 0/0 .sbss extMixCallback__9JASDriver */
JASDriver::MixCallback JASDriver::extMixCallback;
/* 804512C0-804512C4 0007C0 0004+00 2/2 0/0 0/0 .sbss sOutputRate__9JASDriver */
u32 JASDriver::sOutputRate;
/* 8029C388-8029C4E4 296CC8 015C+00 0/0 1/1 0/0 .text initAI__9JASDriverFPFv_v */
// missing instructions
#ifdef NONMATCHING
void JASDriver::initAI(void (*param_0)(void)) {
setOutputRate(OUTPUT_RATE_0);
u32 size = getDacSize() * 2;
for (int i = 0; i < 3; i++) {
sDmaDacBuffer[i] = new(JASDram, 0x20) s16[size / 2];
JASCalc::bzero(sDmaDacBuffer[i], size);
DCStoreRange(sDmaDacBuffer[i], size);
}
sDspDacBuffer = new(JASDram, 0) s16*[data_804507A8];
for (int i = 0; i < data_804507A8; i++) {
sDspDacBuffer[i] = new(JASDram, 0x20) s16[getDacSize()];
JASCalc::bzero(sDspDacBuffer[i], size);
DCStoreRange(sDspDacBuffer[i], size);
}
sDspDacWriteBuffer = data_804507A8 - 1;
sDspDacReadBuffer = 0;
sDspStatus = 0;
JASChannel::initBankDisposeMsgQueue();
AIInit(NULL);
AIInitDMA((u32)sDmaDacBuffer[2], size);
AISetDSPSampleRate(sOutputRate != 0);
AIRegisterDMACallback(param_0);
}
#else
void JASDriver::initAI(void (*param_0)(void)) {
// NONMATCHING
}
#endif
/* 8029C4E4-8029C504 296E24 0020+00 0/0 1/1 0/0 .text startDMA__9JASDriverFv */
void JASDriver::startDMA() {
AIStartDMA();
}
/* 8029C504-8029C524 296E44 0020+00 0/0 1/1 0/0 .text stopDMA__9JASDriverFv */
void JASDriver::stopDMA() {
AIStopDMA();
}
/* ############################################################################################## */
/* 804507AC-804507B0 00022C 0004+00 2/2 0/0 0/0 .sdata sMixMode__9JASDriver */
SECTION_SDATA JASMixMode JASDriver::sMixMode = MIX_MODE_EXTRA;
/* 804507B0-804507B4 000230 0004+00 2/2 0/0 0/0 .sdata sDacRate__9JASDriver */
SECTION_SDATA f32 JASDriver::sDacRate = 32028.5f;
/* 804507B4-804507B8 000234 0004+00 4/3 0/0 0/0 .sdata sSubFrames__9JASDriver */
SECTION_SDATA u32 JASDriver::sSubFrames = 0x00000007;
/* 80455720-80455724 003D20 0004+00 1/1 0/0 0/0 .sdata2 @233 */
SECTION_SDATA2 static f32 lit_233 = 32000.0f;
/* 80455724-80455728 003D24 0004+00 1/1 0/0 0/0 .sdata2 @234 */
SECTION_SDATA2 static f32 lit_234 = 48000.0f;
/* 80455728-8045572C 003D28 0004+00 1/1 0/0 0/0 .sdata2 @235 */
SECTION_SDATA2 static f32 lit_235 = 1.0008896589279175f;
/* 8029C524-8029C568 296E64 0044+00 1/1 0/0 0/0 .text setOutputRate__9JASDriverF13JASOutputRate */
void JASDriver::setOutputRate(JASOutputRate param_0) {
sOutputRate = param_0;
if (param_0 == 0) {
sSubFrames = 7;
sDacRate = 32000.0f;
} else {
sSubFrames = 10;
sDacRate = 48000.0f;
}
sDacRate *= 1.00089f;
}
/* ############################################################################################## */
/* 8039B2E0-8039B2F0 -00001 0010+00 1/1 0/0 0/0 .rodata sMixFuncs__9JASDriver */
SECTION_RODATA const JASDriver::MixFunc JASDriver::sMixFuncs[4] = {
mixMonoTrack,
mixMonoTrackWide,
mixExtraTrack,
mixInterleaveTrack,
};
COMPILER_STRIP_GATE(0x8039B2E0, &JASDriver::sMixFuncs);
/* 804512C4-804512C8 0007C4 0004+00 2/1 0/0 0/0 .sbss sSubFrameCounter__9JASDriver */
u32 JASDriver::sSubFrameCounter;
/* 8029C568-8029C6C4 296EA8 015C+00 0/0 1/1 0/0 .text updateDac__9JASDriverFv */
void JASDriver::updateDac() {
static u32 dacp = 0;
s16* r30 = lastRspMadep;
lastRspMadep = NULL;
if (r30) {
AIInitDMA((u32)r30, getDacSize() * 2);
}
s32 frameSamples = getFrameSamples();
readDspBuffer(sDmaDacBuffer[dacp], frameSamples);
if (sDspStatus == 0) {
finishDSPFrame();
}
if (extMixCallback) {
sMixFuncs[sMixMode](sDmaDacBuffer[dacp], frameSamples, extMixCallback);
}
{
JASCriticalSection cs;
DCStoreRange(sDmaDacBuffer[dacp], getDacSize() * 2);
}
lastRspMadep = sDmaDacBuffer[dacp];
dacp++;
if (dacp >= 3) {
dacp = 0;
}
if (dacCallbackFunc) {
dacCallbackFunc(lastRspMadep, getFrameSamples());
}
}
/* ############################################################################################## */
/* 8039B2F0-8039B2F0 027950 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039B2F0 = "SFR-UPDATE";
SECTION_DEAD static char const* const stringBase_8039B2FB = "kill DSP channel";
#pragma pop
/* 803C78B8-803C78E0 0249D8 0028+00 1/1 0/0 0/0 .data history$267 */
SECTION_DATA static u32 history[10] = {
0x000F4240,
};
/* 804512D0-804512D4 0007D0 0004+00 1/1 0/0 0/0 .sbss old_time$264 */
static u32 old_time;
/* 804512D4-804512D8 0007D4 0004+00 1/1 0/0 0/0 .sbss None */
static u8 data_804512D4[4];
/* 8045572C-80455730 003D2C 0004+00 1/1 0/0 0/0 .sdata2 @275 */
SECTION_SDATA2 static f32 lit_275 = 11.0f / 10.0f;
/* 80455730-80455738 003D30 0004+04 1/1 0/0 0/0 .sdata2 @276 */
SECTION_SDATA2 static f32 lit_276[1 + 1 /* padding */] = {
32028.5f,
/* padding */
0.0f,
};
/* 80455738-80455740 003D38 0008+00 1/1 0/0 0/0 .sdata2 @278 */
SECTION_SDATA2 static f64 lit_278 = 4503599627370496.0 /* cast u32 to float */;
/* 8029C6C4-8029C7E0 297004 011C+00 1/1 1/1 0/0 .text updateDSP__9JASDriverFv */
void JASDriver::updateDSP() {
JASProbe::start(3, "SFR-UPDATE");
JASDsp::invalChannelAll();
JASPortCmd::execAllCommand();
DSPSyncCallback();
static u32 old_time = 0;
u32 r28 = OSGetTick();
u32 r27 = r28 - old_time;
old_time = r28;
u32 subFrame = getSubFrames();
int r26 = JASAudioThread::getDSPSyncCount();
history[subFrame - r26] = r27;
if (subFrame != r26 && f32(history[0]) / r27 < 1.1f) {
JASReport("kill DSP channel");
JASDSPChannel::killActiveChannel();
}
JASChannel::receiveBankDisposeMsg();
JASDSPChannel::updateAll();
subframeCallback();
JASLfo::updateFreeRun(32028.5f / getDacRate());
JASProbe::stop(3);
sSubFrameCounter++;
}
/* 8029C7E0-8029C900 297120 0120+00 1/1 0/0 0/0 .text readDspBuffer__9JASDriverFPsUl */
// missing instruction
#ifdef NONMATCHING
void JASDriver::readDspBuffer(s16* param_0, u32 param_1) {
s32 r29 = sDspDacReadBuffer + 1;
if (r29 == data_804507A8) {
r29 = 0;
}
if (r29 == sDspDacWriteBuffer && data_804507A8 >= 3) {
s16 r25 = sDspDacBuffer[sDspDacReadBuffer][param_1 / 2 - 1];
s16 r24 = sDspDacBuffer[sDspDacReadBuffer][param_1 - 1];
for (int i = 0; i < param_1; i++) {
sDspDacBuffer[sDspDacReadBuffer][i] = r25;
}
for (int i = param_1; i < param_1 * 2; i++) {
sDspDacBuffer[sDspDacReadBuffer][i] = r24;
}
} else {
sDspDacReadBuffer = r29;
DCInvalidateRange(sDspDacBuffer[r29], param_1 * 4);
}
JASCalc::imixcopy(sDspDacBuffer[sDspDacReadBuffer] + param_1, sDspDacBuffer[sDspDacReadBuffer], param_0, param_1);
}
#else
void JASDriver::readDspBuffer(s16* param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 8029C900-8029C9DC 297240 00DC+00 1/1 1/1 0/0 .text finishDSPFrame__9JASDriverFv */
void JASDriver::finishDSPFrame() {
int r30 = sDspDacWriteBuffer + 1;
if (r30 == data_804507A8) {
r30 = 0;
}
if (r30 == sDspDacReadBuffer) {
sDspStatus = 0;
return;
}
sDspDacWriteBuffer = r30;
JASAudioThread::setDSPSyncCount(getSubFrames());
JASProbe::start(7, "DSP-MAIN");
u32 r27 = getFrameSamples();
JASDsp::syncFrame(getSubFrames(), u32(sDspDacBuffer[sDspDacWriteBuffer]), u32(sDspDacBuffer[sDspDacWriteBuffer] + r27));
sDspStatus = 1;
updateDSP();
if (sDspDacCallback) {
sDspDacCallback(sDspDacBuffer[sDspDacWriteBuffer], r27);
}
}
/* 8029C9DC-8029C9E8 29731C 000C+00 0/0 0/0 2/2 .text
* registerMixCallback__9JASDriverFPFl_Ps10JASMixMode */
void JASDriver::registerMixCallback(MixCallback param_0, JASMixMode param_1) {
extMixCallback = param_0;
sMixMode = param_1;
}
/* 8029C9E8-8029C9F0 297328 0008+00 1/1 5/5 0/0 .text getDacRate__9JASDriverFv */
f32 JASDriver::getDacRate() {
return sDacRate;
}
/* 8029C9F0-8029C9F8 -00001 0008+00 0/0 0/0 0/0 .text getSubFrames__9JASDriverFv */
u32 JASDriver::getSubFrames() {
return sSubFrames;
}
/* 8029C9F8-8029CA04 297338 000C+00 2/2 0/0 0/0 .text getDacSize__9JASDriverFv */
u32 JASDriver::getDacSize() {
return sSubFrames * 0xa0;
}
/* 8029CA04-8029CA10 297344 000C+00 3/3 0/0 0/0 .text getFrameSamples__9JASDriverFv */
u32 JASDriver::getFrameSamples() {
return sSubFrames * 0x50;
}
/* 8029CA10-8029CAC0 297350 00B0+00 1/0 0/0 0/0 .text mixMonoTrack__9JASDriverFPsUlPFl_Ps
*/
void JASDriver::mixMonoTrack(s16* buffer, u32 param_1, MixCallback param_2) {
JASProbe::start(5, "MONO-MIX");
s16* r31 = param_2(param_1);
s16* pTrack = buffer;
if (r31 == NULL) {
return;
}
JASProbe::stop(5);
for (u32 i = param_1; i != 0; i--) {
pTrack[0] = JASCalc::clamp<s16, s32>(pTrack[0] + r31[0]);
pTrack[1] = JASCalc::clamp<s16, s32>(pTrack[1] + r31[0]);
pTrack += 2;
r31++;
}
}
/* 8029CAC0-8029CB70 297400 00B0+00 1/0 0/0 0/0 .text mixMonoTrackWide__9JASDriverFPsUlPFl_Ps */
void JASDriver::mixMonoTrackWide(s16* buffer, u32 param_1, MixCallback param_2) {
JASProbe::start(5, "MONO(W)-MIX");
s16* r31 = param_2(param_1);
s16* pTrack = buffer;
if (!r31) {
return;
}
JASProbe::stop(5);
for (u32 i = param_1; i != 0; i--) {
pTrack[0] = JASCalc::clamp<s16, s32>(pTrack[0] + r31[0]);
s32 src = pTrack[1];
src -= r31[0];
pTrack[1] = JASCalc::clamp<s16, s32>(src);
pTrack += 2;
r31++;
}
}
/* 8029CB70-8029CC50 2974B0 00E0+00 1/0 0/0 0/0 .text mixExtraTrack__9JASDriverFPsUlPFl_Ps */
void JASDriver::mixExtraTrack(s16* buffer, u32 param_1, MixCallback param_2) {
JASProbe::start(5, "DSPMIX");
s16* r31 = param_2(param_1);
if (!r31) {
return;
}
JASProbe::stop(5);
JASProbe::start(6, "MIXING");
s16* pTrack = buffer;
s16* r29 = r31 + getFrameSamples();
for (u32 i = param_1; i != 0; i--) {
pTrack[0] = JASCalc::clamp<s16, s32>(pTrack[0] + r29[0]);
pTrack[1] = JASCalc::clamp<s16, s32>(pTrack[1] + r31[0]);
pTrack += 2;
r29++;
r31++;
}
JASProbe::stop(6);
}
/* 8029CC50-8029CCD4 297590 0084+00 1/0 0/0 0/0 .text mixInterleaveTrack__9JASDriverFPsUlPFl_Ps */
void JASDriver::mixInterleaveTrack(s16* buffer, u32 param_1, MixCallback param_2) {
s16* r31 = param_2(param_1);
if (r31) {
s16* pTrack = buffer;
s16* r30 = r31;
for (u32 i = param_1 * 2; i != 0; i--) {
pTrack[0] = JASCalc::clamp<s16, s32>(pTrack[0] + r30[0]);
pTrack += 1;
r30++;
}
}
}
/* 8029CCD4-8029CCDC -00001 0008+00 0/0 0/0 0/0 .text getSubFrameCounter__9JASDriverFv */
u32 JASDriver::getSubFrameCounter() {
return sSubFrameCounter;
}
/* 8039B2F0-8039B2F0 027950 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+860
View File
@@ -0,0 +1,860 @@
//
// Generated By: dol2asm
// Translation Unit: JASAramStream
//
#include "JSystem/JAudio2/JASAramStream.h"
#include "JSystem/JAudio2/JASChannel.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "dol2asm.h"
//
// Types:
//
/* JASMemPool_MultiThreaded<JASChannel> */
struct JASMemPool_MultiThreaded__template2 {
/* 802978DC */ void func_802978DC(void* _this);
};
//
// Forward References:
//
extern "C" void initSystem__13JASAramStreamFUlUl();
extern "C" void __ct__13JASAramStreamFv();
extern "C" void init__13JASAramStreamFUlUlPFUlP13JASAramStreamPv_vPv();
extern "C" void prepare__13JASAramStreamFli();
extern "C" void start__13JASAramStreamFv();
extern "C" void stop__13JASAramStreamFUs();
extern "C" void pause__13JASAramStreamFb();
extern "C" void cancel__13JASAramStreamFv();
extern "C" void getBlockSamples__13JASAramStreamCFv();
extern "C" void headerLoadTask__13JASAramStreamFPv();
extern "C" void firstLoadTask__13JASAramStreamFPv();
extern "C" void loadToAramTask__13JASAramStreamFPv();
extern "C" void finishTask__13JASAramStreamFPv();
extern "C" void prepareFinishTask__13JASAramStreamFPv();
extern "C" void headerLoad__13JASAramStreamFUli();
extern "C" void load__13JASAramStreamFv();
extern "C" void channelProcCallback__13JASAramStreamFPv();
extern "C" void dvdErrorCheck__13JASAramStreamFPv();
extern "C" void channelCallback__13JASAramStreamFUlP10JASChannelPQ26JASDsp8TChannelPv();
extern "C" void updateChannel__13JASAramStreamFUlP10JASChannelPQ26JASDsp8TChannel();
extern "C" void channelProc__13JASAramStreamFv();
extern "C" void channelStart__13JASAramStreamFv();
extern "C" void channelStop__13JASAramStreamFUs();
extern "C" void func_802978DC(void* _this);
extern "C" u8 sLoadThread__13JASAramStream[4];
extern "C" u8 sReadBuffer__13JASAramStream[4];
extern "C" u8 sBlockSize__13JASAramStream[4];
extern "C" u8 sChannelMax__13JASAramStream[4];
//
// External References:
//
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl();
extern "C" void sendCmdMsg__13JASTaskThreadFPFPv_vPv();
extern "C" void getThreadPointer__6JASDvdFv();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void playForce__10JASChannelFv();
extern "C" void release__10JASChannelFUs();
extern "C" void setOscInit__10JASChannelFUlPCQ213JASOscillator4Data();
extern "C" void setMixConfig__10JASChannelFUlUs();
extern "C" void getDacRate__9JASDriverFv();
extern "C" void rejectCallback__9JASDriverFPFPv_lPv();
extern "C" void registerSubFrameCallback__9JASDriverFPFPv_lPv();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl();
extern "C" void __register_global_object();
extern "C" void _savegpr_19();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_19();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* ############################################################################################## */
/* 80451250-80451254 000750 0004+00 6/6 0/0 0/0 .sbss sLoadThread__13JASAramStream */
JASTaskThread* JASAramStream::sLoadThread;
/* 80451254-80451258 000754 0004+00 3/3 0/0 0/0 .sbss sReadBuffer__13JASAramStream */
u8* JASAramStream::sReadBuffer;
/* 80451258-8045125C 000758 0004+00 6/6 1/1 0/0 .sbss sBlockSize__13JASAramStream */
u32 JASAramStream::sBlockSize;
/* 8045125C-80451260 00075C 0004+00 1/1 0/0 0/0 .sbss sChannelMax__13JASAramStream */
u32 JASAramStream::sChannelMax;
/* 80451260-80451268 -00001 0008+00 8/8 4/4 0/0 .sbss None */
/* 80451260 0001+00 data_80451260 None */
/* 80451261 0001+00 data_80451261 None */
/* 80451262 0006+00 data_80451262 None */
extern bool struct_80451260;
extern bool struct_80451261;
extern u32 struct_80451264;
bool struct_80451260;
bool struct_80451261;
u32 struct_80451264;
/* 8029631C-802963A8 290C5C 008C+00 0/0 1/1 0/0 .text initSystem__13JASAramStreamFUlUl */
void JASAramStream::initSystem(u32 i_blockSize, u32 i_channelMax) {
if (JASDriver::registerSubFrameCallback(dvdErrorCheck, NULL)) {
if (sLoadThread == NULL) {
sLoadThread = JASDvd::getThreadPointer();
}
sReadBuffer = new (JASDram, 0x20) u8[(i_blockSize + 0x20) * i_channelMax];
sBlockSize = i_blockSize;
sChannelMax = i_channelMax;
struct_80451260 = false;
struct_80451261 = false;
}
}
/* ############################################################################################## */
/* 80455610-80455614 003C10 0004+00 3/3 0/0 0/0 .sdata2 @390 */
SECTION_SDATA2 static u8 lit_390[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455614-80455618 003C14 0004+00 2/2 0/0 0/0 .sdata2 @391 */
SECTION_SDATA2 static f32 lit_391 = 1.0f;
/* 80455618-8045561C 003C18 0004+00 2/2 0/0 0/0 .sdata2 @392 */
SECTION_SDATA2 static f32 lit_392 = 0.5f;
/* 802963A8-8029649C 290CE8 00F4+00 0/0 1/1 0/0 .text __ct__13JASAramStreamFv */
#ifdef NONMATCHING
JASAramStream::JASAramStream() {
field_0x0a8 = NULL;
field_0x0ac = false;
field_0x0ad = false;
field_0x0ae = 0;
field_0x0b0 = 0;
field_0x0b4 = 0;
field_0x0b8 = 0;
field_0x0bc = 0;
field_0x0c0 = false;
field_0x0c4 = 0;
field_0x0c8 = 0.0f;
field_0x108 = 0;
field_0x10c = 0;
mBlock = 0;
field_0x114 = 0;
field_0x118 = 0;
field_0x12c = 0;
field_0x148 = 0;
field_0x14c = 0;
mCallback = NULL;
mCallbackData = NULL;
field_0x158 = 0;
mChannelNum = 0;
mBufCount = 0;
field_0x160 = 0;
field_0x164 = 0;
mLoop = false;
mLoopStart = 0;
mLoopEnd = 0;
mVolume = 1.0f;
mPitch = 1.0f;
for (int i = 0; i < 6; i++) {
mChannels[i] = NULL;
field_0x130[i] = 0;
field_0x13c[i] = 0;
mChannelVolume[i] = 1.0f;
mChannelPan[i] = 0.5f;
mChannelFxMix[i] = 0.0f;
mChannelDolby[i] = 0.0f;
}
for (int i = 0; i < 6; i++) {
field_0x1dc[i] = 0;
}
}
#else
JASAramStream::JASAramStream() {
// NONMATCHING
}
#endif
/* 8029649C-8029655C 290DDC 00C0+00 0/0 1/1 0/0 .text
* init__13JASAramStreamFUlUlPFUlP13JASAramStreamPv_vPv */
#ifdef NONMATCHING
void JASAramStream::init(u32 param_0, u32 param_1, StreamCallback i_callback, void* i_callbackData) {
field_0x148 = param_0;
field_0x14c = param_1;
field_0x0c8 = 0.0f;
field_0x0ae = 0;
field_0x0ac = false;
field_0x0ad = false;
field_0x114 = 0;
mChannelNum = 0;
for (int i = 0; i < 6; i++) {
mChannelVolume[i] = 1.0f;
mChannelPan[i] = 0.5f;
mChannelFxMix[i] = 0.0f;
mChannelDolby[i] = 0.0f;
}
mVolume = 1.0f;
mPitch = 1.0f;
field_0x1dc[0] = 0xffff;
mCallback = i_callback;
mCallbackData = i_callbackData;
OSInitMessageQueue(&field_0x000, field_0x040, 0x10);
OSInitMessageQueue(&field_0x020, field_0x080, 4);
}
#else
void JASAramStream::init(u32 param_0, u32 param_1, StreamCallback i_callback, void* param_3) {
// NONMATCHING
}
#endif
/* 8029655C-80296618 290E9C 00BC+00 0/0 1/1 0/0 .text prepare__13JASAramStreamFli */
bool JASAramStream::prepare(s32 param_0, int param_1) {
if (!DVDFastOpen(param_0, &mDvdFileInfo)) {
return false;
}
if (!JASDriver::registerSubFrameCallback(channelProcCallback, this)) {
return false;
}
TaskData data;
data.stream = this;
data.field_0x4 = field_0x14c;
data.field_0x8 = param_1;
if (!sLoadThread->sendCmdMsg(headerLoadTask, &data, 0xc)) {
JASDriver::rejectCallback(channelProcCallback, this);
return false;
}
return true;
}
/* 80296618-8029664C 290F58 0034+00 0/0 1/1 0/0 .text start__13JASAramStreamFv */
bool JASAramStream::start() {
return OSSendMessage(&field_0x000, (OSMessage)0, OS_MESSAGE_NOBLOCK);
}
/* 8029664C-80296684 290F8C 0038+00 0/0 1/1 0/0 .text stop__13JASAramStreamFUs */
bool JASAramStream::stop(u16 param_0) {
return OSSendMessage(&field_0x000, (OSMessage)(param_0 << 0x10 | 1), OS_MESSAGE_NOBLOCK);
}
/* 80296684-802966CC 290FC4 0048+00 0/0 1/1 0/0 .text pause__13JASAramStreamFb */
bool JASAramStream::pause(bool param_0) {
OSMessage msg;
if (param_0) {
msg = (OSMessage)2;
} else {
msg = (OSMessage)3;
}
if (!OSSendMessage(&field_0x000, msg, OS_MESSAGE_NOBLOCK)) {
return false;
}
return true;
}
/* 802966CC-80296710 29100C 0044+00 0/0 1/1 0/0 .text cancel__13JASAramStreamFv */
bool JASAramStream::cancel() {
field_0x114 = 1;
return sLoadThread->sendCmdMsg(finishTask, this);
}
/* 80296710-8029673C 291050 002C+00 4/4 0/0 0/0 .text getBlockSamples__13JASAramStreamCFv
*/
u32 JASAramStream::getBlockSamples() const {
if (field_0x158 == 0) {
return (sBlockSize << 4) / 9;
}
return sBlockSize >> 1;
}
/* 8029673C-8029676C 29107C 0030+00 1/1 0/0 0/0 .text headerLoadTask__13JASAramStreamFPv
*/
void JASAramStream::headerLoadTask(void* i_data) {
TaskData* data = (TaskData*)i_data;
data->stream->headerLoad(data->field_0x4, data->field_0x8);
}
/* 8029676C-80296848 2910AC 00DC+00 1/1 0/0 0/0 .text firstLoadTask__13JASAramStreamFPv
*/
void JASAramStream::firstLoadTask(void* i_data) {
TaskData* data = (TaskData*)i_data;
JASAramStream* _this = data->stream;
if (!_this->load()) {
return;
}
if (data->field_0x8 > 0) {
data->field_0x8--;
if (data->field_0x8 == 0) {
if (!sLoadThread->sendCmdMsg(prepareFinishTask, _this)) {
struct_80451261 = true;
}
}
}
if (data->field_0x4 != 0) {
data->field_0x4--;
if (!sLoadThread->sendCmdMsg(firstLoadTask, data, 0xc)) {
struct_80451261 = true;
}
JASCriticalSection cs;
_this->field_0x118++;
}
}
/* 80296848-80296868 291188 0020+00 1/1 0/0 0/0 .text loadToAramTask__13JASAramStreamFPv
*/
void JASAramStream::loadToAramTask(void* i_this) {
((JASAramStream*)i_this)->load();
}
/* 80296868-802968C8 2911A8 0060+00 2/2 0/0 0/0 .text finishTask__13JASAramStreamFPv */
void JASAramStream::finishTask(void* i_this) {
JASAramStream* _this = (JASAramStream*)i_this;
JASDriver::rejectCallback(channelProcCallback, _this);
if (_this->mCallback != NULL) {
_this->mCallback(CB_START, _this, _this->mCallbackData);
_this->mCallback = NULL;
}
}
/* 802968C8-80296920 291208 0058+00 1/1 0/0 0/0 .text prepareFinishTask__13JASAramStreamFPv */
void JASAramStream::prepareFinishTask(void* i_this) {
JASAramStream* _this = (JASAramStream*)i_this;
OSSendMessage(&_this->field_0x020, (OSMessage)4, OS_MESSAGE_BLOCK);
if (_this->mCallback != NULL) {
_this->mCallback(CB_STOP, _this, _this->mCallbackData);
}
}
/* ############################################################################################## */
/* 8045561C-80455620 003C1C 0004+00 1/1 0/0 0/0 .sdata2 @531 */
SECTION_SDATA2 static f32 lit_531 = 127.0f;
/* 80455620-80455628 003C20 0008+00 3/3 0/0 0/0 .sdata2 @533 */
SECTION_SDATA2 static f64 lit_533 = 4503599627370496.0 /* cast u32 to float */;
/* 80296920-80296AE8 291260 01C8+00 1/1 0/0 0/0 .text headerLoad__13JASAramStreamFUli */
bool JASAramStream::headerLoad(u32 param_0, int param_1) {
if (struct_80451261) {
return false;
}
if (field_0x114 != 0) {
return false;
}
if (DVDReadPrio(&mDvdFileInfo, sReadBuffer, sizeof(Header), 0, 1) < 0) {
struct_80451261 = true;
return false;
}
Header* header = (Header*)sReadBuffer;
field_0x158 = header->format;
mChannelNum = header->channels;
field_0x164 = header->field_0x10;
mLoop = header->loop != 0;
mLoopStart = header->loop_start;
mLoopEnd = header->loop_end;
mVolume = header->field_0x28 / 127.0f;
field_0x118 = 0;
mBlock = 0;
field_0x10c = 0;
field_0x160 = (param_0 / sBlockSize) / header->channels;
mBufCount = field_0x160;
mBufCount--;
field_0x108 = mBufCount;
getBlockSamples();
if (param_1 < 0 || param_1 > field_0x108) {
param_1 = field_0x108;
}
if (field_0x114 != 0) {
return false;
}
TaskData data;
data.stream = this;
data.field_0x4 = field_0x108 - 1;
data.field_0x8 = param_1;
if (!sLoadThread->sendCmdMsg(firstLoadTask, &data, 0xc)) {
struct_80451261 = true;
return false;
}
JASCriticalSection cs;
field_0x118++;
return true;
}
/* 80296AE8-80296D74 291428 028C+00 2/2 0/0 0/0 .text load__13JASAramStreamFv */
#ifdef NONMATCHING
bool JASAramStream::load() {
{
JASCriticalSection cs;
field_0x118--;
}
if (struct_80451261) {
return false;
}
if (field_0x114 != 0) {
return false;
}
u32 loop_end_block = (mLoopEnd - 1) / getBlockSamples();
u32 loop_start_block = mLoopStart / getBlockSamples();
u32 block = mBlock;
if (block > loop_end_block) {
return false;
}
u32 size = sBlockSize * mChannelNum + sizeof(BlockHeader);
u32 offset = block * size + sizeof(Header);
if (DVDReadPrio(&mDvdFileInfo, sReadBuffer, size, offset, 1) < 0) {
struct_80451261 = true;
return false;
}
BlockHeader* bhead = (BlockHeader*)sReadBuffer;
if (field_0x114 != 0) {
return false;
}
u32 uvar2 = field_0x148 + field_0x10c * sBlockSize;
for (int i = 0; i < mChannelNum; i++) {
if (!JKRAram::mainRamToAram(sReadBuffer + bhead->field_0x4 * i + 0x20,
uvar2 + i * field_0x160 * sBlockSize,
bhead->field_0x4, EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL)) {
struct_80451261 = 1;
return false;
}
}
field_0x10c++;
if (field_0x10c >= field_0x108) {
u32 uvar8 = mBlock - 1 + field_0x108;
if (mLoop) {
for (; uvar8 > loop_end_block; uvar8 = uvar8 - loop_end_block + loop_start_block) {}
}
if (uvar8 == loop_end_block || uvar8 + 2 == loop_end_block) {
field_0x108 = field_0x160;
OSSendMessage(&field_0x020, (OSMessage)5, OS_MESSAGE_BLOCK);
} else {
field_0x108 = field_0x160 - 1;
}
for (int i = 0; i < mChannelNum; i++) {
field_0x130[i] = bhead->field_0x8[i].field_0x0;
field_0x13c[i] = bhead->field_0x8[i].field_0x2;
}
field_0x10c = 0;
}
mBlock++;
if (mBlock > loop_end_block && mLoop) {
mBlock = loop_start_block;
}
return true;
}
#else
bool JASAramStream::load() {
// NONMATCHING
}
#endif
/* 80296D74-80296D94 2916B4 0020+00 2/2 0/0 0/0 .text channelProcCallback__13JASAramStreamFPv */
s32 JASAramStream::channelProcCallback(void* i_this) {
return ((JASAramStream*)i_this)->channelProc();
}
/* ############################################################################################## */
/* 803C7670-803C76A8 -00001 0034+04 1/1 0/0 0/0 .data @613 */
SECTION_DATA static void* lit_613[13 + 1 /* padding */] = {
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x34),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x48),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
(void*)(((char*)dvdErrorCheck__13JASAramStreamFPv) + 0x40),
/* padding */
NULL,
};
/* 80296D94-80296DF0 2916D4 005C+00 2/1 0/0 0/0 .text dvdErrorCheck__13JASAramStreamFPv
*/
#ifdef NONMATCHING
s32 JASAramStream::dvdErrorCheck(void* param_0) {
switch (DVDGetDriveStatus()) {
case DVD_STATE_END:
struct_80451260 = false;
break;
case DVD_STATE_WAITING:
case DVD_STATE_COVER_CLOSED:
case DVD_STATE_NO_DISK:
case DVD_STATE_COVER_OPEN:
case DVD_STATE_WRONG_DISK:
case DVD_STATE_MOTOR_STOPPED:
case DVD_STATE_IGNORED:
case 9:
case DVD_STATE_CANCELED:
case DVD_STATE_RETRY:
case DVD_STATE_FATAL_ERROR:
struct_80451260 = true;
break;
}
return 0;
}
#else
s32 JASAramStream::dvdErrorCheck(void* param_0) {
// NONMATCHING
}
#endif
/* 80296DF0-80296E2C 291730 003C+00 1/1 0/0 0/0 .text
* channelCallback__13JASAramStreamFUlP10JASChannelPQ26JASDsp8TChannelPv */
void JASAramStream::channelCallback(u32 i_callbackType, JASChannel* i_channel,
JASDsp::TChannel* i_dspChannel, void* i_this) {
((JASAramStream*)i_this)->updateChannel(i_callbackType, i_channel, i_dspChannel);
}
/* 80296E2C-802974AC 29176C 0680+00 1/1 0/0 0/0 .text
* updateChannel__13JASAramStreamFUlP10JASChannelPQ26JASDsp8TChannel */
#ifdef NONMATCHING
// missing extra loads of field_0x0c4
void JASAramStream::updateChannel(u32 i_callbackType, JASChannel* i_channel,
JASDsp::TChannel* i_dspChannel) {
u32 block_samples = getBlockSamples();
switch (i_callbackType) {
case JASChannel::CB_START:
if (field_0x0a8 == NULL) {
field_0x0a8 = i_channel;
field_0x0b4 = block_samples * mBufCount;
field_0x0b8 = 0;
field_0x0b0 = 0;
field_0x0bc = (mLoopEnd - 1) / block_samples;
field_0x0c0 = 0;
field_0x0c4 = 0;
field_0x12c = 0;
}
break;
case JASChannel::CB_PLAY:
if (i_dspChannel->field_0x008 == 0) {
if (i_channel == field_0x0a8) {
field_0x12c = 0;
u32 uvar8 = i_dspChannel->field_0x074 + i_dspChannel->field_0x064;
u32 uvar5 = field_0x0b4;
if (uvar8 <= uvar5) {
field_0x0b8 += uvar5 - uvar8;
} else {
if (!field_0x0c0) {
field_0x0b8 += uvar5;
field_0x0b8 += block_samples * mBufCount - uvar8;
} else {
field_0x0b8 += uvar5;
field_0x0b8 += block_samples * mBufCount - uvar8
- i_dspChannel->field_0x110;
field_0x0b8 -= mLoopEnd;
field_0x0b8 += mLoopStart;
i_dspChannel->field_0x110 = 0;
field_0x120 = 0;
field_0x12c |= 2;
if (field_0x0c4 < -1) {
field_0x0c4++;
}
field_0x0c0 = false;
}
}
if (field_0x0b8 > mLoopEnd) {
struct_80451261 = true;
}
f32 fvar1 = field_0x0c4;
fvar1 *= mLoopEnd - mLoopStart;
if (field_0x0c4 < -1) {
fvar1 += field_0x0b8;
}
fvar1 /= field_0x164;
field_0x0c8 = fvar1;
if (field_0x0b8 + 400 >= mLoopEnd && !field_0x0c0) {
if (mLoop) {
u32 uvar5 = field_0x0bc + 1;
if (uvar5 >= mBufCount) {
uvar5 = 0;
}
i_dspChannel->field_0x110 = mLoopStart % block_samples
+ uvar5 * block_samples;
field_0x120 = i_dspChannel->field_0x110;
field_0x12c |= 2;
} else {
i_dspChannel->field_0x102 = 0;
field_0x128 = 0;
field_0x12c |= 8;
}
i_dspChannel->field_0x074 -= block_samples * mBufCount
- (field_0x0bc * block_samples + mLoopEnd % block_samples);
field_0x11c = i_dspChannel->field_0x074;
field_0x12c |= 1;
field_0x0bc += (mLoopEnd - 1) / block_samples - mLoopStart / block_samples + 1;
field_0x0c0 = true;
}
u32 uvar4 = i_dspChannel->field_0x070 - i_channel->field_0x104;
if (uvar4 != 0) {
uvar4--;
}
uvar5 = uvar4 / sBlockSize;
getBlockSamples();
if (uvar5 != field_0x0b0) {
bool cmp = uvar5 < field_0x0b0;
while (uvar5 != field_0x0b0) {
if (!sLoadThread->sendCmdMsg(loadToAramTask, this)) {
struct_80451261 = true;
break;
}
{
JASCriticalSection cs;
field_0x118++;
}
field_0x0b0++;
if (field_0x0b0 >= mBufCount) {
field_0x0b0 = 0;
}
}
if (cmp) {
field_0x0bc -= mBufCount;
if (field_0x0ad) {
if (!field_0x0c0) {
i_dspChannel->field_0x074 += block_samples;
field_0x11c = i_dspChannel->field_0x074;
field_0x12c |= 1;
}
i_dspChannel->field_0x114 += block_samples;
field_0x124 = i_dspChannel->field_0x114;
field_0x12c |= 4;
mBufCount = field_0x160;
field_0x0ad = false;
} else {
if (mBufCount != field_0x160 - 1) {
mBufCount = field_0x160 - 1;
i_dspChannel->field_0x114 -= block_samples;
field_0x124 = i_dspChannel->field_0x114;
field_0x12c |= 4;
if (!field_0x0c0) {
i_dspChannel->field_0x074 -= block_samples;
field_0x11c = i_dspChannel->field_0x074;
field_0x12c |= 1;
}
}
}
}
} else {
if (field_0x118 == 0 && !struct_80451260) {
field_0x0ae &= ~2;
field_0x0ae &= ~4;
}
}
field_0x0b4 = i_dspChannel->field_0x074 + i_dspChannel->field_0x064;
if (field_0x118 >= field_0x160 - 2) {
field_0x0ae |= 4;
}
} else {
if (field_0x12c & 1) {
i_dspChannel->field_0x074 = field_0x11c;
}
if (field_0x12c & 2) {
i_dspChannel->field_0x110 = field_0x120;
}
if (field_0x12c & 4) {
i_dspChannel->field_0x114 = field_0x124;
}
if (field_0x12c & 8) {
i_dspChannel->field_0x102 = field_0x128;
}
}
int i = 0;
for (; i < 6; i++) {
if (i_channel == mChannels[i]) {
break;
}
}
i_dspChannel->field_0x104 = field_0x130[i];
i_dspChannel->field_0x106 = field_0x13c[i];
}
break;
case JASChannel::CB_STOP:
bool open_channel = false;
for (int i = 0; i < 6; i++) {
if (i_channel == mChannels[i]) {
mChannels[i] = NULL;
} else if (mChannels[i] != NULL) {
open_channel = true;
}
}
if (!open_channel) {
field_0x114 = 1;
if (!sLoadThread->sendCmdMsg(finishTask, this)) {
struct_80451261 = true;
return;
}
}
break;
}
i_channel->mPauseFlag = field_0x0ae != 0;
}
#else
void JASAramStream::updateChannel(u32 param_0, JASChannel* param_1, JASDsp::TChannel* param_2) {
// NONMATCHING
}
#endif
/* 802974AC-80297658 291DEC 01AC+00 1/1 0/0 0/0 .text channelProc__13JASAramStreamFv */
#ifdef NONMATCHING
// regalloc and instruction ordering
s32 JASAramStream::channelProc() {
OSMessage msg;
while (OSReceiveMessage(&field_0x020, &msg, OS_MESSAGE_NOBLOCK)) {
switch ((u32)msg) {
case 4:
field_0x0ac = true;
break;
case 5:
field_0x0ad = true;
break;
}
}
if (!field_0x0ac) {
return 0;
}
while (OSReceiveMessage(&field_0x000, &msg, OS_MESSAGE_NOBLOCK)) {
switch ((u32)msg & 0xff) {
case 0:
channelStart();
break;
case 1:
channelStop((u32)msg >> 0x10);
break;
case 2:
field_0x0ae |= 1;
break;
case 3:
field_0x0ae &= ~1;
break;
}
}
if (struct_80451261) {
field_0x0ae |= 8;
}
if (struct_80451260) {
field_0x0ae |= 2;
}
for (int i = 0; i < mChannelNum; i++) {
JASChannel* channel = mChannels[i];
if (channel != NULL) {
JASChannelParams params;
params.mVolume = mVolume * mChannelVolume[i];
params.mPitch = mPitch;
params.field_0x8 = 0.0f;
params.mPan = mChannelPan[i];
params.mFxMix = mChannelFxMix[i];
params.mDolby = mChannelDolby[i];
channel->setParams(params);
}
}
return 0;
}
#else
s32 JASAramStream::channelProc() {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 8039B168-8039B174 0277C8 000C+00 1/0 0/0 0/0 .rodata OSC_RELEASE_TABLE */
static JASOscillator::Point const OSC_RELEASE_TABLE[2] = {
{0x0000, 0x0002, 0x0000},
{0x000F, 0x0000, 0x0000},
};
/* 8039B174-8039B190 -00001 0018+04 1/1 0/0 0/0 .rodata OSC_ENV */
static JASOscillator::Data const OSC_ENV = {0, 1.0f, NULL, OSC_RELEASE_TABLE, 1.0f, 0.0f};
/* 80431B28-80431B34 05E848 000C+00 1/1 0/0 0/0 .bss @792 */
static u8 lit_792[12];
/* 80431B34-80431B48 05E854 0010+04 1/1 4/4 0/0 .bss
* memPool_$localstatic3$getMemPool___46JASPoolAllocObject_MultiThreaded<10JASChannel>Fv */
extern u8 data_80431B34[16 + 4 /* padding */];
u8 data_80431B34[16 + 4 /* padding */];
/* 80455628-80455630 003C28 0004+04 1/1 0/0 0/0 .sdata2 one$776 */
SECTION_SDATA2 static u32 one = 1;
/* 80297658-80297870 291F98 0218+00 1/1 0/0 0/0 .text channelStart__13JASAramStreamFv */
void JASAramStream::channelStart() {
u8 r31;
switch (field_0x158) {
case 0:
r31 = 0;
break;
case 1:
r31 = 3;
break;
}
for (int i = 0; i < mChannelNum; i++) {
JASWaveInfo wave_info;
wave_info.field_0x00 = r31;
wave_info.field_0x02 = 0xff;
wave_info.field_0x10 = 0;
wave_info.field_0x14 = mBufCount * getBlockSamples();
wave_info.field_0x18 = wave_info.field_0x14;
wave_info.field_0x1c = 0;
wave_info.field_0x1e = 0;
// probably a fake match, this should be set in the JASWaveInfo constructor
wave_info.field_0x20 = &one;
JASChannel* channel = new JASChannel(channelCallback, this);
channel->setPriority(0x7f7f);
for (u32 j = 0; j < 6; j++) {
channel->setMixConfig(j, field_0x1dc[j]);
}
channel->setInitPitch(field_0x164 / JASDriver::getDacRate());
channel->setOscInit(0, &OSC_ENV);
channel->field_0xdc.field_0x4 = wave_info;
channel->field_0x104 = field_0x148 + sBlockSize * field_0x160 * i;
channel->field_0xdc.field_0x0 = 0;
channel->playForce();
mChannels[i] = channel;
}
field_0x0a8 = NULL;
}
/* 80297870-802978DC 2921B0 006C+00 1/1 0/0 0/0 .text channelStop__13JASAramStreamFUs */
void JASAramStream::channelStop(u16 i_directRelease) {
for (int i = 0; i < mChannelNum; i++) {
if (mChannels[i] != NULL) {
mChannels[i]->release(i_directRelease);
}
}
}
/* 802978DC-80297930 29221C 0054+00 1/1 5/5 0/0 .text
* __dt__38JASMemPool_MultiThreaded<10JASChannel>Fv */
extern "C" void func_802978DC(void* _this) {
// NONMATCHING
}
+117
View File
@@ -0,0 +1,117 @@
//
// Generated By: dol2asm
// Translation Unit: JASAudioReseter
//
#include "JSystem/JAudio2/JASAudioReseter.h"
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "dolphin/types.h"
//
// Types:
//
struct JASDSPChannel {
/* 8029D340 */ void drop();
/* 8029D948 */ static JASDSPChannel* getHandle(u32);
inline u32 getStatus() {return mStatus;}
u32 mStatus;
};
//
// Forward References:
//
extern "C" void __ct__15JASAudioReseterFv();
extern "C" void __dt__15JASAudioReseterFv();
extern "C" void start__15JASAudioReseterFUlb();
extern "C" void resume__15JASAudioReseterFv();
extern "C" void checkDone__15JASAudioReseterCFv();
extern "C" void calc__15JASAudioReseterFv();
extern "C" void callback__15JASAudioReseterFPv();
//
// External References:
//
extern "C" void stop__14JASAudioThreadFv();
extern "C" void drop__13JASDSPChannelFv();
extern "C" void getHandle__13JASDSPChannelFUl();
extern "C" void setDSPLevel__9JASDriverFf();
extern "C" void getDSPLevel__9JASDriverFv();
extern "C" void registerDspSyncCallback__9JASDriverFPFPv_lPv();
extern "C" void __dl__FPv();
extern "C" extern JASAudioThread* data_80450B8C;
//
// Declarations:
//
/* 8029D0B4-8029D0FC 2979F4 0048+00 0/0 1/1 0/0 .text __ct__15JASAudioReseterFv */
JASAudioReseter::JASAudioReseter() {
field_0x0 = 0;
mIsDone = true;
field_0xc = false;
mDSPLevel = JASDriver::getDSPLevel();
}
/* 8029D0FC-8029D138 297A3C 003C+00 0/0 1/1 0/0 .text __dt__15JASAudioReseterFv */
JASAudioReseter::~JASAudioReseter() {}
/* 8029D138-8029D1D4 297A78 009C+00 0/0 1/1 0/0 .text start__15JASAudioReseterFUlb */
bool JASAudioReseter::start(u32 param_0, bool param_1) {
if (mIsDone == false) {
return false;
}
field_0xc = param_1;
JASCriticalSection critical;
if (!JASDriver::registerDspSyncCallback(callback, this)) {
return false;
} else {
mDSPLevel = JASDriver::getDSPLevel();
field_0x0 = param_0;
mIsDone = false;
return true;
}
}
/* 8029D1D4-8029D1F8 297B14 0024+00 0/0 1/1 0/0 .text resume__15JASAudioReseterFv */
void JASAudioReseter::resume() {
JASDriver::setDSPLevel(mDSPLevel);
}
/* 8029D1F8-8029D200 297B38 0008+00 0/0 2/2 0/0 .text checkDone__15JASAudioReseterCFv */
s32 JASAudioReseter::checkDone() const {
return mIsDone;
}
/* 8029D200-8029D2D4 297B40 00D4+00 1/1 0/0 0/0 .text calc__15JASAudioReseterFv */
s32 JASAudioReseter::calc() {
if(field_0x0==0) {
for(size_t i = 0; i<64; i++) {
JASDSPChannel* handle = JASDSPChannel::getHandle(i);
if ((handle->getStatus()&0xFF)==0) {
handle->drop();
}
}
if(field_0xc!=false) {
JASGlobalInstance<JASAudioThread>::getInstance()->stop();//JASGlobalInstance<JASAudioThread>::sInstance->stop();
}
mIsDone = 1;
return -1;
}
field_0x0--;
u32 unk = field_0x0;
float dspLevel = JASDriver::getDSPLevel();
JASDriver::setDSPLevel(((float)unk*dspLevel)/(float)(unk+1));
return 0;
}
/* 8029D2D4-8029D2F4 297C14 0020+00 1/1 0/0 0/0 .text callback__15JASAudioReseterFPv */
s32 JASAudioReseter::callback(void* param_0) {
return ((JASAudioReseter*)param_0)->calc();
}
+221
View File
@@ -0,0 +1,221 @@
//
// Generated By: dol2asm
// Translation Unit: JASAudioThread
//
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dol2asm.h"
#include "dolphin/dsp.h"
//
// Types:
//
struct JASProbe {
/* 80290EE4 */ static void start(s32, char const*);
/* 80290F24 */ static void stop(s32);
};
/* JASMemPool_MultiThreaded<JASChannel> */
struct JASMemPool_MultiThreaded__template2 {
/* 802978DC */ void func_802978DC(void* _this);
};
struct JASDsp {
/* 8029D958 */ static void boot(void (*)(void*));
/* 8029D9C4 */ static void finishWork(u16);
/* 8029DAC8 */ static void initBuffer();
};
struct JASDSPChannel {
/* 8029D3C8 */ static void initAll();
};
//
// Forward References:
//
extern "C" void __ct__14JASAudioThreadFiiUl();
extern "C" void create__14JASAudioThreadFl();
extern "C" void stop__14JASAudioThreadFv();
extern "C" void run__14JASAudioThreadFv();
extern "C" void DMACallback__14JASAudioThreadFv();
extern "C" void DSPCallback__14JASAudioThreadFPv();
extern "C" void __dt__14JASAudioThreadFv();
extern "C" extern char const* const JASAudioThread__stringBase0;
extern "C" u8 snIntCount__14JASAudioThread[4 + 4 /* padding */];
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void newMemPool__17JASGenericMemPoolFUli();
extern "C" void start__8JASProbeFlPCc();
extern "C" void stop__8JASProbeFl();
extern "C" void func_802978DC(void* _this);
extern "C" void initAI__9JASDriverFPFv_v();
extern "C" void startDMA__9JASDriverFv();
extern "C" void stopDMA__9JASDriverFv();
extern "C" void updateDac__9JASDriverFv();
extern "C" void updateDSP__9JASDriverFv();
extern "C" void finishDSPFrame__9JASDriverFv();
extern "C" void initAll__13JASDSPChannelFv();
extern "C" void boot__6JASDspFPFPv_v();
extern "C" void finishWork__6JASDspFUs();
extern "C" void initBuffer__6JASDspFv();
extern "C" void updateDacCallback__9JASDriverFv();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __ct__9JKRThreadFP7JKRHeapUlii();
extern "C" void __dt__9JKRThreadFv();
extern "C" void __register_global_object();
extern "C" extern u8 data_80431B34[16 + 4 /* padding */];
extern "C" extern u8 struct_80451260[8];
extern "C" u8 sSystemHeap__7JKRHeap[4];
extern "C" u8 sCurrentHeap__7JKRHeap[4];
extern "C" extern u8 __OSReport_disable;
//
// Declarations:
//
/* ############################################################################################## */
/* 8029CCDC-8029CD4C 29761C 0070+00 1/1 0/0 0/0 .text __ct__14JASAudioThreadFiiUl */
JASAudioThread::JASAudioThread(int stackSize, int msgCount, u32 threadPriority)
:
JKRThread(JASDram, threadPriority, msgCount, stackSize),
JASGlobalInstance<JASAudioThread>(true)
{
sbPauseFlag = false;
OSInitThreadQueue(&sThreadQueue);
}
/* 8029CD4C-8029CDC0 29768C 0074+00 0/0 1/1 0/0 .text create__14JASAudioThreadFl */
void JASAudioThread::create(long threadPriority) {
JASAudioThread* sAudioThread = new (JASDram, 0) JASAudioThread(threadPriority, 0x10, 0x1400);
sAudioThread->setCurrentHeap(JKRGetSystemHeap());
sAudioThread->resume();
}
/* 8029CDC0-8029CDEC 297700 002C+00 0/0 1/1 0/0 .text stop__14JASAudioThreadFv */
void JASAudioThread::stop() {
jamMessageBlock((void*)2);
}
/* ############################################################################################## */
/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039B338 = "SFR_DSP";
#pragma pop
/* 80431C68-80431C78 05E988 000C+04 1/1 0/0 0/0 .bss @205 */
static u8 lit_205[12 + 4 /* padding */];
/* 804512D8-804512E0 0007D8 0004+04 1/1 2/2 0/0 .sbss snIntCount__14JASAudioThread */
volatile int JASAudioThread::snIntCount;
class Lock {
public:
Lock() {
mInterrupts = OSDisableInterrupts();
}
~Lock() {
OSRestoreInterrupts(mInterrupts);
}
private:
BOOL mInterrupts;
};
class JASChannel {
u8 filler[0x108];
};
/* 8029CDEC-8029CF68 29772C 017C+00 1/0 0/0 0/0 .text run__14JASAudioThreadFv */
// Maybe location of JASPoolAllocObject_MultiThreaded<JASChannel>
#ifdef NONMATCHING
void* JASAudioThread::run() {
OSInitFastCast();
JASDriver::initAI(DMACallback);
JASDsp::boot(DSPCallback);
JASDsp::initBuffer();
JASDSPChannel::initAll();
JASPoolAllocObject_MultiThreaded<JASChannel>::newMemPool(0x48);
JASDriver::startDMA();
while (true) {
OSMessage msg = waitMessageBlock();
switch ((int)msg) {
case AUDIOMSG_DMA:
if (sbPauseFlag) {
JASDriver::stopDMA();
OSSleepThread(&sThreadQueue);
}
JASDriver::updateDac();
JASDriver::updateDacCallback();
break;
case AUDIOMSG_DSP:
snIntCount--;
if (snIntCount == 0) {
JASProbe::stop(7);
JASDriver::finishDSPFrame();
} else {
JASProbe::start(2, "SFR_DSP");
JASDriver::updateDSP();
JASProbe::stop(2);
}
break;
case AUDIOMSG_STOP:
JASDriver::stopDMA();
OSExitThread(NULL);
break;
}
}
}
#else
void* JASAudioThread::run() {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
#pragma push
#pragma force_active on
SECTION_DEAD static char const* const stringBase_8039B340 = "UPDATE-DAC";
/* @stringBase0 padding */
SECTION_DEAD static char const* const pad_8039B34B = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
#pragma pop
/* 8029CF68-8029CFBC 2978A8 0054+00 1/1 0/0 0/0 .text DMACallback__14JASAudioThreadFv */
void JASAudioThread::DMACallback() {
JASAudioThread* thread = getInstance();
JASProbe::stop(4);
JASProbe::start(4, "UPDATE-DAC");
thread->sendMessage((void*)AUDIOMSG_DMA);
}
/* 8029CFBC-8029D028 2978FC 006C+00 1/1 0/0 0/0 .text DSPCallback__14JASAudioThreadFPv */
void JASAudioThread::DSPCallback(void*) {
JASAudioThread* thread = getInstance();
while (DSPCheckMailFromDSP() == 0) { }
u32 mail = DSPReadMailFromDSP();
if (mail >> 0x10 == 0xF355) {
if ((mail & 0xFF00) == 0xFF00) {
thread->sendMessage((void*)AUDIOMSG_DSP);
} else {
JASDsp::finishWork(mail);
}
}
}
/* 8039B338-8039B338 027998 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+260
View File
@@ -0,0 +1,260 @@
//
// Generated By: dol2asm
// Translation Unit: JASBNKParser
//
#include "JSystem/JAudio2/JASBNKParser.h"
#include "dol2asm.h"
//
// Types:
//
struct JKRHeap {
/* 802CE72C */ void getFreeSize();
};
template <typename A0>
struct JASMemPool_MultiThreaded {};
/* JASMemPool_MultiThreaded<JASChannel> */
struct JASMemPool_MultiThreaded__template2 {
/* 802978DC */ void func_802978DC(void* _this);
};
struct JASInst {};
struct JASGenericMemPool {
/* 80290848 */ JASGenericMemPool();
};
struct JASDrumSet {
struct TPerc {
/* 802984C4 */ TPerc();
};
/* 802982EC */ JASDrumSet();
/* 80298370 */ void newPercArray(u8, JKRHeap*);
/* 802984B4 */ void setPerc(int, JASDrumSet::TPerc*);
};
struct JASCalc {
/* 8028F354 */ void bcopy(void const*, void*, u32);
};
struct JASBasicInst {
/* 80298014 */ JASBasicInst();
/* 8029819C */ void setKeyRegionCount(u32, JKRHeap*);
/* 8029821C */ void setOsc(int, JASOscillator::Data const*);
/* 8029822C */ void getKeyRegion(int);
};
struct JASBasicBank {
/* 80297D78 */ JASBasicBank();
/* 80297DA4 */ void newInstTable(u8, JKRHeap*);
/* 80297E68 */ void setInst(int, JASInst*);
/* 80297E80 */ void getInst(int) const;
};
//
// Forward References:
//
extern "C" void createBank__12JASBNKParserFPCvP7JKRHeap();
extern "C" void createBasicBank__12JASBNKParserFPCvP7JKRHeap();
extern "C" void findChunk__Q212JASBNKParser4Ver1FPCvUl();
extern "C" void createBasicBank__Q212JASBNKParser4Ver1FPCvP7JKRHeap();
extern "C" void createBasicBank__Q212JASBNKParser4Ver0FPCvP7JKRHeap();
extern "C" void
findOscPtr__Q212JASBNKParser4Ver0FP12JASBasicBankPCQ312JASBNKParser4Ver07THeaderPCQ312JASBNKParser4Ver04TOsc();
extern "C" void getOscTableEndPtr__Q212JASBNKParser4Ver0FPCQ213JASOscillator5Point();
extern "C" void func_80299FA0(void* _this, void const*, u32);
extern "C" void func_80299FB8(void* _this, void const*, u32);
extern "C" void func_80299FD0(void* _this, void const*, u32);
extern "C" void func_80299FE8(void* _this, void const*, u32);
extern "C" void func_8029A000(void* _this, void const*, u32);
extern "C" void func_8029A018(void* _this, void const*, u32);
extern "C" void func_8029A030(void* _this, void const*, u32);
extern "C" void __sinit_JASBNKParser_cpp();
extern "C" u8 sUsedHeapSize__12JASBNKParser[4];
//
// External References:
//
extern "C" void bcopy__7JASCalcFPCvPvUl();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void func_802978DC(void* _this);
extern "C" void __ct__12JASBasicBankFv();
extern "C" void newInstTable__12JASBasicBankFUcP7JKRHeap();
extern "C" void setInst__12JASBasicBankFiP7JASInst();
extern "C" void getInst__12JASBasicBankCFi();
extern "C" void __ct__12JASBasicInstFv();
extern "C" void setKeyRegionCount__12JASBasicInstFUlP7JKRHeap();
extern "C" void setOsc__12JASBasicInstFiPCQ213JASOscillator4Data();
extern "C" void getKeyRegion__12JASBasicInstFi();
extern "C" void __ct__10JASDrumSetFv();
extern "C" void newPercArray__10JASDrumSetFUcP7JKRHeap();
extern "C" void setPerc__10JASDrumSetFiPQ210JASDrumSet5TPerc();
extern "C" void __ct__Q210JASDrumSet5TPercFv();
extern "C" void setRelease__Q210JASDrumSet5TPercFUl();
extern "C" void getFreeSize__7JKRHeapFv();
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __register_global_object();
extern "C" void _savegpr_17();
extern "C" void _savegpr_19();
extern "C" void _savegpr_23();
extern "C" void _savegpr_28();
extern "C" void _restgpr_17();
extern "C" void _restgpr_19();
extern "C" void _restgpr_23();
extern "C" void _restgpr_28();
extern "C" extern u8 JASDram[4];
//
// Declarations:
//
/* 80299538-80299558 293E78 0020+00 0/0 1/1 0/0 .text createBank__12JASBNKParserFPCvP7JKRHeap */
JASBank* JASBNKParser::createBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80451288-8045128C 000788 0004+00 1/1 0/0 0/0 .sbss sUsedHeapSize__12JASBNKParser */
u8 JASBNKParser::sUsedHeapSize[4];
/* 80299558-80299600 293E98 00A8+00 1/1 0/0 0/0 .text createBasicBank__12JASBNKParserFPCvP7JKRHeap
*/
JASBasicBank* JASBNKParser::createBasicBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* 80299600-8029963C 293F40 003C+00 1/1 0/0 0/0 .text findChunk__Q212JASBNKParser4Ver1FPCvUl */
void JASBNKParser::Ver1::findChunk(void const* param_0, u32 param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80455658-80455660 003C58 0004+04 2/2 0/0 0/0 .sdata2 @835 */
SECTION_SDATA2 static f32 lit_835[1 + 1 /* padding */] = {
127.0f,
/* padding */
0.0f,
};
/* 80455660-80455668 003C60 0008+00 1/1 0/0 0/0 .sdata2 @838 */
SECTION_SDATA2 static f64 lit_838 = 4503599627370496.0 /* cast u32 to float */;
/* 8029963C-80299A3C 293F7C 0400+00 1/1 0/0 0/0 .text
* createBasicBank__Q212JASBNKParser4Ver1FPCvP7JKRHeap */
void JASBNKParser::Ver1::createBasicBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80455668-80455670 003C68 0008+00 1/1 0/0 0/0 .sdata2 @990 */
SECTION_SDATA2 static f64 lit_990 = 4503601774854144.0 /* cast s32 to float */;
/* 80299A3C-80299E68 29437C 042C+00 1/1 0/0 0/0 .text
* createBasicBank__Q212JASBNKParser4Ver0FPCvP7JKRHeap */
void JASBNKParser::Ver0::createBasicBank(void const* param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80455670-80455674 003C70 0004+00 1/1 0/0 0/0 .sdata2 @1045 */
SECTION_SDATA2 static f32 lit_1045 = 1.0f;
/* 80455674-80455678 003C74 0004+00 1/1 0/0 0/0 .sdata2 @1046 */
SECTION_SDATA2 static u8 lit_1046[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455678-80455680 003C78 0004+04 1/1 0/0 0/0 .sdata2 @1047 */
SECTION_SDATA2 static f32 lit_1047[1 + 1 /* padding */] = {
0.5f,
/* padding */
0.0f,
};
/* 80299E68-80299F8C 2947A8 0124+00 1/1 0/0 0/0 .text
* findOscPtr__Q212JASBNKParser4Ver0FP12JASBasicBankPCQ312JASBNKParser4Ver07THeaderPCQ312JASBNKParser4Ver04TOsc
*/
void JASBNKParser::Ver0::findOscPtr(JASBasicBank* param_0,
JASBNKParser::Ver0::THeader const* param_1,
JASBNKParser::Ver0::TOsc const* param_2) {
// NONMATCHING
}
/* 80299F8C-80299FA0 2948CC 0014+00 1/1 0/0 0/0 .text
* getOscTableEndPtr__Q212JASBNKParser4Ver0FPCQ213JASOscillator5Point */
void JASBNKParser::Ver0::getOscTableEndPtr(JASOscillator::Point const* param_0) {
// NONMATCHING
}
/* 80299FA0-80299FB8 2948E0 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver05TPmap>__FPCvUl */
extern "C" void func_80299FA0(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 80299FB8-80299FD0 2948F8 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver05TPerc>__FPCvUl */
extern "C" void func_80299FB8(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 80299FD0-80299FE8 294910 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver05TVmap>__FPCvUl */
extern "C" void func_80299FD0(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 80299FE8-8029A000 294928 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver07TKeymap>__FPCvUl */
extern "C" void func_80299FE8(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 8029A000-8029A018 294940 0018+00 1/1 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q213JASOscillator5Point>__FPCvUl */
extern "C" void func_8029A000(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 8029A018-8029A030 294958 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver04TOsc>__FPCvUl */
extern "C" void func_8029A018(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* 8029A030-8029A048 294970 0018+00 2/2 0/0 0/0 .text
* JSUConvertOffsetToPtr<Q312JASBNKParser4Ver05TInst>__FPCvUl */
extern "C" void func_8029A030(void* _this, void const* param_0, u32 param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80431B70-80431B7C 05E890 000C+00 1/1 0/0 0/0 .bss @1065 */
static u8 lit_1065[12];
/* 80431B7C-80431B90 05E89C 0010+04 1/1 0/0 0/0 .bss
* memPool___46JASPoolAllocObject_MultiThreaded<10JASChannel> */
static u8 data_80431B7C[16 + 4 /* padding */];
/* 8045128C-80451290 00078C 0004+00 1/1 0/0 0/0 .sbss None */
static u8 data_8045128C[4];
/* 8029A048-8029A0A0 294988 0058+00 0/0 1/0 0/0 .text __sinit_JASBNKParser_cpp */
void __sinit_JASBNKParser_cpp() {
// NONMATCHING
}
#pragma push
#pragma force_active on
REGISTER_CTORS(0x8029A048, __sinit_JASBNKParser_cpp);
#pragma pop
+177
View File
@@ -0,0 +1,177 @@
//
// Generated By: dol2asm
// Translation Unit: JASBank
//
#include "JSystem/JAudio2/JASBank.h"
#include "JSystem/JAudio2/JASChannel.h"
#include "dol2asm.h"
//
// Types:
//
//
// Forward References:
//
extern "C" void noteOn__7JASBankFPC7JASBankiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void noteOnOsc__7JASBankFiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
//
// External References:
//
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void func_802978DC(void* _this);
extern "C" void __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void play__10JASChannelFv();
extern "C" void setOscInit__10JASChannelFUlPCQ213JASOscillator4Data();
extern "C" void getDacRate__9JASDriverFv();
extern "C" void __register_global_object();
extern "C" void _savegpr_23();
extern "C" void _savegpr_25();
extern "C" void _restgpr_23();
extern "C" void _restgpr_25();
extern "C" extern u8 data_80431B34[16 + 4 /* padding */];
extern "C" extern u8 struct_80451260[8];
//
// Declarations:
//
/* ############################################################################################## */
/* 80431B48-80431B58 05E868 000C+04 2/2 0/0 0/0 .bss @156 */
static u8 lit_156[12 + 4 /* padding */];
/* 80455630-80455634 003C30 0004+00 1/1 0/0 0/0 .sdata2 @248 */
SECTION_SDATA2 static f32 lit_248 = 1.0f;
/* 80455634-80455638 003C34 0004+00 1/1 0/0 0/0 .sdata2 @249 */
SECTION_SDATA2 static u8 lit_249[4] = {
0x00,
0x00,
0x00,
0x00,
};
/* 80455638-8045563C 003C38 0004+00 1/1 0/0 0/0 .sdata2 @250 */
SECTION_SDATA2 static f32 lit_250 = 0.5f;
/* 80297930-80297C40 292270 0310+00 0/0 1/1 0/0 .text
* noteOn__7JASBankFPC7JASBankiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv */
// vtables for JASWaveBank, JASWaveHandle
#ifdef NONMATCHING
JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8 param_3, u16 param_4,
void (*param_5)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_6) {
if (param_1 >= 0xf0) {
return noteOnOsc(param_1 - 0xf0, param_2, param_3, param_4, param_5, param_6);
}
if (!param_0) {
return NULL;
}
JASInstParam stack_60;
if (!param_0->getInstParam(param_1, param_2, param_3, &stack_60)) {
return NULL;
}
JASWaveBank* waveBank = param_0->getWaveBank();
if (!waveBank) {
return NULL;
}
JASWaveHandle* waveHandle = waveBank->getWaveHandle(stack_60.field_0x1a);
if (!waveHandle) {
return NULL;
}
const JASWaveInfo* waveInfo = waveHandle->getWaveInfo();
if (!waveInfo) {
return NULL;
}
int wavePtr = waveHandle->getWavePtr();
if (!wavePtr) {
return NULL;
}
JASChannel* channel = new JASChannel(param_5, param_6);
if (!channel) {
return NULL;
}
channel->setPriority(param_4);
channel->field_0xdc.field_0x4 = *waveInfo;
channel->field_0x104 = wavePtr;
channel->field_0xdc.field_0x0 = stack_60.field_0x1c;
channel->setBankDisposeID(param_0);
channel->setInitPitch(stack_60.mPitch * (waveInfo->field_0x04 / JASDriver::getDacRate()));
if (stack_60.field_0x1e == 0) {
channel->setKey(param_2 - waveInfo->field_0x01);
}
channel->setInitVolume(stack_60.mVolume);
channel->setVelocity(param_3);
channel->setInitPan(stack_60.mPan);
channel->setInitFxmix(stack_60.mFxMix);
channel->setInitDolby(stack_60.mDolby);
for (u32 i = 0; i < stack_60.field_0x1d; i++) {
channel->setOscInit(i, stack_60.field_0x14[i]);
}
channel->setDirectRelease(stack_60.field_0x18);
if (!channel->play()) {
return NULL;
}
return channel;
}
#else
JASChannel* JASBank::noteOn(JASBank const* param_0, int param_1, u8 param_2, u8 param_3, u16 param_4,
void (*param_5)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_6) {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 8039B190-8039B19C 0277F0 000C+00 1/0 0/0 0/0 .rodata OSC_RELEASE_TABLE$260 */
SECTION_RODATA static JASOscillator::Point const OSC_RELEASE_TABLE[2] = {
{0x0001, 0x000A, 0x0000},
{0x000F, 0x0000, 0x0000},
};
COMPILER_STRIP_GATE(0x8039B190, &OSC_RELEASE_TABLE);
/* 8039B19C-8039B1B8 -00001 0018+04 1/1 0/0 0/0 .rodata OSC_ENV$261 */
SECTION_RODATA static const JASOscillator::Data OSC_ENV = {
0, 1.0f, NULL, OSC_RELEASE_TABLE, 1.0f, 0.0f,
};
COMPILER_STRIP_GATE(0x8039B19C, &OSC_ENV);
/* 8045563C-80455640 003C3C 0004+00 1/1 0/0 0/0 .sdata2 @290 */
SECTION_SDATA2 static f32 lit_290 = 16736.015625f;
/* 80297C40-80297D78 292580 0138+00 1/1 0/0 0/0 .text
* noteOnOsc__7JASBankFiUcUcUsPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv */
// wild ~JASMemPool_MultiThreaded<JASChannel> destructor appeared!
#ifdef NONMATCHING
JASChannel* JASBank::noteOnOsc(int param_0, u8 param_1, u8 param_2, u16 param_3,
void (*param_4)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_5) {
JASChannel* channel = new JASChannel(param_4, param_5);
if (!channel) {
return NULL;
}
channel->setPriority(param_3);
channel->field_0x104 = param_0;
channel->field_0xdc.field_0x0 = 2;
channel->setInitPitch(16736.02f / JASDriver::getDacRate());
channel->setKey(param_1 - channel->field_0xdc.field_0x4.field_0x01);
channel->setVelocity(param_2);
channel->setOscInit(0, &OSC_ENV);
if (!channel->play()) {
return NULL;
}
return channel;
}
#else
JASChannel* JASBank::noteOnOsc(int param_0, u8 param_1, u8 param_2, u16 param_3,
void (*param_4)(u32, JASChannel*, JASDsp::TChannel*, void*),
void* param_5) {
// NONMATCHING
}
#endif
+120
View File
@@ -0,0 +1,120 @@
//
// Generated By: dol2asm
// Translation Unit: JASBasicBank
//
#include "JSystem/JAudio2/JASBasicBank.h"
#include "dol2asm.h"
//
// Types:
//
struct JKRHeap {};
struct JASInstParam {};
struct JASInst {};
struct JASCalc {
/* 8028F480 */ void bzero(void*, u32);
};
struct JASBasicBank {
/* 80297D78 */ JASBasicBank();
/* 80297DA4 */ void newInstTable(u8, JKRHeap*);
/* 80297E00 */ void getInstParam(int, int, int, JASInstParam*) const;
/* 80297E68 */ void setInst(int, JASInst*);
/* 80297E80 */ void getInst(int) const;
/* 80297F0C */ ~JASBasicBank();
/* 80297F68 */ void getType() const;
};
struct JASBank {
/* 80297EC4 */ ~JASBank();
};
//
// Forward References:
//
extern "C" void __ct__12JASBasicBankFv();
extern "C" void newInstTable__12JASBasicBankFUcP7JKRHeap();
extern "C" void getInstParam__12JASBasicBankCFiiiP12JASInstParam();
extern "C" void setInst__12JASBasicBankFiP7JASInst();
extern "C" void getInst__12JASBasicBankCFi();
extern "C" void __dt__7JASBankFv();
extern "C" void __dt__12JASBasicBankFv();
extern "C" void getType__12JASBasicBankCFv();
//
// External References:
//
extern "C" void bzero__7JASCalcFPvUl();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
//
// Declarations:
//
/* ############################################################################################## */
/* 803C76A8-803C76BC 0247C8 0014+00 2/2 0/0 0/0 .data __vt__12JASBasicBank */
SECTION_DATA extern void* __vt__12JASBasicBank[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__12JASBasicBankFv,
(void*)getInstParam__12JASBasicBankCFiiiP12JASInstParam,
(void*)getType__12JASBasicBankCFv,
};
/* 803C76BC-803C76D0 0247DC 0014+00 3/3 2/2 0/0 .data __vt__7JASBank */
SECTION_DATA extern void* __vt__7JASBank[5] = {
(void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__7JASBankFv, (void*)NULL, (void*)NULL,
};
/* 80297D78-80297DA4 2926B8 002C+00 0/0 2/2 0/0 .text __ct__12JASBasicBankFv */
JASBasicBank::JASBasicBank() {
// NONMATCHING
}
/* 80297DA4-80297E00 2926E4 005C+00 0/0 2/2 0/0 .text newInstTable__12JASBasicBankFUcP7JKRHeap */
void JASBasicBank::newInstTable(u8 param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* 80297E00-80297E68 292740 0068+00 1/0 0/0 0/0 .text
* getInstParam__12JASBasicBankCFiiiP12JASInstParam */
void JASBasicBank::getInstParam(int param_0, int param_1, int param_2,
JASInstParam* param_3) const {
// NONMATCHING
}
/* 80297E68-80297E80 2927A8 0018+00 0/0 2/2 0/0 .text setInst__12JASBasicBankFiP7JASInst
*/
void JASBasicBank::setInst(int param_0, JASInst* param_1) {
// NONMATCHING
}
/* 80297E80-80297EC4 2927C0 0044+00 1/1 1/1 0/0 .text getInst__12JASBasicBankCFi */
void JASBasicBank::getInst(int param_0) const {
// NONMATCHING
}
/* 80297EC4-80297F0C 292804 0048+00 1/0 0/0 0/0 .text __dt__7JASBankFv */
JASBank::~JASBank() {
// NONMATCHING
}
/* 80297F0C-80297F68 29284C 005C+00 1/0 0/0 0/0 .text __dt__12JASBasicBankFv */
JASBasicBank::~JASBasicBank() {
// NONMATCHING
}
/* 80297F68-80297F74 2928A8 000C+00 1/0 0/0 0/0 .text getType__12JASBasicBankCFv */
void JASBasicBank::getType() const {
// NONMATCHING
}
+76
View File
@@ -0,0 +1,76 @@
//
// JASBasicInst
//
#include "JSystem/JAudio2/JASBasicInst.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JKernel/JKRHeap.h"
/* 80298014-8029807C 292954 0068+00 0/0 2/2 0/0 .text __ct__12JASBasicInstFv */
JASBasicInst::JASBasicInst() {
mVolume = 1.0;
mPitch = 1.0;
mKeymapCount = 0;
mKeymap = NULL;
JASCalc::bzero(field_0xc, sizeof(field_0xc));
}
/* 8029807C-802980F8 2929BC 007C+00 1/0 0/0 0/0 .text __dt__12JASBasicInstFv */
JASBasicInst::~JASBasicInst() {
delete[] mKeymap;
}
/* 802980F8-8029819C 292A38 00A4+00 1/0 0/0 0/0 .text getParam__12JASBasicInstCFiiP12JASInstParam
*/
bool JASBasicInst::getParam(int param_0, int param_1, JASInstParam* param_2) const {
param_2->field_0x1c = 0;
param_2->field_0x1e = 0;
param_2->field_0x14 = (JASOscillator::Data**)&field_0xc;
param_2->field_0x1d = 2;
param_2->mVolume = mVolume;
param_2->mPitch = mPitch;
TKeymap* keyMap = NULL;
for (int i = 0; i < mKeymapCount; i++) {
if (param_0 <= mKeymap[i].field_0x0) {
keyMap = &mKeymap[i];
break;
}
}
if (keyMap == NULL) {
return false;
}
param_2->mVolume *= keyMap->field_0x8;
param_2->mPitch *= keyMap->field_0xc;
param_2->field_0x1a = keyMap->field_0x4;
return true;
}
/* 8029819C-8029821C 292ADC 0080+00 0/0 2/2 0/0 .text
* setKeyRegionCount__12JASBasicInstFUlP7JKRHeap */
void JASBasicInst::setKeyRegionCount(u32 count, JKRHeap* param_1) {
delete [] mKeymap;
mKeymap = new (param_1, 0) TKeymap[count];
mKeymapCount = count;
}
/* 8029821C-8029822C 292B5C 0010+00 0/0 2/2 0/0 .text
* setOsc__12JASBasicInstFiPCQ213JASOscillator4Data */
void JASBasicInst::setOsc(int param_0, JASOscillator::Data const* param_1) {
field_0xc[param_0] = param_1;
}
/* 8029822C-80298250 292B6C 0024+00 0/0 2/2 0/0 .text getKeyRegion__12JASBasicInstFi */
JASBasicInst::TKeymap* JASBasicInst::getKeyRegion(int param_0) {
if (param_0 >= mKeymapCount) {
return NULL;
}
return mKeymap + param_0;
}
/* 80298250-8029828C 292B90 003C+00 2/2 0/0 0/0 .text __dt__Q212JASBasicInst7TKeymapFv */
JASBasicInst::TKeymap::~TKeymap() {
}
+361
View File
@@ -0,0 +1,361 @@
//
// Generated By: dol2asm
// Translation Unit: JASBasicWaveBank
//
#include "JSystem/JAudio2/JASBasicWaveBank.h"
#include "JSystem/JAudio2/JASMutex.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JUtility/JUTAssert.h"
//
// Types:
//
//
// Forward References:
//
extern "C" void __ct__16JASBasicWaveBankFv();
extern "C" void __dt__16JASBasicWaveBankFv();
extern "C" void __dt__Q216JASBasicWaveBank11TWaveHandleFv();
extern "C" void getWaveGroup__16JASBasicWaveBankFUl();
extern "C" void setGroupCount__16JASBasicWaveBankFUlP7JKRHeap();
extern "C" void setWaveTableSize__16JASBasicWaveBankFUlP7JKRHeap();
extern "C" void incWaveTable__16JASBasicWaveBankFPCQ216JASBasicWaveBank10TWaveGroup();
extern "C" void decWaveTable__16JASBasicWaveBankFPCQ216JASBasicWaveBank10TWaveGroup();
extern "C" void getWaveHandle__16JASBasicWaveBankCFUl();
extern "C" void
setWaveInfo__16JASBasicWaveBankFPQ216JASBasicWaveBank10TWaveGroupiUsRC11JASWaveInfo();
extern "C" void __ct__Q216JASBasicWaveBank10TWaveGroupFv();
extern "C" void __dt__Q216JASBasicWaveBank10TWaveGroupFv();
extern "C" void setWaveCount__Q216JASBasicWaveBank10TWaveGroupFUlP7JKRHeap();
extern "C" void onLoadDone__Q216JASBasicWaveBank10TWaveGroupFv();
extern "C" void onEraseDone__Q216JASBasicWaveBank10TWaveGroupFv();
extern "C" void getWaveID__Q216JASBasicWaveBank10TWaveGroupCFi();
extern "C" void getWavePtr__Q216JASBasicWaveBank11TWaveHandleCFv();
extern "C" void __dt__11JASWaveBankFv();
extern "C" void __dt__13JASWaveHandleFv();
extern "C" void __ct__Q216JASBasicWaveBank11TWaveHandleFv();
extern "C" void __ct__Q216JASBasicWaveBank14TGroupWaveInfoFv();
extern "C" void getWaveInfo__Q216JASBasicWaveBank11TWaveHandleCFv();
extern "C" void getWaveArc__16JASBasicWaveBankFUl();
extern "C" void getArcCount__16JASBasicWaveBankCFv();
extern "C" u8 mNoLoad__16JASBasicWaveBank[4 + 4 /* padding */];
//
// External References:
//
extern "C" void __ct__10JASWaveArcFv();
extern "C" void __dt__10JASWaveArcFv();
extern "C" void onDispose__10JASWaveArcFv();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __dla__FPv();
extern "C" void __destroy_new_array();
extern "C" void __construct_new_array();
extern "C" void _savegpr_25();
extern "C" void _savegpr_26();
extern "C" void _savegpr_29();
extern "C" void _restgpr_25();
extern "C" void _restgpr_26();
extern "C" void _restgpr_29();
extern "C" u32 one__11JASWaveInfo[1 + 1 /* padding */];
//
// Declarations:
//
/* ############################################################################################## */
/* 803C7728-803C773C 024848 0014+00 2/2 0/0 0/0 .data __vt__Q216JASBasicWaveBank11TWaveHandle */
SECTION_DATA extern void* __vt__Q216JASBasicWaveBank11TWaveHandle[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__Q216JASBasicWaveBank11TWaveHandleFv,
(void*)getWaveInfo__Q216JASBasicWaveBank11TWaveHandleCFv,
(void*)getWavePtr__Q216JASBasicWaveBank11TWaveHandleCFv,
};
/* 803C773C-803C7754 02485C 0018+00 2/2 0/0 0/0 .data __vt__Q216JASBasicWaveBank10TWaveGroup */
SECTION_DATA extern void* __vt__Q216JASBasicWaveBank10TWaveGroup[6] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__Q216JASBasicWaveBank10TWaveGroupFv,
(void*)onDispose__10JASWaveArcFv,
(void*)onLoadDone__Q216JASBasicWaveBank10TWaveGroupFv,
(void*)onEraseDone__Q216JASBasicWaveBank10TWaveGroupFv,
};
/* 803C7754-803C7768 024874 0014+00 3/3 2/2 0/0 .data __vt__13JASWaveHandle */
SECTION_DATA extern void* __vt__13JASWaveHandle[5] = {
(void*)NULL /* RTTI */, (void*)NULL, (void*)__dt__13JASWaveHandleFv, (void*)NULL, (void*)NULL,
};
/* 803C7768-803C7780 024888 0018+00 2/2 0/0 0/0 .data __vt__16JASBasicWaveBank */
SECTION_DATA extern void* __vt__16JASBasicWaveBank[6] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__16JASBasicWaveBankFv,
(void*)getWaveHandle__16JASBasicWaveBankCFUl,
(void*)getWaveArc__16JASBasicWaveBankFUl,
(void*)getArcCount__16JASBasicWaveBankCFv,
};
/* 803C7780-803C7798 0248A0 0018+00 3/3 2/2 0/0 .data __vt__11JASWaveBank */
SECTION_DATA extern void* __vt__11JASWaveBank[6] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__11JASWaveBankFv,
(void*)NULL,
(void*)NULL,
(void*)NULL,
};
/* 802984F8-80298558 292E38 0060+00 0/0 1/1 0/0 .text __ct__16JASBasicWaveBankFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::JASBasicWaveBank() {
mWaveTable = NULL;
mWaveGroupArray = NULL;
mHandleCount = 0;
mGroupCount = 0;
OSInitMutex(&field_0x4);
}
#else
JASBasicWaveBank::JASBasicWaveBank() {
// NONMATCHING
}
#endif
/* 80298558-802985E4 292E98 008C+00 1/0 0/0 0/0 .text __dt__16JASBasicWaveBankFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::~JASBasicWaveBank() {
delete[] mWaveTable;
delete[] mWaveGroupArray;
}
#else
JASBasicWaveBank::~JASBasicWaveBank() {
// NONMATCHING
}
#endif
/* 802985E4-80298640 292F24 005C+00 3/2 0/0 0/0 .text __dt__Q216JASBasicWaveBank11TWaveHandleFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::TWaveHandle::~TWaveHandle() {}
#else
JASBasicWaveBank::TWaveHandle::~TWaveHandle() {
// NONMATCHING
}
#endif
/* 80298640-80298664 292F80 0024+00 1/1 1/1 0/0 .text getWaveGroup__16JASBasicWaveBankFUl
*/
JASBasicWaveBank::TWaveGroup* JASBasicWaveBank::getWaveGroup(u32 param_0) {
if (param_0 >= mGroupCount) {
return NULL;
}
return mWaveGroupArray + param_0;
}
/* 80298664-80298710 292FA4 00AC+00 0/0 1/1 0/0 .text
* setGroupCount__16JASBasicWaveBankFUlP7JKRHeap */
void JASBasicWaveBank::setGroupCount(u32 param_0, JKRHeap* param_1) {
delete[] mWaveGroupArray;
mGroupCount = param_0;
mWaveGroupArray = new(param_1, 0) TWaveGroup[param_0];
JUT_ASSERT(62, mWaveGroupArray != 0);
for (int i = 0; i < mGroupCount; i++) {
mWaveGroupArray[i].mBank = this;
}
}
/* 80298710-80298790 293050 0080+00 0/0 1/1 0/0 .text
* setWaveTableSize__16JASBasicWaveBankFUlP7JKRHeap */
void JASBasicWaveBank::setWaveTableSize(u32 param_0, JKRHeap* param_1) {
delete[] mWaveTable;
mWaveTable = new(param_1, 0) TWaveHandle[param_0];
JUT_ASSERT(92, mWaveTable != 0);
mHandleCount = param_0;
}
/* 80298790-8029883C 2930D0 00AC+00 1/1 0/0 0/0 .text
* incWaveTable__16JASBasicWaveBankFPCQ216JASBasicWaveBank10TWaveGroup */
// instruction order
#ifdef NONMATCHING
void JASBasicWaveBank::incWaveTable(JASBasicWaveBank::TWaveGroup const* param_0) {
JASMutexLock lock(&field_0x4);
for (u32 i = 0; i < param_0->getWaveCount(); i++) {
TWaveHandle* handle = mWaveTable + param_0->getWaveID(i);
if (!handle->mHeap) {
handle->mHeap = &param_0->base.mHeap;
handle->field_0x4.field_0x20 = &param_0->base._48;
handle->field_0x4.field_0x08 = param_0->mCtrlWaveArray[i].field_0x4;
}
}
}
#else
void JASBasicWaveBank::incWaveTable(JASBasicWaveBank::TWaveGroup const* param_0) {
// NONMATCHING
}
#endif
/* ############################################################################################## */
/* 80451278-80451280 000778 0004+04 2/2 0/0 0/0 .sbss mNoLoad__16JASBasicWaveBank */
u32 JASBasicWaveBank::mNoLoad;
/* 8029883C-802988DC 29317C 00A0+00 1/1 0/0 0/0 .text
* decWaveTable__16JASBasicWaveBankFPCQ216JASBasicWaveBank10TWaveGroup */
void JASBasicWaveBank::decWaveTable(JASBasicWaveBank::TWaveGroup const* param_0) {
JASMutexLock lock(&field_0x4);
for (u32 i = 0; i < param_0->getWaveCount(); i++) {
TWaveHandle* handle = mWaveTable + param_0->getWaveID(i);
if (handle->mHeap == &param_0->base.mHeap) {
handle->mHeap = NULL;
handle->field_0x4.field_0x20 = &mNoLoad;
handle->field_0x4.field_0x08 = -1;
}
}
}
/* 802988DC-80298910 29321C 0034+00 1/0 0/0 0/0 .text getWaveHandle__16JASBasicWaveBankCFUl */
JASWaveHandle* JASBasicWaveBank::getWaveHandle(u32 param_0) const {
if (param_0 >= mHandleCount) {
return NULL;
}
if (!mWaveTable[param_0].mHeap) {
return NULL;
}
return mWaveTable + param_0;
}
/* 80298910-802989C0 293250 00B0+00 0/0 1/1 0/0 .text
* setWaveInfo__16JASBasicWaveBankFPQ216JASBasicWaveBank10TWaveGroupiUsRC11JASWaveInfo */
void JASBasicWaveBank::setWaveInfo(JASBasicWaveBank::TWaveGroup* wgrp, int index,
u16 param_2, JASWaveInfo const& param_3) {
JUT_ASSERT(204, wgrp);
JUT_ASSERT(205, index < wgrp->mWaveCount);
JUT_ASSERT(206, index >= 0);
mWaveTable[param_2].field_0x4 = param_3;
mWaveTable[param_2].field_0x4.field_0x20 = &mNoLoad;
mWaveTable[param_2].field_0x4.field_0x08 = -1;
wgrp->mCtrlWaveArray[index].field_0x0 = param_2;
wgrp->mCtrlWaveArray[index].field_0x4 = param_3.field_0x08;
}
/* 802989C0-80298A0C 293300 004C+00 1/1 0/0 0/0 .text __ct__Q216JASBasicWaveBank10TWaveGroupFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::TWaveGroup::TWaveGroup() {
mBank = NULL;
mCtrlWaveArray = NULL;
mWaveCount = 0;
}
#else
JASBasicWaveBank::TWaveGroup::TWaveGroup() {
// NONMATCHING
}
#endif
/* 80298A0C-80298A84 29334C 0078+00 3/2 0/0 0/0 .text __dt__Q216JASBasicWaveBank10TWaveGroupFv */
// vtable order
#ifdef NONMATCHING
JASBasicWaveBank::TWaveGroup::~TWaveGroup() {
delete[] mCtrlWaveArray;
}
#else
JASBasicWaveBank::TWaveGroup::~TWaveGroup() {
// NONMATCHING
}
#endif
/* 80298A84-80298B04 2933C4 0080+00 0/0 1/1 0/0 .text
* setWaveCount__Q216JASBasicWaveBank10TWaveGroupFUlP7JKRHeap */
void JASBasicWaveBank::TWaveGroup::setWaveCount(u32 param_0, JKRHeap* param_1) {
delete[] mCtrlWaveArray;
mWaveCount = param_0;
mCtrlWaveArray = new(param_1, 0) TGroupWaveInfo[param_0];
JUT_ASSERT(255, mCtrlWaveArray != 0);
}
/* 80298B04-80298B2C 293444 0028+00 1/0 0/0 0/0 .text
* onLoadDone__Q216JASBasicWaveBank10TWaveGroupFv */
void JASBasicWaveBank::TWaveGroup::onLoadDone() {
JUT_ASSERT(286, mBank);
mBank->incWaveTable(this);
}
/* 80298B2C-80298B54 29346C 0028+00 1/0 0/0 0/0 .text
* onEraseDone__Q216JASBasicWaveBank10TWaveGroupFv */
void JASBasicWaveBank::TWaveGroup::onEraseDone() {
JUT_ASSERT(292, mBank);
mBank->decWaveTable(this);
}
/* 80298B54-80298B64 293494 0010+00 2/2 0/0 0/0 .text
* getWaveID__Q216JASBasicWaveBank10TWaveGroupCFi */
u32 JASBasicWaveBank::TWaveGroup::getWaveID(int index) const {
JUT_ASSERT(298, index < mWaveCount);
JUT_ASSERT(299, index >= 0);
return mCtrlWaveArray[index].field_0x0;
}
/* 80298B64-80298B88 2934A4 0024+00 1/0 0/0 0/0 .text
* getWavePtr__Q216JASBasicWaveBank11TWaveHandleCFv */
int JASBasicWaveBank::TWaveHandle::getWavePtr() const {
JUT_ASSERT(313, mHeap);
void* base = mHeap->getBase();
if (base == 0) {
return 0;
}
return (int)base + field_0x4.field_0x08;
}
/* 80298B88-80298BD0 2934C8 0048+00 1/0 0/0 0/0 .text __dt__11JASWaveBankFv */
// JASWaveBank::~JASWaveBank() {
void __dt__11JASWaveBankFv() {
// NONMATCHING
}
/* 80298BD0-80298C18 293510 0048+00 1/0 0/0 0/0 .text __dt__13JASWaveHandleFv */
// JASWaveHandle::~JASWaveHandle() {
void __dt__13JASWaveHandleFv() {
// NONMATCHING
}
/* 80298C18-80298C4C 293558 0034+00 1/1 0/0 0/0 .text __ct__Q216JASBasicWaveBank11TWaveHandleFv */
// JASBasicWaveBank::TWaveHandle::TWaveHandle() {
void __ct__Q216JASBasicWaveBank11TWaveHandleFv() {
// NONMATCHING
}
/* 80298C4C-80298C64 29358C 0018+00 1/1 0/0 0/0 .text __ct__Q216JASBasicWaveBank14TGroupWaveInfoFv
*/
// JASBasicWaveBank::TGroupWaveInfo::TGroupWaveInfo() {
void __ct__Q216JASBasicWaveBank14TGroupWaveInfoFv() {
// NONMATCHING
}
/* 80298C64-80298C6C 2935A4 0008+00 1/0 0/0 0/0 .text
* getWaveInfo__Q216JASBasicWaveBank11TWaveHandleCFv */
// JASWaveInfo* JASBasicWaveBank::TWaveHandle::getWaveInfo() const {
void getWaveInfo__Q216JASBasicWaveBank11TWaveHandleCFv() {
// NONMATCHING
}
/* 80298C6C-80298C8C 2935AC 0020+00 1/0 0/0 0/0 .text getWaveArc__16JASBasicWaveBankFUl
*/
// JASWaveArc* JASBasicWaveBank::getWaveArc(u32 param_0) {
void getWaveArc__16JASBasicWaveBankFUl() {
// NONMATCHING
}
/* 80298C8C-80298C94 2935CC 0008+00 1/0 0/0 0/0 .text getArcCount__16JASBasicWaveBankCFv
*/
// u32 JASBasicWaveBank::getArcCount() const {
void getArcCount__16JASBasicWaveBankCFv() {
// NONMATCHING
}
+332
View File
@@ -0,0 +1,332 @@
//
// JASCalc
//
#include "JSystem/JAudio2/JASCalc.h"
#include "dolphin/os/OSCache.h"
#include "math.h"
#include "limits.h"
/* 8028F2E8-8028F318 289C28 0030+00 0/0 1/1 0/0 .text imixcopy__7JASCalcFPCsPCsPsUl */
void JASCalc::imixcopy(const s16 *s1, const s16 *s2, s16 *dst, u32 n) {
for (n; n != 0; n--) {
*dst++ = *((s16 *)s1)++;
*dst++ = *((s16 *)s2)++;
}
}
/* 8028F318-8028F354 289C58 003C+00 1/1 0/0 0/0 .text bcopyfast__7JASCalcFPCvPvUl */
void JASCalc::bcopyfast(const void *src, void *dest, u32 size) {
u32 copy1, copy2, copy3, copy4;
u32 *usrc = (u32 *)src;
u32 *udest = (u32 *)dest;
for (size = size / (4 * sizeof(u32)); size != 0; size--) {
copy1 = *((u32 *)usrc)++;
copy2 = *((u32 *)usrc)++;
copy3 = *((u32 *)usrc)++;
copy4 = *((u32 *)usrc)++;
*udest++ = copy1;
*udest++ = copy2;
*udest++ = copy3;
*udest++ = copy4;
}
}
/* 8028F354-8028F454 289C94 0100+00 0/0 3/3 0/0 .text bcopy__7JASCalcFPCvPvUl */
void JASCalc::bcopy(const void *src, void *dest, u32 size) {
u32 *usrc;
u32 *udest;
u8 *bsrc = (u8 *)src;
u8 *bdest = (u8 *)dest;
u8 endbitsSrc = (reinterpret_cast<u32>(bsrc) & 0x03);
u8 enbitsDst = (reinterpret_cast<u32>(bdest) & 0x03);
if ((endbitsSrc) == (enbitsDst) && (size & 0x0f) == 0) {
bcopyfast(src, dest, size);
}
else if ((endbitsSrc == enbitsDst) && (size >= 16)) {
if (endbitsSrc != 0) {
for (endbitsSrc = 4 - endbitsSrc; endbitsSrc != 0; endbitsSrc--) {
*bdest++ = (u32)*bsrc++;
size--;
}
}
udest = (u32 *)bdest;
usrc = (u32 *)bsrc;
for (; size >= 4; size -= 4) {
*udest++ = *usrc++;
}
if (size != 0) {
bdest = (u8 *)udest;
bsrc = (u8 *)usrc;
for (; size != 0; size--) {
*bdest++ = (u32)*bsrc++;
}
}
}
else {
for (; size != 0; size--) {
*bdest++ = (u32)*bsrc++;
}
}
}
/* 8028F454-8028F480 289D94 002C+00 1/1 0/0 0/0 .text bzerofast__7JASCalcFPvUl */
void JASCalc::bzerofast(void *dest, u32 size) {
u32 *udest = (u32 *)dest;
for (size = size / (4 * sizeof(u32)); size != 0; size--) {
*udest++ = 0;
*udest++ = 0;
*udest++ = 0;
*udest++ = 0;
}
}
/* 8028F480-8028F578 289DC0 00F8+00 0/0 6/6 0/0 .text bzero__7JASCalcFPvUl */
void JASCalc::bzero(void *dest, u32 size) {
u32 *udest;
u8 *bdest = (u8 *)dest;
if ((size & 0x1f) == 0 && (reinterpret_cast<u32>(dest) & 0x1f) == 0) {
DCZeroRange(dest, size);
return;
}
u8 alignedbitsDst = reinterpret_cast<u32>(bdest) & 0x3;
if ((size & 0xf) == 0 && alignedbitsDst == 0) {
bzerofast(dest, size);
return;
}
if (size >= 16) {
if (alignedbitsDst != 0) {
for (alignedbitsDst = 4 - alignedbitsDst; alignedbitsDst != 0; alignedbitsDst--) {
*bdest++ = 0;
size--;
}
}
udest = (u32 *)bdest;
for (; size >= 4; size -= 4) {
*udest++ = 0;
}
if (size != 0) {
bdest = (u8 *)udest;
for (; size != 0; size--) {
*bdest++ = 0;
}
}
}
else {
for (; size != 0; size--) {
*bdest++ = 0;
}
}
}
/* ############################################################################################## */
/* 8039ABB8-8039AFB8 027218 0400+00 0/0 4/4 0/0 .rodata CUTOFF_TO_IIR_TABLE__7JASCalc */
s16 const JASCalc::CUTOFF_TO_IIR_TABLE[128][4] = {
0x0F5C, 0x0A3D, 0x4665, 0x1E73,
0x0F5E, 0x0A3D, 0x4664, 0x1E73,
0x0F63, 0x0A3C, 0x4661, 0x1E71,
0x0F6C, 0x0A3C, 0x465B, 0x1E6F,
0x0F79, 0x0A3A, 0x4653, 0x1E6B,
0x0F89, 0x0A39, 0x4649, 0x1E67,
0x0F9C, 0x0A37, 0x463D, 0x1E62,
0x0FB4, 0x0A35, 0x462E, 0x1E5B,
0x0FCE, 0x0A33, 0x461D, 0x1E54,
0x0FED, 0x0A30, 0x460A, 0x1E4C,
0x100F, 0x0A2D, 0x45F5, 0x1E43,
0x1034, 0x0A29, 0x45DE, 0x1E39,
0x105D, 0x0A26, 0x45C4, 0x1E2D,
0x108A, 0x0A22, 0x45A8, 0x1E21,
0x10BA, 0x0A1D, 0x458A, 0x1E14,
0x10EE, 0x0A18, 0x456A, 0x1E06,
0x1126, 0x0A13, 0x4547, 0x1DF7,
0x1161, 0x0A0E, 0x4522, 0x1DE7,
0x119F, 0x0A08, 0x44FB, 0x1DD6,
0x11E1, 0x0A02, 0x44D2, 0x1DC5,
0x1227, 0x09FC, 0x44A6, 0x1DB2,
0x1270, 0x09F5, 0x4478, 0x1D9E,
0x12BD, 0x09EE, 0x4448, 0x1D89,
0x130E, 0x09E7, 0x4416, 0x1D73,
0x1362, 0x09DF, 0x43E1, 0x1D5D,
0x13B9, 0x09D7, 0x43AB, 0x1D45,
0x1415, 0x09CF, 0x4372, 0x1D2C,
0x1473, 0x09C7, 0x4336, 0x1D13,
0x14D6, 0x09BE, 0x42F9, 0x1CF8,
0x153C, 0x09B4, 0x42B9, 0x1CDD,
0x15A5, 0x09AB, 0x4277, 0x1CC0,
0x1612, 0x09A1, 0x4233, 0x1CA3,
0x1683, 0x0997, 0x41ED, 0x1C84,
0x16F7, 0x098C, 0x41A4, 0x1C65,
0x176F, 0x0981, 0x4159, 0x1C44,
0x17EA, 0x0976, 0x410C, 0x1C23,
0x1869, 0x096A, 0x40BD, 0x1C01,
0x18EB, 0x095F, 0x406B, 0x1BDD,
0x1972, 0x0952, 0x4018, 0x1BB9,
0x19FB, 0x0946, 0x3FC2, 0x1B94,
0x1A88, 0x0939, 0x3F69, 0x1B6E,
0x1B19, 0x092C, 0x3F0F, 0x1B47,
0x1BAE, 0x091E, 0x3EB2, 0x1B1E,
0x1C46, 0x0911, 0x3E53, 0x1AF5,
0x1CE1, 0x0902, 0x3DF2, 0x1ACB,
0x1D80, 0x08F4, 0x3D8E, 0x1AA0,
0x1E23, 0x08E5, 0x3D29, 0x1A74,
0x1EC9, 0x08D6, 0x3CC1, 0x1A47,
0x1F73, 0x08C7, 0x3C57, 0x1A19,
0x2020, 0x08B7, 0x3BEA, 0x19EB,
0x20D1, 0x08A7, 0x3B7C, 0x19BB,
0x2186, 0x0896, 0x3B0B, 0x198A,
0x223E, 0x0886, 0x3A98, 0x1958,
0x22FA, 0x0875, 0x3A22, 0x1925,
0x23B9, 0x0863, 0x39AB, 0x18F2,
0x247C, 0x0851, 0x3931, 0x18BD,
0x2542, 0x083F, 0x38B5, 0x1887,
0x260C, 0x082D, 0x3837, 0x1851,
0x26DA, 0x081A, 0x37B6, 0x1819,
0x27AB, 0x0807, 0x3734, 0x17E1,
0x2880, 0x07F4, 0x36AF, 0x17A7,
0x2958, 0x07E0, 0x3628, 0x176D,
0x2A34, 0x07CC, 0x359E, 0x1731,
0x2B14, 0x07B8, 0x3512, 0x16F5,
0x2BF7, 0x07A3, 0x3485, 0x16B7,
0x2CDD, 0x078E, 0x33F4, 0x1679,
0x2DC8, 0x0779, 0x3362, 0x163A,
0x2EB5, 0x0764, 0x32CD, 0x15FA,
0x2FA7, 0x074E, 0x3237, 0x15B8,
0x309C, 0x0737, 0x319E, 0x1576,
0x3194, 0x0721, 0x3102, 0x1533,
0x3290, 0x070A, 0x3065, 0x14EF,
0x3390, 0x06F3, 0x2FC5, 0x14AA,
0x3493, 0x06DB, 0x2F23, 0x1464,
0x359A, 0x06C3, 0x2E7F, 0x141C,
0x36A4, 0x06AB, 0x2DD8, 0x13D4,
0x37B2, 0x0692, 0x2D2F, 0x138C,
0x38C4, 0x067A, 0x2C85, 0x1342,
0x39D9, 0x0660, 0x2BD7, 0x12F7,
0x3AF1, 0x0647, 0x2B28, 0x12AB,
0x3C0E, 0x062D, 0x2A76, 0x125E,
0x3D2E, 0x0613, 0x29C2, 0x1210,
0x3E51, 0x05F8, 0x290C, 0x11C1,
0x3F78, 0x05DE, 0x2854, 0x1172,
0x40A3, 0x05C2, 0x2799, 0x1121,
0x41D1, 0x05A7, 0x26DC, 0x10CF,
0x4302, 0x058B, 0x261D, 0x107D,
0x4438, 0x056F, 0x255C, 0x1029,
0x4571, 0x0553, 0x2499, 0x0FD4,
0x46AD, 0x0536, 0x23D3, 0x0F7F,
0x47ED, 0x0519, 0x230B, 0x0F28,
0x4931, 0x04FB, 0x2241, 0x0ED1,
0x4A78, 0x04DE, 0x2174, 0x0E78,
0x4BC2, 0x04C0, 0x20A5, 0x0E1F,
0x4D11, 0x04A1, 0x1FD4, 0x0DC5,
0x4E63, 0x0482, 0x1F01, 0x0D69,
0x4FB8, 0x0463, 0x1E2C, 0x0D0D,
0x5111, 0x0444, 0x1D54, 0x0CB0,
0x526E, 0x0424, 0x1C7A, 0x0C51,
0x53CE, 0x0404, 0x1B9E, 0x0BF2,
0x5532, 0x03E4, 0x1AC0, 0x0B92,
0x5699, 0x03C3, 0x19DF, 0x0B31,
0x5804, 0x03A2, 0x18FD, 0x0ACF,
0x5972, 0x0381, 0x1818, 0x0A6C,
0x5AE5, 0x035F, 0x1730, 0x0A08,
0x5C5A, 0x033D, 0x1647, 0x09A3,
0x5DD3, 0x031B, 0x155B, 0x093D,
0x5F50, 0x02F9, 0x146D, 0x08D6,
0x60D1, 0x02D6, 0x137D, 0x086E,
0x6255, 0x02B2, 0x128A, 0x0805,
0x63DC, 0x028F, 0x1196, 0x079B,
0x6567, 0x026B, 0x109F, 0x0730,
0x66F6, 0x0247, 0x0FA6, 0x06C5,
0x6888, 0x0222, 0x0EAA, 0x0658,
0x6A1E, 0x01FD, 0x0DAD, 0x05EA,
0x6BB7, 0x01D8, 0x0CAD, 0x057B,
0x6D54, 0x01B2, 0x0BAB, 0x050C,
0x6EF5, 0x018D, 0x0AA6, 0x049B,
0x7099, 0x0166, 0x09A0, 0x042A,
0x7241, 0x0140, 0x0897, 0x03B7,
0x73EC, 0x0119, 0x078C, 0x0344,
0x759B, 0x00F2, 0x067F, 0x02CF,
0x774D, 0x00CA, 0x056F, 0x025A,
0x7903, 0x00A3, 0x045D, 0x01E3,
0x7ABD, 0x007A, 0x0349, 0x016C,
0x7C7A, 0x0052, 0x0233, 0x00F4,
0x7E3B, 0x0029, 0x011B, 0x007A,
0x7FFF, 0x0000, 0x0000, 0x0000,
};
// currently required because of missing functions
// JASCalc::hannWindow(short *, unsigned long)
// JASCalc::hammWindow(short *, unsigned long)
// JASCalc::fft(float *, float *, unsigned long, long)
f32 JASCalc::fake1() { return 0.5f; }
f32 JASCalc::fake2(long x) { return JASCalc::clamp<s16, long>(x); }
f32 JASCalc::fake3() { return 0.0f; }
/* 8028F578-8028F69C 289EB8 0124+00 0/0 2/2 0/0 .text pow2__7JASCalcFf */
f32 JASCalc::pow2(f32 x) {
s32 frac_index = 0;
union {
s32 l;
f32 f;
} exponent;
exponent.l = (x >= 0.0f ? (s32)(x - 0.5f) : (s32)(x + 0.5f)); // Shift towards 0 and round
f32 pannedval = x - exponent.l; // strictly between 1.5 and -1.5
// 2^x will not fit in an IEEE-754 float
if(exponent.l > 128) {
return HUGE_VALF;
}
// convert to exponent of IEEE-754 float
exponent.l += 127;
exponent.l <<= 23;
// Calculate the mantissa
static const f32 scale_frac[] = { 0.0f, 0.5f };
// { 1 , 1/sqrt2 }
static const f32 two_to_frac[] = {1.0f, 0.70710677f};
// coefficients of Taylor polynomial of 2^x - 1 at 0:
// 2^x - 1 = (log2) * x + (log2)^2 / 2! * x^2 + ...
static const f32 __two_to_x[] = {
0.6931472f, 0.24022661,
0.055502914f, 0.009625022f,
0.0013131053f, 1.8300806E-4f
};
if (pannedval < 0.0f) {
frac_index += 1;
}
f32 ret = pannedval + scale_frac[frac_index];
// Evaluate Taylor polynomial using Horner's method
ret = ret * (ret * (ret * (ret * (ret * (ret * __two_to_x[5] + __two_to_x[4]) +
__two_to_x[3]) + __two_to_x[2]) + __two_to_x[1]) + __two_to_x[0]);
// 2^n * (corrected mantissa)
ret = exponent.f * (0.75f * two_to_frac[frac_index] + ((0.25f + ret) * two_to_frac[frac_index]));
return ret;
}
template <>
s16 JASCalc::clamp(s32 x) {
if (std::numeric_limits<s16>::min() >= x)
return std::numeric_limits<s16>::min();
if (x >= std::numeric_limits<s16>::max())
return std::numeric_limits<s16>::max();
return x;
}
+63
View File
@@ -0,0 +1,63 @@
//
// Generated By: dol2asm
// Translation Unit: JASCallback
//
#include "JSystem/JAudio2/JASCallback.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 8028FFA8-80290030 28A8E8 0088+00 0/0 2/2 0/0 .text regist__14JASCallbackMgrFPFPv_lPv
*/
bool JASCallbackMgr::regist(JASCallback* function, void* argument)
{
JASCriticalSection criticalSection;
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction == NULL) {
mCallbacks[i].mFunction = function;
mCallbacks[i].mArgument = argument;
return true;
}
}
return false;
}
/* 80290030-802900C4 28A970 0094+00 0/0 1/1 0/0 .text reject__14JASCallbackMgrFPFPv_lPv
*/
int JASCallbackMgr::reject(JASCallback* function, void* argument) {
int rejectNum = 0;
JASCriticalSection criticalSection;
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction == function && mCallbacks[i].mArgument == argument) {
mCallbacks[i].mFunction = NULL;
mCallbacks[i].mArgument = NULL;
rejectNum++;
}
}
return rejectNum;
}
/* 802900C4-80290140 28AA04 007C+00 0/0 3/3 0/0 .text callback__14JASCallbackMgrFv */
void JASCallbackMgr::callback() {
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction && mCallbacks[i].mFunction(mCallbacks[i].mArgument) < 0) {
mCallbacks[i].mFunction = NULL;
mCallbacks[i].mArgument = NULL;
}
}
}
+628
View File
@@ -0,0 +1,628 @@
//
// Generated By: dol2asm
// Translation Unit: JASChannel
//
#include "JSystem/JAudio2/JASChannel.h"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASDSPChannel.h"
#include "JSystem/JSupport/JSupport.h"
#include "JSystem/JMath/JMATrigonometric.h"
#include "JSystem/JGeometry.h"
//
// Forward References:
//
extern "C" void __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv();
extern "C" void __dt__10JASChannelFv();
extern "C" void play__10JASChannelFv();
extern "C" void playForce__10JASChannelFv();
extern "C" void release__10JASChannelFUs();
extern "C" void setOscInit__10JASChannelFUlPCQ213JASOscillator4Data();
extern "C" void setMixConfig__10JASChannelFUlUs();
extern "C" void calcEffect__10JASChannelFPCQ210JASChannel9PanVector();
extern "C" void calcPan__10JASChannelFPCQ210JASChannel9PanVector();
extern "C" void effectOsc__10JASChannelFUlPQ213JASOscillator12EffectParams();
extern "C" void setKeySweepTarget__10JASChannelFlUl();
extern "C" void
updateEffectorParam__10JASChannelFPQ26JASDsp8TChannelPUsRCQ213JASOscillator12EffectParams();
extern "C" void dspUpdateCallback__10JASChannelFUlPQ26JASDsp8TChannelPv();
extern "C" void initialUpdateDSPChannel__10JASChannelFPQ26JASDsp8TChannel();
extern "C" void updateDSPChannel__10JASChannelFPQ26JASDsp8TChannel();
extern "C" void updateAutoMixer__10JASChannelFPQ26JASDsp8TChannelffff();
extern "C" void updateMixer__10JASChannelFffffPUs();
extern "C" void free__10JASChannelFv();
extern "C" void initBankDisposeMsgQueue__10JASChannelFv();
extern "C" void receiveBankDisposeMsg__10JASChannelFv();
extern "C" void checkBankDispose__10JASChannelCFv();
extern "C" u8 sBankDisposeMsgQ__10JASChannel[32];
extern "C" u8 sBankDisposeMsg__10JASChannel[64];
extern "C" u8 sBankDisposeList__10JASChannel[64];
extern "C" u8 sBankDisposeListSize__10JASChannel[4 + 4 /* padding */];
//
// External References:
//
extern "C" void pow2__7JASCalcFf();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void func_802978DC(void* _this);
extern "C" void __ct__6JASLfoFv();
extern "C" void getValue__6JASLfoCFv();
extern "C" void incCounter__6JASLfoFf();
extern "C" void resetCounter__6JASLfoFv();
extern "C" void __ct__13JASOscillatorFv();
extern "C" void initStart__13JASOscillatorFPCQ213JASOscillator4Data();
extern "C" void incCounter__13JASOscillatorFf();
extern "C" void getValue__13JASOscillatorCFv();
extern "C" void release__13JASOscillatorFv();
extern "C" void update__13JASOscillatorFv();
extern "C" void getDacRate__9JASDriverFv();
extern "C" void free__13JASDSPChannelFv();
extern "C" void start__13JASDSPChannelFv();
extern "C" void drop__13JASDSPChannelFv();
extern "C" void alloc__13JASDSPChannelFUcPFUlPQ26JASDsp8TChannelPv_lPv();
extern "C" void allocForce__13JASDSPChannelFUcPFUlPQ26JASDsp8TChannelPv_lPv();
extern "C" void setPriority__13JASDSPChannelFUc();
extern "C" void setWaveInfo__Q26JASDsp8TChannelFRC11JASWaveInfoUlUl();
extern "C" void setOscInfo__Q26JASDsp8TChannelFUl();
extern "C" void initAutoMixer__Q26JASDsp8TChannelFv();
extern "C" void setAutoMixer__Q26JASDsp8TChannelFUsUcUcUcUc();
extern "C" void setPitch__Q26JASDsp8TChannelFUs();
extern "C" void setMixerInitVolume__Q26JASDsp8TChannelFUcs();
extern "C" void setMixerVolume__Q26JASDsp8TChannelFUcs();
extern "C" void setPauseFlag__Q26JASDsp8TChannelFUc();
extern "C" void setBusConnect__Q26JASDsp8TChannelFUcUc();
extern "C" void getChannelLevel_dsp__9JASDriverFv();
extern "C" void getOutputMode__9JASDriverFv();
extern "C" void __register_global_object();
extern "C" void __construct_array();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" extern u8 data_80431B34[16 + 4 /* padding */];
extern "C" u8 sincosTable___5JMath[65536];
extern "C" u32 one__11JASWaveInfo[1 + 1 /* padding */];
extern "C" extern u8 struct_80451260[8];
//
// Declarations:
//
/* 80431B90-80431BB0 05E8B0 0020+00 2/2 0/0 0/0 .bss sBankDisposeMsgQ__10JASChannel */
OSMessageQueue JASChannel::sBankDisposeMsgQ;
/* 80431BB0-80431BF0 05E8D0 0040+00 1/1 0/0 0/0 .bss sBankDisposeMsg__10JASChannel */
OSMessage JASChannel::sBankDisposeMsg[16];
/* 80431BF0-80431C30 05E910 0040+00 2/2 0/3 0/0 .bss sBankDisposeList__10JASChannel */
OSMessage JASChannel::sBankDisposeList[16];
/* 80451298-804512A0 000798 0004+04 3/3 0/0 0/0 .sbss sBankDisposeListSize__10JASChannel
*/
int JASChannel::sBankDisposeListSize;
/* 8029A800-8029A918 295140 0118+00 0/0 3/3 0/0 .text
* __ct__10JASChannelFPFUlP10JASChannelPQ26JASDsp8TChannelPv_vPv */
JASChannel::JASChannel(Callback i_callback, void* i_callbackData) :
mStatus(STATUS_INACTIVE),
mDspCh(NULL),
mCallback(i_callback),
mCallbackData(i_callbackData),
mUpdateTimer(0),
mBankDisposeID(NULL),
mKey(0),
mVelocity(0x7f),
mKeySweep(0.0f),
mKeySweepTarget(0.0f),
mKeySweepCount(0),
mSkipSamples(0)
{
field_0xdc.field_0x0 = 0;
field_0x104 = 0;
mMixConfig[0].whole = 0x150;
mMixConfig[1].whole = 0x210;
mMixConfig[2].whole = 0x352;
mMixConfig[3].whole = 0x412;
mMixConfig[4].whole = 0;
mMixConfig[5].whole = 0;
mPriority = 0x13f;
mPauseFlag = false;
}
/* 80431C30-80431C40 05E950 000C+04 1/1 0/2 0/0 .bss @556 */
static u8 lit_556[12 + 4 /* padding */];
/* 8029A918-8029A9F0 295258 00D8+00 5/5 0/0 0/0 .text __dt__10JASChannelFv */
JASChannel::~JASChannel() {
if (mDspCh != NULL) {
mDspCh->drop();
}
if (mCallback != NULL) {
mCallback(CB_STOP, this, NULL, mCallbackData);
}
}
/* 8029A9F0-8029AA60 295330 0070+00 0/0 2/2 0/0 .text play__10JASChannelFv */
int JASChannel::play() {
JASDSPChannel* channel = JASDSPChannel::alloc(JSULoByte(mPriority), dspUpdateCallback, this);
if (channel == NULL) {
delete this;
return 0;
}
mDspCh = channel;
channel->start();
mStatus = STATUS_ACTIVE;
return 1;
}
/* 8029AA60-8029AAD0 2953A0 0070+00 0/0 1/1 0/0 .text playForce__10JASChannelFv */
int JASChannel::playForce() {
JASDSPChannel* channel = JASDSPChannel::allocForce(JSULoByte(mPriority),
dspUpdateCallback, this);
if (channel == NULL) {
delete this;
return 0;
}
mDspCh = channel;
channel->start();
mStatus = STATUS_ACTIVE;
return 1;
}
/* 8029AAD0-8029AB64 295410 0094+00 0/0 4/4 0/0 .text release__10JASChannelFUs */
void JASChannel::release(u16 i_directRelease) {
if (mStatus == STATUS_ACTIVE) {
if (i_directRelease != 0) {
setDirectRelease(i_directRelease);
}
for (u32 i = 0; i < 2; i++) {
if (mOscillators[i].isValid()) {
mOscillators[i].release();
}
}
mDspCh->setPriority(JSUHiByte(mPriority));
mStatus = STATUS_RELEASE;
}
}
/* 8029AB64-8029AB98 2954A4 0034+00 0/0 4/4 0/0 .text
* setOscInit__10JASChannelFUlPCQ213JASOscillator4Data */
void JASChannel::setOscInit(u32 i_index, JASOscillator::Data const* i_data) {
mOscillators[i_index].initStart(i_data);
}
/* 8029AB98-8029ABA8 2954D8 0010+00 0/0 2/2 0/0 .text setMixConfig__10JASChannelFUlUs */
void JASChannel::setMixConfig(u32 i_index, u16 i_config) {
mMixConfig[i_index].whole = i_config;
}
/* 8029ABA8-8029ABC0 2954E8 0018+00 1/1 0/0 0/0 .text
* calcEffect__10JASChannelFPCQ210JASChannel9PanVector */
f32 JASChannel::calcEffect(JASChannel::PanVector const* i_vector) {
return i_vector->mSound + i_vector->mEffect + i_vector->mChannel;
}
/* 8029ABC0-8029ABEC 295500 002C+00 1/1 0/0 0/0 .text
* calcPan__10JASChannelFPCQ210JASChannel9PanVector */
f32 JASChannel::calcPan(JASChannel::PanVector const* i_vector) {
return 0.5f + (i_vector->mSound - 0.5f) + (i_vector->mEffect - 0.5f)
+ (i_vector->mChannel - 0.5f);
}
/* 8029ABEC-8029ACD4 29552C 00E8+00 3/2 0/0 0/0 .text
* effectOsc__10JASChannelFUlPQ213JASOscillator12EffectParams */
void JASChannel::effectOsc(u32 i_index, JASOscillator::EffectParams* i_params) {
f32 value = mOscillators[i_index].getValue();
switch (mOscillators[i_index].getTarget()) {
case JASOscillator::TARGET_PITCH:
i_params->mPitch *= value;
break;
case JASOscillator::TARGET_VOLUME:
i_params->mVolume *= value;
break;
case JASOscillator::TARGET_PAN:
value -= 0.5;
i_params->mPan += value;
break;
case JASOscillator::TARGET_FXMIX:
i_params->mFxMix += value;
break;
case JASOscillator::TARGET_DOLBY:
i_params->mDolby += value;
break;
case JASOscillator::TARGET_5:
i_params->_14 *= value;
break;
case JASOscillator::TARGET_6:
i_params->_18 *= value;
break;
}
}
/* 8029ACD4-8029AD38 295614 0064+00 0/0 1/1 0/0 .text setKeySweepTarget__10JASChannelFlUl
*/
void JASChannel::setKeySweepTarget(s32 i_target, u32 i_count) {
if (i_count == 0) {
mKeySweep = i_target;
} else {
mKeySweep = 0.0f;
mKeySweepTarget = i_target;
}
mKeySweepCount = i_count;
}
/* 8029AD38-8029AF78 295678 0240+00 2/2 0/0 0/0 .text
* updateEffectorParam__10JASChannelFPQ26JASDsp8TChannelPUsRCQ213JASOscillator12EffectParams */
void JASChannel::updateEffectorParam(JASDsp::TChannel* i_channel, u16* i_mixerVolume,
JASOscillator::EffectParams const& i_params) {
PanVector pan_vector, fxmix_vector, dolby_vector;
pan_vector.mSound = mSoundParams.mPan;
pan_vector.mChannel = mParams.mPan;
pan_vector.mEffect = i_params.mPan;
fxmix_vector.mSound = mSoundParams.mFxMix;
fxmix_vector.mChannel = mParams.mFxMix;
fxmix_vector.mEffect = i_params.mFxMix;
dolby_vector.mSound = mSoundParams.mDolby;
dolby_vector.mChannel = mParams.mDolby;
dolby_vector.mEffect = i_params.mDolby;
f32 pan = 0.5f;
f32 dolby = 0.0f;
switch (JASDriver::getOutputMode()) {
case 0:
break;
case 1:
pan = calcPan(&pan_vector);
break;
case 2:
pan = calcPan(&pan_vector);
dolby = calcEffect(&dolby_vector);
break;
}
f32 fxmix = calcEffect(&fxmix_vector);
f32 volume = mVelocity / 127.0f;
volume = volume * volume;
volume = mSoundParams.mVolume * i_params.mVolume * mParams.mVolume
* (i_params._18 * mTremolo.getValue() + 1.0f) * volume;
if (volume < 0.0f) {
volume = 0.0f;
}
pan = JASCalc::clamp01(pan);
fxmix = JASCalc::clamp01(fxmix);
dolby = JASCalc::clamp01(dolby);
if (isDolbyMode()) {
updateAutoMixer(i_channel, volume, pan, fxmix, dolby);
} else {
updateMixer(volume, pan, fxmix, dolby, i_mixerVolume);
}
}
/* 8029AF78-8029B004 2958B8 008C+00 2/2 0/0 0/0 .text
* dspUpdateCallback__10JASChannelFUlPQ26JASDsp8TChannelPv */
s32 JASChannel::dspUpdateCallback(u32 i_type, JASDsp::TChannel* i_channel, void* i_this) {
JASChannel* _this = static_cast<JASChannel*>(i_this);
switch (i_type) {
case JASDSPChannel::CB_PLAY:
return _this->updateDSPChannel(i_channel);
case JASDSPChannel::CB_START:
return _this->initialUpdateDSPChannel(i_channel);
case JASDSPChannel::CB_STOP:
case JASDSPChannel::CB_DROP:
_this->mDspCh->free();
_this->mDspCh = NULL;
delete _this;
return -1;
}
return 0;
}
/* 8029B004-8029B324 295944 0320+00 1/1 0/0 0/0 .text
* initialUpdateDSPChannel__10JASChannelFPQ26JASDsp8TChannel */
s32 JASChannel::initialUpdateDSPChannel(JASDsp::TChannel* i_channel) {
if (isDolbyMode()) {
i_channel->initAutoMixer();
}
if (mCallback != NULL) {
mCallback(CB_START, this, i_channel, mCallbackData);
}
if (field_0xdc.field_0x4.field_0x20[0] == 0) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
if (checkBankDispose()) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
switch (field_0xdc.field_0x0) {
case 0:
i_channel->setWaveInfo(field_0xdc.field_0x4, field_0x104, mSkipSamples);
break;
case 2:
i_channel->setOscInfo(field_0x104);
break;
}
for (u8 i = 0; i < 6; i++) {
MixConfig mix_config = mMixConfig[i];
u32 output_mode = JASDriver::getOutputMode();
if (output_mode == 0) {
switch (mix_config.parts.upper) {
case 8:
mix_config.parts.upper = 11;
break;
case 9:
mix_config.parts.upper = 2;
break;
}
} else if (output_mode == 1 && mix_config.parts.upper == 8) {
mix_config.parts.upper = 11;
}
i_channel->setBusConnect(i, mix_config.parts.upper);
}
JASOscillator::EffectParams effect_params;
for (u32 i = 0; i < 2; i++) {
if (mOscillators[i].isValid()) {
mOscillators[i].update();
effectOsc(i, &effect_params);
}
}
mVibrate.resetCounter();
mTremolo.resetCounter();
u16 mixer_volume[6];
updateEffectorParam(i_channel, mixer_volume, effect_params);
for (u8 i = 0; i < 6; i++) {
i_channel->setMixerInitVolume(i, mixer_volume[i]);
}
f32 pitch = JASCalc::pow2(mParams.field_0x8 + (mKey + mKeySweep) / 12.0f
+ effect_params._14 * mVibrate.getValue());
pitch = mSoundParams.mPitch * effect_params.mPitch * pitch * mParams.mPitch * 4096.0f;
if (pitch < 0.0f) {
pitch = 0.0f;
}
i_channel->setPitch(pitch);
i_channel->setPauseFlag(mPauseFlag);
i_channel->field_0x066 = 0;
return 0;
}
/* 8029B324-8029B6A0 295C64 037C+00 1/1 0/0 0/0 .text
* updateDSPChannel__10JASChannelFPQ26JASDsp8TChannel */
s32 JASChannel::updateDSPChannel(JASDsp::TChannel* i_channel) {
if (mCallback != NULL) {
mCallback(CB_PLAY, this, i_channel, mCallbackData);
}
if (field_0xdc.field_0x4.field_0x20[0] == 0) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
if (checkBankDispose()) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
i_channel->setPauseFlag(mPauseFlag);
JASOscillator::EffectParams effect_params;
if (mPauseFlag) {
if (mOscillators[0].isRelease()) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
} else {
f32 inc = 32028.5f / JASDriver::getDacRate();
mVibrate.incCounter(inc);
mTremolo.incCounter(inc);
if (mUpdateTimer != 0) {
mUpdateTimer--;
if (mUpdateTimer == 0 && mCallback != NULL) {
mCallback(CB_TIMER, this, i_channel, mCallbackData);
}
}
inc = 48000.0f / JASDriver::getDacRate();
for (u32 i = 0; i < 2; i++) {
if (mOscillators[i].isValid()) {
mOscillators[i].incCounter(inc);
effectOsc(i, &effect_params);
if (i == 0 && mOscillators[i].isStop()) {
mDspCh->free();
mDspCh = NULL;
delete this;
return -1;
}
}
}
}
u16 mixer_volume[6];
updateEffectorParam(i_channel, mixer_volume, effect_params);
for (u8 i = 0; i < 6; i++) {
i_channel->setMixerVolume(i, mixer_volume[i]);
}
f32 pitch = JASCalc::pow2(mParams.field_0x8 + (mKey + mKeySweep) / 12.0f
+ effect_params._14 * mVibrate.getValue());
pitch = mSoundParams.mPitch * effect_params.mPitch * pitch * mParams.mPitch * 4096.0f;
if (pitch < 0.0f) {
pitch = 0.0f;
}
i_channel->setPitch(pitch);
if (!mPauseFlag && mKeySweepCount != 0) {
mKeySweep += (mKeySweepTarget - mKeySweep) / mKeySweepCount;
mKeySweepCount--;
}
return 0;
}
/* 8029B6A0-8029B7D8 295FE0 0138+00 1/1 0/0 0/0 .text
* updateAutoMixer__10JASChannelFPQ26JASDsp8TChannelffff */
void JASChannel::updateAutoMixer(JASDsp::TChannel* i_channel, f32 param_1, f32 param_2,
f32 param_3, f32 param_4) {
if (JASDriver::getOutputMode() == 0) {
param_1 *= 0.707f;
}
f32 fvar1 = JASCalc::clamp01(param_1);
i_channel->setAutoMixer(fvar1 * JASDriver::getChannelLevel_dsp(), param_2 * 127.5f,
param_4 * 127.5f, param_3 * 127.5f, 0);
}
/* 8029B7D8-8029BBFC 296118 0424+00 3/1 0/0 0/0 .text updateMixer__10JASChannelFffffPUs
*/
void JASChannel::updateMixer(f32 i_volume, f32 i_pan, f32 i_fxmix, f32 i_dolby, u16* i_volumeOut) {
for (u32 i = 0; i < 6; i++) {
f32 volume = i_volume;
MixConfig config = mMixConfig[i];
if (config.parts.upper == 0) {
i_volumeOut[i] = 0;
} else {
f32 scale;
if (config.parts.lower0 != 0) {
switch (config.parts.lower0) {
case 1:
scale = i_pan;
break;
case 2:
scale = i_fxmix;
break;
case 3:
scale = i_dolby;
break;
case 5:
scale = 1.0f - i_pan;
break;
case 6:
scale = 1.0f - i_fxmix;
break;
case 7:
scale = 1.0f - i_dolby;
break;
}
switch (config.parts.lower0) {
case 2:
case 6:
volume *= scale;
break;
default:
if (JASDriver::getOutputMode() == 0) {
volume *= scale;
} else {
volume *= JMASinRadian(scale * JGeometry::TUtil<f32>::PI() * 0.5f);
}
break;
}
}
if (config.parts.lower1 != 0) {
switch (config.parts.lower1) {
case 1:
scale = i_pan;
break;
case 2:
scale = i_fxmix;
break;
case 3:
scale = i_dolby;
break;
case 5:
scale = 1.0f - i_pan;
break;
case 6:
scale = 1.0f - i_fxmix;
break;
case 7:
scale = 1.0f - i_dolby;
break;
}
switch (config.parts.lower1) {
case 3:
case 7:
volume *= JMASinRadian((scale * 0.34776f + 0.32612f)
* JGeometry::TUtil<f32>::PI() * 0.5f);
break;
case 2:
case 6:
volume *= scale;
break;
default:
if (JASDriver::getOutputMode() == 0) {
volume *= scale;
} else {
volume *= JMASinRadian(scale * JGeometry::TUtil<f32>::PI() * 0.5f);
}
break;
}
}
i_volumeOut[i] = JASCalc::clamp01(volume) * JASDriver::getChannelLevel_dsp();
}
}
}
/* 8029BBFC-8029BC0C 29653C 0010+00 0/0 3/3 0/0 .text free__10JASChannelFv */
void JASChannel::free() {
mCallback = NULL;
mCallbackData = NULL;
}
/* 8029BC0C-8029BC48 29654C 003C+00 0/0 1/1 0/0 .text initBankDisposeMsgQueue__10JASChannelFv */
void JASChannel::initBankDisposeMsgQueue() {
OSInitMessageQueue(&sBankDisposeMsgQ, sBankDisposeMsg, 0x10);
sBankDisposeListSize = 0;
}
/* 8029BC48-8029BCC0 296588 0078+00 0/0 1/1 0/0 .text receiveBankDisposeMsg__10JASChannelFv */
void JASChannel::receiveBankDisposeMsg() {
OSMessage msg;
for (sBankDisposeListSize = 0;
OSReceiveMessage(&sBankDisposeMsgQ, &msg, OS_MESSAGE_NOBLOCK);
sBankDisposeListSize++)
{
sBankDisposeList[sBankDisposeListSize] = msg;
}
}
/* 8029BCC0-8029BD14 296600 0054+00 2/2 0/0 0/0 .text checkBankDispose__10JASChannelCFv
*/
bool JASChannel::checkBankDispose() const {
if (mBankDisposeID == NULL) {
return false;
}
for (int i = 0; i < sBankDisposeListSize; i++) {
if (mBankDisposeID == sBankDisposeList[i]) {
return true;
}
}
return false;
}
+41
View File
@@ -0,0 +1,41 @@
//
// JASCmdStack
//
#include "JSystem/JAudio2/JASCmdStack.h"
#include "dolphin/os.h"
/* 80431684-80431690 05E3A4 000C+00 1/2 0/0 0/0 .bss sCommandListOnce__10JASPortCmd */
JASPortCmd::TPortHead JASPortCmd::sCommandListOnce;
/* 8043169C-804316A8 05E3BC 000C+00 1/2 0/0 0/0 .bss sCommandListStay__10JASPortCmd */
JASPortCmd::TPortHead JASPortCmd::sCommandListStay;
/* 80291060-80291094 28B9A0 0034+00 0/0 1/1 0/0 .text execAllCommand__10JASPortCmdFv */
void JASPortCmd::execAllCommand() {
sCommandListOnce.execCommandOnce();
sCommandListStay.execCommandStay();
}
/* 80291094-8029110C 28B9D4 0078+00 1/1 0/0 0/0 .text execCommandOnce__Q210JASPortCmd9TPortHeadFv
*/
void JASPortCmd::TPortHead::execCommandOnce() {
volatile BOOL interrupts = OSDisableInterrupts();
JSULink<JASPortCmd>* next;
for (JSULink<JASPortCmd>* link = getFirst(); link != NULL; link = next) {
next = link->getNext();
link->getObject()->_10(link->getObject()->_14);
remove(link);
}
OSRestoreInterrupts(interrupts);
}
/* 8029110C-8029116C 28BA4C 0060+00 1/1 0/0 0/0 .text execCommandStay__Q210JASPortCmd9TPortHeadFv
*/
void JASPortCmd::TPortHead::execCommandStay() {
volatile int interrupts = OSDisableInterrupts();
for (JSULink<JASPortCmd>* link = getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->_10(link->getObject()->_14);
}
OSRestoreInterrupts(interrupts);
}
+248
View File
@@ -0,0 +1,248 @@
//
// Generated By: dol2asm
// Translation Unit: JASDSPChannel
//
#include "JSystem/JAudio2/JASDSPChannel.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
/* 804512E0-804512E8 0007E0 0004+04 5/5 0/0 0/0 .sbss sDspChannels__13JASDSPChannel */
JASDSPChannel* JASDSPChannel::sDspChannels;
/* 8029D2F4-8029D320 297C34 002C+00 1/1 0/0 0/0 .text __ct__13JASDSPChannelFv */
JASDSPChannel::JASDSPChannel() :
mStatus(STATUS_INACTIVE),
mPriority(-1),
mFlags(0),
field_0xc(0),
mCallback(NULL),
mCallbackData(NULL),
mChannel(NULL)
{
/* empty function */
}
/* 8029D320-8029D330 297C60 0010+00 0/0 3/3 0/0 .text free__13JASDSPChannelFv */
void JASDSPChannel::free() {
mCallback = NULL;
mCallbackData = NULL;
}
/* 8029D330-8029D340 297C70 0010+00 0/0 2/2 0/0 .text start__13JASDSPChannelFv */
void JASDSPChannel::start() {
mFlags |= 1;
}
/* 8029D340-8029D3C8 297C80 0088+00 3/3 2/2 0/0 .text drop__13JASDSPChannelFv */
void JASDSPChannel::drop() {
if (mCallback != NULL) {
mCallback(CB_DROP, NULL, mCallbackData);
}
mCallback = NULL;
mCallbackData = NULL;
mPriority = -1;
mFlags &= ~1;
if (mStatus == STATUS_ACTIVE) {
mFlags |= 2;
mStatus = STATUS_DROP;
}
}
/* 8029D3C8-8029D44C 297D08 0084+00 0/0 1/1 0/0 .text initAll__13JASDSPChannelFv */
void JASDSPChannel::initAll() {
sDspChannels = new (JASDram, 0x20) JASDSPChannel[0x40];
for (int i = 0; i < 0x40; i++) {
sDspChannels[i].mChannel = JASDsp::getDSPHandle(i);
}
}
/* 8029D44C-8029D4BC 297D8C 0070+00 0/0 1/1 0/0 .text
* alloc__13JASDSPChannelFUcPFUlPQ26JASDsp8TChannelPv_lPv */
JASDSPChannel* JASDSPChannel::alloc(u8 i_priority, Callback i_callback, void* i_callbackData) {
JASDSPChannel* channel = getLowestChannel(i_priority);
if (channel == NULL) {
return NULL;
}
channel->drop();
channel->mPriority = i_priority;
channel->field_0xc = 0;
channel->mCallback = i_callback;
channel->mCallbackData = i_callbackData;
return channel;
}
/* 8029D4BC-8029D534 297DFC 0078+00 0/0 1/1 0/0 .text
* allocForce__13JASDSPChannelFUcPFUlPQ26JASDsp8TChannelPv_lPv */
JASDSPChannel* JASDSPChannel::allocForce(u8 i_priority, Callback i_callback, void* i_callbackData) {
JASDSPChannel* channel = getLowestChannel(i_priority);
if (channel == NULL) {
return NULL;
}
channel->mStatus = STATUS_INACTIVE;
channel->drop();
channel->mPriority = i_priority;
channel->field_0xc = 0;
channel->mCallback = i_callback;
channel->mCallbackData = i_callbackData;
return channel;
}
/* 8029D534-8029D540 297E74 000C+00 0/0 1/1 0/0 .text setPriority__13JASDSPChannelFUc */
void JASDSPChannel::setPriority(u8 i_priority) {
mPriority = i_priority;
}
/* 8029D540-8029D5D0 297E80 0090+00 2/2 0/0 0/0 .text getLowestChannel__13JASDSPChannelFi
*/
JASDSPChannel* JASDSPChannel::getLowestChannel(int i_priority) {
s16 best_priority = 0xff;
int best_index = -1;
int best_unknown = 0;
for (int i = 0; i < 0x40; i++) {
JASDSPChannel* channel = &sDspChannels[i];
s16 priority = channel->mPriority;
if (priority < 0) {
return channel;
}
if (priority <= i_priority && priority <= best_priority) {
if (priority != best_priority || channel->field_0xc > best_unknown) {
best_unknown = channel->field_0xc;
best_index = i;
best_priority = priority;
}
}
}
if (best_index < 0) {
return NULL;
}
return &sDspChannels[best_index];
}
/* 8029D5D0-8029D65C 297F10 008C+00 1/1 0/0 0/0 .text getLowestActiveChannel__13JASDSPChannelFv */
JASDSPChannel* JASDSPChannel::getLowestActiveChannel() {
s16 best_priority = 0xff;
int best_index = -1;
int best_unknown = 0;
for (int i = 0; i < 0x40; i++) {
JASDSPChannel* channel = &sDspChannels[i];
if (channel->mStatus == STATUS_ACTIVE) {
s16 priority = channel->mPriority;
if (priority < 0x7f && priority <= best_priority) {
if (priority != best_priority || channel->field_0xc > best_unknown) {
best_unknown = channel->field_0xc;
best_index = i;
best_priority = priority;
}
}
}
}
if (best_index < 0) {
return NULL;
}
return &sDspChannels[best_index];
}
/* 8029D65C-8029D89C 297F9C 0240+00 1/1 0/0 0/0 .text updateProc__13JASDSPChannelFv */
void JASDSPChannel::updateProc() {
int ret;
if (mChannel->isFinish()) {
mFlags &= ~2;
if (mStatus == STATUS_ACTIVE) {
if (mCallback != NULL) {
ret = mCallback(CB_STOP, NULL, mCallbackData);
} else {
ret = -1;
}
if (ret < 0) {
mPriority = -1;
}
}
mStatus = STATUS_INACTIVE;
mChannel->replyFinishRequest();
mChannel->flush();
} else if (mFlags & 2) {
mFlags &= ~2;
mChannel->forceStop();
mChannel->flush();
} else if (mStatus != STATUS_DROP) {
if ((mFlags & 1) && mStatus == STATUS_INACTIVE) {
mFlags &= ~1;
mStatus = STATUS_ACTIVE;
mChannel->init();
if (mCallback != NULL) {
ret = mCallback(CB_START, mChannel, mCallbackData);
} else {
ret = 0;
}
if (ret < 0) {
mStatus = STATUS_INACTIVE;
if (mCallback != NULL) {
ret = mCallback(CB_STOP, NULL, mCallbackData);
} else {
ret = -1;
}
if (ret < 0) {
mPriority = -1;
}
mChannel->flush();
} else {
mChannel->playStart();
mChannel->flush();
}
} else if (mStatus != STATUS_INACTIVE) {
bool flush = false;
if (mCallback != NULL) {
ret = mCallback(CB_PLAY, mChannel, mCallbackData);
flush = true;
} else {
ret = 0;
}
if (ret < 0) {
mStatus = STATUS_INACTIVE;
if (mCallback != NULL) {
ret = mCallback(CB_STOP, NULL, mCallbackData);
} else {
ret = -1;
}
if (ret < 0) {
mPriority = -1;
}
mChannel->playStop();
mChannel->flush();
} else {
field_0xc++;
if (flush) {
mChannel->flush();
}
}
}
}
}
/* 8029D89C-8029D910 2981DC 0074+00 0/0 1/1 0/0 .text updateAll__13JASDSPChannelFv */
void JASDSPChannel::updateAll() {
for (u32 i = 0; i < 0x40; i++) {
if ((i & 0xf) == 0 && i != 0) {
JASDsp::releaseHalt((i - 1) >> 4);
}
sDspChannels[i].updateProc();
}
JASDsp::releaseHalt(3);
}
/* 8029D910-8029D948 298250 0038+00 0/0 1/1 0/0 .text killActiveChannel__13JASDSPChannelFv */
int JASDSPChannel::killActiveChannel() {
JASDSPChannel* channel = getLowestActiveChannel();
if (channel == NULL) {
return 0;
} else {
channel->drop();
return 1;
}
}
/* 8029D948-8029D958 298288 0010+00 0/0 1/1 0/0 .text getHandle__13JASDSPChannelFUl */
JASDSPChannel* JASDSPChannel::getHandle(u32 i_index) {
return &sDspChannels[i_index];
}
+752
View File
@@ -0,0 +1,752 @@
//
// Generated By: dol2asm
// Translation Unit: JASDSPInterface
//
#include "JSystem/JAudio2/JASDSPInterface.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASWaveInfo.h"
#include "JSystem/JAudio2/dsptask.h"
#include "JSystem/JAudio2/osdsp_task.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/os/OSCache.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 804512E8-804512EC 0007E8 0004+00 5/5 0/0 0/0 .sbss CH_BUF__6JASDsp */
JASDsp::TChannel* JASDsp::CH_BUF;
/* 804512EC-804512F0 0007EC 0004+00 3/3 0/0 0/0 .sbss FX_BUF__6JASDsp */
JASDsp::FxBuf* JASDsp::FX_BUF;
/* 804512F0-804512F4 0007F0 0004+00 2/2 0/0 0/0 .sbss sDSPVolume__6JASDsp */
f32 JASDsp::sDSPVolume;
/* 8029D958-8029D9A4 298298 004C+00 0/0 1/1 0/0 .text boot__6JASDspFPFPv_v */
void JASDsp::boot(void (*param_0)(void*)) {
static bool data_804512F4 = true;
if (data_804512F4) {
DspBoot(param_0);
data_804512F4 = false;
}
}
/* 8029D9A4-8029D9C4 2982E4 0020+00 0/0 1/1 0/0 .text releaseHalt__6JASDspFUl */
void JASDsp::releaseHalt(u32 param_0) {
DSPReleaseHalt2(param_0);
}
/* 8029D9C4-8029D9E4 298304 0020+00 0/0 1/1 0/0 .text finishWork__6JASDspFUs */
void JASDsp::finishWork(u16 param_0) {
DspFinishWork(param_0);
}
/* 8029D9E4-8029DA04 298324 0020+00 0/0 1/1 0/0 .text syncFrame__6JASDspFUlUlUl */
void JASDsp::syncFrame(u32 param_0, u32 param_1, u32 param_2) {
DsyncFrame2(param_0, param_1, param_2);
}
/* 8029DA04-8029DA30 298344 002C+00 0/0 1/1 0/0 .text setDSPMixerLevel__6JASDspFf */
void JASDsp::setDSPMixerLevel(f32 dsp_level) {
sDSPVolume = dsp_level;
dsp_level *= 4.0f;
DsetMixerLevel(dsp_level);
}
/* 8029DA30-8029DA38 298370 0008+00 0/0 1/1 0/0 .text getDSPMixerLevel__6JASDspFv */
f32 JASDsp::getDSPMixerLevel() {
return sDSPVolume;
}
/* 8029DA38-8029DA48 298378 0010+00 0/0 1/1 0/0 .text getDSPHandle__6JASDspFi */
JASDsp::TChannel* JASDsp::getDSPHandle(int param_0) {
return CH_BUF + param_0;
}
/* 8029DA48-8029DA6C 298388 0024+00 3/3 0/0 0/0 .text setFilterTable__6JASDspFPsPsUl */
void JASDsp::setFilterTable(s16* param_0, s16* param_1, u32 param_2) {
for (int i = 0; i < param_2; i++) {
*param_0++ = *param_1++;
}
}
/* 8029DA6C-8029DAA0 2983AC 0034+00 1/1 0/0 0/0 .text flushBuffer__6JASDspFv */
void JASDsp::flushBuffer() {
DCFlushRange(CH_BUF, sizeof(TChannel) * 64);
DCFlushRange(FX_BUF, sizeof(FxBuf) * 4);
}
/* 8029DAA0-8029DAC8 2983E0 0028+00 0/0 1/1 0/0 .text invalChannelAll__6JASDspFv */
void JASDsp::invalChannelAll() {
DCInvalidateRange(CH_BUF, sizeof(TChannel) * 64);
}
/* ############################################################################################## */
/* 8039B360-8039B3A0 0279C0 0040+00 1/1 0/0 0/0 .rodata DSPADPCM_FILTER__6JASDsp */
u8 const JASDsp::DSPADPCM_FILTER[64] = {
0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00,
0x10, 0x00, 0xF8, 0x00, 0x0E, 0x00, 0xFA, 0x00, 0x0C, 0x00, 0xFC, 0x00, 0x12, 0x00, 0xF6, 0x00,
0x10, 0x68, 0xF7, 0x38, 0x12, 0xC0, 0xF7, 0x04, 0x14, 0x00, 0xF4, 0x00, 0x08, 0x00, 0xF8, 0x00,
0x04, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x04, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00,
};
/* 8039B3A0-8039B8A0 -00001 0500+00 1/1 0/0 0/0 .rodata DSPRES_FILTER__6JASDsp */
u32 const JASDsp::DSPRES_FILTER[320] = {
0x0C3966AD,
0x0D46FFDF,
0x0B396696,
0x0E5FFFD8,
0x0A446669,
0x0F83FFD0,
0x095A6626,
0x10B4FFC8,
0x087D65CD,
0x11F0FFBF,
0x07AB655E,
0x1338FFB6,
0x06E464D9,
0x148CFFAC,
0x0628643F,
0x15EBFFA1,
0x0577638F,
0x1756FF96,
0x04D162CB,
0x18CBFF8A,
0x043561F3,
0x1A4CFF7E,
0x03A46106,
0x1BD7FF71,
0x031C6007,
0x1D6CFF64,
0x029F5EF5,
0x1F0BFF56,
0x022A5DD0,
0x20B3FF48,
0x01BE5C9A,
0x2264FF3A,
0x015B5B53,
0x241EFF2C,
0x010159FC,
0x25E0FF1E,
0x00AE5896,
0x27A9FF10,
0x00635720,
0x297AFF02,
0x001F559D,
0x2B50FEF4,
0xFFE2540D,
0x2D2CFEE8,
0xFFAC5270,
0x2F0DFEDB,
0xFF7C50C7,
0x30F3FED0,
0xFF534F14,
0x32DCFEC6,
0xFF2E4D57,
0x34C8FEBD,
0xFF0F4B91,
0x36B6FEB6,
0xFEF549C2,
0x38A5FEB0,
0xFEDF47ED,
0x3A95FEAC,
0xFECE4611,
0x3C85FEAB,
0xFEC04430,
0x3E74FEAC,
0xFEB6424A,
0x4060FEAF,
0xFEAF4060,
0x424AFEB6,
0xFEAC3E74,
0x4430FEC0,
0xFEAB3C85,
0x4611FECE,
0xFEAC3A95,
0x47EDFEDF,
0xFEB038A5,
0x49C2FEF5,
0xFEB636B6,
0x4B91FF0F,
0xFEBD34C8,
0x4D57FF2E,
0xFEC632DC,
0x4F14FF53,
0xFED030F3,
0x50C7FF7C,
0xFEDB2F0D,
0x5270FFAC,
0xFEE82D2C,
0x540DFFE2,
0xFEF42B50,
0x559D001F,
0xFF02297A,
0x57200063,
0xFF1027A9,
0x589600AE,
0xFF1E25E0,
0x59FC0101,
0xFF2C241E,
0x5B53015B,
0xFF3A2264,
0x5C9A01BE,
0xFF4820B3,
0x5DD0022A,
0xFF561F0B,
0x5EF5029F,
0xFF641D6C,
0x6007031C,
0xFF711BD7,
0x610603A4,
0xFF7E1A4C,
0x61F30435,
0xFF8A18CB,
0x62CB04D1,
0xFF961756,
0x638F0577,
0xFFA115EB,
0x643F0628,
0xFFAC148C,
0x64D906E4,
0xFFB61338,
0x655E07AB,
0xFFBF11F0,
0x65CD087D,
0xFFC810B4,
0x6626095A,
0xFFD00F83,
0x66690A44,
0xFFD80E5F,
0x66960B39,
0xFFDF0D46,
0x66AD0C39,
0x00000C8B,
0x18F82527,
0x30FB3C56,
0x471C5133,
0x5A8262F1,
0x6A6D70E2,
0x76417A7C,
0x7D897F61,
0x7FFF7F61,
0x7D897A7C,
0x764170E2,
0x6A6D62F1,
0x5A825133,
0x471C3C56,
0x30FB2527,
0x18F80C8B,
0x0000F375,
0xE708DAD9,
0xCF05C3AA,
0xB8E4AECD,
0xA57E9D0F,
0x95938F1E,
0x89BF8584,
0x8277809F,
0x8001809F,
0x82778584,
0x89BF8F1E,
0x95939D0F,
0xA57EAECD,
0xB8E4C3AA,
0xCF05DAD9,
0xE708F375,
0x000007FF,
0x0FFF17FF,
0x1FFF27FF,
0x2FFF37FF,
0x3FFF47FF,
0x4FFF57FF,
0x5FFF67FF,
0x6FFF77FF,
0x7FFF7800,
0x70006800,
0x60005800,
0x50004800,
0x40003800,
0x30002800,
0x20001800,
0x10000800,
0x0000F801,
0xF001E801,
0xE001D801,
0xD001C801,
0xC001B801,
0xB001A801,
0xA0019801,
0x90018801,
0x80018800,
0x90009800,
0xA000A800,
0xB000B800,
0xC000C800,
0xD000D800,
0xE000E800,
0xF000F800,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0x1FFF3FFF,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0x1FFFC001,
0x00000192,
0x032404B6,
0x064707D9,
0x096A0AFB,
0x0C8B0E1B,
0x0FAB1139,
0x12C71455,
0x15E1176D,
0x18F81A82,
0x1C0B1D93,
0x1F19209F,
0x222323A6,
0x252726A7,
0x282629A3,
0x2B1F2C98,
0x2E102F87,
0x30FB326E,
0x33DE354D,
0x36B93824,
0x398C3AF2,
0x3C563DB7,
0x3F174073,
0x41CD4325,
0x447A45CC,
0x471C4869,
0x49B34AFB,
0x4C3F4D81,
0x4EBF4FFB,
0x51335268,
0x539A54C9,
0x55F5571D,
0x58425964,
0x5A825B9C,
0x5CB35DC7,
0x5ED75FE3,
0x60EB61F0,
0x62F163EE,
0x64E865DD,
0x66CF67BC,
0x68A6698B,
0x6A6D6B4A,
0x6C236CF8,
0x6DC96E96,
0x6F5E7022,
0x70E2719D,
0x72547307,
0x73B5745F,
0x750475A5,
0x764176D8,
0x776B77FA,
0x78847909,
0x79897A05,
0x7A7C7AEE,
0x7B5C7BC5,
0x7C297C88,
0x7CE37D39,
0x7D897DD5,
0x7E1D7E5F,
0x7E9C7ED5,
0x7F097F37,
0x7F617F86,
0x7FA67FC1,
0x7FD87FE9,
0x7FF57FFD,
};
/* 8029DAC8-8029DB78 298408 00B0+00 0/0 1/1 0/0 .text initBuffer__6JASDspFv */
void JASDsp::initBuffer() {
CH_BUF = new(JASDram, 0x20) TChannel[64];
FX_BUF = new(JASDram, 0x20) FxBuf[4];
JASCalc::bzero(CH_BUF, 0x6000);
JASCalc::bzero(FX_BUF, sizeof(FxBuf) * 4);
for (u8 i = 0; i < 4; i++) {
setFXLine(i, NULL, NULL);
}
DsetupTable(0x40, u32(CH_BUF), u32(&DSPRES_FILTER), u32(&DSPADPCM_FILTER), u32(FX_BUF));
flushBuffer();
}
/* ############################################################################################## */
/* 803C78F0-803C7920 024A10 0018+18 1/1 0/0 0/0 .data SEND_TABLE__6JASDsp */
u16 JASDsp::SEND_TABLE[12 + 12 /* padding */] = {
0x0D00,
0x0D60,
0x0DC8,
0x0E28,
0x0E88,
0x0EE8,
0x0CA0,
0x0F40,
0x0FA0,
0x0B00,
0x09A0,
0x0000,
/* padding */
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
0x0000,
};
/* 8029DB78-8029DCA4 2984B8 012C+00 1/1 1/1 0/0 .text
* setFXLine__6JASDspFUcPsPQ26JASDsp13FxlineConfig_ */
int JASDsp::setFXLine(u8 param_0, s16* param_1, JASDsp::FxlineConfig_* param_2) {
FxBuf* puVar3 = FX_BUF + param_0;
JASCriticalSection aJStack_20;
puVar3->field_0x0 = 0;
if (param_2 != NULL) {
puVar3->field_0xa = param_2->field_0x4;
puVar3->field_0x8 = SEND_TABLE[param_2->field_0x2];
puVar3->field_0xe = param_2->field_0x8;
puVar3->field_0xc = SEND_TABLE[param_2->field_0x6];
puVar3->field_0x2 = param_2->field_0xc;
setFilterTable(puVar3->field_0x10, param_2->field_0x10, 8);
}
if (param_1 != NULL && param_2 != NULL) {
u32 iVar1 = param_2->field_0xc * 0xa0;
puVar3->field_0x4 = param_1;
JASCalc::bzero(param_1, iVar1);
DCFlushRange(param_1, iVar1);
} else if (param_2 == NULL || param_1 != NULL) {
puVar3->field_0x4 = param_1;
}
if (puVar3->field_0x4 != NULL) {
puVar3->field_0x0 = param_2->field_0x0;
} else {
puVar3->field_0x0 = 0;
}
DCFlushRange(puVar3, sizeof(FxBuf));
return 1;
}
/* 8029DCA4-8029DCE0 2985E4 003C+00 0/0 1/1 0/0 .text init__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::init() {
mPauseFlag = 0;
mIsFinished = 0;
mForcedStop = 0;
mIsActive = 0;
field_0x058 = 0;
field_0x068 = 0;
initFilter();
}
/* 8029DCE0-8029DD44 298620 0064+00 0/0 1/1 0/0 .text playStart__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::playStart() {
field_0x10c = 0;
field_0x060 = 0;
field_0x008 = 1;
field_0x066 = 0;
int i;
for (i = 0; i < 4; i++) {
field_0x078[i] = 0;
field_0x0a8[i] = 0;
}
for (i = 0; i < 20; i++) {
field_0x080[i] = 0;
}
mIsActive = 1;
}
/* 8029DD44-8029DD50 298684 000C+00 0/0 1/1 0/0 .text playStop__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::playStop() {
mIsActive = 0;
}
/* 8029DD50-8029DD60 298690 0010+00 0/0 1/1 0/0 .text replyFinishRequest__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::replyFinishRequest() {
mIsFinished = 0;
mIsActive = 0;
}
/* 8029DD60-8029DD6C 2986A0 000C+00 0/0 1/1 0/0 .text forceStop__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::forceStop() {
mForcedStop = 1;
}
/* 8029DD6C-8029DD7C 2986AC 0010+00 1/1 0/0 0/0 .text isActive__Q26JASDsp8TChannelCFv */
bool JASDsp::TChannel::isActive() const {
return mIsActive != 0;
}
/* 8029DD7C-8029DD8C 2986BC 0010+00 0/0 1/1 0/0 .text isFinish__Q26JASDsp8TChannelCFv */
bool JASDsp::TChannel::isFinish() const {
return mIsFinished != 0;
}
/* ############################################################################################## */
/* 8045574C-80455754 003D4C 0008+00 1/1 0/0 0/0 .sdata2 COMP_BLOCKSAMPLES$331 */
static const u8 COMP_BLOCKSAMPLES[8] = {
0x10, 0x10, 0x01, 0x01, 0x01, 0x10, 0x10, 0x01,
};
/* 80455754-8045575C 003D54 0008+00 1/1 0/0 0/0 .sdata2 COMP_BLOCKBYTES$332 */
static const u8 COMP_BLOCKBYTES[8] = {
0x09, 0x05, 0x08, 0x10, 0x01, 0x01, 0x01, 0x01,
};
/* 8029DD8C-8029DEAC 2986CC 0120+00 0/0 1/1 0/0 .text
* setWaveInfo__Q26JASDsp8TChannelFRC11JASWaveInfoUlUl */
void JASDsp::TChannel::setWaveInfo(JASWaveInfo const& param_0, u32 param_1, u32 param_2) {
field_0x118 = param_1;
field_0x064 = COMP_BLOCKSAMPLES[param_0.field_0x00];
field_0x100 = COMP_BLOCKBYTES[param_0.field_0x00];
field_0x068 = 0;
if (field_0x100 >= 4) {
field_0x11c = param_0.field_0x18;
field_0x102 = param_0.field_0x02;
if (field_0x102) {
if (param_2 == 1) {
param_2 = param_0.field_0x10;
}
field_0x110 = param_0.field_0x10;
field_0x114 = param_0.field_0x14;
field_0x104 = param_0.field_0x1c;
field_0x106 = param_0.field_0x1e;
} else {
field_0x114 = field_0x11c;
}
if (param_2 && field_0x114 > param_2) {
switch (param_0.field_0x00) {
case 0:
case 1:
field_0x068 = param_2;
field_0x118 += param_2 * field_0x100 >> 4;
field_0x110 -= param_2;
field_0x114 -= param_2;
break;
case 2:
case 3:
field_0x068 = param_2;
break;
}
}
for (int i = 0; i < 16; i++) {
field_0x0b0[i] = 0;
}
}
}
/* 8029DEAC-8029DEC4 2987EC 0018+00 0/0 1/1 0/0 .text setOscInfo__Q26JASDsp8TChannelFUl
*/
void JASDsp::TChannel::setOscInfo(u32 param_0) {
field_0x118 = 0;
field_0x064 = 16;
field_0x100 = param_0;
}
/* 8029DEC4-8029DEF0 298804 002C+00 0/0 1/1 0/0 .text initAutoMixer__Q26JASDsp8TChannelFv
*/
void JASDsp::TChannel::initAutoMixer() {
if (field_0x058) {
field_0x054 = field_0x056;
} else {
field_0x054 = 0;
field_0x058 = 1;
}
}
/* 8029DEF0-8029DF1C 298830 002C+00 0/0 1/1 0/0 .text setAutoMixer__Q26JASDsp8TChannelFUsUcUcUcUc
*/
void JASDsp::TChannel::setAutoMixer(u16 param_0, u8 param_1, u8 param_2, u8 param_3,
u8 param_4) {
field_0x050 = (param_1 << 8) | param_2;
field_0x052 = param_3 << 8 | param_3 << 1;
field_0x056 = param_0;
field_0x058 = 1;
}
/* 8029DF1C-8029DF34 29885C 0018+00 0/0 2/2 0/0 .text setPitch__Q26JASDsp8TChannelFUs */
void JASDsp::TChannel::setPitch(u16 param_0) {
if (param_0 >= 0x7fff) {
param_0 = 0x7fff;
}
mPitch = param_0;
}
/* 8029DF34-8029DF54 298874 0020+00 0/0 1/1 0/0 .text setMixerInitVolume__Q26JASDsp8TChannelFUcs
*/
void JASDsp::TChannel::setMixerInitVolume(u8 param_0, s16 param_1) {
u16* tmp = field_0x010[param_0];
tmp[2] = param_1;
tmp[1] = param_1;
tmp[3] = 0;
}
/* 8029DF54-8029DF80 298894 002C+00 0/0 1/1 0/0 .text setMixerVolume__Q26JASDsp8TChannelFUcs */
void JASDsp::TChannel::setMixerVolume(u8 param_0, s16 param_1) {
if (mForcedStop == 0) {
u16* tmp = field_0x010[param_0];
tmp[1] = param_1;
tmp[3] &= 0xff;
}
}
/* 8029DF80-8029DF8C 2988C0 000C+00 0/0 2/2 0/0 .text setPauseFlag__Q26JASDsp8TChannelFUc
*/
void JASDsp::TChannel::setPauseFlag(u8 param_0) {
mPauseFlag = param_0;
}
/* 8029DF8C-8029DFB0 2988CC 0024+00 0/0 1/1 0/0 .text flush__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::flush() {
DCFlushRange(this, sizeof(*this));
}
/* 8029DFB0-8029E00C 2988F0 005C+00 1/1 0/0 0/0 .text initFilter__Q26JASDsp8TChannelFv */
void JASDsp::TChannel::initFilter() {
int i;
for (i = 0; i < 8; i++) {
fir_filter_params[i] = 0;
}
fir_filter_params[0] = 0x7fff;
for (i = 0; i < 8; i++) {
iir_filter_params[i] = 0;
}
iir_filter_params[0] = 0x7fff;
iir_filter_params[4] = 0;
}
/* 8029E00C-8029E044 29894C 0038+00 0/0 1/1 0/0 .text setFilterMode__Q26JASDsp8TChannelFUs */
void JASDsp::TChannel::setFilterMode(u16 param_0) {
u8 r30 = param_0 & 0x20;
u8 r31 = param_0 & 0x1f;
if (r30) {
if (r31 > 0x14) {
r31 = 0x14;
}
} else {
if (r31 > 0x18) {
r31 = 0x18;
}
}
mFilterMode = r30 + r31;
}
/* 8029E044-8029E06C 298984 0028+00 0/0 1/1 0/0 .text setIIRFilterParam__Q26JASDsp8TChannelFPs */
void JASDsp::TChannel::setIIRFilterParam(s16* param_0) {
setFilterTable(iir_filter_params, param_0, 8);
}
/* 8029E06C-8029E094 2989AC 0028+00 0/0 1/1 0/0 .text setFIR8FilterParam__Q26JASDsp8TChannelFPs */
void JASDsp::TChannel::setFIR8FilterParam(s16* param_0) {
setFilterTable(fir_filter_params, param_0, 8);
}
/* 8029E094-8029E09C -00001 0008+00 0/0 0/0 0/0 .text setDistFilter__Q26JASDsp8TChannelFs
*/
void JASDsp::TChannel::setDistFilter(s16 param_0) {
iir_filter_params[4] = param_0;
}
/* ############################################################################################## */
/* 8039B8A0-8039B8B8 027F00 0018+00 1/1 0/0 0/0 .rodata connect_table$463 */
static u16 const connect_table[12] = {
0x0000, 0x0D00, 0x0D60, 0x0DC0, 0x0E20, 0x0E80,
0x0EE0, 0x0CA0, 0x0F40, 0x0FA0, 0x0B00, 0x09A0,
};
/* 8029E09C-8029E0BC 2989DC 0020+00 0/0 1/1 0/0 .text setBusConnect__Q26JASDsp8TChannelFUcUc */
void JASDsp::TChannel::setBusConnect(u8 param_0, u8 param_1) {
u16* tmp = field_0x010[param_0];
tmp[0] = connect_table[param_1];
}
/* 8029E0BC-8029E130 2989FC 0074+00 0/0 1/1 0/0 .text DSP_CreateMap2__FUl */
u16 DSP_CreateMap2(u32 param_0) {
u16 r30 = 0;
JASDsp::TChannel* channel = &JASDsp::CH_BUF[param_0 << 4];
for (int i = 0; i < 16; i++) {
r30 <<= 1;
if (channel->isActive()) {
r30 |= 1;
}
channel++;
}
return r30;
}
/* 804507B8-804507C0 000238 0004+04 0/0 5/5 0/0 .sdata one__11JASWaveInfo */
u32 JASWaveInfo::one = 1;
+102
View File
@@ -0,0 +1,102 @@
//
// Generated By: dol2asm
// Translation Unit: JASDriverIF
//
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASAiCtrl.h"
#include "JSystem/JAudio2/JASDSPInterface.h"
#include "dolphin/os/OSThread.h"
//
// Declarations:
//
/* 8029E130-8029E150 298A70 0020+00 0/0 3/3 0/0 .text setDSPLevel__9JASDriverFf */
void JASDriver::setDSPLevel(f32 param_0) {
JASDsp::setDSPMixerLevel(param_0);
}
/* ############################################################################################## */
/* 804507C0-804507C4 000240 0002+02 1/0 0/0 0/0 .sdata MAX_MIXERLEVEL__9JASDriver */
u16 JASDriver::MAX_MIXERLEVEL = 0x2EE0;
/* 8029E150-8029E158 -00001 0008+00 0/0 0/0 0/0 .text getChannelLevel_dsp__9JASDriverFv
*/
u16 JASDriver::getChannelLevel_dsp() {
return JASDriver::MAX_MIXERLEVEL;
}
/* 8029E158-8029E178 298A98 0020+00 0/0 3/3 0/0 .text getDSPLevel__9JASDriverFv */
f32 JASDriver::getDSPLevel() {
return JASDsp::getDSPMixerLevel();
}
/* ############################################################################################## */
/* 804507C4-804507C8 000244 0004+00 2/1 0/0 0/0 .sdata JAS_SYSTEM_OUTPUT_MODE__9JASDriver
*/
u32 JASDriver::JAS_SYSTEM_OUTPUT_MODE = 0x00000001;
/* 8029E178-8029E180 298AB8 0008+00 0/0 2/2 0/0 .text setOutputMode__9JASDriverFUl */
void JASDriver::setOutputMode(u32 param_0) {
JAS_SYSTEM_OUTPUT_MODE = param_0;
}
/* 8029E180-8029E188 -00001 0008+00 0/0 0/0 0/0 .text getOutputMode__9JASDriverFv */
u32 JASDriver::getOutputMode() {
return JASDriver::JAS_SYSTEM_OUTPUT_MODE;
}
/* 8029E188-8029E1C4 298AC8 003C+00 0/0 1/1 0/0 .text waitSubFrame__9JASDriverFv */
void JASDriver::waitSubFrame() {
u32 r31 = getSubFrameCounter();
do {
OSYieldThread();
} while (r31 == getSubFrameCounter());
}
/* ############################################################################################## */
/* 80431C78-80431D78 05E998 0100+00 4/4 0/0 0/0 .bss sDspSyncCallback__9JASDriver */
JASCallbackMgr JASDriver::sDspSyncCallback;
/* 80431D78-80431E78 05EA98 0100+00 2/4 0/0 0/0 .bss sSubFrameCallback__9JASDriver */
JASCallbackMgr JASDriver::sSubFrameCallback;
/* 80431E78-80431F80 05EB98 0100+08 1/3 0/0 0/0 .bss sUpdateDacCallback__9JASDriver */
JASCallbackMgr JASDriver::sUpdateDacCallback;
/* 8029E1C4-8029E240 298B04 007C+00 0/0 2/2 0/0 .text rejectCallback__9JASDriverFPFPv_lPv
*/
int JASDriver::rejectCallback(DriverCallback callback, void* param_1) {
int r31 = sDspSyncCallback.reject(callback, param_1);
r31 += sSubFrameCallback.reject(callback, param_1);
r31 += sUpdateDacCallback.reject(callback, param_1);
return r31;
}
/* 8029E240-8029E274 298B80 0034+00 0/0 1/1 0/0 .text registerDspSyncCallback__9JASDriverFPFPv_lPv
*/
bool JASDriver::registerDspSyncCallback(DriverCallback callback, void* param_1) {
return sDspSyncCallback.regist(callback, param_1);
}
/* 8029E274-8029E2A8 298BB4 0034+00 0/0 3/3 0/0 .text
* registerSubFrameCallback__9JASDriverFPFPv_lPv */
bool JASDriver::registerSubFrameCallback(DriverCallback callback, void* param_1) {
return sSubFrameCallback.regist(callback, param_1);
}
/* 8029E2A8-8029E2D0 298BE8 0028+00 0/0 1/1 0/0 .text subframeCallback__9JASDriverFv */
void JASDriver::subframeCallback() {
sSubFrameCallback.callback();
}
/* 8029E2D0-8029E2F8 298C10 0028+00 0/0 1/1 0/0 .text DSPSyncCallback__9JASDriverFv */
void JASDriver::DSPSyncCallback() {
sDspSyncCallback.callback();
}
/* 8029E2F8-8029E320 298C38 0028+00 0/0 1/1 0/0 .text updateDacCallback__9JASDriverFv */
void JASDriver::updateDacCallback() {
sUpdateDacCallback.callback();
}
+121
View File
@@ -0,0 +1,121 @@
//
// Generated By: dol2asm
// Translation Unit: JASDrumSet
//
#include "JSystem/JAudio2/JASDrumSet.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JKernel/JKRHeap.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 802982EC-80298314 292C2C 0028+00 0/0 2/2 0/0 .text __ct__10JASDrumSetFv */
JASDrumSet::JASDrumSet() {
field_0x4 = NULL;
field_0x8 = 0;
}
/* 80298314-80298370 292C54 005C+00 1/0 0/0 0/0 .text __dt__10JASDrumSetFv */
JASDrumSet::~JASDrumSet() {
}
/* 80298370-802983CC 292CB0 005C+00 0/0 2/2 0/0 .text newPercArray__10JASDrumSetFUcP7JKRHeap */
void JASDrumSet::newPercArray(u8 param_0, JKRHeap* param_1) {
if (param_0) {
field_0x8 = param_0;
field_0x4 = new (param_1, 0) TPerc*[field_0x8];
JASCalc::bzero(field_0x4, field_0x8 * sizeof(TPerc*));
}
}
/* ############################################################################################## */
/* 80431B58-80431B70 05E878 0018+00 1/1 0/0 0/0 .bss osc$213 */
static JASOscillator::Data osc;
/* 80451270-80451274 000770 0004+00 1/1 0/0 0/0 .sbss oscp$214 */
static JASOscillator::Data* oscp;
/* 80451274-80451278 000774 0004+00 1/1 0/0 0/0 .sbss None */
static s8 data_80451274[4];
/* 802983CC-802984B4 292D0C 00E8+00 1/0 0/0 0/0 .text getParam__10JASDrumSetCFiiP12JASInstParam */
bool JASDrumSet::getParam(int param_0, int param_1, JASInstParam* param_2) const {
if (field_0x4 == NULL) {
return false;
}
if (param_0 >= field_0x8) {
return false;
}
TPerc* perc = field_0x4[param_0];
if (perc == NULL) {
return false;
}
param_2->field_0x1c = 0;
param_2->field_0x1e = 1;
param_2->mVolume = perc->mVolume;
param_2->mPitch = perc->mPitch;
param_2->mPan = perc->mPan;
param_2->field_0x18 = perc->field_0xc;
osc.mTarget = 0;
osc._04 = 1.0f;
osc.mTable = NULL;
osc._0C = NULL;
osc.mScale = 1.0f;
osc._14 = 0.0f;
if (data_80451274[0] == 0) {
oscp = &osc;
data_80451274[0] = 1;
}
param_2->field_0x14 = &oscp;
param_2->field_0x1d = 1;
param_2->mVolume *= perc->field_0x10;
param_2->mPitch *= perc->field_0x14;
param_2->field_0x1a = perc->field_0xe;
return true;
}
/* 802984B4-802984C4 292DF4 0010+00 0/0 2/2 0/0 .text setPerc__10JASDrumSetFiPQ210JASDrumSet5TPerc
*/
void JASDrumSet::setPerc(int param_0, JASDrumSet::TPerc* param_1) {
field_0x4[param_0] = param_1;
}
/* ############################################################################################## */
/* 802984C4-802984E4 292E04 0020+00 0/0 2/2 0/0 .text __ct__Q210JASDrumSet5TPercFv */
JASDrumSet::TPerc::TPerc() {
mVolume = 1.0f;
mPitch = 1.0f;
mPan = 0.5f;
field_0xc = 1000;
}
/* 802984E4-802984EC -00001 0008+00 0/0 0/0 0/0 .text setRelease__Q210JASDrumSet5TPercFUl
*/
void JASDrumSet::TPerc::setRelease(u32 param_0) {
field_0xc = param_0;
}
/* 802984EC-802984F8 292E2C 000C+00 1/0 0/0 0/0 .text getType__10JASDrumSetCFv */
u32 JASDrumSet::getType() const { return 'PERC'; }
+39
View File
@@ -0,0 +1,39 @@
//
// Generated By: dol2asm
// Translation Unit: JASDvdThread
//
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JAudio2/JASTaskThread.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/types.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 80451208-80451210 000708 0004+04 2/1 0/0 0/0 .sbss sThread__6JASDvd */
JASTaskThread* JASDvd::sThread;
/* 8028FEFC-8028FF04 -00001 0008+00 0/0 0/0 0/0 .text getThreadPointer__6JASDvdFv */
JASTaskThread* JASDvd::getThreadPointer() {
return JASDvd::sThread;
}
/* 8028FF04-8028FFA8 28A844 00A4+00 0/0 1/1 0/0 .text createThread__6JASDvdFliUl */
bool JASDvd::createThread(s32 priority, int param_1, u32 param_2) {
if (sThread != NULL) return false;
sThread = new (JASDram, 0) JASTaskThread(priority, param_1, param_2);
sThread->setCurrentHeap(JKRGetSystemHeap());
OSResumeThread(sThread->getThreadRecord());
return true;
}
+373
View File
@@ -0,0 +1,373 @@
//
// Generated By: dol2asm
// Translation Unit: JASHeapCtrl
//
#include "JSystem/JAudio2/JASHeapCtrl.h"
#include "JSystem/JAudio2/JASMutex.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "dol2asm.h"
//
// Types:
//
struct JASDisposer {
virtual ~JASDisposer();
/* 80290BCC */ virtual void onDispose();
};
//
// Forward References:
//
extern "C" void __ct__7JASHeapFP11JASDisposer();
extern "C" void initRootHeap__7JASHeapFPvUl();
extern "C" void alloc__7JASHeapFP7JASHeapUl();
extern "C" void allocTail__7JASHeapFP7JASHeapUl();
extern "C" void free__7JASHeapFv();
extern "C" void insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb();
extern "C" void getTailHeap__7JASHeapFv();
extern "C" void getTailOffset__7JASHeapFv();
extern "C" void getCurOffset__7JASHeapFv();
extern "C" void __ct__17JASGenericMemPoolFv();
extern "C" void __dt__17JASGenericMemPoolFv();
extern "C" void newMemPool__17JASGenericMemPoolFUli();
extern "C" void alloc__17JASGenericMemPoolFUl();
extern "C" void free__17JASGenericMemPoolFPvUl();
extern "C" void setupRootHeap__9JASKernelFP12JKRSolidHeapUl();
extern "C" u32 getSystemHeap__9JASKernelFv();
extern "C" u32 getCommandHeap__9JASKernelFv();
extern "C" void setupAramHeap__9JASKernelFUlUl();
extern "C" void getAramHeap__9JASKernelFv();
extern "C" void __sinit_JASHeapCtrl_cpp();
extern "C" void __dt__7JASHeapFv();
extern "C" void onDispose__11JASDisposerFv();
extern "C" u8 audioAramHeap__9JASKernel[68];
extern "C" u8 sAramBase__9JASKernel[4];
extern "C" u8 sSystemHeap__9JASKernel[4];
extern "C" u8 sCommandHeap__9JASKernel[4];
//
// External References:
//
extern "C" void* __nw__FUlP7JKRHeapi();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __dla__FPv();
extern "C" void create__10JKRExpHeapFUlP7JKRHeapb();
extern "C" void __ct__10JSUPtrLinkFPv();
extern "C" void __dt__10JSUPtrLinkFv();
extern "C" void __dt__10JSUPtrListFv();
extern "C" void initiate__10JSUPtrListFv();
extern "C" void insert__10JSUPtrListFP10JSUPtrLinkP10JSUPtrLink();
extern "C" void remove__10JSUPtrListFP10JSUPtrLink();
extern "C" void __register_global_object();
extern "C" void _savegpr_26();
extern "C" void _savegpr_27();
extern "C" void _savegpr_28();
extern "C" void _savegpr_29();
extern "C" void _restgpr_26();
extern "C" void _restgpr_27();
extern "C" void _restgpr_28();
extern "C" void _restgpr_29();
extern "C" u8 sSystemHeap__7JKRHeap[4];
//
// Declarations:
//
/* 80290140-802901AC 28AA80 006C+00 1/1 2/2 0/0 .text __ct__7JASHeapFP11JASDisposer */
JASHeap::JASHeap(JASDisposer* disposer) : mTree(this) {
mDisposer = disposer;
mBase = NULL;
mSize = 0;
field_0x40 = 0;
OSInitMutex(&mMutex);
}
/* 802901AC-8029021C 28AAEC 0070+00 1/1 0/0 0/0 .text initRootHeap__7JASHeapFPvUl */
void JASHeap::initRootHeap(void* param_0, u32 param_1) {
JUT_ASSERT(97, ! isAllocated());
JASMutexLock lock(&mMutex);
mBase = (u8*)OSRoundUpPtr(param_0, 0x20);
field_0x40 = NULL;
mSize = param_1 - (u32(mBase) - u32(param_0));
}
/* 8029021C-802903F4 28AB5C 01D8+00 0/0 2/2 0/0 .text alloc__7JASHeapFP7JASHeapUl */
bool JASHeap::alloc(JASHeap* mother, u32 param_1) {
JUT_ASSERT(120, mother != 0);
JASMutexLock lock(&mMutex);
if (isAllocated()) {
#ifdef DEBUG
OSReport("[JASHeap::alloc] すでにヒープは確保されています。初期化してからにしてください。\n");
#endif
return 0;
}
if (!mother->isAllocated()) {
return 0;
}
param_1 = OSRoundUp32B(param_1);
u32 local_28 = mother->getCurOffset();
u32 local_2c = mother->getTailOffset();
if (local_28 + param_1 <= local_2c) {
mother->insertChild(this, mother->getTailHeap(), mother->mBase + local_28, param_1, false);
return 1;
}
s32 r27 = -1;
u8* r29 = mother->mBase;
bool local_43 = false;
JASHeap* local_30 = NULL;
void* local_34;
for (JSUTreeIterator<JASHeap> it = mother->mTree.getFirstChild(); it != mother->mTree.getEndChild(); it++) {
if (r29 >= mother->mBase + local_2c) {
break;
}
u32 local_3c = u32(it->mBase) - u32(r29);
if (local_3c >= param_1 && local_3c < r27) {
local_30 = *it;
local_34 = r29;
r27 = local_3c;
local_43 = true;
}
u32 r25 = it->mSize;
r29 = (u8*)it->mBase + r25;
}
if (r29 != mother->mBase && r29 < mother->mBase + local_2c) {
u32 local_40 = mother->mBase + mother->mSize - r29;
if (local_40 >= param_1 && local_40 < r27) {
local_30 = NULL;
local_34 = r29;
r27 = local_40;
local_43 = true;
}
}
if (!local_43) {
#ifdef DEBUG
OSReport("[JASHeap::alloc] マザーメモリが足りないので確保できません。\n");
#endif
return 0;
}
mother->insertChild(this, local_30, local_34, param_1, false);
return 1;
}
/* 802903F4-802904E4 28AD34 00F0+00 0/0 1/1 0/0 .text allocTail__7JASHeapFP7JASHeapUl */
bool JASHeap::allocTail(JASHeap* param_0, u32 param_1) {
// NONMATCHING
}
/* 802904E4-80290608 28AE24 0124+00 0/0 4/4 0/0 .text free__7JASHeapFv */
// regswap
#ifdef NONMATCHING
bool JASHeap::free() {
JASMutexLock lock(&mMutex);
if (!isAllocated()) {
return false;
}
JSUTreeIterator<JASHeap> stack_20;
for (JSUTreeIterator<JASHeap> it(mTree.getFirstChild()); it != mTree.getEndChild(); it = stack_20) {
stack_20 = it;
stack_20++;
it->free();
}
JSUTree<JASHeap>* parentTree = mTree.getParent();
if (parentTree) {
JASHeap* parentHeap = parentTree->getObject();
if (parentHeap->field_0x40 == this) {
JSUTreeIterator<JASHeap> stack_28(mTree.getPrevChild());
if (stack_28 != mTree.getEndChild()) {
parentHeap->field_0x40 = *stack_28;
} else {
parentHeap->field_0x40 = NULL;
}
}
parentTree->removeChild(&mTree);
}
mBase = NULL;
field_0x40 = NULL;
mSize = 0;
if (mDisposer) {
mDisposer->onDispose();
}
return true;
}
#else
bool JASHeap::free() {
// NONMATCHING
}
#endif
/* 80290608-802906F0 28AF48 00E8+00 2/2 0/0 0/0 .text
* insertChild__7JASHeapFP7JASHeapP7JASHeapPvUlb */
// regalloc
#ifdef NONMATCHING
void JASHeap::insertChild(JASHeap* heap, JASHeap* next, void* param_2, u32 param_3, bool param_4) {
JUT_ASSERT(537, heap != 0);
JUT_ASSERT(538, next == 0 || &mTree == next->mTree.getParent());
JASMutexLock lock(&mMutex);
if (!param_4) {
JSUTreeIterator<JASHeap> it;
if (!next) {
it = mTree.getLastChild();
} else {
it = next->mTree.getPrevChild();
}
JASHeap* r24 = it != mTree.getEndChild() ? it.getObject() : NULL;
if (field_0x40 == r24) {
field_0x40 = heap;
}
}
heap->mBase = (u8*)param_2;
heap->mSize = param_3;
heap->field_0x40 = NULL;
mTree.insertChild(&next->mTree, &heap->mTree);
}
#else
void JASHeap::insertChild(JASHeap* param_0, JASHeap* param_1, void* param_2, u32 param_3,
bool param_4) {
// NONMATCHING
}
#endif
/* 802906F0-8029077C 28B030 008C+00 3/3 0/0 0/0 .text getTailHeap__7JASHeapFv */
JASHeap* JASHeap::getTailHeap() {
JSUTreeIterator<JASHeap> it;
JASMutexLock lock(&mMutex);
if (!field_0x40) {
it = mTree.getFirstChild();
} else {
it = field_0x40->mTree.getNextChild();
}
if (it == mTree.getEndChild()) {
return NULL;
}
return it.getObject();
}
/* 8029077C-802907E0 28B0BC 0064+00 2/2 0/0 0/0 .text getTailOffset__7JASHeapFv */
u32 JASHeap::getTailOffset() {
JASMutexLock lock(&mMutex);
JASHeap* heap = getTailHeap();
u32 offset = !heap ? mSize : heap->mBase - mBase;
return offset;
}
/* 802907E0-80290848 28B120 0068+00 2/2 0/0 0/0 .text getCurOffset__7JASHeapFv */
u32 JASHeap::getCurOffset() {
JASMutexLock lock(&mMutex);
u32 offset = !field_0x40 ? 0 : field_0x40->mBase + field_0x40->mSize - mBase;
return offset;
}
/* 80290848-80290860 28B188 0018+00 0/0 32/32 0/0 .text __ct__17JASGenericMemPoolFv */
JASGenericMemPool::JASGenericMemPool() {
field_0x0 = NULL;
freeMemCount = 0;
totalMemCount = 0;
field_0xc = 0;
}
/* 80290860-802908C8 28B1A0 0068+00 0/0 9/9 0/0 .text __dt__17JASGenericMemPoolFv */
JASGenericMemPool::~JASGenericMemPool() {
// NONMATCHING
}
/* ############################################################################################## */
/* 80451210-80451214 000710 0004+00 2/2 15/15 0/0 .sbss JASDram */
JKRSolidHeap* JASDram;
/* 802908C8-80290948 28B208 0080+00 0/0 4/4 0/0 .text newMemPool__17JASGenericMemPoolFUli
*/
void JASGenericMemPool::newMemPool(u32 param_0, int param_1) {
// NONMATCHING
}
/* 80290948-80290994 28B288 004C+00 0/0 13/13 0/0 .text alloc__17JASGenericMemPoolFUl */
void* JASGenericMemPool::alloc(u32 param_0) {
// NONMATCHING
}
/* 80290994-802909B8 28B2D4 0024+00 0/0 15/15 0/0 .text free__17JASGenericMemPoolFPvUl */
void JASGenericMemPool::free(void* param_0, u32 param_1) {
// NONMATCHING
}
/* ############################################################################################## */
/* 80451214-80451218 000714 0004+00 1/1 0/0 0/0 .sbss sAramBase__9JASKernel */
u32 JASKernel::sAramBase;
/* 80451218-8045121C 000718 0004+00 2/1 0/0 0/0 .sbss sSystemHeap__9JASKernel */
JKRHeap* JASKernel::sSystemHeap;
/* 8045121C-80451220 00071C 0004+00 2/1 0/0 0/0 .sbss sCommandHeap__9JASKernel */
JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable>* JASKernel::sCommandHeap;
/* 802909B8-80290AC0 28B2F8 0108+00 0/0 1/1 0/0 .text setupRootHeap__9JASKernelFP12JKRSolidHeapUl
*/
// implement JASMemChunkPool
#ifdef NONMATCHING
void JASKernel::setupRootHeap(JKRSolidHeap* heap, u32 size) {
JUT_ASSERT(784, heap);
sSystemHeap = JKRExpHeap::create(size, heap, false);
JUT_ASSERT(787, sSystemHeap);
sCommandHeap = new JASMemChunkPool();
JUT_ASSERT(790, sCommandHeap);
JASDram = heap;
}
#else
void JASKernel::setupRootHeap(JKRSolidHeap* param_0, u32 param_1) {
// NONMATCHING
}
#endif
/* 80290AC0-80290AC8 -00001 0008+00 0/0 0/0 0/0 .text getSystemHeap__9JASKernelFv */
JKRHeap* JASKernel::getSystemHeap() {
return JASKernel::sSystemHeap;
}
/* 80290AC8-80290AD0 -00001 0008+00 0/0 0/0 0/0 .text getCommandHeap__9JASKernelFv */
JASMemChunkPool<1024, JASThreadingModel::ObjectLevelLockable>* JASKernel::getCommandHeap() {
return JASKernel::sCommandHeap;
}
/* ############################################################################################## */
/* 804315D0-804315DC 05E2F0 000C+00 1/1 0/0 0/0 .bss @313 */
static u8 lit_313[12];
/* 804315DC-80431620 05E2FC 0044+00 3/3 0/0 0/0 .bss audioAramHeap__9JASKernel */
u8 JASKernel::audioAramHeap[68];
/* 80290AD0-80290B08 28B410 0038+00 0/0 1/1 0/0 .text setupAramHeap__9JASKernelFUlUl */
void JASKernel::setupAramHeap(u32 param_0, u32 param_1) {
sAramBase = param_0;
(*(JASHeap*)audioAramHeap).initRootHeap((void*)sAramBase, param_1);
}
/* 80290B08-80290B14 28B448 000C+00 0/0 3/2 0/0 .text getAramHeap__9JASKernelFv */
JASHeap* JASKernel::getAramHeap() {
return (JASHeap*)audioAramHeap;
}
/* 80290B14-80290B54 28B454 0040+00 0/0 1/0 0/0 .text __sinit_JASHeapCtrl_cpp */
void __sinit_JASHeapCtrl_cpp() {
// NONMATCHING
}
#pragma push
#pragma force_active on
REGISTER_CTORS(0x80290B14, __sinit_JASHeapCtrl_cpp);
#pragma pop
/* 80290B54-80290BCC 28B494 0078+00 1/1 3/3 0/0 .text __dt__7JASHeapFv */
//JASHeap::~JASHeap() {
void __dt__7JASHeapFv() {
// NONMATCHING
}
/* 80290BCC-80290BD0 28B50C 0004+00 0/0 1/0 0/0 .text onDispose__11JASDisposerFv */
void JASDisposer::onDispose() {
/* empty function */
}
+85
View File
@@ -0,0 +1,85 @@
//
// Generated By: dol2asm
// Translation Unit: JASLfo
//
#include "JSystem/JAudio2/JASLfo.h"
#include "SSystem/SComponent/c_math.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 8029BD14-8029BD44 296654 0030+00 1/1 1/1 0/0 .text __ct__6JASLfoFv */
JASLfo::JASLfo() {
field_0x0 = 0;
field_0x4 = 1;
field_0x8 = 0.0f;
mDepth = 0.0f;
mPitch = 1.0f;
mDelay = 0;
field_0x16 = 0;
}
/* ############################################################################################## */
/* 8029BD44-8029BDD8 296684 0094+00 0/0 3/3 0/0 .text getValue__6JASLfoCFv */
f32 JASLfo::getValue() const {
if (field_0x16) {
return 0.0f;
}
if (mDepth == 0.0f) {
return 0.0f;
}
return mDepth * JMASinLap(field_0x8);
}
/* ############################################################################################## */
/* 8029BDD8-8029BE2C 296718 0054+00 0/0 2/2 0/0 .text incCounter__6JASLfoFf */
void JASLfo::incCounter(f32 param_0) {
if (field_0x16) {
field_0x16--;
return;
}
field_0x8 += param_0 * ((1.0f / 72.0f) * mPitch);
if (field_0x8 >= 1.0f) {
field_0x8 -= 1.0f;
}
}
/* ############################################################################################## */
/* 80431C40-80431C58 05E960 0018+00 2/2 1/1 0/0 .bss sFreeRunLfo__6JASLfo */
JASLfo JASLfo::sFreeRunLfo;
/* 8029BE2C-8029BE6C 29676C 0040+00 0/0 1/1 0/0 .text resetCounter__6JASLfoFv */
void JASLfo::resetCounter() {
field_0x16 = mDelay;
switch (field_0x4) {
case 0:
field_0x8 = sFreeRunLfo.field_0x8;
break;
case 1:
field_0x8 = 0.0f;
break;
}
}
/* 8029BE6C-8029BE94 2967AC 0028+00 0/0 1/0 0/0 .text __sinit_JASLfo_cpp */
+217
View File
@@ -0,0 +1,217 @@
//
// Generated By: dol2asm
// Translation Unit: JASOscillator
//
#include "JSystem/JAudio2/JASOscillator.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 8029BE94-8029BEC4 2967D4 0030+00 0/0 1/1 0/0 .text __ct__13JASOscillatorFv */
JASOscillator::JASOscillator() {
mData = NULL;
_14 = 0;
mDirectRelease = 0;
_18 = 0;
_1C = 0;
_0C = 0.0f;
_10 = 0.0f;
_08 = 0.0f;
_04 = 0.0f;
}
/* ############################################################################################## */
/* 8029BEC4-8029BF68 296804 00A4+00 0/0 1/1 0/0 .text
* initStart__13JASOscillatorFPCQ213JASOscillator4Data */
void JASOscillator::initStart(JASOscillator::Data const* data) {
mData = data;
_04 = 0.0f;
_08 = 0.0f;
_0C = 0.0f;
_14 = 0;
mDirectRelease = 0;
if (!data) {
_1C = 0;
return;
}
if (mData->mTable == NULL) {
_1C = 2;
_08 = 1.0f;
return;
}
_10 = mData->mTable[0]._4 / 32768.0f;
_18 = mData->mTable[0]._0;
_1C = 1;
}
/* 8029BF68-8029BFC8 2968A8 0060+00 0/0 1/1 0/0 .text incCounter__13JASOscillatorFf */
void JASOscillator::incCounter(f32 param_0) {
const short* v1;
switch (_1C) {
case 0:
case 2:
return;
case 1:
break;
}
_04 += param_0 * mData->_04;
update();
}
/* 8029BFC8-8029BFE4 296908 001C+00 0/0 1/1 0/0 .text getValue__13JASOscillatorCFv */
f32 JASOscillator::getValue() const {
return _08 * mData->mScale + mData->_14;
}
/* 8029BFE4-8029C0E0 296924 00FC+00 0/0 1/1 0/0 .text release__13JASOscillatorFv */
void JASOscillator::release() {
if (mData->_0C == NULL && mDirectRelease == 0) {
stop();
return;
}
if (mDirectRelease != 0) {
_04 = 0.0f;
_0C = _08;
_10 = 0.0f;
_14 = 0;
_18 = (mDirectRelease >> 14) & 3;
_1C = 4;
update();
return;
}
if (mData->mTable != mData->_0C) {
_04 = 0.0f;
_0C = _08;
_10 = mData->_0C[0]._4 / 32768.0f;
_14 = 0;
_18 = mData->_0C[0]._0;
}
_1C = 3;
update();
}
/* 8029C0E0-8029C2C0 296A20 01E0+00 2/2 1/1 0/0 .text update__13JASOscillatorFv */
void JASOscillator::update() {
if (_1C == 4) {
s16 x = mDirectRelease & 0x3FFF;
if (_04 < x) {
updateCurrentValue(x);
} else {
_08 = _10;
_1C = 0;
}
return;
}
if (_1C == 2) return;
const Point* psVar1;
if (_1C == 1) {
psVar1 = mData->mTable;
} else {
psVar1 = mData->_0C;
}
if (psVar1 == NULL) {
_1C = 2;
return;
}
while (_04 >= psVar1[_14]._2) {
_04 -= psVar1[_14]._2;
_08 = _10;
_14++;
_0C = _08;
const s16* ps = &psVar1[_14]._0;
switch(ps[0]) {
case 0xf:
_1C = 0;
return;
case 0xe:
_1C = 2;
return;
case 0xd:
_14 = ps[2];
break;
default:
_18 = ps[0];
_10 = ps[2] / 32768.0f;
break;
}
}
updateCurrentValue(psVar1[_14]._2);
}
/* ############################################################################################## */
/* 8039B1D0-8039B214 027830 0044+00 1/0 0/0 0/0 .rodata sCurveTableLinear__13JASOscillator
*/
f32 const JASOscillator::sCurveTableLinear[17] = {
1.0, 0.9375, 0.875, 0.8125, 0.75, 0.6875, 0.625, 0.5625, 0.5,
0.4375, 0.375, 0.3125, 0.25, 0.1875, 0.125, 0.0625, 0.0,
};
/* 8039B214-8039B258 027874 0044+00 1/0 0/0 0/0 .rodata sCurveTableSampleCell__13JASOscillator */
f32 const JASOscillator::sCurveTableSampleCell[17] = {
1.0, 0.9704890251159668, 0.7812740206718445, 0.5462809801101685, 0.39979198575019836,
0.28931498527526855, 0.21210399270057678, 0.15747599303722382, 0.1126129999756813, 0.08178959786891937,
0.057985201478004456, 0.04364150017499924, 0.03082370012998581, 0.023712899535894394, 0.015259300358593464,
0.00915555004030466, 0.0
};
/* 8039B258-8039B29C 0278B8 0044+00 1/0 0/0 0/0 .rodata sCurveTableSqRoot__13JASOscillator
*/
f32 const JASOscillator::sCurveTableSqRoot[17] = {
1.0, 0.8789060115814209, 0.765625, 0.6601560115814209, 0.5625, 0.4726560115814209,
0.390625, 0.3164060115814209, 0.25, 0.1914059966802597, 0.140625, 0.09765619784593582,
0.0625, 0.03515620157122612, 0.015625, 0.00390625, 0.0
};
/* 8039B29C-8039B2E0 0278FC 0044+00 1/0 0/0 0/0 .rodata sCurveTableSquare__13JASOscillator
*/
f32 const JASOscillator::sCurveTableSquare[17] = {
1.0, 0.9682459831237793, 0.9354140162467957, 0.9013879895210266, 0.8660249710083008,
0.8291559815406799, 0.790569007396698, 0.75, 0.7071070075035095, 0.66143798828125,
0.6123719811439514, 0.55901700258255, 0.5, 0.433012992143631, 0.35355299711227417, 0.25, 0.0,
};
/* 803C78A8-803C78B8 -00001 0010+00 1/1 0/0 0/0 .data table_list$151 */
static f32* table_list[4] = {
(f32*)JASOscillator::sCurveTableLinear,
(f32*)JASOscillator::sCurveTableSquare,
(f32*)JASOscillator::sCurveTableSqRoot,
(f32*)JASOscillator::sCurveTableSampleCell,
};
/* 8029C2C0-8029C388 296C00 00C8+00 1/1 0/0 0/0 .text updateCurrentValue__13JASOscillatorFf */
void JASOscillator::updateCurrentValue(f32 param_0) {
f32* table = table_list[_18];
f32 fVar1 = 16.0f * (_04 / param_0);
u32 index = (u32) fVar1;
f32 fVar3 = (fVar1 - index);
f32 fVar2 = (1.0f - fVar3) * table[index];
f32 fVar4 = fVar2 + fVar3 * table[index + 1];
_08 = _0C * fVar4 + _10 * (1.0f - fVar4);
}
+71
View File
@@ -0,0 +1,71 @@
//
// Generated By: dol2asm
// Translation Unit: JASProbe
//
#include "JSystem/JAudio2/JASProbe.h"
#include "dolphin/os.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 80290D74-80290DC4 28B6B4 0050+00 1/1 0/0 0/0 .text start__8JASProbeFPCc */
void JASProbe::start(char const* name) {
volatile BOOL interrupts = OSDisableInterrupts();
mName = name;
mStartTime = OSGetTime();
OSRestoreInterrupts(interrupts);
}
/* ############################################################################################## */
/* 80290DC4-80290EE4 28B704 0120+00 1/1 0/0 0/0 .text stop__8JASProbeFv */
void JASProbe::stop() {
volatile int interrupts = OSDisableInterrupts();
_08 = (u32)OSGetTime() - mStartTime;
_08 /= OS_TIMER_CLOCK / 59.94f;
if (_10 < _08 && 100 < _1A8) {
_10 = _08;
}
_0C = _0C * 0.96f + _08 * 0.04f;
u32 resultIndex = _1A8 % 100;
_14 -= _18[resultIndex];
_18[resultIndex] = _08;
_14 += _08;
_1A8++;
OSRestoreInterrupts(interrupts);
}
/* ############################################################################################## */
/* 80431620-80431660 05E340 0040+00 2/2 0/0 0/0 .bss sProbeTable__8JASProbe */
JASProbe* JASProbe::sProbeTable[16];
/* 80290EE4-80290F24 28B824 0040+00 0/0 7/7 0/0 .text start__8JASProbeFlPCc */
void JASProbe::start(s32 index, char const* name) {
if (index < 16) {
if (sProbeTable[index] != NULL) {
sProbeTable[index]->start(name);
}
}
}
/* 80290F24-80290F64 28B864 0040+00 0/0 6/6 0/0 .text stop__8JASProbeFl */
void JASProbe::stop(s32 index) {
if (index < 16) {
if (sProbeTable[index] != NULL) {
sProbeTable[index]->stop();
}
}
}
+150
View File
@@ -0,0 +1,150 @@
//
// Generated By: dol2asm
// Translation Unit: JASRegisterParam
//
#include "JSystem/JAudio2/JASRegisterParam.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 80293644-80293664 28DF84 0020+00 0/0 1/1 0/0 .text __ct__16JASRegisterParamFv */
JASRegisterParam::JASRegisterParam() {
for (int i = 0; i < 14; i++) {
field_0x0[i] = 0;
}
}
/* 80293664-80293684 28DFA4 0020+00 0/0 1/1 0/0 .text init__16JASRegisterParamFv */
void JASRegisterParam::init() {
for (int i = 0; i < 14; i++) {
field_0x0[i] = 0;
}
}
/* ############################################################################################## */
/* 80293684-802937B8 28DFC4 0134+00 1/0 4/4 0/0 .text
* write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl */
void JASRegisterParam::write(JASRegisterParam::RegID param_0, u32 param_1) {
if (param_0 < 14) {
if (param_0 <= 2) {
field_0x0[param_0] = (u8)param_1;
return;
}
field_0x0[param_0] = param_1;
return;
}
switch (param_0) {
case 32:
field_0x0[0] = (param_1 >> 8) & 0xff;
field_0x0[1] = param_1 & 0xff;
break;
case 33:
field_0x0[4] = param_1 >> 16;
field_0x0[5] = param_1;
break;
case 34:
field_0x0[4] &= 0xff;
field_0x0[4] |= ((param_1 & 0xff) << 8);
break;
case 35:
field_0x0[4] &= 0xff00;
field_0x0[4] |= param_1 & 0xff;
break;
case 36:
field_0x0[5] &= 0xff;
field_0x0[5] |= (param_1 & 0xff) << 8;
break;
case 37:
field_0x0[5] &= 0xff00;
field_0x0[5] |= param_1 & 0xff;
break;
case 38:
field_0x0[6] = param_1 >> 16;
field_0x0[7] = param_1;
break;
case 39:
field_0x0[8] = param_1 >> 16;
field_0x0[9] = param_1;
break;
case 40:
field_0x0[10] = param_1 >> 16;
field_0x0[11] = param_1;
break;
case 41:
field_0x0[12] = param_1 >> 16;
field_0x0[13] = param_1;
break;
}
}
/* ############################################################################################## */
/* 802937B8-802938BC 28E0F8 0104+00 1/0 1/1 0/0 .text
* read__16JASRegisterParamFQ216JASRegisterParam5RegID */
u32 JASRegisterParam::read(JASRegisterParam::RegID param_0) {
if (param_0 < 14) {
return field_0x0[param_0];
}
u32 rv = 0;
switch (param_0) {
case 32:
rv = ((field_0x0[0] & 0xff) << 8) | (field_0x0[1] & 0xff) ;
break;
case 33:
rv = field_0x0[4];
rv <<= 16;
rv |= field_0x0[5];
break;
case 34:
rv = (u8)(field_0x0[4] >> 8);
break;
case 35:
rv = (u8)field_0x0[4];
break;
case 36:
rv = (u8)(field_0x0[5] >> 8);
break;
case 37:
rv = (u8)field_0x0[5];
break;
case 38:
rv = field_0x0[6];
rv <<= 16;
rv |= field_0x0[7];
break;
case 39:
rv = field_0x0[8];
rv <<= 16;
rv |= field_0x0[9];
break;
case 40:
rv = field_0x0[10];
rv <<= 16;
rv |= field_0x0[11];
break;
case 41:
// !@bug I think this should get field_0x0[12] and field_0x0[13]. Looks like a copy paste bug.
rv = field_0x0[10];
rv <<= 16;
rv |= field_0x0[11];
break;
}
return rv;
}
+60
View File
@@ -0,0 +1,60 @@
//
// Generated By: dol2asm
// Translation Unit: JASReport
//
#include "JSystem/JAudio2/JASReport.h"
#include "JSystem/JAudio2/JASMutex.h"
#include "stdio.h"
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* ############################################################################################## */
/* 80431660-80431678 05E380 0018+00 1/1 0/0 0/0 .bss sMutex */
static OSMutex sMutex;
/* 80451220-80451224 000720 0004+00 1/1 0/0 0/0 .sbss sBuffer */
static char* sBuffer;
/* 80451224-80451228 000724 0004+00 1/1 0/0 0/0 .sbss sLineMax */
static int sLineMax;
/* 80451228-8045122C 000728 0004+00 1/1 0/0 0/0 .sbss sLineCount */
static int sLineCount;
/* 8045122C-80451230 00072C 0004+00 1/1 0/0 0/0 .sbss sTop */
static int sTop;
/* 80290F64-80291060 28B8A4 00FC+00 0/0 5/5 0/0 .text JASReport__FPCce */
void JASReport(const char * str, ...) {
if(sBuffer) {
va_list vl;
va_start(vl, str);
JASMutexLock mutexLock(&sMutex);
vsnprintf(sBuffer + (sTop * 64), 64, str, vl);
va_end(vl);
sTop++;
if (sTop >= sLineMax)
sTop = 0;
if (sLineCount < sLineMax)
sLineCount++;
}
}
/* ############################################################################################## */
/* 80451230-80451238 -00001 0008+00 0/0 6/6 0/0 .sbss None */
/* 80451230 0001+00 data_80451230 None */
/* 80451231 0007+00 data_80451231 None */
u8 struct_80451230[8];
+71
View File
@@ -0,0 +1,71 @@
/**
* JASResArcLoader.cpp
* JAS - Resource Archive Loader
*/
#include "JSystem/JAudio2/JASResArcLoader.h"
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JAudio2/JASTaskThread.h"
/* 80290BD0-80290C04 28B510 0034+00 0/0 2/2 0/0 .text
* getResSize__15JASResArcLoaderFPC10JKRArchiveUs */
size_t JASResArcLoader::getResSize(JKRArchive const* i_archiveP, u16 i_resourceID) {
JKRArchive::SDIFileEntry* file = i_archiveP->findIdResource(i_resourceID);
if (file == 0) {
return 0;
}
return file->data_size;
}
/* 80290C04-80290C7C 28B544 0078+00 0/0 1/1 0/0 .text
* getResMaxSize__15JASResArcLoaderFPC10JKRArchive */
size_t JASResArcLoader::getResMaxSize(JKRArchive const* i_archiveP) {
u32 maxSize, index;
u32 fileEntries = i_archiveP->countFile();
for (maxSize = 0, index = 0; index < fileEntries; index++) {
JKRArchive::SDIFileEntry* file = i_archiveP->findIdxResource(index);
if (file) {
if (maxSize < file->data_size) {
maxSize = file->data_size;
}
}
}
return maxSize;
}
/* 80290C7C-80290D18 28B5BC 009C+00 1/1 0/0 0/0 .text loadResourceCallback__15JASResArcLoaderFPv
*/
static void JASResArcLoader::loadResourceCallback(void* args) {
CallbackArgs* castedArgs = static_cast<CallbackArgs*>(args);
u32 readResult = castedArgs->mArchive->readResource(castedArgs->mBuffer, castedArgs->mBufferSize, castedArgs->mID);
if (castedArgs->mCallback) {
castedArgs->mCallback(readResult, castedArgs->mCallbackArg);
}
if (readResult == 0) {
if (castedArgs->mQueue) {
OSSendMessage(castedArgs->mQueue, (void*)RESARCMSG_Error, OS_MESSAGE_BLOCK);
}
} else {
if (castedArgs->mQueue) {
OSSendMessage(castedArgs->mQueue, (void*)RESARCMSG_Success, OS_MESSAGE_BLOCK);
}
}
}
/* 80290D18-80290D74 28B658 005C+00 0/0 1/1 0/0 .text
* loadResourceAsync__15JASResArcLoaderFP10JKRArchiveUsPUcUlPFUlUl_vUl */
int JASResArcLoader::loadResourceAsync(JKRArchive* archive, u16 id, u8* buffer, u32 size, LoadCallback callback, u32 cbArg)
{
CallbackArgs args(id, buffer, size, archive);
args.mCallback = callback;
args.mCallbackArg = cbArg;
return JASDvd::getThreadPointer()->sendCmdMsg(&loadResourceCallback, (void*)&args, sizeof(CallbackArgs));
}
+158
View File
@@ -0,0 +1,158 @@
//
// Generated By: dol2asm
// Translation Unit: JASSeqCtrl
//
#include "JSystem/JAudio2/JASSeqCtrl.h"
#include "JSystem/JAudio2/JASSeqParser.h"
#include "JSystem/JAudio2/JASTrack.h"
/* ############################################################################################## */
/* 80451238-80451240 000738 0004+04 3/3 0/0 0/0 .sbss sDefaultParser__10JASSeqCtrl */
JASSeqParser JASSeqCtrl::sDefaultParser;
/* 802938BC-80293924 28E1FC 0068+00 0/0 1/1 0/0 .text __ct__10JASSeqCtrlFv */
JASSeqCtrl::JASSeqCtrl() {
mReader.init();
field_0x3c = &sDefaultParser;
field_0x40 = 0;
field_0x44 = NULL;
field_0x48 = 0;
field_0x4c = 0;
field_0x4e = 0;
field_0x50 = 0;
field_0x51 = 0;
field_0x54 = 0;
field_0x58 = 0;
mReader.init();
}
/* 80293924-80293980 28E264 005C+00 0/0 1/1 0/0 .text init__10JASSeqCtrlFv */
void JASSeqCtrl::init() {
mReader.init();
field_0x3c = &sDefaultParser;
field_0x40 = 0;
field_0x44 = NULL;
field_0x48 = 0;
field_0x4c = 0;
field_0x4e = 0;
field_0x50 = 0;
field_0x54 = 0;
field_0x58 = 0;
field_0x51 = 0;
}
/* 80293980-802939C4 28E2C0 0044+00 0/0 1/1 0/0 .text start__10JASSeqCtrlFPvUl */
void JASSeqCtrl::start(void* param_0, u32 param_1) {
mReader.init(param_0);
mReader.jump(param_1);
}
/* 802939C4-80293ABC 28E304 00F8+00 0/0 1/1 0/0 .text tickProc__10JASSeqCtrlFP8JASTrack
*/
int JASSeqCtrl::tickProc(JASTrack* param_0) {
if (!mReader.getBase()) {
return 0;
}
interrupt(INTRTYPE_VALUE_6);
timerProcess();
if (field_0x51) {
if (!param_0->checkNoteStop(0)) {
return 0;
}
field_0x51 = 0;
}
if (field_0x40 > 0) {
field_0x40--;
}
checkIntr();
while ((field_0x40 == 0 || field_0x44 != NULL) && field_0x51 == 0) {
if (field_0x3c->parse(param_0) < 0) {
return -1;
}
}
return 0;
}
/* 80293ABC-80293AE0 28E3FC 0024+00 2/2 2/2 0/0 .text
* interrupt__10JASSeqCtrlFQ210JASSeqCtrl8IntrType */
void JASSeqCtrl::interrupt(JASSeqCtrl::IntrType param_0) {
if (field_0x4e & (1 << param_0)) {
field_0x4c |= (1 << param_0);
}
}
/* 80293AE0-80293AF0 28E420 0010+00 0/0 1/1 0/0 .text setIntrMask__10JASSeqCtrlFUl */
void JASSeqCtrl::setIntrMask(u32 param_0) {
field_0x4e |= param_0;
}
/* 80293AF0-80293B00 28E430 0010+00 0/0 1/1 0/0 .text clrIntrMask__10JASSeqCtrlFUl */
void JASSeqCtrl::clrIntrMask(u32 param_0) {
field_0x4e &= ~param_0;
}
/* 80293B00-80293B28 28E440 0028+00 0/0 1/1 0/0 .text retIntr__10JASSeqCtrlFv */
int JASSeqCtrl::retIntr() {
if (field_0x44 == NULL) {
return 0;
}
mReader.jump(field_0x44);
field_0x44 = NULL;
return 1;
}
/* 80293B28-80293B78 28E468 0050+00 1/1 0/0 0/0 .text findIntr__10JASSeqCtrlFv */
int JASSeqCtrl::findIntr() {
u32 uVar1 = field_0x4e & field_0x4c;
for (int i = 0; uVar1 != 0; uVar1 >>= 1, i++) {
if (uVar1 & 1) {
field_0x4c &= ~(1 << i);
return i;
}
}
return -1;
}
/* 80293B78-80293BE8 28E4B8 0070+00 1/1 2/2 0/0 .text checkIntr__10JASSeqCtrlFv */
void JASSeqCtrl::checkIntr() {
if (field_0x44) return;
int intr = findIntr();
if (intr < 0) return;
u32 uVar2 = field_0x48;
uVar2 += intr * 3;
u32 uVar1 = get24(uVar2);
field_0x44 = mReader.getCur();
mReader.jump(uVar1);
}
/* 80293BE8-80293C6C 28E528 0084+00 1/1 0/0 0/0 .text timerProcess__10JASSeqCtrlFv */
void JASSeqCtrl::timerProcess() {
if (field_0x54 == 0) return;
field_0x54--;
if (field_0x54) return;
interrupt(INTRTYPE_VALUE_5);
if (field_0x50) {
field_0x50--;
if (field_0x50) {
field_0x54 = field_0x58;
}
} else {
field_0x54 = field_0x58;
}
}
/* ############################################################################################## */
File diff suppressed because it is too large Load Diff
+121
View File
@@ -0,0 +1,121 @@
/**
* JASSeqReader.cpp
*
*/
#include "JSystem/JAudio2/JASSeqReader.h"
/* 80296108-80296148 290A48 0040+00 0/0 2/2 0/0 .text init__12JASSeqReaderFv */
void JASSeqReader::init() {
field_0x00 = 0;
field_0x04 = 0;
field_0x08 = 0;
for (int i = 0; i < 8; i++) {
field_0x0c[i] = NULL;
field_0x2c[i] = 0;
}
}
/* 80296148-8029618C 290A88 0044+00 0/0 1/1 0/0 .text init__12JASSeqReaderFPv */
void JASSeqReader::init(void* param_0) {
field_0x00 = (u32*)param_0;
field_0x04 = (u8*)field_0x00;
field_0x08 = 0;
for (int i = 0; i < 8; i++) {
field_0x0c[i] = NULL;
field_0x2c[i] = 0;
}
}
/* 8029618C-802961CC 290ACC 0040+00 0/0 3/3 0/0 .text call__12JASSeqReaderFUl */
bool JASSeqReader::call(u32 param_0) {
if (field_0x08 >= 8) {
return false;
}
field_0x0c[field_0x08++] = (u16*)field_0x04;
field_0x04 = (u8*)((int)field_0x00 + param_0);
return true;
}
/* 802961CC-80296210 290B0C 0044+00 0/0 1/1 0/0 .text loopStart__12JASSeqReaderFUl */
bool JASSeqReader::loopStart(u32 param_0) {
if (8 <= field_0x08) {
return false;
}
field_0x0c[field_0x08] = (u16*)field_0x04;
field_0x2c[field_0x08++] = param_0;
return true;
}
/* 80296210-8029627C 290B50 006C+00 0/0 1/1 0/0 .text loopEnd__12JASSeqReaderFv */
bool JASSeqReader::loopEnd() {
if (field_0x08 == 0) {
return false;
}
u16 tmp = field_0x2c[field_0x08 - 1];
if (tmp != 0) {
tmp--;
}
if (!tmp) {
field_0x08--;
return true;
}
field_0x2c[field_0x08 - 1] = tmp;
field_0x04 = (u8*)field_0x0c[field_0x08 - 1];
return true;
}
/* 8029627C-802962B0 290BBC 0034+00 0/0 2/2 0/0 .text ret__12JASSeqReaderFv */
bool JASSeqReader::ret() {
if (field_0x08 == 0) {
return false;
}
field_0x04 = (u8*)field_0x0c[--field_0x08];
return true;
}
/* 802962B0-8029631C 290BF0 006C+00 0/0 2/2 0/0 .text readMidiValue__12JASSeqReaderFv */
int JASSeqReader::readMidiValue() {
int byte = readByte();
if (!(byte & 0x80)) {
return byte;
}
byte &= 0x7f;
int i = 0;
while (true) {
if (2 < i) {
return 0;
}
u8 newByte = readByte();
byte = byte << 7;
byte |= newByte & 0x7f;
if (!(newByte & 0x80)) {
break;
}
i++;
}
return byte;
}
+188
View File
@@ -0,0 +1,188 @@
//
// Generated By: dol2asm
// Translation Unit: JASSimpleWaveBank
//
#include "JSystem/JAudio2/JASSimpleWaveBank.h"
#include "dol2asm.h"
//
// Types:
//
struct JKRHeap {};
struct JASWaveInfo {
static u32 one[1 + 1 /* padding */];
};
struct JASWaveArc {
/* 80298FA0 */ void onLoadDone();
/* 80298FA4 */ void onEraseDone();
/* 8029A13C */ JASWaveArc();
/* 8029A1B4 */ ~JASWaveArc();
/* 8029A664 */ void onDispose();
};
struct JASSimpleWaveBank {
struct TWaveHandle {
/* 80298D84 */ ~TWaveHandle();
/* 80298F38 */ void getWavePtr() const;
/* 80298F5C */ TWaveHandle();
/* 80298F90 */ void getWaveInfo() const;
};
/* 80298C94 */ JASSimpleWaveBank();
/* 80298CF4 */ ~JASSimpleWaveBank();
/* 80298DE0 */ void setWaveTableSize(u32, JKRHeap*);
/* 80298E60 */ void getWaveHandle(u32) const;
/* 80298E84 */ void setWaveInfo(u32, JASWaveInfo const&);
/* 80298F18 */ void getWaveArc(u32);
/* 80298F98 */ bool getArcCount() const;
};
//
// Forward References:
//
extern "C" void __ct__17JASSimpleWaveBankFv();
extern "C" void __dt__17JASSimpleWaveBankFv();
extern "C" void __dt__Q217JASSimpleWaveBank11TWaveHandleFv();
extern "C" void setWaveTableSize__17JASSimpleWaveBankFUlP7JKRHeap();
extern "C" void getWaveHandle__17JASSimpleWaveBankCFUl();
extern "C" void setWaveInfo__17JASSimpleWaveBankFUlRC11JASWaveInfo();
extern "C" void getWaveArc__17JASSimpleWaveBankFUl();
extern "C" void getWavePtr__Q217JASSimpleWaveBank11TWaveHandleCFv();
extern "C" void __ct__Q217JASSimpleWaveBank11TWaveHandleFv();
extern "C" void getWaveInfo__Q217JASSimpleWaveBank11TWaveHandleCFv();
extern "C" bool getArcCount__17JASSimpleWaveBankCFv();
extern "C" void onLoadDone__10JASWaveArcFv();
extern "C" void onEraseDone__10JASWaveArcFv();
extern "C" static void func_80298FA8();
//
// External References:
//
extern "C" void __ct__10JASWaveArcFv();
extern "C" void __dt__10JASWaveArcFv();
extern "C" void onDispose__10JASWaveArcFv();
extern "C" void* __nwa__FUlP7JKRHeapi();
extern "C" void __dl__FPv();
extern "C" void __destroy_new_array();
extern "C" void __construct_new_array();
extern "C" void _savegpr_29();
extern "C" void _restgpr_29();
extern "C" extern void* __vt__13JASWaveHandle[5];
extern "C" extern void* __vt__11JASWaveBank[6];
extern "C" u32 one__11JASWaveInfo[1 + 1 /* padding */];
//
// Declarations:
//
/* ############################################################################################## */
/* 803C7798-803C77AC 0248B8 0014+00 2/2 0/0 0/0 .data __vt__Q217JASSimpleWaveBank11TWaveHandle */
SECTION_DATA extern void* __vt__Q217JASSimpleWaveBank11TWaveHandle[5] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__Q217JASSimpleWaveBank11TWaveHandleFv,
(void*)getWaveInfo__Q217JASSimpleWaveBank11TWaveHandleCFv,
(void*)getWavePtr__Q217JASSimpleWaveBank11TWaveHandleCFv,
};
/* 803C77AC-803C77E0 0248CC 0030+04 2/2 0/0 0/0 .data __vt__17JASSimpleWaveBank */
SECTION_DATA extern void* __vt__17JASSimpleWaveBank[12 + 1 /* padding */] = {
(void*)NULL /* RTTI */,
(void*)NULL,
(void*)__dt__17JASSimpleWaveBankFv,
(void*)getWaveHandle__17JASSimpleWaveBankCFUl,
(void*)getWaveArc__17JASSimpleWaveBankFUl,
(void*)getArcCount__17JASSimpleWaveBankCFv,
(void*)NULL,
(void*)NULL,
(void*)func_80298FA8,
(void*)onDispose__10JASWaveArcFv,
(void*)onLoadDone__10JASWaveArcFv,
(void*)onEraseDone__10JASWaveArcFv,
/* padding */
NULL,
};
/* 80298C94-80298CF4 2935D4 0060+00 0/0 1/1 0/0 .text __ct__17JASSimpleWaveBankFv */
JASSimpleWaveBank::JASSimpleWaveBank() {
// NONMATCHING
}
/* 80298CF4-80298D84 293634 0090+00 2/1 0/0 0/0 .text __dt__17JASSimpleWaveBankFv */
JASSimpleWaveBank::~JASSimpleWaveBank() {
// NONMATCHING
}
/* 80298D84-80298DE0 2936C4 005C+00 3/2 0/0 0/0 .text __dt__Q217JASSimpleWaveBank11TWaveHandleFv
*/
JASSimpleWaveBank::TWaveHandle::~TWaveHandle() {
// NONMATCHING
}
/* 80298DE0-80298E60 293720 0080+00 0/0 1/1 0/0 .text
* setWaveTableSize__17JASSimpleWaveBankFUlP7JKRHeap */
void JASSimpleWaveBank::setWaveTableSize(u32 param_0, JKRHeap* param_1) {
// NONMATCHING
}
/* 80298E60-80298E84 2937A0 0024+00 1/0 0/0 0/0 .text getWaveHandle__17JASSimpleWaveBankCFUl */
void JASSimpleWaveBank::getWaveHandle(u32 param_0) const {
// NONMATCHING
}
/* 80298E84-80298F18 2937C4 0094+00 0/0 1/1 0/0 .text
* setWaveInfo__17JASSimpleWaveBankFUlRC11JASWaveInfo */
void JASSimpleWaveBank::setWaveInfo(u32 param_0, JASWaveInfo const& param_1) {
// NONMATCHING
}
/* 80298F18-80298F38 293858 0020+00 1/0 0/0 0/0 .text getWaveArc__17JASSimpleWaveBankFUl
*/
void JASSimpleWaveBank::getWaveArc(u32 param_0) {
// NONMATCHING
}
/* 80298F38-80298F5C 293878 0024+00 1/0 0/0 0/0 .text
* getWavePtr__Q217JASSimpleWaveBank11TWaveHandleCFv */
void JASSimpleWaveBank::TWaveHandle::getWavePtr() const {
// NONMATCHING
}
/* 80298F5C-80298F90 29389C 0034+00 1/1 0/0 0/0 .text __ct__Q217JASSimpleWaveBank11TWaveHandleFv
*/
JASSimpleWaveBank::TWaveHandle::TWaveHandle() {
// NONMATCHING
}
/* 80298F90-80298F98 2938D0 0008+00 1/0 0/0 0/0 .text
* getWaveInfo__Q217JASSimpleWaveBank11TWaveHandleCFv */
void JASSimpleWaveBank::TWaveHandle::getWaveInfo() const {
// NONMATCHING
}
/* 80298F98-80298FA0 2938D8 0008+00 1/0 0/0 0/0 .text getArcCount__17JASSimpleWaveBankCFv
*/
bool JASSimpleWaveBank::getArcCount() const {
return true;
}
/* 80298FA0-80298FA4 2938E0 0004+00 1/0 1/0 0/0 .text onLoadDone__10JASWaveArcFv */
void JASWaveArc::onLoadDone() {
/* empty function */
}
/* 80298FA4-80298FA8 2938E4 0004+00 1/0 1/0 0/0 .text onEraseDone__10JASWaveArcFv */
void JASWaveArc::onEraseDone() {
/* empty function */
}
/* 80298FA8-80298FB0 2938E8 0008+00 1/0 0/0 0/0 .text @4@__dt__17JASSimpleWaveBankFv */
static void func_80298FA8() {
// NONMATCHING
}

Some files were not shown because too many files have changed in this diff Show More