diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2024-01-24 04:00:46 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-24 14:00:46 +0200 |
| commit | ba44ade90c3f04f5c163278fcadc4361c263acbb (patch) | |
| tree | 3b7948dc4dcf260ff61230da15ddea595635cbc8 /libs | |
| parent | b2310b84b65e62d9f1a82a5b9e52766b325b765f (diff) | |
more various JSystem work (#2046)
* most of J3DAnmLoader done
* J3D / JKernel / JUTConsole work
* remove asm
* fix build
* dol 50%
Diffstat (limited to 'libs')
40 files changed, 1876 insertions, 1419 deletions
diff --git a/libs/JSystem/J2DGraph/J2DPicture.cpp b/libs/JSystem/J2DGraph/J2DPicture.cpp index 4d71f60c50..02249a0454 100644 --- a/libs/JSystem/J2DGraph/J2DPicture.cpp +++ b/libs/JSystem/J2DGraph/J2DPicture.cpp @@ -1392,110 +1392,113 @@ SECTION_SDATA2 static f32 lit_2933 = 0.5f; /* 802FED84-802FF09C 2F96C4 0318+00 2/2 0/0 0/0 .text * setTexCoord__10J2DPictureFPQ29JGeometry8TVec2<s>PC10JUTTexture10J2DBinding9J2DMirrorb */ +// matches with literals #ifdef NONMATCHING void J2DPicture::setTexCoord(JGeometry::TVec2<s16>* param_0, JUTTexture const* param_1, - J2DBinding param_2, J2DMirror param_3, bool param_4) { - u8 var_r0; - u8 var_r4; - u8 var_r7; - u8 var_r9; - - f32 sp14; - f32 sp10; - f32 spC; - f32 sp8; - - f32 var_f0; - f32 var_f2; - f32 var_f3; - f32 var_f4; - f32 var_f5; - - if (!param_4) { - var_r0 = (param_3 & 2) ? (param_2 & 4) : (param_2 & 8); - var_r4 = (param_3 & 2) ? (param_2 & 8) : (param_2 & 4); - var_r7 = (param_3 & 1) ? (param_2 & 1) : (param_2 & 2); - var_r9 = (param_3 & 1) ? (param_2 & 1) : (param_2 & 2); + J2DBinding binding, J2DMirror mirror, bool rotate90) { + bool bindLeft; + bool bindRight; + bool bindTop; + bool bindBottom; + + if (!rotate90) { + if (mirror & J2DMirror_X) + bindLeft = binding & J2DBind_Right; + else + bindLeft = binding & J2DBind_Left; + + if (mirror & J2DMirror_X) + bindRight = binding & J2DBind_Left; + else + bindRight = binding & J2DBind_Right; + + if (mirror & J2DMirror_Y) + bindTop = binding & J2DBind_Bottom; + else + bindTop = binding & J2DBind_Top; + + if (mirror & J2DMirror_Y) + bindBottom = binding & J2DBind_Top; + else + bindBottom = binding & J2DBind_Bottom; } else { - var_r0 = (param_3 & 2) ? (param_2 & 1) : (param_2 & 2); - var_r4 = (param_3 & 2) ? (param_2 & 2) : (param_2 & 1); - var_r7 = (param_3 & 1) ? (param_2 & 8) : (param_2 & 4); - var_r9 = (param_3 & 1) ? (param_2 & 4) : (param_2 & 8); - } + if (mirror & J2DMirror_X) + bindLeft = binding & J2DBind_Bottom; + else + bindLeft = binding & J2DBind_Top; - if (!param_4) { - var_f2 = getHeight(); - } else { - var_f2 = getWidth(); - } + if (mirror & J2DMirror_X) + bindRight = binding & J2DBind_Top; + else + bindRight = binding & J2DBind_Bottom; - if (!param_4) { - var_f3 = getWidth(); - } else { - var_f3 = getHeight(); + if (mirror & J2DMirror_Y) + bindTop = binding & J2DBind_Left; + else + bindTop = binding & J2DBind_Right; + + if (mirror & J2DMirror_Y) + bindBottom = binding & J2DBind_Right; + else + bindBottom = binding & J2DBind_Left; } + f32 rectWidth; + f32 rectHeight; + + rectWidth = !rotate90 ? getWidth() : getHeight(); + rectHeight = !rotate90 ? getHeight() : getWidth(); + + f32 texWidth; + f32 texHeight; if (param_1 == NULL) { - var_f4 = var_f2; - var_f5 = var_f3; + texWidth = rectWidth; + texHeight = rectHeight; } else { - var_f4 = param_1->getWidth(); - var_f5 = param_1->getHeight(); + texWidth = param_1->getWidth(); + texHeight = param_1->getHeight(); } - if (var_r0 != 0) { - sp14 = 0.0f; - if (var_r4 != 0) { - var_f0 = 1.0f; - } else { - var_f0 = var_f2 / var_f4; - } - spC = var_f0; - } else if (var_r4 != 0) { - sp14 = 1.0f - (var_f2 / var_f4); - spC = 1.0f; + f32 s0, t0, s1, t1; + if (bindLeft) { + s0 = 0.0f; + s1 = bindRight ? 1.0f : (rectWidth / texWidth); + } else if (bindRight) { + s0 = 1.0f - (rectWidth / texWidth); + s1 = 1.0f; } else { - sp14 = 0.5f - ((var_f2 / var_f4) * 0.5f); - spC = 0.5f + ((var_f2 / var_f4) * 0.5f); + s0 = 0.5f - (rectWidth / texWidth) / 2.0f; + s1 = 0.5f + (rectWidth / texWidth) / 2.0f; } - if (var_r7 != 0) { - sp10 = 0.0f; - - f32 var_f0_2; - if (var_r9 != 0) { - var_f0_2 = 1.0f; - } else { - var_f0_2 = var_f3 / var_f5; - } - - sp8 = var_f0_2; - } else if (var_r9 != 0) { - sp10 = 1.0f - (var_f3 / var_f5); - sp8 = 1.0f; + if (bindTop) { + t0 = 0.0f; + t1 = bindBottom ? 1.0f : (rectHeight / texHeight); + } else if (bindBottom) { + t0 = 1.0f - (rectHeight / texHeight); + t1 = 1.0f; } else { - sp10 = 0.5f - ((var_f3 / var_f5) * 0.5f); - sp8 = 0.5f + ((var_f3 / var_f5) * 0.5f); + t0 = 0.5f - (rectHeight / texHeight) / 2.0f; + t1 = 0.5f + (rectHeight / texHeight) / 2.0f; } - if (param_3 & 2) { - swap(sp14, spC); + if (mirror & J2DMirror_X) { + swap(s0, s1); } - - if (param_3 & 1) { - swap(sp10, sp8); + if (mirror & J2DMirror_Y) { + swap(t0, t1); } - s16 temp_r27 = J2DCast_F32_to_S16(sp14, 8); - s16 temp_r28 = J2DCast_F32_to_S16(spC, 8); - s16 temp_r30 = J2DCast_F32_to_S16(sp10, 8); - s16 temp_r31 = J2DCast_F32_to_S16(sp8, 8); + s16 temp_r27 = J2DCast_F32_to_S16(s0, 8); + s16 temp_r28 = J2DCast_F32_to_S16(s1, 8); + s16 temp_r30 = J2DCast_F32_to_S16(t0, 8); + s16 temp_r31 = J2DCast_F32_to_S16(t1, 8); - if (!param_4) { + if (!rotate90) { param_0[0].set(temp_r27, temp_r30); param_0[1].set(temp_r28, temp_r30); - param_0[2].set(temp_r28, temp_r31); - param_0[3].set(temp_r27, temp_r31); + param_0[2].set(temp_r27, temp_r31); + param_0[3].set(temp_r28, temp_r31); } else { param_0[0].set(temp_r27, temp_r31); param_0[1].set(temp_r27, temp_r30); diff --git a/libs/JSystem/J2DGraph/J2DWindowEx.cpp b/libs/JSystem/J2DGraph/J2DWindowEx.cpp index 2020a53d88..8a825f5b75 100644 --- a/libs/JSystem/J2DGraph/J2DWindowEx.cpp +++ b/libs/JSystem/J2DGraph/J2DWindowEx.cpp @@ -965,10 +965,10 @@ void J2DWindowEx::setAnimation(J2DAnmVtxColor* param_0) { for (u8 i = 0; i < 4; i++) { if (field_0x168[i] != 0xffff) { for (u16 j = 0; j < uVar3; j++) { - J3DAnmVtxColorIndexDataItem* puVar1 = param_0->getAnmVtxColorIndexData(0, j); + J3DAnmVtxColorIndexData* puVar1 = param_0->getAnmVtxColorIndexData(0, j); u16* indexPointer = param_0->getVtxColorIndexPointer(0); - u16* indexPointer2 = indexPointer + puVar1->offset; - for (u16 k = 0; k < puVar1->count; k++) { + u16* indexPointer2 = indexPointer + (u32)puVar1->mpData; + for (u16 k = 0; k < puVar1->mNum; k++) { if (indexPointer2[k] == field_0x168[i]) { mAnmVtxColor = param_0; field_0x17c |= 1 << i; @@ -1143,10 +1143,10 @@ const J2DAnmTransform* J2DWindowEx::animationPane(J2DAnmTransform const* param_0 for (u8 i = 0; i < 4; i++) { if ((field_0x17c & (1 << i))) { for (u16 j = 0; j < uVar3; j++) { - J3DAnmVtxColorIndexDataItem* puVar1 = mAnmVtxColor->getAnmVtxColorIndexData(0, j); + J3DAnmVtxColorIndexData* puVar1 = mAnmVtxColor->getAnmVtxColorIndexData(0, j); u16* indexPointer = mAnmVtxColor->getVtxColorIndexPointer(0); - u16* indexPointer2 = indexPointer + puVar1->offset; - for (u16 k = 0; k < puVar1->count; k++) { + u16* indexPointer2 = indexPointer + (u32)puVar1->mpData; + for (u16 k = 0; k < puVar1->mNum; k++) { if (indexPointer2[k] == field_0x168[i]) { mAnmVtxColor->getColor(0, j, local_38[i]); goto nexti; diff --git a/libs/JSystem/J3DGraphAnimator/J3DAnimation.cpp b/libs/JSystem/J3DGraphAnimator/J3DAnimation.cpp index c3163f36d5..a04693760a 100644 --- a/libs/JSystem/J3DGraphAnimator/J3DAnimation.cpp +++ b/libs/JSystem/J3DGraphAnimator/J3DAnimation.cpp @@ -620,7 +620,7 @@ asm J3DAnmVtxColor::J3DAnmVtxColor() { /* 8032A30C-8032A368 324C4C 005C+00 0/0 1/1 0/0 .text __ct__18J3DAnmVtxColorFullFv */ J3DAnmVtxColorFull::J3DAnmVtxColorFull() { for (int i = 0; i < 2; i++) { - field_0x18[i] = 0; + mpTable[i] = 0; } } @@ -638,7 +638,7 @@ asm void J3DAnmVtxColorFull::getColor(u8 param_0, u16 param_1, _GXColor* param_2 /* 8032A4E0-8032A53C 324E20 005C+00 0/0 1/1 0/0 .text __ct__17J3DAnmVtxColorKeyFv */ J3DAnmVtxColorKey::J3DAnmVtxColorKey() { for (int i = 0; i < 2; i++) { - field_0x18[i] = 0; + mpTable[i] = 0; } } @@ -685,11 +685,11 @@ asm void J3DAnmColor::searchUpdateMaterialID(J3DMaterialTable* param_0) { /* 8032A93C-8032A990 32527C 0054+00 0/0 1/1 0/0 .text __ct__15J3DAnmColorFullFv */ J3DAnmColorFull::J3DAnmColorFull() { - field_0x2c = 0; - field_0x30 = 0; - field_0x34 = 0; - field_0x38 = 0; - field_0x3c = 0; + 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 */ @@ -804,8 +804,8 @@ void J3DAnmTexPattern::searchUpdateMaterialID(J3DModelData* param_0) { /* 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(field_0x14 / 3); i++) { - s32 r3 = param_0->getMaterialName()->getIndex(field_0x30.getName(i)); + 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 { @@ -813,11 +813,11 @@ void J3DAnmTextureSRTKey::searchUpdateMaterialID(J3DMaterialTable* param_0) { } } for (u16 i = 0; i < u16(field_0x4a / 3); i++) { - s32 r3 = param_0->getMaterialName()->getIndex(field_0x64.getName(i)); + s32 r3 = param_0->getMaterialName()->getIndex(mPostUpdateMaterialName.getName(i)); if (r3 != -1) { - field_0x60[i] = r3; + mPostUpdateMaterialID[i] = r3; } else { - field_0x60[i] = -1; + mPostUpdateMaterialID[i] = -1; } } } diff --git a/libs/JSystem/J3DGraphAnimator/J3DModel.cpp b/libs/JSystem/J3DGraphAnimator/J3DModel.cpp index 1de91a4eae..90a387b42f 100644 --- a/libs/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/libs/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -230,9 +230,7 @@ s32 J3DModel::createShapePacket(J3DModelData* p_modelData) { /* 803273CC-803275FC 321D0C 0230+00 1/1 0/0 0/0 .text createMatPacket__8J3DModelFP12J3DModelDataUl */ -#if defined NON_MATCHING s32 J3DModel::createMatPacket(J3DModelData* p_modelData, u32 flag) { - // regalloc if (p_modelData->getMaterialNum() != 0) { mMatPacket = new J3DMatPacket[p_modelData->getMaterialNum()]; @@ -243,19 +241,20 @@ s32 J3DModel::createMatPacket(J3DModelData* p_modelData, u32 flag) { s32 ret; u16 matNum = p_modelData->getMaterialNum(); - u16 i = 0; u32 singleDLFlag = flag & 0x40000; - for (; i < matNum; i++) { + for (u16 i = 0; i < matNum; i++) { J3DMaterial* materialNode = p_modelData->getMaterialNodePointer(i); - J3DMatPacket* pkt = getMatPacket(i); + J3DMatPacket* pkt = mMatPacket + i; + u16 shapeIndex = materialNode->getShape()->getIndex(); - J3DShapePacket* shapePacket = getShapePacket(shapeIndex); - pkt->mpMaterial = materialNode; - pkt->mpInitShapePacket = shapePacket; + J3DShapePacket* shapePacket = mShapePacket + shapeIndex; + + pkt->setMaterial(materialNode); + pkt->setInitShapePacket(shapePacket); pkt->addShapePacket(shapePacket); - pkt->mpTexture = p_modelData->getMaterialTable().getTexture(); - pkt->mDiffFlag = materialNode->mDiffFlag; + pkt->setTexture(p_modelData->getTexture()); + pkt->setMaterialID(materialNode->mDiffFlag); if (p_modelData->getModelDataType() == 1) { pkt->mFlags |= 0x01; @@ -310,16 +309,6 @@ s32 J3DModel::createMatPacket(J3DModelData* p_modelData, u32 flag) { return kJ3DError_Success; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm s32 J3DModel::createMatPacket(J3DModelData* param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/J3DGraphAnimator/J3DModel/createMatPacket__8J3DModelFP12J3DModelDataUl.s" -} -#pragma pop -#endif /* 803275FC-8032767C 321F3C 0080+00 0/0 1/1 0/0 .text newDifferedDisplayList__8J3DModelFUl */ s32 J3DModel::newDifferedDisplayList(u32 flag) { @@ -373,7 +362,7 @@ void J3DModel::calcMaterial() { 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); @@ -401,7 +390,8 @@ void J3DModel::calcDiffTexMtx() { num = getModelData()->getShapeNum(); for (u16 i = 0; i < num; i++) { J3DShapePacket* shapePacket = getShapePacket(i); - J3DTexGenBlock* texGenBlock = getModelData()->getShapeNodePointer(i)->getMaterial()->getTexGenBlock(); + J3DTexGenBlock* texGenBlock = + getModelData()->getShapeNodePointer(i)->getMaterial()->getTexGenBlock(); for (u16 j = 0; (int)j < 8; j++) { J3DTexMtx* texMtxNode = texGenBlock->getTexMtx(j); J3DTexMtxObj* texMtxObj = shapePacket->getTexMtxObj(); @@ -620,11 +610,13 @@ void J3DModel::viewCalc() { if (mModelData->checkFlag(0x10)) { if (getMtxCalcMode() == 2) { - J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, (MtxP)&mInternalView); + J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, + (MtxP)&mInternalView); } } else if (isCpuSkinningOn()) { if (getMtxCalcMode() == 2) { - J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, (MtxP)&mInternalView); + J3DCalcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, + (MtxP)&mInternalView); } } else if (checkFlag(J3DMdlFlag_SkinPosCpu)) { mMtxBuffer->calcDrawMtx(getMtxCalcMode(), mBaseScale, mBaseTransformMtx); @@ -663,7 +655,8 @@ void J3DModel::calcBumpMtx() { for (; i < materialNum; i++) { J3DMaterial* material = getModelData()->getMaterialNodePointer(i); if (material->getNBTScale()->mbHasScale == 1) { - material->getShape()->calcNBTScale(*material->getNBTScale()->getScale(), getNrmMtxPtr(), getBumpMtxPtr(bumpMtxIdx)); + material->getShape()->calcNBTScale(*material->getNBTScale()->getScale(), + getNrmMtxPtr(), getBumpMtxPtr(bumpMtxIdx)); DCStoreRange(getBumpMtxPtr(bumpMtxIdx), getModelData()->getDrawMtxNum() * 0x24); bumpMtxIdx++; } diff --git a/libs/JSystem/J3DGraphBase/J3DGD.cpp b/libs/JSystem/J3DGraphBase/J3DGD.cpp index 927cd214c1..7f65db79a5 100644 --- a/libs/JSystem/J3DGraphBase/J3DGD.cpp +++ b/libs/JSystem/J3DGraphBase/J3DGD.cpp @@ -5,6 +5,7 @@ #include "JSystem/J3DGraphBase/J3DGD.h"
#include "dol2asm.h"
+#include "dolphin/gd.h"
#include "dolphin/os.h"
//
@@ -74,8 +75,8 @@ void J3DGDSetGenMode(u8 texGenNum, u8 colorChanNum, u8 tevStageNum, u8 indTexSta GDOverflowCheck(0xa);
J3DGDWriteBPCmd(0xfe07fc3f);
static u8 cm2hw[4] = {0, 2, 1, 3};
- J3DGDWriteBPCmd(texGenNum | colorChanNum << 4 | (tevStageNum - 1) << 0xa
- | cm2hw[cullMode] << 0xe | indTexStageNum << 0x10);
+ 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 */
@@ -86,48 +87,40 @@ void J3DGDSetGenMode_3Param(u8 texGenNum, u8 tevStageNum, u8 indTexStageNum) { }
/* 8030D364-8030D65C 307CA4 02F8+00 0/0 1/1 0/0 .text J3DGDSetLightAttn__F10_GXLightIDffffff */
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DGDSetLightAttn(_GXLightID param_0, f32 param_1, f32 param_2, f32 param_3, f32 param_4,
- f32 param_5, f32 param_6) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DGD/J3DGDSetLightAttn__F10_GXLightIDffffff.s"
+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);
}
-#pragma pop
/* 8030D65C-8030D76C 307F9C 0110+00 0/0 1/1 0/0 .text J3DGDSetLightColor__F10_GXLightID8_GXColor
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DGDSetLightColor(_GXLightID param_0, _GXColor param_1) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DGD/J3DGDSetLightColor__F10_GXLightID8_GXColor.s"
+void J3DGDSetLightColor(GXLightID id, GXColor color) {
+ J3DGDWriteXFCmd(0x0603 + __GDLightID2Offset(id),
+ (color.r << 24) | (color.g << 16) | (color.b << 8) | (color.a << 0));
}
-#pragma pop
/* 8030D76C-8030D938 3080AC 01CC+00 0/0 1/1 0/0 .text J3DGDSetLightPos__F10_GXLightIDfff
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DGDSetLightPos(_GXLightID param_0, f32 param_1, f32 param_2, f32 param_3) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DGD/J3DGDSetLightPos__F10_GXLightIDfff.s"
+void J3DGDSetLightPos(GXLightID id, f32 x, f32 y, f32 z) {
+ J3DGDWriteXFCmdHdr(0x060A + __GDLightID2Offset(id), 3);
+ J3DGDWrite_f32(x);
+ J3DGDWrite_f32(y);
+ J3DGDWrite_f32(z);
}
-#pragma pop
/* 8030D938-8030DB04 308278 01CC+00 0/0 1/1 0/0 .text J3DGDSetLightDir__F10_GXLightIDfff
*/
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DGDSetLightDir(_GXLightID param_0, f32 param_1, f32 param_2, f32 param_3) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DGD/J3DGDSetLightDir__F10_GXLightIDfff.s"
+void J3DGDSetLightDir(GXLightID id, f32 x, f32 y, f32 z) {
+ J3DGDWriteXFCmdHdr(0x060D + __GDLightID2Offset(id), 3);
+ J3DGDWrite_f32(x);
+ J3DGDWrite_f32(y);
+ J3DGDWrite_f32(z);
}
-#pragma pop
/* 8030DB04-8030E064 308444 0560+00 1/0 1/1 0/0 .text
* J3DGDSetVtxAttrFmtv__F9_GXVtxFmtPC17_GXVtxAttrFmtListb */
@@ -239,17 +232,19 @@ void J3DGDSetVtxAttrFmtv(GXVtxFmt fmt, GXVtxAttrFmtList const* fmtList, bool par }
}
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);
+ 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
@@ -358,23 +353,22 @@ void J3DGDSetTexCoordGen(GXTexGenType texGenType, GXTexGenSrc texGenSrc) { 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)
- );
+ 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) {
+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);
+ 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 */
@@ -413,18 +407,19 @@ static u8 GX2HWFiltConv[6] = { 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);
+ 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);
+ 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
@@ -456,58 +451,53 @@ void J3DGDLoadTlut(void* param_0, u32 param_1, GXTlutSize param_2) { J3DGDWriteBPCmd(0x0f000000);
}
-/* ############################################################################################## */
-/* 80456330-80456334 004930 0004+00 1/1 0/0 0/0 .sdata2 @1233 */
-SECTION_SDATA2 static f32 lit_1233 = 1024.0f;
-
/* 8030EB30-8030EE10 309470 02E0+00 0/0 2/2 0/0 .text J3DGDSetIndTexMtx__F14_GXIndTexMtxIDPA3_fSc
*/
-#ifdef NONMATCHING
-void J3DGDSetIndTexMtx(GXIndTexMtxID mtxID, Mtx3P mtx, s8 param_2) {
+void J3DGDSetIndTexMtx(GXIndTexMtxID id, Mtx3P mtx, s8 exp) {
+ s32 mtx32[6];
u32 idx;
- switch (mtxID) {
+
+ switch (id) {
case GX_ITM_0:
case GX_ITM_1:
case GX_ITM_2:
- idx = mtxID - GX_ITM_0;
+ idx = (u32)(id - GX_ITM_0);
break;
case GX_ITM_S0:
case GX_ITM_S1:
case GX_ITM_S2:
- idx = mtxID - GX_ITM_S0;
+ idx = (u32)(id - GX_ITM_S0);
break;
case GX_ITM_T0:
case GX_ITM_T1:
case GX_ITM_T2:
- idx = mtxID - GX_ITM_T0;
+ idx = (u32)(id - GX_ITM_T0);
break;
- case GX_ITM_3:
- case GX_ITM_S3:
default:
idx = 0;
break;
}
- u32 m00 = (int)(mtx[0][0] * 1024.0f) & 0x7ff;
- u32 m10 = (int)(mtx[1][0] * 1024.0f) & 0x7ff;
- u32 m01 = (int)(mtx[0][1] * 1024.0f) & 0x7ff;
- u32 m11 = (int)(mtx[1][1] * 1024.0f) & 0x7ff;
- u32 m02 = (int)(mtx[0][2] * 1024.0f) & 0x7ff;
- u32 m12 = (int)(mtx[1][2] * 1024.0f) & 0x7ff;
- GDOverflowCheck(0xf);
- J3DGDWriteBPCmd(m00 | m10 << 0xb | ((param_2 + 0x11) & 3) << 0x16 | (idx * 3 + GX_BP_REG_INDMTX0A) << 0x18);
- J3DGDWriteBPCmd(m01 | m11 << 0xb | ((param_2 + 0x11) >> 2 & 3) << 0x16 | (idx * 3 + GX_BP_REG_INDMTX0B) << 0x18);
- J3DGDWriteBPCmd(m02 | m12 << 0xb | ((param_2 + 0x11) >> 4 & 3) << 0x16 | (idx * 3 + GX_BP_REG_INDMTX0C) << 0x18);
-}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DGDSetIndTexMtx(_GXIndTexMtxID param_0, f32 (*param_1)[3], s8 param_2) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DGD/J3DGDSetIndTexMtx__F14_GXIndTexMtxIDPA3_fSc.s"
+
+ 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);
}
-#pragma pop
-#endif
/* 8030EE10-8030EF08 309750 00F8+00 0/0 2/2 0/0 .text
* J3DGDSetIndTexCoordScale__F16_GXIndTexStageID14_GXIndTexScale14_GXIndTexScale14_GXIndTexScale14_GXIndTexScale
@@ -515,20 +505,20 @@ asm void J3DGDSetIndTexMtx(_GXIndTexMtxID param_0, f32 (*param_1)[3], s8 param_2 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);
+ 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) {
+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);
+ 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) {
@@ -559,12 +549,12 @@ void J3DGDSetTevOrder(GXTevStageID stage, GXTexCoordID coord0, GXTexMapID map0, 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);
+ 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
@@ -580,10 +570,10 @@ void J3DGDSetTevKColor(GXTevKColorID id, GXColor color) { /* 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;
+ 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);
@@ -626,8 +616,8 @@ void J3DGDSetFog(GXFogType fogType, f32 param_1, f32 param_2, f32 nearZ, f32 far 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]);
+ 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;
@@ -728,13 +718,13 @@ SECTION_SDATA static u8 J3DTexImage2Ids[8] = { /* 8030FD68-8030FDE8 30A6A8 0080+00 0/0 1/1 0/0 .text
* J3DFifoLoadTexCached__F11_GXTexMapIDUl15_GXTexCacheSizeUl15_GXTexCacheSize */
#ifdef NONMATCHING
-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);
+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);
+ J3DFifoLoadBPCmd(param_3 >> 5 | (param_4 + 3) << 0xf | (param_4 + 3) << 0x12 |
+ J3DTexImage2Ids[id] << 0x18);
}
}
#else
diff --git a/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp b/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp index 8d6b960332..1754afff5e 100644 --- a/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp +++ b/libs/JSystem/J3DGraphBase/J3DMatBlock.cpp @@ -4,16 +4,35 @@ // #include "JSystem/J3DGraphBase/J3DMatBlock.h" +#include "dolphin/gd.h" +#include "JSystem/J3DGraphBase/J3DGD.h" +#include "JSystem/J3DGraphBase/J3DSys.h" #include "dol2asm.h" #include "dolphin/os.h" -// -// Types: -// +inline void loadMatColors(const J3DGXColor* color) { + J3DGDWriteXFCmdHdr(0x100C, 2); + J3DGDWrite_u32(*(u32*)color); + J3DGDWrite_u32(*(u32*)(color + 1)); +} -struct J3DSys { - static u8 sTexCoordScaleTable[64 + 4 /* padding */]; -}; +inline void loadAmbColors(const J3DGXColor* color) { + J3DGDWriteXFCmdHdr(0x100A, 2); + J3DGDWrite_u32(*(u32*)color); + J3DGDWrite_u32(*(u32*)(color + 1)); +} + +inline void loadTexCoordScale(GXTexCoordID coord, const J3DTexCoordScaleInfo& info) { + J3DGDSetTexCoordScale2(coord, info.field_0x00, info.field_0x04 == 1, 0, info.field_0x02, info.field_0x06 == 1, 0); +} + +inline void loadTevColor(u32 reg, const J3DGXColorS10& color) { + J3DGDSetTevColorS10(GXTevRegID(reg + 1), color); +} + +inline void loadTevKColor(u32 reg, const J3DGXColor& color) { + J3DGDSetTevKColor(GXTevKColorID(reg), color); +} // // Forward References: @@ -591,12 +610,10 @@ extern "C" extern void* __vt__10J3DPEBlock[31]; extern "C" extern void* __vt__11J3DIndBlock[19]; extern "C" extern void* __vt__14J3DTexGenBlock[27]; extern "C" extern void* __vt__13J3DColorBlock[36]; -extern "C" extern u8 j3dSys[284]; extern "C" u8 sTexCoordScaleTable__6J3DSys[64 + 4 /* padding */]; extern "C" extern u8 j3dTevSwapTableTable[1024]; extern "C" extern u8 j3dAlphaCmpTable[768]; extern "C" extern u8 j3dZModeTable[96]; -extern "C" extern u8 __GDCurrentDL[4]; extern "C" extern GXColor j3dDefaultColInfo; extern "C" extern u32 j3dDefaultAmbInfo; extern "C" extern GXColorS10 j3dDefaultTevColor; @@ -637,45 +654,34 @@ asm void J3DColorBlockLightOn::initialize() { #pragma pop /* 80317644-80317674 311F84 0030+00 0/0 2/2 0/0 .text initialize__21J3DTexGenBlockPatchedFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexGenBlockPatched::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/initialize__21J3DTexGenBlockPatchedFv.s" +void J3DTexGenBlockPatched::initialize() { + mTexGenNum = 0; + for (u32 i = 0; i < 8; i++) + mTexMtx[i] = NULL; + mTexMtxOffset = 0; } -#pragma pop /* 80317674-803176A4 311FB4 0030+00 0/0 1/1 0/0 .text initialize__15J3DTexGenBlock4Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexGenBlock4::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/initialize__15J3DTexGenBlock4Fv.s" +void J3DTexGenBlock4::initialize() { + mTexGenNum = 0; + for (u32 i = 0; i < 4; i++) + mTexMtx[i] = NULL; + mTexMtxOffset = 0; } -#pragma pop /* 803176A4-803176D4 311FE4 0030+00 0/0 1/1 0/0 .text initialize__19J3DTexGenBlockBasicFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexGenBlockBasic::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/initialize__19J3DTexGenBlockBasicFv.s" +void J3DTexGenBlockBasic::initialize() { + mTexGenNum = 0; + for (u32 i = 0; i < 8; i++) + mTexMtx[i] = NULL; + mTexMtxOffset = 0; } -#pragma pop /* 803176D4-803176E0 312014 000C+00 0/0 1/1 0/0 .text initialize__15J3DTevBlockNullFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTevBlockNull::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/initialize__15J3DTevBlockNullFv.s" +void J3DTevBlockNull::initialize() { + mTexNoOffset = 0; } -#pragma pop /* 803176E0-803177E8 312020 0108+00 0/0 1/1 0/0 .text initialize__18J3DTevBlockPatchedFv */ @@ -689,14 +695,12 @@ asm void J3DTevBlockPatched::initialize() { #pragma pop /* 803177E8-80317810 312128 0028+00 0/0 1/1 0/0 .text initialize__12J3DTevBlock1Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTevBlock1::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/initialize__12J3DTevBlock1Fv.s" +void J3DTevBlock1::initialize() { + mTexNo[0] = 0xFFFF; + mTevStage[0].field_0x0 = 0xC0; + mTevStage[0].field_0x4 = 0xC1; + mTexNoOffset = 0; } -#pragma pop /* 80317810-803178EC 312150 00DC+00 0/0 1/1 0/0 .text initialize__12J3DTevBlock2Fv */ #pragma push @@ -729,34 +733,26 @@ asm void J3DTevBlock16::initialize() { #pragma pop /* 80317B28-80317B34 312468 000C+00 0/0 1/1 0/0 .text initialize__15J3DIndBlockFullFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DIndBlockFull::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/initialize__15J3DIndBlockFullFv.s" +void J3DIndBlockFull::initialize() { + mIndTexStageNum = 0; } -#pragma pop /* 80317B34-80317B58 312474 0024+00 0/0 1/1 0/0 .text initialize__16J3DPEBlockFogOffFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DPEBlockFogOff::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/initialize__16J3DPEBlockFogOffFv.s" +void J3DPEBlockFogOff::initialize() { + mAlphaComp.mID = 0xFFFF; + mZMode.mZModeID = 0xFFFF; + mZCompLoc = 0xFF; + mDither = 1; } -#pragma pop /* 80317B58-80317B84 312498 002C+00 0/0 1/1 0/0 .text initialize__14J3DPEBlockFullFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DPEBlockFull::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/initialize__14J3DPEBlockFullFv.s" +void J3DPEBlockFull::initialize() { + mAlphaComp.mID = 0xFFFF; + mZMode.mZModeID = 0xFFFF; + mZCompLoc = 0xFF; + mDither = 1; + mFogOffset = 0; } -#pragma pop /* 80317B84-80317B8C 3124C4 0008+00 1/0 0/0 0/0 .text countDLSize__21J3DColorBlockLightOffFv */ s32 J3DColorBlockLightOff::countDLSize() { @@ -905,14 +901,14 @@ asm void J3DColorBlockLightOff::patch() { SECTION_SDATA static u32 SizeOfLoadMatColors = 0x0000000D; /* 80318F00-803190AC 313840 01AC+00 2/0 0/0 0/0 .text patchMatColor__21J3DColorBlockLightOffFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DColorBlockLightOff::patchMatColor() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/patchMatColor__21J3DColorBlockLightOffFv.s" +void J3DColorBlockLightOff::patchMatColor() { + GDSetCurrOffset(mMatColorOffset); + u8* start = GDGetCurrPointer(); + GDOverflowCheck(SizeOfLoadMatColors); + loadMatColors(mMatColor); + u8* end = GDGetCurrPointer(); + DCStoreRange(start, end - start); } -#pragma pop /* ############################################################################################## */ /* 80450964-80450968 0003E4 0004+00 2/2 0/0 0/0 .sdata SizeOfLoadAmbColors */ @@ -936,24 +932,20 @@ asm void J3DColorBlockLightOff::patchLight() { #pragma pop /* 803194E8-80319534 313E28 004C+00 1/0 0/0 0/0 .text patch__20J3DColorBlockLightOnFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DColorBlockLightOn::patch() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/patch__20J3DColorBlockLightOnFv.s" +void J3DColorBlockLightOn::patch() { + patchMatColor(); + patchLight(); } -#pragma pop /* 80319534-803196E0 313E74 01AC+00 1/0 0/0 0/0 .text patchMatColor__20J3DColorBlockLightOnFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DColorBlockLightOn::patchMatColor() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/patchMatColor__20J3DColorBlockLightOnFv.s" +void J3DColorBlockLightOn::patchMatColor() { + GDSetCurrOffset(mMatColorOffset); + u8* start = GDGetCurrPointer(); + GDOverflowCheck(SizeOfLoadMatColors); + loadMatColors(mMatColor); + u8* end = GDGetCurrPointer(); + DCStoreRange(start, end - start); } -#pragma pop /* 803196E0-80319B4C 314020 046C+00 1/0 0/0 0/0 .text patchLight__20J3DColorBlockLightOnFv */ #pragma push @@ -966,24 +958,18 @@ asm void J3DColorBlockLightOn::patchLight() { #pragma pop /* 80319B4C-80319BB4 31448C 0068+00 2/0 0/0 0/0 .text diff__21J3DColorBlockLightOffFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DColorBlockLightOff::diff(u32 param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/diff__21J3DColorBlockLightOffFUl.s" +void J3DColorBlockLightOff::diff(u32 flag) { + if (flag & 0x1) + diffMatColor(); + if (flag & 0x2) + diffColorChan(); } -#pragma pop /* 80319BB4-80319D30 3144F4 017C+00 2/0 0/0 0/0 .text diffMatColor__21J3DColorBlockLightOffFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DColorBlockLightOff::diffMatColor() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/diffMatColor__21J3DColorBlockLightOffFv.s" +void J3DColorBlockLightOff::diffMatColor() { + GDOverflowCheck(SizeOfLoadMatColors); + loadMatColors(mMatColor); } -#pragma pop /* 80319D30-8031A13C 314670 040C+00 2/0 0/0 0/0 .text diffColorChan__21J3DColorBlockLightOffFv */ #pragma push @@ -996,34 +982,31 @@ asm void J3DColorBlockLightOff::diffColorChan() { #pragma pop /* 8031A13C-8031A1DC 314A7C 00A0+00 1/0 0/0 0/0 .text diff__20J3DColorBlockLightOnFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DColorBlockLightOn::diff(u32 param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/diff__20J3DColorBlockLightOnFUl.s" +void J3DColorBlockLightOn::diff(u32 flag) { + if (flag & 4) + diffAmbColor(); + + if (flag & 1) + diffMatColor(); + + if (flag & 2) + diffColorChan(); + + if ((flag >> 4) & 0x0f) + diffLightObj((flag >> 4) & 0x0f); } -#pragma pop /* 8031A1DC-8031A358 314B1C 017C+00 1/0 0/0 0/0 .text diffAmbColor__20J3DColorBlockLightOnFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DColorBlockLightOn::diffAmbColor() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/diffAmbColor__20J3DColorBlockLightOnFv.s" +void J3DColorBlockLightOn::diffAmbColor() { + GDOverflowCheck(SizeOfLoadAmbColors); + loadAmbColors(mAmbColor); } -#pragma pop /* 8031A358-8031A4D4 314C98 017C+00 1/0 0/0 0/0 .text diffMatColor__20J3DColorBlockLightOnFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DColorBlockLightOn::diffMatColor() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/diffMatColor__20J3DColorBlockLightOnFv.s" +void J3DColorBlockLightOn::diffMatColor() { + GDOverflowCheck(SizeOfLoadMatColors); + loadMatColors(mMatColor); } -#pragma pop /* 8031A4D4-8031A8E0 314E14 040C+00 1/0 0/0 0/0 .text diffColorChan__20J3DColorBlockLightOnFv */ #pragma push @@ -1046,34 +1029,43 @@ asm void J3DColorBlockLightOn::diffLightObj(u32 param_0) { #pragma pop /* 8031A948-8031A9E8 315288 00A0+00 1/0 0/0 0/0 .text load__15J3DTexGenBlock4Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexGenBlock4::load() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/load__15J3DTexGenBlock4Fv.s" +void J3DTexGenBlock4::load() { + mTexMtxOffset = GDGetCurrOffset(); + for (u32 i = 0; i < 4; i++) { + if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) { + mTexMtx[i]->load(i); + } + } + if (mTexGenNum != 0) { + loadTexCoordGens(mTexGenNum, mTexCoord); + } } -#pragma pop /* 8031A9E8-8031AA88 315328 00A0+00 1/0 0/0 0/0 .text load__19J3DTexGenBlockBasicFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexGenBlockBasic::load() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/load__19J3DTexGenBlockBasicFv.s" +void J3DTexGenBlockBasic::load() { + mTexMtxOffset = GDGetCurrOffset(); + for (u32 i = 0; i < 8; i++) { + if (mTexMtx[i] && mTexCoord[i].getTexGenMtx() != GX_IDENTITY) { + mTexMtx[i]->load(i); + } + } + if (mTexGenNum != 0) { + loadTexCoordGens(mTexGenNum, mTexCoord); + } } -#pragma pop /* 8031AA88-8031AB18 3153C8 0090+00 1/0 0/0 0/0 .text patch__21J3DTexGenBlockPatchedFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DTexGenBlockPatched::patch() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DMatBlock/patch__21J3DTexGenBlockPatchedFv.s" +void J3DTexGenBlockPatched::patch() { + GDSetCurrOffset(mTexMtxOffset); + u8* start = GDGetCurrPointer(); + for (u32 i = 0; i < 8; i++) { + if (mTexMtx[i]) { + mTexMtx[i]->load(i); + } + } + u8* end = GDGetCurrPointer(); + DCStoreRange(start, end - start); } -#pragma pop /* 8031AB18-8031ABC0 315458 00A8+00 1/0 0/0 0/0 .text patch__15J3DTexGenBlock4Fv */ #pragma push diff --git a/libs/JSystem/J3DGraphBase/J3DMaterial.cpp b/libs/JSystem/J3DGraphBase/J3DMaterial.cpp index 04e1367dac..ad853d22e0 100644 --- a/libs/JSystem/J3DGraphBase/J3DMaterial.cpp +++ b/libs/JSystem/J3DGraphBase/J3DMaterial.cpp @@ -491,37 +491,30 @@ J3DIndBlock* J3DMaterial::createIndBlock(int param_0) { /* 80315F60-80316100 3108A0 01A0+00 0/0 3/3 0/0 .text createPEBlock__11J3DMaterialFUlUl
*/
-// rv is in r5 for some reason
-#ifdef NONMATCHING
-J3DPEBlock* J3DMaterial::createPEBlock(u32 param_0, u32 param_1) {
+J3DPEBlock* J3DMaterial::createPEBlock(u32 createFlag, u32 materialMode) {
J3DPEBlock* rv = NULL;
- if (param_0 == 0) {
- if (param_1 & 1) {
- return new J3DPEBlockOpa();
- } else if (param_1 & 2) {
- return new J3DPEBlockTexEdge();
- } else if (param_1 & 4) {
- return new J3DPEBlockXlu();
+
+ if (createFlag == 0) {
+ if (materialMode & 1) {
+ rv = new J3DPEBlockOpa();
+ return rv;
+ } else if (materialMode & 2) {
+ rv = new J3DPEBlockTexEdge();
+ return rv;
+ } else if (materialMode & 4) {
+ rv = new J3DPEBlockXlu();
+ return rv;
}
}
- if (param_0 == 0x10000000) {
+ if (createFlag == 0x10000000) {
rv = new J3DPEBlockFull();
- } else if (param_0 == 0x20000000) {
+ } else if (createFlag == 0x20000000) {
rv = new J3DPEBlockFogOff();
}
+
return rv;
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm J3DPEBlock* J3DMaterial::createPEBlock(u32 param_0, u32 param_1) {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DMaterial/createPEBlock__11J3DMaterialFUlUl.s"
-}
-#pragma pop
-#endif
/* 80316100-80316150 310A40 0050+00 0/0 2/2 0/0 .text calcSizeColorBlock__11J3DMaterialFUl */
u32 J3DMaterial::calcSizeColorBlock(u32 param_0) {
diff --git a/libs/JSystem/J3DGraphBase/J3DPacket.cpp b/libs/JSystem/J3DGraphBase/J3DPacket.cpp index efb578acc3..79c510b0c0 100644 --- a/libs/JSystem/J3DGraphBase/J3DPacket.cpp +++ b/libs/JSystem/J3DGraphBase/J3DPacket.cpp @@ -1,31 +1,11 @@ -// -// Generated By: dol2asm -// Translation Unit: J3DPacket -// - #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 "string.h" -#include "dol2asm.h" #include "dolphin/os/OSCache.h" #include "dolphin/os/OSInterrupt.h" -#include "dolphin/types.h" -#include "global.h" - -// -// Forward References: -// - -// -// External References: -// - -// -// Declarations: -// +#include "string.h" J3DError J3DDisplayListObj::newDisplayList(u32 capacity) { mCapacity = ALIGN_NEXT(capacity, 0x20); @@ -138,12 +118,12 @@ void J3DPacket::addChildPacket(J3DPacket* pPacket) { /* ############################################################################################## */ /* 803CD900-803CD920 02AA20 0020+00 1/1 0/0 0/0 .data sDifferedRegister */ -SECTION_DATA static u32 sDifferedRegister[8] = { +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 */ -SECTION_DATA static s32 sSizeOfDiffered[8] = { +static s32 sSizeOfDiffered[8] = { 13, 13, 21, 120, 55, 15, 19, 45, }; @@ -353,7 +333,9 @@ void J3DShapePacket::prepareDraw() const { mpShape->offFlag(J3DShpFlag_SkinPosCpu); } - if (mpModel->checkFlag(J3DMdlFlag_SkinNrmCpu) && mpShape->checkFlag(J3DShpFlag_EnableLod) == false) { + if (mpModel->checkFlag(J3DMdlFlag_SkinNrmCpu) && + mpShape->checkFlag(J3DShpFlag_EnableLod) == false) + { mpShape->onFlag(J3DShpFlag_SkinNrmCpu); } else { mpShape->offFlag(J3DShpFlag_SkinNrmCpu); diff --git a/libs/JSystem/J3DGraphBase/J3DShape.cpp b/libs/JSystem/J3DGraphBase/J3DShape.cpp index ee1981e32e..59ec27c645 100644 --- a/libs/JSystem/J3DGraphBase/J3DShape.cpp +++ b/libs/JSystem/J3DGraphBase/J3DShape.cpp @@ -1,30 +1,13 @@ -// -// Generated By: dol2asm -// Translation Unit: J3DShape -// - #include "JSystem/J3DGraphBase/J3DShape.h" #include "JSystem/J3DGraphBase/J3DPacket.h" #include "JSystem/J3DGraphBase/J3DVertex.h" -#include "dolphin/gd/GDGeometry.h" +#include "dolphin/gd.h" #include "dolphin/os.h" -#include "dolphin/types.h" - -// -// Forward References: -// - -// -// External References: -// void J3DGDSetVtxAttrFmtv(_GXVtxFmt, GXVtxAttrFmtList const*, bool); void J3DFifoLoadPosMtxImm(Mtx, u32); void J3DFifoLoadNrmMtxImm(Mtx, u32); -// -// Declarations: -// enum { kVcdVatDLSize = 0xC0, diff --git a/libs/JSystem/J3DGraphBase/J3DTevs.cpp b/libs/JSystem/J3DGraphBase/J3DTevs.cpp index e8196589b0..040d734260 100644 --- a/libs/JSystem/J3DGraphBase/J3DTevs.cpp +++ b/libs/JSystem/J3DGraphBase/J3DTevs.cpp @@ -80,25 +80,13 @@ extern "C" u8 sTexCoordScaleTable__6J3DSys[64 + 4 /* padding */]; //
/* 80323590-80323644 31DED0 00B4+00 0/0 3/3 0/0 .text load__11J3DLightObjCFUl */
-// missing instruction
-#ifdef NONMATCHING
-void J3DLightObj::load(u32 param_0) const {
+void J3DLightObj::load(u32 lightIdx) const {
GDOverflowCheck(0x48);
- J3DGDSetLightPos(GXLightID(param_0 * 2), mInfo.mLightPosition.x, mInfo.mLightPosition.y, mInfo.mLightPosition.z);
- J3DGDSetLightAttn(GXLightID(param_0 * 2), mInfo.mCosAtten.x, mInfo.mCosAtten.y, mInfo.mCosAtten.z, mInfo.mDistAtten.x, mInfo.mDistAtten.y, mInfo.mDistAtten.z);
- J3DGDSetLightColor(GXLightID(param_0 * 2), mInfo.mColor);
- J3DGDSetLightDir(GXLightID(param_0 * 2), mInfo.mLightDirection.x, mInfo.mLightDirection.y, mInfo.mLightDirection.z);
+ 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);
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void J3DLightObj::load(u32 param_0) const {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DTevs/load__11J3DLightObjCFUl.s"
-}
-#pragma pop
-#endif
/* 80323644-803238C4 31DF84 0280+00 0/0 3/3 0/0 .text loadTexCoordGens__FUlP11J3DTexCoord
*/
@@ -489,33 +477,33 @@ COMPILER_STRIP_GATE(0x803A1FF8, &lit_1197); static u8 j3dTexCoordTable[7623 + 1 /* padding */];
/* 80324194-8032423C 31EAD4 00A8+00 0/0 1/1 0/0 .text makeTexCoordTable__Fv */
-// regswap
-#ifdef NONMATCHING
void makeTexCoordTable() {
- u8 bytes[] = { 0x1e, 0x21, 0x24, 0x27, 0x2a, 0x2d, 0x30, 0x33, 0x36, 0x39, 0x3c };
+ 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 < 11; k++) {
- u32 idx = i * 0xe7 + j * 11 + k;
- table[idx * 3] = i;
+ 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] = bytes[k];
+ table[idx * 3 + 2] = texMtx[k];
}
}
}
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void makeTexCoordTable() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DTevs/makeTexCoordTable__Fv.s"
-}
-#pragma pop
-#endif
/* ############################################################################################## */
/* 80436A60-80436E60 063780 0400+00 1/1 3/3 0/0 .bss j3dTevSwapTableTable */
@@ -547,31 +535,19 @@ extern u8 j3dZModeTable[96]; u8 j3dZModeTable[96];
/* 803242A8-80324314 31EBE8 006C+00 0/0 1/1 0/0 .text makeZModeTable__Fv */
-// regswap
-#ifdef NONMATCHING
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 = i * 16 + j * 2 + k;
- table[idx * 3] = i;
+ u32 idx = j * 2 + i * 16 + k;
+ table[idx * 3 + 0] = i;
table[idx * 3 + 1] = j;
table[idx * 3 + 2] = k;
}
}
}
}
-#else
-#pragma push
-#pragma optimization_level 0
-#pragma optimizewithasm off
-asm void makeZModeTable() {
- nofralloc
-#include "asm/JSystem/J3DGraphBase/J3DTevs/makeZModeTable__Fv.s"
-}
-#pragma pop
-#endif
/* 80324314-80324358 31EC54 0044+00 0/0 1/1 0/0 .text makeTevSwapTable__Fv */
void makeTevSwapTable() {
diff --git a/libs/JSystem/J3DGraphBase/J3DTransform.cpp b/libs/JSystem/J3DGraphBase/J3DTransform.cpp index 520e90bb05..2d8ddc9977 100644 --- a/libs/JSystem/J3DGraphBase/J3DTransform.cpp +++ b/libs/JSystem/J3DGraphBase/J3DTransform.cpp @@ -4,13 +4,10 @@ // #include "JSystem/J3DGraphBase/J3DTransform.h" +#include "JSystem/J3DGraphBase/J3DStruct.h" +#include "JSystem/JMath/JMATrigonometric.h" #include "dol2asm.h" - -// -// Types: -// - -struct J3DTextureSRTInfo {}; +#include "dolphin/base/PPCArch.h" // // Forward References: @@ -44,23 +41,19 @@ extern "C" u8 sincosTable___5JMath[65536]; // /* 80311630-80311638 -00001 0008+00 0/0 0/0 0/0 .text __MTGQR7__FUl */ -asm void __MTGQR7(u32 param_0) { +void __MTGQR7(register u32 v) { // clang-format off - nofralloc - mtspr 0x397, r3 - blr + asm { + mtspr GQR7, v + } // clang-format on } /* 80311638-80311670 30BF78 0038+00 0/0 2/2 0/0 .text J3DGQRSetup7__FUlUlUlUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DGQRSetup7(u32 param_0, u32 param_1, u32 param_2, u32 param_3) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DTransform/J3DGQRSetup7__FUlUlUlUl.s" +void J3DGQRSetup7(u32 r0, u32 r1, u32 r2, u32 r3) { + u32 v = (((r0 << 8) + r1) << 16) | ((r2 << 8) + r3); + __MTGQR7(v); } -#pragma pop /* ############################################################################################## */ /* 80456378-8045637C 004978 0004+00 6/6 0/0 0/0 .sdata2 @435 */ @@ -72,6 +65,44 @@ SECTION_SDATA2 static u8 lit_435[4] = { }; /* 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 #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -80,6 +111,7 @@ asm void J3DCalcBBoardMtx(f32 (*param_0)[4]) { #include "asm/JSystem/J3DGraphBase/J3DTransform/J3DCalcBBoardMtx__FPA4_f.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803A1E30-803A1E50 02E490 0020+00 0/0 1/1 0/0 .rodata j3dDefaultTransformInfo */ @@ -121,25 +153,58 @@ asm void J3DPSCalcInverseTranspose(f32 (*param_0)[4], f32 (*param_1)[3]) { /* 80311964-80311A24 30C2A4 00C0+00 0/0 2/2 2/2 .text * J3DGetTranslateRotateMtx__FRC16J3DTransformInfoPA4_f */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DGetTranslateRotateMtx(J3DTransformInfo const& param_0, f32 (*param_1)[4]) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DTransform/J3DGetTranslateRotateMtx__FRC16J3DTransformInfoPA4_f.s" +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; } -#pragma pop /* 80311A24-80311ACC 30C364 00A8+00 0/0 1/1 0/0 .text J3DGetTranslateRotateMtx__FsssfffPA4_f */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DGetTranslateRotateMtx(s16 param_0, s16 param_1, s16 param_2, f32 param_3, f32 param_4, - f32 param_5, f32 (*param_6)[4]) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DTransform/J3DGetTranslateRotateMtx__FsssfffPA4_f.s" +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; } -#pragma pop /* ############################################################################################## */ /* 8045637C-80456380 00497C 0004+00 4/4 0/0 0/0 .sdata2 @526 */ @@ -147,6 +212,32 @@ SECTION_SDATA2 static f32 lit_526 = 1.0f; /* 80311ACC-80311B80 30C40C 00B4+00 0/0 3/3 0/0 .text * J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f */ +// matches with literals +#ifdef NONMATCHING +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; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -155,9 +246,36 @@ asm void J3DGetTextureMtx(J3DTextureSRTInfo const& param_0, Vec const& param_1, #include "asm/JSystem/J3DGraphBase/J3DTransform/J3DGetTextureMtx__FRC17J3DTextureSRTInfoRC3VecPA4_f.s" } #pragma pop +#endif /* 80311B80-80311C34 30C4C0 00B4+00 0/0 3/3 0/0 .text * J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f */ +// matches with literals +#ifdef NONMATCHING +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; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -167,6 +285,7 @@ asm void J3DGetTextureMtxOld(J3DTextureSRTInfo const& param_0, Vec const& param_ #include "asm/JSystem/J3DGraphBase/J3DTransform/J3DGetTextureMtxOld__FRC17J3DTextureSRTInfoRC3VecPA4_f.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80456380-80456388 004980 0004+04 2/2 0/0 0/0 .sdata2 @557 */ @@ -178,6 +297,29 @@ SECTION_SDATA2 static f32 lit_557[1 + 1 /* padding */] = { /* 80311C34-80311CE4 30C574 00B0+00 0/0 3/3 0/0 .text * J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f */ +// matches with literals +#ifdef NONMATCHING +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; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -186,9 +328,33 @@ asm void J3DGetTextureMtxMaya(J3DTextureSRTInfo const& param_0, f32 (*param_1)[4 #include "asm/JSystem/J3DGraphBase/J3DTransform/J3DGetTextureMtxMaya__FRC17J3DTextureSRTInfoPA4_f.s" } #pragma pop +#endif /* 80311CE4-80311D94 30C624 00B0+00 0/0 3/3 0/0 .text * J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f */ +// matches with literals +#ifdef NONMATCHING +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; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -197,8 +363,46 @@ asm void J3DGetTextureMtxMayaOld(J3DTextureSRTInfo const& param_0, f32 (*param_1 #include "asm/JSystem/J3DGraphBase/J3DTransform/J3DGetTextureMtxMayaOld__FRC17J3DTextureSRTInfoPA4_f.s" } #pragma pop +#endif /* 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 #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -207,6 +411,7 @@ asm void J3DScaleNrmMtx(f32 (*param_0)[4], Vec const& param_1) { #include "asm/JSystem/J3DGraphBase/J3DTransform/J3DScaleNrmMtx__FPA4_fRC3Vec.s" } #pragma pop +#endif /* 80311DF8-80311E4C 30C738 0054+00 0/0 5/5 0/0 .text J3DScaleNrmMtx33__FPA3_fRC3Vec */ #pragma push @@ -248,5 +453,6 @@ asm void J3DPSMtxArrayConcat(f32 (*param_0)[4], f32 (*param_1)[4], f32 (*param_2 /* ############################################################################################## */ /* 803CD8F8-803CD900 02AA18 0008+00 0/0 2/2 0/0 .data PSMulUnit01 */ SECTION_DATA extern f32 PSMulUnit01[2] = { - 0.0f, -1.0f, + 0.0f, + -1.0f, }; diff --git a/libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp b/libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp index 55c70f9e20..81439fab8d 100644 --- a/libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp +++ b/libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp @@ -4,86 +4,25 @@ // #include "JSystem/J3DGraphLoader/J3DAnmLoader.h" +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" +#include "JSystem/JSupport/JSupport.h" #include "dol2asm.h" +#include "dolphin/os.h" // // Types: // -struct ResNTAB {}; - -struct JUTNameTab { - /* 802DEA1C */ void setResource(ResNTAB const*); -}; - -struct J3DAnmVtxColorKeyData {}; - -struct J3DAnmVtxColorKey { - /* 8032A4E0 */ J3DAnmVtxColorKey(); -}; - -struct J3DAnmVtxColorFullData {}; - -struct J3DAnmVtxColorFull { - /* 8032A30C */ J3DAnmVtxColorFull(); -}; - -struct J3DAnmVisibilityFullData {}; - -struct J3DAnmVisibilityFull { - /* 8033979C */ ~J3DAnmVisibilityFull(); - /* 803397F8 */ s32 getKind() const; -}; - -struct J3DAnmTransformKeyData {}; - -struct J3DAnmTransformKey {}; - -struct J3DAnmTransformFullData {}; - -struct J3DAnmTransformFull {}; - -struct J3DAnmTransform { - /* 80328E40 */ J3DAnmTransform(s16, f32*, s16*, f32*); +class J3DAnmLoader { +public: + virtual J3DAnmBase* load(const void*) = 0; + virtual void setResource(J3DAnmBase*, const void*) = 0; + /* 80339800 */ virtual ~J3DAnmLoader() {} }; -struct J3DAnmTextureSRTKeyData {}; - -struct J3DAnmTextureSRTKey { - /* 80329E5C */ J3DAnmTextureSRTKey(); -}; - -struct J3DAnmTexPatternFullData {}; - -struct J3DAnmTexPattern { - /* 8032AED8 */ J3DAnmTexPattern(); -}; - -struct J3DAnmTevRegKeyData {}; - -struct J3DAnmTevRegKey { - /* 8032AE18 */ J3DAnmTevRegKey(); -}; - -struct J3DAnmLoader { - /* 80339800 */ ~J3DAnmLoader(); -}; - -struct J3DAnmClusterKey {}; - -struct J3DAnmColorKey { - /* 8032AB00 */ J3DAnmColorKey(); -}; - -struct J3DAnmColorKeyData {}; - -struct J3DAnmClusterKeyData {}; - -struct J3DAnmKeyLoader_v15 { +class J3DAnmKeyLoader_v15 : public J3DAnmLoader { +public: /* 803384E0 */ J3DAnmKeyLoader_v15(); - /* 803384FC */ ~J3DAnmKeyLoader_v15(); - /* 80338D44 */ void load(void const*); - /* 80338E8C */ void setResource(J3DAnmBase*, void const*); /* 80338FEC */ void readAnmTransform(J3DAnmTransformKeyData const*); /* 80339014 */ void setAnmTransform(J3DAnmTransformKey*, J3DAnmTransformKeyData const*); /* 803390B0 */ void readAnmTextureSRT(J3DAnmTextureSRTKeyData const*); @@ -96,23 +35,17 @@ struct J3DAnmKeyLoader_v15 { /* 80339480 */ void setAnmTevReg(J3DAnmTevRegKey*, J3DAnmTevRegKeyData const*); /* 8033960C */ void readAnmVtxColor(J3DAnmVtxColorKeyData const*); /* 80339634 */ void setAnmVtxColor(J3DAnmVtxColorKey*, J3DAnmVtxColorKeyData const*); -}; - -struct J3DAnmClusterFullData {}; -struct J3DAnmClusterFull {}; + /* 80338D44 */ virtual J3DAnmBase* load(void const*); + /* 80338E8C */ virtual void setResource(J3DAnmBase*, void const*); + /* 803384FC */ virtual ~J3DAnmKeyLoader_v15(); -struct J3DAnmColorFull { - /* 8032A93C */ J3DAnmColorFull(); + /* 0x4 */ J3DAnmBase* mAnm; }; -struct J3DAnmColorFullData {}; - -struct J3DAnmFullLoader_v15 { +class J3DAnmFullLoader_v15 : public J3DAnmLoader { +public: /* 80338468 */ J3DAnmFullLoader_v15(); - /* 80338484 */ ~J3DAnmFullLoader_v15(); - /* 80338558 */ void load(void const*); - /* 803386A0 */ void setResource(J3DAnmBase*, void const*); /* 80338800 */ void readAnmTransform(J3DAnmTransformFullData const*); /* 80338828 */ void setAnmTransform(J3DAnmTransformFull*, J3DAnmTransformFullData const*); /* 803388BC */ void readAnmColor(J3DAnmColorFullData const*); @@ -125,6 +58,12 @@ struct J3DAnmFullLoader_v15 { /* 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; }; // @@ -184,7 +123,6 @@ extern "C" extern char const* const J3DAnmLoader__stringBase0; // External References: // -extern "C" void OSReport(); extern "C" void* __nw__FUl(); extern "C" void __dl__FPv(); extern "C" void setResource__10JUTNameTabFPC7ResNTAB(); @@ -279,27 +217,184 @@ SECTION_SDATA2 static f32 lit_889[1 + 1 /* padding */] = { /* 80337B40-80338134 332480 05F4+00 0/0 7/7 1/1 .text * load__20J3DAnmLoaderDataBaseFPCv24J3DAnmLoaderDataBaseFlag */ +// matches with literals +#ifdef NONMATCHING +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; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void* J3DAnmLoaderDataBase::load(void const* param_0, J3DAnmLoaderDataBaseFlag param_1) { +asm J3DAnmBase* J3DAnmLoaderDataBase::load(void const* param_0, J3DAnmLoaderDataBaseFlag param_1) { nofralloc #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/load__20J3DAnmLoaderDataBaseFPCv24J3DAnmLoaderDataBaseFlag.s" } #pragma pop +#endif /* 80338134-80338468 332A74 0334+00 0/0 1/1 0/0 .text * setResource__20J3DAnmLoaderDataBaseFP10J3DAnmBasePCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmLoaderDataBase::setResource(J3DAnmBase* param_0, void const* param_1) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/setResource__20J3DAnmLoaderDataBaseFP10J3DAnmBasePCv.s" +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; + } + } } -#pragma pop /* 80338468-80338484 332DA8 001C+00 2/2 0/0 0/0 .text __ct__20J3DAnmFullLoader_v15Fv */ +// matches with vtable data +#ifdef NONMATCHING +J3DAnmFullLoader_v15::J3DAnmFullLoader_v15() {} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -308,8 +403,13 @@ asm J3DAnmFullLoader_v15::J3DAnmFullLoader_v15() { #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/__ct__20J3DAnmFullLoader_v15Fv.s" } #pragma pop +#endif /* 80338484-803384E0 332DC4 005C+00 3/2 0/0 0/0 .text __dt__20J3DAnmFullLoader_v15Fv */ +// matches with vtable data +#ifdef NONMATCHING +J3DAnmFullLoader_v15::~J3DAnmFullLoader_v15() {} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -318,8 +418,13 @@ asm J3DAnmFullLoader_v15::~J3DAnmFullLoader_v15() { #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/__dt__20J3DAnmFullLoader_v15Fv.s" } #pragma pop +#endif /* 803384E0-803384FC 332E20 001C+00 2/2 0/0 0/0 .text __ct__19J3DAnmKeyLoader_v15Fv */ +// matches with vtable data +#ifdef NONMATCHING +J3DAnmKeyLoader_v15::J3DAnmKeyLoader_v15() {} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -328,8 +433,13 @@ asm J3DAnmKeyLoader_v15::J3DAnmKeyLoader_v15() { #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/__ct__19J3DAnmKeyLoader_v15Fv.s" } #pragma pop +#endif /* 803384FC-80338558 332E3C 005C+00 3/2 0/0 0/0 .text __dt__19J3DAnmKeyLoader_v15Fv */ +// matches with vtable data +#ifdef NONMATCHING +J3DAnmKeyLoader_v15::~J3DAnmKeyLoader_v15() {} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -338,6 +448,7 @@ asm J3DAnmKeyLoader_v15::~J3DAnmKeyLoader_v15() { #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/__dt__19J3DAnmKeyLoader_v15Fv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803A2130-803A2130 02E790 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -349,39 +460,108 @@ 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 */ +// matches with vtable data +#ifdef NONMATCHING +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; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DAnmFullLoader_v15::load(void const* param_0) { +// asm void J3DAnmFullLoader_v15::load(void const* param_0) { +extern "C" asm void load__20J3DAnmFullLoader_v15FPCv() { nofralloc #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/load__20J3DAnmFullLoader_v15FPCv.s" } #pragma pop +#endif /* 803386A0-80338800 332FE0 0160+00 2/1 0/0 0/0 .text * setResource__20J3DAnmFullLoader_v15FP10J3DAnmBasePCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmFullLoader_v15::setResource(J3DAnmBase* param_0, void const* param_1) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/setResource__20J3DAnmFullLoader_v15FP10J3DAnmBasePCv.s" +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(); + } } -#pragma pop /* 80338800-80338828 333140 0028+00 1/1 0/0 0/0 .text * readAnmTransform__20J3DAnmFullLoader_v15FPC23J3DAnmTransformFullData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmFullLoader_v15::readAnmTransform(J3DAnmTransformFullData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmTransform__20J3DAnmFullLoader_v15FPC23J3DAnmTransformFullData.s" +void J3DAnmFullLoader_v15::readAnmTransform(const J3DAnmTransformFullData* param_1) { + setAnmTransform((J3DAnmTransformFull*)mAnm, param_1); } -#pragma pop /* 80338828-803388BC 333168 0094+00 2/2 0/0 0/0 .text * setAnmTransform__20J3DAnmFullLoader_v15FP19J3DAnmTransformFullPC23J3DAnmTransformFullData */ +// matches with literals / weaks +#ifdef NONMATCHING +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->field_0xc = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->mScaleValOffset); + param_1->field_0x10 = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mRotValOffset); + param_1->field_0x14 = JSUConvertOffsetToPtr<f32>(param_2, (void*)param_2->mTransValOffset); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -391,20 +571,36 @@ asm void J3DAnmFullLoader_v15::setAnmTransform(J3DAnmTransformFull* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_80338828.s" } #pragma pop +#endif /* 803388BC-803388E4 3331FC 0028+00 1/1 0/0 0/0 .text * readAnmColor__20J3DAnmFullLoader_v15FPC19J3DAnmColorFullData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmFullLoader_v15::readAnmColor(J3DAnmColorFullData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmColor__20J3DAnmFullLoader_v15FPC19J3DAnmColorFullData.s" +void J3DAnmFullLoader_v15::readAnmColor(const J3DAnmColorFullData* param_1) { + setAnmColor((J3DAnmColorFull*)mAnm, param_1); } -#pragma pop /* 803388E4-803389B0 333224 00CC+00 2/2 0/0 0/0 .text * setAnmColor__20J3DAnmFullLoader_v15FP15J3DAnmColorFullPC19J3DAnmColorFullData */ +// matches with literals / weaks +#ifdef NONMATCHING +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, (void*)param_2->mRValuesOffset); + param_1->mColorG = JSUConvertOffsetToPtr<u8>(param_2, (void*)param_2->mGValuesOffset); + param_1->mColorB = JSUConvertOffsetToPtr<u8>(param_2, (void*)param_2->mBValuesOffset); + param_1->mColorA = JSUConvertOffsetToPtr<u8>(param_2, (void*)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)); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -414,20 +610,34 @@ asm void J3DAnmFullLoader_v15::setAnmColor(J3DAnmColorFull* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/setAnmColor__20J3DAnmFullLoader_v15FP15J3DAnmColorFullPC19J3DAnmColorFullData.s" } #pragma pop +#endif /* 803389B0-803389D8 3332F0 0028+00 1/1 0/0 0/0 .text * readAnmTexPattern__20J3DAnmFullLoader_v15FPC24J3DAnmTexPatternFullData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmFullLoader_v15::readAnmTexPattern(J3DAnmTexPatternFullData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmTexPattern__20J3DAnmFullLoader_v15FPC24J3DAnmTexPatternFullData.s" +void J3DAnmFullLoader_v15::readAnmTexPattern(const J3DAnmTexPatternFullData* param_1) { + setAnmTexPattern((J3DAnmTexPattern*)mAnm, param_1); } -#pragma pop /* 803389D8-80338A7C 333318 00A4+00 2/2 0/0 0/0 .text * setAnmTexPattern__20J3DAnmFullLoader_v15FP16J3DAnmTexPatternPC24J3DAnmTexPatternFullData */ +// matches with literals / weaks +#ifdef NONMATCHING +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)); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -437,20 +647,30 @@ asm void J3DAnmFullLoader_v15::setAnmTexPattern(J3DAnmTexPattern* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_803389D8.s" } #pragma pop +#endif /* 80338A7C-80338AA4 3333BC 0028+00 1/1 0/0 0/0 .text * readAnmVisibility__20J3DAnmFullLoader_v15FPC24J3DAnmVisibilityFullData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmFullLoader_v15::readAnmVisibility(J3DAnmVisibilityFullData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmVisibility__20J3DAnmFullLoader_v15FPC24J3DAnmVisibilityFullData.s" +void J3DAnmFullLoader_v15::readAnmVisibility(const J3DAnmVisibilityFullData* param_1) { + setAnmVisibility((J3DAnmVisibilityFull*)mAnm, param_1); } -#pragma pop /* 80338AA4-80338B20 3333E4 007C+00 2/2 0/0 0/0 .text * setAnmVisibility__20J3DAnmFullLoader_v15FP20J3DAnmVisibilityFullPC24J3DAnmVisibilityFullData */ +// matches with literals / weaks +#ifdef NONMATCHING +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, (void*)param_2->mValuesOffset); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -460,20 +680,28 @@ asm void J3DAnmFullLoader_v15::setAnmVisibility(J3DAnmVisibilityFull* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_80338AA4.s" } #pragma pop +#endif /* 80338B20-80338B48 333460 0028+00 1/1 0/0 0/0 .text * readAnmCluster__20J3DAnmFullLoader_v15FPC21J3DAnmClusterFullData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmFullLoader_v15::readAnmCluster(J3DAnmClusterFullData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmCluster__20J3DAnmFullLoader_v15FPC21J3DAnmClusterFullData.s" +void J3DAnmFullLoader_v15::readAnmCluster(const J3DAnmClusterFullData* param_1) { + setAnmCluster((J3DAnmClusterFull*)mAnm, param_1); } -#pragma pop /* 80338B48-80338BB4 333488 006C+00 2/2 0/0 0/0 .text * setAnmCluster__20J3DAnmFullLoader_v15FP17J3DAnmClusterFullPC21J3DAnmClusterFullData */ +// matches with literals / weaks +#ifdef NONMATCHING +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); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -483,20 +711,51 @@ asm void J3DAnmFullLoader_v15::setAnmCluster(J3DAnmClusterFull* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_80338B48.s" } #pragma pop +#endif /* 80338BB4-80338BDC 3334F4 0028+00 1/1 0/0 0/0 .text * readAnmVtxColor__20J3DAnmFullLoader_v15FPC22J3DAnmVtxColorFullData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmFullLoader_v15::readAnmVtxColor(J3DAnmVtxColorFullData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmVtxColor__20J3DAnmFullLoader_v15FPC22J3DAnmVtxColorFullData.s" +void J3DAnmFullLoader_v15::readAnmVtxColor(const J3DAnmVtxColorFullData* param_1) { + setAnmVtxColor((J3DAnmVtxColorFull*)mAnm, param_1); } -#pragma pop /* 80338BDC-80338D44 33351C 0168+00 2/2 0/0 0/0 .text * setAnmVtxColor__20J3DAnmFullLoader_v15FP18J3DAnmVtxColorFullPC22J3DAnmVtxColorFullData */ +// matches with literals / weaks +#ifdef NONMATCHING +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, (void*)data->mRValuesOffset); + dst->mColorG = JSUConvertOffsetToPtr<u8>(data, (void*)data->mGValuesOffset); + dst->mColorB = JSUConvertOffsetToPtr<u8>(data, (void*)data->mBValuesOffset); + dst->mColorA = JSUConvertOffsetToPtr<u8>(data, (void*)data->mAValuesOffset); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -506,41 +765,111 @@ asm void J3DAnmFullLoader_v15::setAnmVtxColor(J3DAnmVtxColorFull* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_80338BDC.s" } #pragma pop +#endif /* 80338D44-80338E8C 333684 0148+00 2/1 0/0 0/0 .text load__19J3DAnmKeyLoader_v15FPCv */ +// matches with literals +#ifdef NONMATCHING +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; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DAnmKeyLoader_v15::load(void const* param_0) { +// asm J3DAnmBase* J3DAnmKeyLoader_v15::load(void const* param_0) { +extern "C" asm void load__19J3DAnmKeyLoader_v15FPCv() { nofralloc #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/load__19J3DAnmKeyLoader_v15FPCv.s" } #pragma pop +#endif /* 80338E8C-80338FEC 3337CC 0160+00 2/1 0/0 0/0 .text * setResource__19J3DAnmKeyLoader_v15FP10J3DAnmBasePCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmKeyLoader_v15::setResource(J3DAnmBase* param_0, void const* param_1) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/setResource__19J3DAnmKeyLoader_v15FP10J3DAnmBasePCv.s" +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(); + } } -#pragma pop /* 80338FEC-80339014 33392C 0028+00 1/1 0/0 0/0 .text * readAnmTransform__19J3DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmKeyLoader_v15::readAnmTransform(J3DAnmTransformKeyData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmTransform__19J3DAnmKeyLoader_v15FPC22J3DAnmTransformKeyData.s" +void J3DAnmKeyLoader_v15::readAnmTransform(const J3DAnmTransformKeyData* param_1) { + setAnmTransform((J3DAnmTransformKey*)mAnm, param_1); } -#pragma pop /* 80339014-803390B0 333954 009C+00 2/2 0/0 0/0 .text * setAnmTransform__19J3DAnmKeyLoader_v15FP18J3DAnmTransformKeyPC22J3DAnmTransformKeyData */ +// matches with literals / weaks +#ifdef NONMATCHING +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); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -550,20 +879,69 @@ asm void J3DAnmKeyLoader_v15::setAnmTransform(J3DAnmTransformKey* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_80339014.s" } #pragma pop +#endif /* 803390B0-803390D8 3339F0 0028+00 1/1 0/0 0/0 .text * readAnmTextureSRT__19J3DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmKeyLoader_v15::readAnmTextureSRT(J3DAnmTextureSRTKeyData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmTextureSRT__19J3DAnmKeyLoader_v15FPC23J3DAnmTextureSRTKeyData.s" +void J3DAnmKeyLoader_v15::readAnmTextureSRT(const J3DAnmTextureSRTKeyData* param_1) { + setAnmTextureSRT((J3DAnmTextureSRTKey*)mAnm, param_1); } -#pragma pop /* 803390D8-803392B0 333A18 01D8+00 2/2 0/0 0/0 .text * setAnmTextureSRT__19J3DAnmKeyLoader_v15FP19J3DAnmTextureSRTKeyPC23J3DAnmTextureSRTKeyData */ +// matches with literals / weaks +#ifdef NONMATCHING +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, (void*)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, (void*)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; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -573,20 +951,39 @@ asm void J3DAnmKeyLoader_v15::setAnmTextureSRT(J3DAnmTextureSRTKey* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_803390D8.s" } #pragma pop +#endif /* 803392B0-803392D8 333BF0 0028+00 1/1 0/0 0/0 .text * readAnmColor__19J3DAnmKeyLoader_v15FPC18J3DAnmColorKeyData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmKeyLoader_v15::readAnmColor(J3DAnmColorKeyData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmColor__19J3DAnmKeyLoader_v15FPC18J3DAnmColorKeyData.s" +void J3DAnmKeyLoader_v15::readAnmColor(const J3DAnmColorKeyData* param_1) { + setAnmColor((J3DAnmColorKey*)mAnm, param_1); } -#pragma pop /* 803392D8-803393C4 333C18 00EC+00 2/2 0/0 0/0 .text * setAnmColor__19J3DAnmKeyLoader_v15FP14J3DAnmColorKeyPC18J3DAnmColorKeyData */ +// matches with literals / weaks +#ifdef NONMATCHING +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)); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -596,20 +993,28 @@ asm void J3DAnmKeyLoader_v15::setAnmColor(J3DAnmColorKey* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/setAnmColor__19J3DAnmKeyLoader_v15FP14J3DAnmColorKeyPC18J3DAnmColorKeyData.s" } #pragma pop +#endif /* 803393C4-803393EC 333D04 0028+00 1/1 0/0 0/0 .text * readAnmCluster__19J3DAnmKeyLoader_v15FPC20J3DAnmClusterKeyData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmKeyLoader_v15::readAnmCluster(J3DAnmClusterKeyData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmCluster__19J3DAnmKeyLoader_v15FPC20J3DAnmClusterKeyData.s" +void J3DAnmKeyLoader_v15::readAnmCluster(const J3DAnmClusterKeyData* param_1) { + setAnmCluster((J3DAnmClusterKey*)mAnm, param_1); } -#pragma pop /* 803393EC-80339458 333D2C 006C+00 2/2 0/0 0/0 .text * setAnmCluster__19J3DAnmKeyLoader_v15FP16J3DAnmClusterKeyPC20J3DAnmClusterKeyData */ +// matches with literals / weaks +#ifdef NONMATCHING +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); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -619,20 +1024,55 @@ asm void J3DAnmKeyLoader_v15::setAnmCluster(J3DAnmClusterKey* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_803393EC.s" } #pragma pop +#endif /* 80339458-80339480 333D98 0028+00 1/1 0/0 0/0 .text * readAnmTevReg__19J3DAnmKeyLoader_v15FPC19J3DAnmTevRegKeyData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmKeyLoader_v15::readAnmTevReg(J3DAnmTevRegKeyData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmTevReg__19J3DAnmKeyLoader_v15FPC19J3DAnmTevRegKeyData.s" +void J3DAnmKeyLoader_v15::readAnmTevReg(const J3DAnmTevRegKeyData* param_1) { + setAnmTevReg((J3DAnmTevRegKey*)mAnm, param_1); } -#pragma pop /* 80339480-8033960C 333DC0 018C+00 2/2 0/0 0/0 .text * setAnmTevReg__19J3DAnmKeyLoader_v15FP15J3DAnmTevRegKeyPC19J3DAnmTevRegKeyData */ +// matches with literals / weaks +#ifdef NONMATCHING +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); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -642,20 +1082,49 @@ asm void J3DAnmKeyLoader_v15::setAnmTevReg(J3DAnmTevRegKey* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/setAnmTevReg__19J3DAnmKeyLoader_v15FP15J3DAnmTevRegKeyPC19J3DAnmTevRegKeyData.s" } #pragma pop +#endif /* 8033960C-80339634 333F4C 0028+00 1/1 0/0 0/0 .text * readAnmVtxColor__19J3DAnmKeyLoader_v15FPC21J3DAnmVtxColorKeyData */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DAnmKeyLoader_v15::readAnmVtxColor(J3DAnmVtxColorKeyData const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/readAnmVtxColor__19J3DAnmKeyLoader_v15FPC21J3DAnmVtxColorKeyData.s" +void J3DAnmKeyLoader_v15::readAnmVtxColor(const J3DAnmVtxColorKeyData* param_1) { + setAnmVtxColor((J3DAnmVtxColorKey*)mAnm, param_1); } -#pragma pop /* 80339634-8033979C 333F74 0168+00 2/2 0/0 0/0 .text * setAnmVtxColor__19J3DAnmKeyLoader_v15FP17J3DAnmVtxColorKeyPC21J3DAnmVtxColorKeyData */ +// matches with literals / weaks +#ifdef NONMATCHING +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); +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -665,6 +1134,7 @@ asm void J3DAnmKeyLoader_v15::setAnmVtxColor(J3DAnmVtxColorKey* param_0, #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/func_80339634.s" } #pragma pop +#endif /* 8033979C-803397F8 3340DC 005C+00 1/0 0/0 0/0 .text __dt__20J3DAnmVisibilityFullFv */ #pragma push @@ -686,7 +1156,8 @@ s32 J3DAnmVisibilityFull::getKind() const { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm J3DAnmLoader::~J3DAnmLoader() { +// asm J3DAnmLoader::~J3DAnmLoader() { +extern "C" asm void __dt__12J3DAnmLoaderFv() { nofralloc #include "asm/JSystem/J3DGraphLoader/J3DAnmLoader/__dt__12J3DAnmLoaderFv.s" } diff --git a/libs/JSystem/J3DGraphLoader/J3DClusterLoader.cpp b/libs/JSystem/J3DGraphLoader/J3DClusterLoader.cpp index 2bff68389b..b7408f61f0 100644 --- a/libs/JSystem/J3DGraphLoader/J3DClusterLoader.cpp +++ b/libs/JSystem/J3DGraphLoader/J3DClusterLoader.cpp @@ -4,6 +4,11 @@ // #include "JSystem/J3DGraphLoader/J3DClusterLoader.h" +#include "JSystem/J3DGraphAnimator/J3DAnimation.h" +#include "JSystem/J3DGraphAnimator/J3DCluster.h" +#include "JSystem/J3DGraphAnimator/J3DSkinDeform.h" +#include "JSystem/JSupport/JSupport.h" +#include "JSystem/JUtility/JUTNameTab.h" #include "dol2asm.h" #include "dolphin/os.h" @@ -11,31 +16,37 @@ // Types: // -struct ResNTAB {}; - -struct JUTNameTab { - /* 802DE9E0 */ JUTNameTab(ResNTAB const*); -}; - -struct J3DDeformData { - /* 8032E1F8 */ J3DDeformData(); +class J3DClusterBlock : public JUTDataBlockHeader { +public: + /* 0x08 */ u16 mClusterNum; + /* 0x0A */ u16 mClusterKeyNum; + /* 0x0C */ u16 mClusterVertexNum; + /* 0x0E */ u16 mVtxPosNum; + /* 0x10 */ u16 mVtxNrmNum; + /* 0x14 */ void* mClusterPointer; + /* 0x18 */ void* mClusterKeyPointer; + /* 0x1C */ void* mClusterVertex; + /* 0x20 */ void* mVtxPos; + /* 0x24 */ void* mVtxNrm; + /* 0x28 */ void* mClusterName; + /* 0x2C */ void* mClusterKeyName; }; -struct J3DDeformer { - /* 8032E39C */ J3DDeformer(J3DDeformData*); +class J3DClusterLoader { +public: + virtual void* load(const void*) = 0; + /* 803345FC */ virtual ~J3DClusterLoader(); }; -struct J3DClusterBlock {}; - -struct J3DClusterLoader_v15 { +class J3DClusterLoader_v15 : public J3DClusterLoader { +public: /* 803341CC */ J3DClusterLoader_v15(); - /* 803341E8 */ ~J3DClusterLoader_v15(); - /* 80334244 */ void load(void const*); /* 803342F8 */ void readCluster(J3DClusterBlock const*); -}; -struct J3DClusterLoader { - /* 803345FC */ ~J3DClusterLoader(); + /* 80334244 */ virtual void* load(void const*); + /* 803341E8 */ virtual ~J3DClusterLoader_v15(); + + /* 0x04 */ J3DDeformData* mpDeformData; }; // @@ -78,14 +89,16 @@ extern "C" void _restgpr_26(); // /* 80334130-803341CC 32EA70 009C+00 0/0 1/1 0/0 .text load__24J3DClusterLoaderDataBaseFPCv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* J3DClusterLoaderDataBase::load(void const* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphLoader/J3DClusterLoader/load__24J3DClusterLoaderDataBaseFPCv.s" +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; } -#pragma pop /* ############################################################################################## */ /* 803CF0E8-803CF0F8 02C208 0010+00 2/2 0/0 0/0 .data __vt__20J3DClusterLoader_v15 */ @@ -105,6 +118,10 @@ SECTION_DATA extern void* __vt__16J3DClusterLoader[4] = { }; /* 803341CC-803341E8 32EB0C 001C+00 1/1 0/0 0/0 .text __ct__20J3DClusterLoader_v15Fv */ +// matches with weak order +#ifdef NONMATCHING +J3DClusterLoader_v15::J3DClusterLoader_v15() {} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -113,8 +130,13 @@ asm J3DClusterLoader_v15::J3DClusterLoader_v15() { #include "asm/JSystem/J3DGraphLoader/J3DClusterLoader/__ct__20J3DClusterLoader_v15Fv.s" } #pragma pop +#endif /* 803341E8-80334244 32EB28 005C+00 2/1 0/0 0/0 .text __dt__20J3DClusterLoader_v15Fv */ +// matches with weak order +#ifdef NONMATCHING +J3DClusterLoader_v15::~J3DClusterLoader_v15() {} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -123,6 +145,7 @@ asm J3DClusterLoader_v15::~J3DClusterLoader_v15() { #include "asm/JSystem/J3DGraphLoader/J3DClusterLoader/__dt__20J3DClusterLoader_v15Fv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 803A2098-803A2098 02E6F8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -134,17 +157,117 @@ SECTION_DEAD static char const* const pad_803A20AC = "\0\0\0"; #pragma pop /* 80334244-803342F8 32EB84 00B4+00 2/1 0/0 0/0 .text load__20J3DClusterLoader_v15FPCv */ +// matches with vtable data +#ifdef NONMATCHING +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; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DClusterLoader_v15::load(void const* param_0) { +// asm void* J3DClusterLoader_v15::load(void const* param_0) { +extern "C" asm void load__20J3DClusterLoader_v15FPCv() { nofralloc #include "asm/JSystem/J3DGraphLoader/J3DClusterLoader/load__20J3DClusterLoader_v15FPCv.s" } #pragma pop +#endif /* 803342F8-803345FC 32EC38 0304+00 1/1 0/0 0/0 .text * readCluster__20J3DClusterLoader_v15FPC15J3DClusterBlock */ +#ifdef NONMATCHING +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); + + mpDeformData->mClusterPointer = new J3DCluster[mpDeformData->getClusterNum()]; + J3DCluster* blockCluster = JSUConvertOffsetToPtr<J3DCluster>(block, block->mClusterPointer); + for (int i = 0; i < mpDeformData->getClusterNum(); i++) { + mpDeformData->mClusterPointer[i] = blockCluster[i]; + } + + mpDeformData->mClusterKeyPointer = new J3DClusterKey[mpDeformData->getClusterKeyNum()]; + J3DClusterKey* blockClusterKey = + JSUConvertOffsetToPtr<J3DClusterKey>(block, block->mClusterKeyPointer); + for (int i = 0; i < mpDeformData->getClusterKeyNum(); i++) { + mpDeformData->mClusterKeyPointer[i] = blockClusterKey[i]; + } + + mpDeformData->mClusterVertex = new J3DClusterVertex[mpDeformData->mClusterVertexNum]; + J3DClusterVertex* blockClusterVertex = + JSUConvertOffsetToPtr<J3DClusterVertex>(block, block->mClusterVertex); + for (int i = 0; i < mpDeformData->mClusterVertexNum; i++) { + mpDeformData->mClusterVertex[i] = blockClusterVertex[i]; + } + + for (int i = 0; i < mpDeformData->getClusterNum(); i++) { + J3DCluster* cluster = &mpDeformData->mClusterPointer[i]; + cluster->mClusterKey = JSUConvertOffsetToPtr<J3DClusterKey>(block, cluster->mClusterKey); + cluster->field_0x18 = JSUConvertOffsetToPtr<u16>(block, cluster->field_0x18); + J3DClusterVertex* clusterVertex = + JSUConvertOffsetToPtr<J3DClusterVertex>(block, cluster->mClusterVertex); + u32 vertexIdx = (clusterVertex - blockClusterVertex) / sizeof(J3DClusterVertex); + cluster->mClusterVertex = &mpDeformData->mClusterVertex[vertexIdx]; + 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); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -153,6 +276,7 @@ asm void J3DClusterLoader_v15::readCluster(J3DClusterBlock const* param_0) { #include "asm/JSystem/J3DGraphLoader/J3DClusterLoader/readCluster__20J3DClusterLoader_v15FPC15J3DClusterBlock.s" } #pragma pop +#endif /* 803345FC-80334644 32EF3C 0048+00 1/0 0/0 0/0 .text __dt__16J3DClusterLoaderFv */ #pragma push diff --git a/libs/JSystem/JFramework/JFWDisplay.cpp b/libs/JSystem/JFramework/JFWDisplay.cpp index 128571889e..4be1ff58d0 100644 --- a/libs/JSystem/JFramework/JFWDisplay.cpp +++ b/libs/JSystem/JFramework/JFWDisplay.cpp @@ -1,30 +1,11 @@ -// -// Generated By: dol2asm -// Translation Unit: JFWDisplay -// - #include "JSystem/JFramework/JFWDisplay.h" #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTConsole.h" #include "JSystem/JUtility/JUTDbPrint.h" #include "JSystem/JUtility/JUTProcBar.h" -#include "dol2asm.h" #include "dolphin/gx.h" #include "dolphin/os.h" -#include "dolphin/types.h" - -// -// Forward References: -// - -// -// External References: -// - -// -// Declarations: -// /* 80272040-802720F8 26C980 00B8+00 1/1 0/0 0/0 .text ctor_subroutine__10JFWDisplayFb */ void JFWDisplay::ctor_subroutine(bool enableAlpha) { @@ -637,5 +618,3 @@ static void diagnoseGpHang() { OSReport("GP is in unknown state.\n"); } } - -/* 8039A878-8039A878 026ED8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/libs/JSystem/JGadget/linklist.cpp b/libs/JSystem/JGadget/linklist.cpp index e040b3fce2..fefe1eeae5 100644 --- a/libs/JSystem/JGadget/linklist.cpp +++ b/libs/JSystem/JGadget/linklist.cpp @@ -6,6 +6,17 @@ #include "JSystem/JGadget/linklist.h" #include "dolphin/types.h" +template <typename T> +class TPRIsEqual_pointer_ { +public: + TPRIsEqual_pointer_<T>(const T* p) { this->p_ = p; } + + bool operator()(const T& rSrc) const { return &rSrc == this->p_; } + +private: + const T* p_; +}; + // // Forward References: // @@ -39,85 +50,80 @@ extern "C" void _restgpr_29(); /* 802DCA1C-802DCA58 2D735C 003C+00 1/1 6/6 0/0 .text __dt__Q27JGadget13TNodeLinkListFv */ -JGadget::TNodeLinkList::~TNodeLinkList() { -} +JGadget::TNodeLinkList::~TNodeLinkList() {} /* 802DCA58-802DCAA0 2D7398 0048+00 0/0 2/2 0/0 .text * erase__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iterator */ JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::erase(JGadget::TNodeLinkList::iterator it) { - iterator it2 = JGadget::TNodeLinkList::iterator(it); - iterator next = ++it2; + iterator next = it; + ++next; return erase(it, next); } /* 802DCAA0-802DCB08 2D73E0 0068+00 1/1 0/0 0/0 .text * erase__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorQ37JGadget13TNodeLinkList8iterator */ -JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::erase(iterator start, iterator end) { - TLinkListNode* startNode = start.node; - TLinkListNode* endNode = end.node; - while (startNode != endNode) { - TLinkListNode* nextNode = startNode->mNext; - Erase(startNode); - startNode = nextNode; +JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::erase(iterator a, iterator b) { + TLinkListNode* cur = a.node; + TLinkListNode* end = b.node; + TLinkListNode* next; + + for (; cur != end; cur = next) { + next = cur->mNext; + Erase(cur); } - return iterator(end.node); + + return b; } /* 802DCB08-802DCBA8 2D7448 00A0+00 1/1 0/0 0/0 .text * splice__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorRQ27JGadget13TNodeLinkListQ37JGadget13TNodeLinkList8iterator */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JGadget::TNodeLinkList::splice(JGadget::TNodeLinkList::iterator param_0, - JGadget::TNodeLinkList& param_1, - JGadget::TNodeLinkList::iterator param_2) { - nofralloc -#include "asm/JSystem/JGadget/linklist/func_802DCB08.s" +void JGadget::TNodeLinkList::splice(iterator it, TNodeLinkList& rSrc, iterator itSrc) { + iterator itSrcNext = itSrc; + ++itSrcNext; + + if ((it == itSrc) || (it == itSrcNext)) { + return; + } else { + TLinkListNode* const node = &(*itSrc); + rSrc.Erase(node); + Insert(it, node); + } } -#pragma pop /* 802DCBA8-802DCBD4 2D74E8 002C+00 1/1 7/7 0/0 .text * Insert__Q27JGadget13TNodeLinkListFQ37JGadget13TNodeLinkList8iteratorPQ27JGadget13TLinkListNode */ -JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Insert(iterator it, TLinkListNode* node) { - TLinkListNode* itNode = it.node; - TLinkListNode* prev = itNode->mPrev; - node->mNext = itNode; - node->mPrev = prev; - itNode->mPrev = node; - prev->mNext = node; - this->count++; - return iterator(node); +JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Insert(iterator it, TLinkListNode* p) { + TLinkListNode* pIt = it.node; + TLinkListNode* pItPrev = pIt->mPrev; + + p->mNext = pIt; + p->mPrev = pItPrev; + pIt->mPrev = p; + pItPrev->mNext = p; + count++; + return iterator(p); } /* 802DCBD4-802DCBF8 2D7514 0024+00 2/2 4/4 0/0 .text * Erase__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode */ -JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Erase(TLinkListNode* node) { - TLinkListNode* next = node->mNext; - TLinkListNode* prev = node->mPrev; - next->mPrev = prev; - prev->mNext = next; - this->count--; - return iterator(next); +JGadget::TNodeLinkList::iterator JGadget::TNodeLinkList::Erase(TLinkListNode* p) { + TLinkListNode* pNext = p->mNext; + TLinkListNode* pPrev = p->mPrev; + pNext->mPrev = pPrev; + pPrev->mNext = pNext; + count--; + return iterator(pNext); } /* 802DCBF8-802DCCC8 2D7538 00D0+00 0/0 2/2 0/0 .text * Remove__Q27JGadget13TNodeLinkListFPQ27JGadget13TLinkListNode */ +// missing stack #ifdef NONMATCHING -void JGadget::TNodeLinkList::Remove(TLinkListNode* node) { - TNodeLinkList trashList; - TLinkListNode* myNode = this->ocObject_.mNext; - while (myNode != end().node) { - if (myNode == node) { - TLinkListNode* next = myNode->mNext; - trashList.splice(&trashList.ocObject_, *this, myNode); - myNode = next; - } else { - myNode = myNode->mNext; - } - } +void JGadget::TNodeLinkList::Remove(TLinkListNode* p) { + remove_if(TPRIsEqual_pointer_<TLinkListNode>(p)); } #else #pragma push diff --git a/libs/JSystem/JKernel/JKRAram.cpp b/libs/JSystem/JKernel/JKRAram.cpp index 4a8e1746a6..40583f4e50 100644 --- a/libs/JSystem/JKernel/JKRAram.cpp +++ b/libs/JSystem/JKernel/JKRAram.cpp @@ -1,46 +1,27 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRAram -// - #include "JSystem/JKernel/JKRAram.h" #include "JSystem/JKernel/JKRAramPiece.h" #include "JSystem/JKernel/JKRAramStream.h" #include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JUtility/JUTException.h" -#include "string.h" #include "dolphin/ar.h" #include "dolphin/os/OSCache.h" #include "dolphin/os/OSInterrupt.h" #include "global.h" - -// -// Forward References: -// +#include "string.h" static u8* firstSrcData(); static u8* nextSrcData(u8* param_0); -static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset, - u32* resourceSize); -int decompSZS_subroutine(u8 *src, u8 *dest); - -// -// External References: -// +static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, + u32 offset, u32* resourceSize); +int decompSZS_subroutine(u8* src, u8* dest); - -// -// Declarations: -// - -/* ############################################################################################## */ /* 804513C8-804513CC 0008C8 0004+00 3/3 9/9 0/0 .sbss sAramObject__7JKRAram */ JKRAram* JKRAram::sAramObject; /* 802D1FA4-802D2040 2CC8E4 009C+00 0/0 1/1 0/0 .text create__7JKRAramFUlUllll */ -JKRAram* JKRAram::create(u32 aram_audio_buffer_size, u32 aram_audio_graph_size, - s32 stream_priority, s32 decomp_priority, s32 piece_priority) { +JKRAram* JKRAram::create(u32 aram_audio_buffer_size, u32 aram_audio_graph_size, s32 stream_priority, + s32 decomp_priority, s32 piece_priority) { if (!sAramObject) { sAramObject = new (JKRHeap::getSystemHeap(), 0) JKRAram(aram_audio_buffer_size, aram_audio_graph_size, piece_priority); @@ -144,11 +125,15 @@ void JKRAram::changeGroupIdIfNeed(u8* data, int groupId) { /* 802D233C-802D25B4 2CCC7C 0278+00 0/0 3/3 0/0 .text * mainRamToAram__7JKRAramFPUcUlUl15JKRExpandSwitchUlP7JKRHeapiPUl */ -JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap *heap, int id, u32 *pSize) { - JKRAramBlock *block = NULL; +JKRAramBlock* JKRAram::mainRamToAram(u8* buf, u32 bufSize, u32 alignedSize, + JKRExpandSwitch expandSwitch, u32 fileSize, JKRHeap* heap, + int id, u32* pSize) { + JKRAramBlock* block = NULL; checkOkAddress(buf, bufSize, NULL, 0); if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) { - expandSwitch = (JKRCheckCompressed_noASR(buf) == COMPRESSION_NONE) ? EXPAND_SWITCH_UNKNOWN0 : EXPAND_SWITCH_UNKNOWN1; + expandSwitch = (JKRCheckCompressed_noASR(buf) == COMPRESSION_NONE) ? + EXPAND_SWITCH_UNKNOWN0 : + EXPAND_SWITCH_UNKNOWN1; } if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) { u32 expandSize = JKRDecompExpandSize(buf); @@ -156,7 +141,8 @@ JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRE fileSize = ALIGN_NEXT(expandSize, 32); } if (bufSize == 0) { - JKRAramBlock* allocatedBlock = (JKRAramBlock*)JKRAllocFromAram(fileSize, JKRAramHeap::HEAD); + JKRAramBlock* allocatedBlock = + (JKRAramBlock*)JKRAllocFromAram(fileSize, JKRAramHeap::HEAD); block = (JKRAramBlock*)allocatedBlock; if (allocatedBlock == NULL) return NULL; @@ -170,29 +156,27 @@ JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRE if (alignedSize > fileSize) alignedSize = fileSize; - void *allocatedMem = JKRAllocFromHeap(heap, fileSize, -32); + void* allocatedMem = JKRAllocFromHeap(heap, fileSize, -32); if (allocatedMem == NULL) { if (block != NULL) { JKRFreeToAram(block); } block = NULL; - } - else { - JKRDecompress(buf, (u8 *)allocatedMem, fileSize, 0); + } else { + JKRDecompress(buf, (u8*)allocatedMem, fileSize, 0); JKRAramPcs(0, (u32)allocatedMem, bufSize, alignedSize, block); JKRFreeToHeap(heap, allocatedMem); - block = block == NULL ? (JKRAramBlock *)-1 : block; + block = block == NULL ? (JKRAramBlock*)-1 : block; if (pSize != NULL) { *pSize = alignedSize; } } - } - else { + } else { if (fileSize != 0 && alignedSize > fileSize) alignedSize = fileSize; if (bufSize == 0) { - - JKRAramBlock* allocatedBlock = (JKRAramBlock*)JKRAllocFromAram(alignedSize, JKRAramHeap::HEAD); + JKRAramBlock* allocatedBlock = + (JKRAramBlock*)JKRAllocFromAram(alignedSize, JKRAramHeap::HEAD); block = allocatedBlock; block->newGroupID(decideAramGroupId(id)); if (block == NULL) @@ -202,7 +186,7 @@ JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRE } JKRAramPcs(0, (u32)buf, bufSize, alignedSize, block); - block = block == NULL ? (JKRAramBlock *)-1 : block; + block = block == NULL ? (JKRAramBlock*)-1 : block; if (pSize != NULL) *pSize = alignedSize; } @@ -211,7 +195,8 @@ JKRAramBlock *JKRAram::mainRamToAram(u8 *buf, u32 bufSize, u32 alignedSize, JKRE /* 802D25B4-802D2830 2CCEF4 027C+00 0/0 6/6 0/0 .text * aramToMainRam__7JKRAramFUlPUcUl15JKRExpandSwitchUlP7JKRHeapiPUl */ -u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandSwitch, u32 p5, JKRHeap *heap, int id, u32 *pSize) { +u8* JKRAram::aramToMainRam(u32 address, u8* buf, u32 p3, JKRExpandSwitch expandSwitch, u32 p5, + JKRHeap* heap, int id, u32* pSize) { JKRCompression compression = COMPRESSION_NONE; if (pSize != NULL) *pSize = 0; @@ -221,18 +206,19 @@ u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandS u32 expandSize; if (expandSwitch == EXPAND_SWITCH_UNKNOWN1) { u8 buffer[64]; - u8 *bufPtr = (u8 *)ALIGN_NEXT((u32)buffer, 32); - JKRAramPcs(1, address, (u32)bufPtr, sizeof(buffer) / 2, NULL); // probably change sizeof(buffer) / 2 to 32 + u8* bufPtr = (u8*)ALIGN_NEXT((u32)buffer, 32); + JKRAramPcs(1, address, (u32)bufPtr, sizeof(buffer) / 2, + NULL); // probably change sizeof(buffer) / 2 to 32 compression = JKRCheckCompressed_noASR(bufPtr); expandSize = JKRDecompExpandSize(bufPtr); } - if (compression == COMPRESSION_YAZ0) { // SZS + if (compression == COMPRESSION_YAZ0) { // SZS if (p5 != 0 && p5 < expandSize) expandSize = p5; if (buf == NULL) - buf = (u8 *)JKRAllocFromHeap(heap, expandSize, 32); + buf = (u8*)JKRAllocFromHeap(heap, expandSize, 32); if (buf == NULL) return NULL; else { @@ -240,20 +226,18 @@ u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandS JKRDecompressFromAramToMainRam(address, buf, p3, expandSize, 0, pSize); return buf; } - } - else if (compression == COMPRESSION_YAY0) { // SZP - u8 *szpSpace = (u8 *)JKRAllocFromHeap(heap, p3, -32); + } else if (compression == COMPRESSION_YAY0) { // SZP + u8* szpSpace = (u8*)JKRAllocFromHeap(heap, p3, -32); if (szpSpace == NULL) { return NULL; - } - else { + } else { JKRAramPcs(1, address, (u32)szpSpace, p3, NULL); if (p5 != 0 && p5 < expandSize) expandSize = p5; u8* rv; if (buf == NULL) { - rv = (u8 *)JKRAllocFromHeap(heap, expandSize, 32); + rv = (u8*)JKRAllocFromHeap(heap, expandSize, 32); } else { rv = buf; } @@ -261,8 +245,7 @@ u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandS if (rv == NULL) { i_JKRFree(szpSpace); return NULL; - } - else { + } else { changeGroupIdIfNeed(rv, id); JKRDecompress(szpSpace, rv, expandSize, 0); JKRFreeToHeap(heap, szpSpace); @@ -272,14 +255,12 @@ u8 *JKRAram::aramToMainRam(u32 address, u8 *buf, u32 p3, JKRExpandSwitch expandS return rv; } } - } - else { // Not compressed or ASR + } else { // Not compressed or ASR if (buf == NULL) - buf = (u8 *)JKRAllocFromHeap(heap, p3, 32); + buf = (u8*)JKRAllocFromHeap(heap, p3, 32); if (buf == NULL) { return NULL; - } - else { + } else { changeGroupIdIfNeed(buf, id); JKRAramPcs(1, address, (u32)buf, p3, NULL); if (pSize != NULL) { @@ -346,8 +327,8 @@ static u32 tsArea; /* 802D2830-802D29A0 2CD170 0170+00 1/1 0/0 0/0 .text * JKRDecompressFromAramToMainRam__FUlPvUlUlUlPUl */ -static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, u32 offset, - u32* resourceSize) { +static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 dstLength, + u32 offset, u32* resourceSize) { BOOL interrupts = OSDisableInterrupts(); if (s_is_decompress_mutex_initialized == false) { OSInitMutex(&decompMutex); @@ -357,15 +338,14 @@ static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 OSLockMutex(&decompMutex); u32 szsBufferSize = JKRAram::getSZSBufferSize(); - szpBuf = (u8 *)JKRAllocFromSysHeap(szsBufferSize, 32); + szpBuf = (u8*)JKRAllocFromSysHeap(szsBufferSize, 32); szpEnd = szpBuf + szsBufferSize; if (offset != 0) { - refBuf = (u8 *)JKRAllocFromSysHeap(0x1120, 0); + refBuf = (u8*)JKRAllocFromSysHeap(0x1120, 0); refEnd = refBuf + 0x1120; refCurrent = refBuf; - } - else { + } else { refBuf = NULL; } srcAddress = src; @@ -377,7 +357,7 @@ static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 tsPtr = (resourceSize != 0) ? resourceSize : &tsArea; *tsPtr = 0; - decompSZS_subroutine(firstSrcData(), (u8 *)dst); + decompSZS_subroutine(firstSrcData(), (u8*)dst); i_JKRFree(szpBuf); if (refBuf) { i_JKRFree(refBuf); @@ -390,8 +370,8 @@ static int JKRDecompressFromAramToMainRam(u32 src, void* dst, u32 srcLength, u32 } /* 802D29A0-802D2C40 2CD2E0 02A0+00 1/1 0/0 0/0 .text decompSZS_subroutine__FPUcPUc */ -int decompSZS_subroutine(u8 *src, u8 *dest) { - u8 *endPtr; +int decompSZS_subroutine(u8* src, u8* dest) { + u8* endPtr; s32 validBitCount = 0; s32 currCodeByte = 0; u32 ts = 0; @@ -400,7 +380,7 @@ int decompSZS_subroutine(u8 *src, u8 *dest) { return -1; } - SYaz0Header *header = (SYaz0Header *)src; + SYaz0Header* header = (SYaz0Header*)src; endPtr = dest + (header->length - fileOffset); if (endPtr > dest + maxDest) { endPtr = dest + maxDest; @@ -422,8 +402,7 @@ int decompSZS_subroutine(u8 *src, u8 *dest) { *dest = *src; dest++; ts++; - if (dest == endPtr) - { + if (dest == endPtr) { break; } } @@ -432,8 +411,7 @@ int decompSZS_subroutine(u8 *src, u8 *dest) { refCurrent = refBuf; } src++; - } - else { + } else { *dest = *src; dest++; src++; @@ -443,26 +421,23 @@ int decompSZS_subroutine(u8 *src, u8 *dest) { } } readCount++; - } - else { + } else { u32 dist = ((src[0] & 0x0f) << 8) | src[1]; s32 numBytes = src[0] >> 4; src += 2; - u8 *copySource; + u8* copySource; if (fileOffset != 0) { copySource = refCurrent - dist - 1; if (copySource < refBuf) { copySource += refEnd - refBuf; } - } - else { + } else { copySource = dest - dist - 1; } if (numBytes == 0) { numBytes = *src + 0x12; src += 1; - } - else { + } else { numBytes += 2; } if (fileOffset != 0) { @@ -486,8 +461,7 @@ int decompSZS_subroutine(u8 *src, u8 *dest) { readCount++; numBytes--; } while (numBytes != 0); - } - else { + } else { do { *dest = *copySource; dest++; @@ -536,8 +510,8 @@ static u8* firstSrcData() { } /* 802D2CE4-802D2DAC 2CD624 00C8+00 1/1 0/0 0/0 .text nextSrcData__FPUc */ -static u8 *nextSrcData(u8 *current) { - u8 *dest; +static u8* nextSrcData(u8* current) { + u8* dest; u32 left = (u32)(szpEnd - current); if (IS_NOT_ALIGNED(left, 0x20)) dest = szpBuf + 0x20 - (left & (0x20 - 1)); diff --git a/libs/JSystem/JKernel/JKRAramArchive.cpp b/libs/JSystem/JKernel/JKRAramArchive.cpp index 262b6407f1..8bb19ff135 100644 --- a/libs/JSystem/JKernel/JKRAramArchive.cpp +++ b/libs/JSystem/JKernel/JKRAramArchive.cpp @@ -10,11 +10,11 @@ #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" -#include "math.h" -#include "string.h" #include "dol2asm.h" #include "dolphin/os/OSCache.h" #include "global.h" +#include "math.h" +#include "string.h" // // Forward References: @@ -162,54 +162,52 @@ bool JKRAramArchive::open(s32 entryNum) { mStringTable = NULL; mBlock = NULL; - mDvdFile = new (JKRGetSystemHeap(), mMountDirection == MOUNT_DIRECTION_HEAD ? 4 : -4) JKRDvdFile(entryNum); - if (mDvdFile == NULL) - { + mDvdFile = new (JKRGetSystemHeap(), mMountDirection == MOUNT_DIRECTION_HEAD ? 4 : -4) + JKRDvdFile(entryNum); + if (mDvdFile == NULL) { mMountMode = 0; return 0; } - // NOTE: a different struct is used here for sure, unfortunately i can't get any hits on this address, so gonna leave it like this for now - SArcHeader *mem = (SArcHeader *)JKRAllocFromSysHeap(32, -32); - if (mem == NULL) { + // NOTE: a different struct is used here for sure, unfortunately i can't get any hits on this + // address, so gonna leave it like this for now + SArcHeader* mem = (SArcHeader*)JKRAllocFromSysHeap(32, -32); + if (mem == NULL) { mMountMode = 0; - } - else { - JKRDvdToMainRam(entryNum, (u8 *)mem, EXPAND_SWITCH_UNKNOWN1, 32, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL); + } else { + JKRDvdToMainRam(entryNum, (u8*)mem, EXPAND_SWITCH_UNKNOWN1, 32, NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL); DCInvalidateRange(mem, 32); int alignment = mMountDirection == MOUNT_DIRECTION_HEAD ? 32 : -32; u32 alignedSize = ALIGN_NEXT(mem->file_data_offset, 32); - mArcInfoBlock = (SArcDataInfo *)JKRAllocFromHeap(mHeap, alignedSize, alignment); + mArcInfoBlock = (SArcDataInfo*)JKRAllocFromHeap(mHeap, alignedSize, alignment); if (mArcInfoBlock == NULL) { mMountMode = 0; - } - else { - JKRDvdToMainRam(entryNum, (u8 *)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, alignedSize, NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 32, NULL, NULL); + } else { + JKRDvdToMainRam(entryNum, (u8*)mArcInfoBlock, EXPAND_SWITCH_UNKNOWN1, alignedSize, NULL, + JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 32, NULL, NULL); DCInvalidateRange(mArcInfoBlock, alignedSize); - mNodes = (SDIDirEntry *)((u8 *)mArcInfoBlock + mArcInfoBlock->node_offset); - mFiles = (SDIFileEntry *)((u8 *)mArcInfoBlock + mArcInfoBlock->file_entry_offset); - mStringTable = (char *)((u8 *)mArcInfoBlock + mArcInfoBlock->string_table_offset); + mNodes = (SDIDirEntry*)((u8*)mArcInfoBlock + mArcInfoBlock->node_offset); + mFiles = (SDIFileEntry*)((u8*)mArcInfoBlock + mArcInfoBlock->file_entry_offset); + mStringTable = (char*)((u8*)mArcInfoBlock + mArcInfoBlock->string_table_offset); mExpandedSize = NULL; - u8 compressedFiles = 0; // maybe a check for if the last file is compressed? + u8 compressedFiles = 0; // maybe a check for if the last file is compressed? - SDIFileEntry *fileEntry = mFiles; - for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) - { + SDIFileEntry* fileEntry = mFiles; + for (int i = 0; i < mArcInfoBlock->num_file_entries; i++) { u8 flag = fileEntry->type_flags_and_name_offset >> 24; - if ((flag & 1)) - { + if ((flag & 1)) { compressedFiles |= (flag & JKRARCHIVE_ATTR_COMPRESSION); } fileEntry++; } - if (compressedFiles != 0) - { - mExpandedSize = (s32 *)JKRAllocFromHeap(mHeap, mArcInfoBlock->num_file_entries << 2, abs(alignment)); - if (mExpandedSize == NULL) - { + if (compressedFiles != 0) { + mExpandedSize = (s32*)JKRAllocFromHeap(mHeap, mArcInfoBlock->num_file_entries << 2, + abs(alignment)); + if (mExpandedSize == NULL) { i_JKRFree(mArcInfoBlock); mMountMode = 0; goto cleanup; @@ -218,34 +216,32 @@ bool JKRAramArchive::open(s32 entryNum) { } u32 aramSize = ALIGN_NEXT(mem->file_data_length, 32); - mBlock = (JKRAramBlock*) JKRAllocFromAram(aramSize, mMountDirection == MOUNT_DIRECTION_HEAD ? JKRAramHeap::HEAD : JKRAramHeap::TAIL); - if(mBlock == NULL) { + mBlock = (JKRAramBlock*)JKRAllocFromAram( + aramSize, + mMountDirection == MOUNT_DIRECTION_HEAD ? JKRAramHeap::HEAD : JKRAramHeap::TAIL); + if (mBlock == NULL) { if (mArcInfoBlock) { i_JKRFree(mArcInfoBlock); } - if(mExpandedSize) { + if (mExpandedSize) { i_JKRFree(mExpandedSize); } mMountMode = 0; + } else { + JKRDvdToAram(entryNum, mBlock->getAddress(), EXPAND_SWITCH_UNKNOWN1, + mem->header_length + mem->file_data_offset, 0, NULL); } - else { - JKRDvdToAram(entryNum, mBlock->getAddress(), EXPAND_SWITCH_UNKNOWN1, mem->header_length + mem->file_data_offset, 0, NULL); - } - } } cleanup: - if (mem != NULL) - { + if (mem != NULL) { JKRFreeToSysHeap(mem); } - if (mMountMode == 0) - { + if (mMountMode == 0) { #ifdef DEBUG OSReport(":::[%s: %d] Cannot alloc memory\n", __FILE__, 415); #endif - if (mDvdFile != NULL) - { + if (mDvdFile != NULL) { delete mDvdFile; } return false; @@ -291,7 +287,6 @@ void* JKRAramArchive::fetchResource(SDIFileEntry* pEntry, u32* pOutSize) { /* 802D76F4-802D77F8 2D2034 0104+00 1/0 0/0 0/0 .text * fetchResource__14JKRAramArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */ -#ifdef NONMATCHING void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* pEntry, u32* resourceSize) { JUT_ASSERT(515, isMounted()); @@ -299,10 +294,10 @@ void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* if (size > bufferSize) { size = bufferSize; } + JKRCompression compression = JKRConvertAttrToCompressionType(pEntry->getFlags()); if (pEntry->data == NULL) { - // can't get it to store the result in r28 - bufferSize &= ~(0x20 - 1); + bufferSize = (s32)ALIGN_PREV(bufferSize, 0x20); size = JKRAramArchive::fetchResource_subroutine(pEntry->data_offset + mBlock->getAddress(), size, (u8*)buffer, bufferSize, compression); } else { @@ -317,22 +312,12 @@ void* JKRAramArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* } JKRHeap::copyMemory(buffer, pEntry->data, size); } + if (resourceSize != NULL) { *resourceSize = size; } return buffer; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* JKRAramArchive::fetchResource(void* param_0, u32 param_1, - JKRArchive::SDIFileEntry* param_2, u32* param_3) { - nofralloc -#include "asm/JSystem/JKernel/JKRAramArchive/fetchResource__14JKRAramArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl.s" -} -#pragma pop -#endif /* 802D77F8-802D781C 2D2138 0024+00 1/1 0/0 0/0 .text * getAramAddress_Entry__14JKRAramArchiveFPQ210JKRArchive12SDIFileEntry */ @@ -354,7 +339,7 @@ u32 JKRAramArchive::getAramAddress(char const* name) { * fetchResource_subroutine__14JKRAramArchiveFUlUlPUcUli */ u32 JKRAramArchive::fetchResource_subroutine(u32 srcAram, u32 srcLength, u8* dst, u32 dstLength, int compression) { - JUT_ASSERT(628, ( srcAram & 0x1f ) == 0); + JUT_ASSERT(628, (srcAram & 0x1f) == 0); u32 outLen; u32 srcSize = ALIGN_NEXT(srcLength, 0x20); u32 dstSize = ALIGN_PREV(dstLength, 0x20); @@ -364,13 +349,11 @@ u32 JKRAramArchive::fetchResource_subroutine(u32 srcAram, u32 srcLength, u8* dst if (srcSize > dstSize) { srcSize = dstSize; } - JKRAramToMainRam(srcAram, dst, srcSize, EXPAND_SWITCH_UNKNOWN0, dstSize, NULL, -1, - &outLen); + JKRAramToMainRam(srcAram, dst, srcSize, EXPAND_SWITCH_UNKNOWN0, dstSize, NULL, -1, &outLen); return outLen; case COMPRESSION_YAY0: case COMPRESSION_YAZ0: - JKRAramToMainRam(srcAram, dst, srcSize, EXPAND_SWITCH_UNKNOWN1, dstSize, NULL, -1, - &outLen); + JKRAramToMainRam(srcAram, dst, srcSize, EXPAND_SWITCH_UNKNOWN1, dstSize, NULL, -1, &outLen); return outLen; default: JUTException::panic(__FILE__, 655, "??? bad sequence\n"); @@ -380,50 +363,39 @@ u32 JKRAramArchive::fetchResource_subroutine(u32 srcAram, u32 srcLength, u8* dst /* 802D7914-802D7A64 2D2254 0150+00 1/1 1/1 0/0 .text * fetchResource_subroutine__14JKRAramArchiveFUlUlP7JKRHeapiPPUc */ -#ifdef NONMATCHING u32 JKRAramArchive::fetchResource_subroutine(u32 entryNum, u32 length, JKRHeap* pHeap, int compression, u8** out) { - // r28 -> r29, r29 -> r30, r30 -> r31, r31 -> r28 - u32 readLen; - u32 alignedLen = alignNext(length, 0x20); + u32 alignedLen = ALIGN_NEXT(length, 0x20); + u8* buffer; switch (compression) { case COMPRESSION_NONE: - buffer = static_cast<u8*>(JKRAllocFromHeap(pHeap, alignedLen, 0x20)); - JUT_ASSERT(677, buffer != 0); - JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN0, alignedLen, - NULL, -1, NULL); - *out = buffer; - return length; + { + buffer = (u8*)(JKRAllocFromHeap(pHeap, alignedLen, 0x20)); + JUT_ASSERT(677, buffer != 0); + JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN0, alignedLen, NULL, -1, NULL); + *out = buffer; + return length; + } case COMPRESSION_YAY0: case COMPRESSION_YAZ0: - u8 tmpBuf[0x40]; - u8* buf = (u8*)ALIGN_PREV((s32)&tmpBuf[0x1F], sizeof(SArcHeader)); - JKRAramToMainRam(entryNum, buf, sizeof(SArcHeader), EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); - length = alignNext(JKRDecompExpandSize(buf), sizeof(SArcHeader)); - buffer = static_cast<u8*>(JKRAllocFromHeap(pHeap, length, sizeof(SArcHeader))); - JUT_ASSERT(703, buffer); - - JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN1, length, pHeap, - -1, &readLen); - *out = buffer; - return readLen; + { + u8 headerBuf[0x40]; + u8* alignHeader = (u8*)ALIGN_NEXT((s32)&headerBuf[0], sizeof(SArcHeader)); + JKRAramToMainRam(entryNum, alignHeader, sizeof(SArcHeader), EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); + u32 decompressedLen = ALIGN_NEXT(JKRDecompExpandSize(alignHeader), sizeof(SArcHeader)); + buffer = (u8*)(JKRAllocFromHeap(pHeap, decompressedLen, sizeof(SArcHeader))); + JUT_ASSERT(703, buffer); + u32 readLen; + JKRAramToMainRam(entryNum, buffer, alignedLen, EXPAND_SWITCH_UNKNOWN1, decompressedLen, pHeap, -1, &readLen); + *out = buffer; + return readLen; + } default: JUTException::panic(__FILE__, 713, "??? bad sequence\n"); return 0; } } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm u32 JKRAramArchive::fetchResource_subroutine(u32 param_0, u32 param_1, JKRHeap* param_2, - int param_3, u8** param_4) { - nofralloc -#include "asm/JSystem/JKernel/JKRAramArchive/fetchResource_subroutine__14JKRAramArchiveFUlUlP7JKRHeapiPPUc.s" -} -#pragma pop -#endif /* 802D7A64-802D7B90 2D23A4 012C+00 1/0 0/0 0/0 .text getExpandedResSize__14JKRAramArchiveCFPCv */ u32 JKRAramArchive::getExpandedResSize(const void* ptr) const { @@ -447,8 +419,8 @@ u32 JKRAramArchive::getExpandedResSize(const void* ptr) const { u8 tmpBuf[0x40]; u8* buf = (u8*)ALIGN_PREV((s32)&tmpBuf[0x1F], 0x20); - JKRAramToMainRam(entry->data_offset + mBlock->getAddress(), buf, 0x20, - EXPAND_SWITCH_UNKNOWN0, 0, NULL, -1, NULL); + JKRAramToMainRam(entry->data_offset + mBlock->getAddress(), buf, 0x20, EXPAND_SWITCH_UNKNOWN0, + 0, NULL, -1, NULL); expandSize = JKRDecompExpandSize(buf); // ??? casting away const? ((JKRArchive*)this)->setExpandSize(entry, expandSize); diff --git a/libs/JSystem/JKernel/JKRAramBlock.cpp b/libs/JSystem/JKernel/JKRAramBlock.cpp index 58a3919ee3..b9a6e1e181 100644 --- a/libs/JSystem/JKernel/JKRAramBlock.cpp +++ b/libs/JSystem/JKernel/JKRAramBlock.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRAramBlock -// - #include "JSystem/JKernel/JKRAramBlock.h" #include "JSystem/JKernel/JKRAramHeap.h" #include "JSystem/JKernel/JKRHeap.h" diff --git a/libs/JSystem/JKernel/JKRAramHeap.cpp b/libs/JSystem/JKernel/JKRAramHeap.cpp index a652d019a8..9442772a69 100644 --- a/libs/JSystem/JKernel/JKRAramHeap.cpp +++ b/libs/JSystem/JKernel/JKRAramHeap.cpp @@ -1,24 +1,7 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRAramHeap -// - #include "JSystem/JKernel/JKRAramHeap.h" #include "JSystem/JKernel/JKRHeap.h" #include "global.h" -// -// Forward References: -// - -// -// External References: -// - -// -// Declarations: -// - /* 8043430C-80434318 06102C 000C+00 8/8 0/0 0/0 .bss sAramList__11JKRAramHeap */ JSUList<JKRAramBlock> JKRAramHeap::sAramList; diff --git a/libs/JSystem/JKernel/JKRAramPiece.cpp b/libs/JSystem/JKernel/JKRAramPiece.cpp index fcd86c9332..8a32f641ea 100644 --- a/libs/JSystem/JKernel/JKRAramPiece.cpp +++ b/libs/JSystem/JKernel/JKRAramPiece.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRAramPiece -// - #include "JSystem/JKernel/JKRAramPiece.h" #include "JSystem/JKernel/JKRAram.h" #include "JSystem/JKernel/JKRDecomp.h" diff --git a/libs/JSystem/JKernel/JKRAramStream.cpp b/libs/JSystem/JKernel/JKRAramStream.cpp index 13a126be59..d58a87e91e 100644 --- a/libs/JSystem/JKernel/JKRAramStream.cpp +++ b/libs/JSystem/JKernel/JKRAramStream.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRAramStream -// - #include "JSystem/JKernel/JKRAramStream.h" #include "JSystem/JKernel/JKRAramPiece.h" #include "JSystem/JSupport/JSUFileStream.h" diff --git a/libs/JSystem/JKernel/JKRArchivePri.cpp b/libs/JSystem/JKernel/JKRArchivePri.cpp index e2f6557cc4..cf647d5dcd 100644 --- a/libs/JSystem/JKernel/JKRArchivePri.cpp +++ b/libs/JSystem/JKernel/JKRArchivePri.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRArchivePri -// - #include "JSystem/JKernel/JKRArchive.h" #include "JSystem/JKernel/JKRHeap.h" #include "ctype.h" diff --git a/libs/JSystem/JKernel/JKRArchivePub.cpp b/libs/JSystem/JKernel/JKRArchivePub.cpp index eb3fb287a9..36e18f97de 100644 --- a/libs/JSystem/JKernel/JKRArchivePub.cpp +++ b/libs/JSystem/JKernel/JKRArchivePub.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRArchivePub -// - #include "JSystem/JKernel/JKRAramArchive.h" #include "JSystem/JKernel/JKRArchive.h" #include "JSystem/JKernel/JKRCompArchive.h" diff --git a/libs/JSystem/JKernel/JKRAssertHeap.cpp b/libs/JSystem/JKernel/JKRAssertHeap.cpp index 21ebb2226b..7a773ac38e 100644 --- a/libs/JSystem/JKernel/JKRAssertHeap.cpp +++ b/libs/JSystem/JKernel/JKRAssertHeap.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRAssertHeap -// - #include "JSystem/JKernel/JKRAssertHeap.h" /* 802D12C4-802D1300 2CBC04 003C+00 1/1 0/0 0/0 .text __ct__13JKRAssertHeapFPvUlP7JKRHeapb */ diff --git a/libs/JSystem/JKernel/JKRCompArchive.cpp b/libs/JSystem/JKernel/JKRCompArchive.cpp index b7933468e6..088dbd5e70 100644 --- a/libs/JSystem/JKernel/JKRCompArchive.cpp +++ b/libs/JSystem/JKernel/JKRCompArchive.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRCompArchive -// - #include "JSystem/JKernel/JKRCompArchive.h" #include "JSystem/JKernel/JKRAram.h" #include "JSystem/JKernel/JKRAramArchive.h" @@ -17,18 +12,6 @@ #include "string.h" #include "dolphin/os/OSCache.h" -// -// Forward References: -// - -// -// External References: -// - -// -// Declarations: -// - /* 802D87D4-802D887C 2D3114 00A8+00 0/0 1/1 0/0 .text * __ct__14JKRCompArchiveFlQ210JKRArchive15EMountDirection */ JKRCompArchive::JKRCompArchive(s32 entryNum, JKRArchive::EMountDirection eMountDirection) @@ -411,4 +394,3 @@ u32 JKRCompArchive::getExpandedResSize(const void *resource) const return expandSize; } -/* 8039D220-8039D220 029880 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/libs/JSystem/JKernel/JKRDecomp.cpp b/libs/JSystem/JKernel/JKRDecomp.cpp index ab654c38f3..cfb022a29c 100644 --- a/libs/JSystem/JKernel/JKRDecomp.cpp +++ b/libs/JSystem/JKernel/JKRDecomp.cpp @@ -1,15 +1,6 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRDecomp -// - #include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRAramPiece.h" -// -// Declarations: -// - /* ############################################################################################## */ /* 804514B0-804514B8 0009B0 0004+04 1/1 0/0 0/0 .sbss sDecompObject__9JKRDecomp */ JKRDecomp* JKRDecomp::sDecompObject; diff --git a/libs/JSystem/JKernel/JKRDisposer.cpp b/libs/JSystem/JKernel/JKRDisposer.cpp index ddacb95443..171946f54c 100644 --- a/libs/JSystem/JKernel/JKRDisposer.cpp +++ b/libs/JSystem/JKernel/JKRDisposer.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRDisposer -// - #include "JSystem/JKernel/JKRDisposer.h" #include "JSystem/JKernel/JKRHeap.h" diff --git a/libs/JSystem/JKernel/JKRDvdAramRipper.cpp b/libs/JSystem/JKernel/JKRDvdAramRipper.cpp index 4b67c84dfa..6ea385362c 100644 --- a/libs/JSystem/JKernel/JKRDvdAramRipper.cpp +++ b/libs/JSystem/JKernel/JKRDvdAramRipper.cpp @@ -1,42 +1,21 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRDvdAramRipper -// - #include "JSystem/JKernel/JKRDvdAramRipper.h" #include "JSystem/JKernel/JKRAram.h" +#include "JSystem/JKernel/JKRAramPiece.h" #include "JSystem/JKernel/JKRAramStream.h" #include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JSupport/JSUFileStream.h" -#include "dol2asm.h" #include "dolphin/os/OSCache.h" #include "dolphin/os/OSInterrupt.h" #include "dolphin/vi.h" #include "global.h" - -// -// Types: -// - -/* JSUList<JKRADCommand> */ -struct JSUList__template10 { - /* 802DB62C */ void func_802DB62C(void* _this); -}; - -struct JKRAramPiece { - /* 802D3838 */ void orderSync(int, u32, u32, u32, JKRAramBlock*); -}; - -// -// Forward References: -// +#include "string.h" static int JKRDecompressFromDVDToAram(JKRDvdFile*, u32, u32, u32, u32, u32, u32*); static int decompSZS_subroutine(u8*, u32); static u8* firstSrcData(); static u8* nextSrcData(u8*); -static int dmaBufferFlush(u32); +static u32 dmaBufferFlush(u32); extern "C" void __dt__18JSUFileInputStreamFv(); extern "C" static int JKRDecompressFromDVDToAram__FP10JKRDvdFileUlUlUlUlUlPUl(); @@ -53,7 +32,6 @@ extern "C" u32 sSZSBufferSize__16JKRDvdAramRipper; // External References: // -SECTION_INIT void memcpy(); extern "C" void alloc__7JKRHeapFUli(); extern "C" void free__7JKRHeapFPvP7JKRHeap(); extern "C" void* __nw__FUlP7JKRHeapi(); @@ -86,6 +64,7 @@ extern "C" extern void* __vt__20JSURandomInputStream[9]; extern "C" extern void* __vt__18JSUFileInputStream[9 + 1 /* padding */]; extern "C" u8 sSystemHeap__7JKRHeap[4]; extern "C" u8 sAramObject__7JKRAram[4]; +extern "C" bool errorRetry__16JKRDvdAramRipper; // // Declarations: @@ -93,8 +72,9 @@ extern "C" u8 sAramObject__7JKRAram[4]; /* 802DA874-802DA918 2D51B4 00A4+00 0/0 3/3 0/0 .text * loadToAram__16JKRDvdAramRipperFlUl15JKRExpandSwitchUlUlPUl */ -JKRAramBlock* JKRDvdAramRipper::loadToAram(s32 entryNumber, u32 address, JKRExpandSwitch expandSwitch, - u32 param_3, u32 param_4, u32* param_5) { +JKRAramBlock* JKRDvdAramRipper::loadToAram(s32 entryNumber, u32 address, + JKRExpandSwitch expandSwitch, u32 param_3, u32 param_4, + u32* param_5) { JKRDvdFile dvdFile; if (!dvdFile.open(entryNumber)) { return NULL; @@ -130,8 +110,9 @@ JKRAramBlock* JKRDvdAramRipper::loadToAram(JKRDvdFile* dvdFile, u32 address, /* 802DA9C0-802DAA74 2D5300 00B4+00 1/1 0/0 0/0 .text * loadToAram_Async__16JKRDvdAramRipperFP10JKRDvdFileUl15JKRExpandSwitchPFUl_vUlUlPUl */ JKRADCommand* JKRDvdAramRipper::loadToAram_Async(JKRDvdFile* dvdFile, u32 address, - JKRExpandSwitch expandSwitch, void (*callback)(u32), - u32 param_4, u32 param_5, u32* param_6) { + JKRExpandSwitch expandSwitch, + void (*callback)(u32), u32 param_4, u32 param_5, + u32* param_6) { JKRADCommand* command = new (JKRHeap::sSystemHeap, -4) JKRADCommand(); command->mDvdFile = dvdFile; command->mAddress = address; @@ -150,19 +131,14 @@ JKRADCommand* JKRDvdAramRipper::loadToAram_Async(JKRDvdFile* dvdFile, u32 addres return command; } -/* ############################################################################################## */ -/* 804343A8-804343B4 0610C8 000C+00 1/1 0/0 0/0 .bss @301 */ -static u8 lit_301[12]; - /* 804343B4-804343C0 0610D4 000C+00 3/3 0/0 0/0 .bss sDvdAramAsyncList__16JKRDvdAramRipper */ -u8 JKRDvdAramRipper::sDvdAramAsyncList[12]; +JSUList<JKRADCommand> JKRDvdAramRipper::sDvdAramAsyncList; /* 804508D0-804508D4 000350 0004+00 3/3 0/0 0/0 .sdata None */ -SECTION_SDATA static u8 data_804508D0 = 0x01; +bool JKRDvdAramRipper::errorRetry = true; /* 802DAA74-802DADD8 2D53B4 0364+00 1/1 0/0 0/0 .text * callCommand_Async__16JKRDvdAramRipperFP12JKRADCommand */ -#ifdef NONMATCHING JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { s32 compression; s32 uncompressedSize; @@ -193,7 +169,7 @@ JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { break; } - if (data_804508D0 == 0) { + if (JKRDvdAramRipper::errorRetry == 0) { delete stream; return NULL; } @@ -201,8 +177,11 @@ JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { VIWaitForRetrace(); } DCInvalidateRange(bufPtr, 0x20); + compression = JKRCheckCompressed_noASR(bufPtr); - uncompressedSize = JKRDecompExpandSize(bufPtr); + + u32 expandSize = JKRDecompExpandSize(bufPtr); + uncompressedSize = expandSize; if (command->field_0x40 && uncompressedSize > command->field_0x40) { uncompressedSize = command->field_0x40; } @@ -269,16 +248,6 @@ JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { OSUnlockMutex(&dvdFile->mMutex2); return bVar1 == true ? command : NULL; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm JKRADCommand* JKRDvdAramRipper::callCommand_Async(JKRADCommand* command) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/callCommand_Async__16JKRDvdAramRipperFP12JKRADCommand.s" -} -#pragma pop -#endif /* 802DADD8-802DAE48 2D5718 0070+00 0/0 1/0 0/0 .text __dt__18JSUFileInputStreamFv */ #pragma push @@ -293,8 +262,6 @@ extern "C" asm void __dt__18JSUFileInputStreamFv() { /* 802DAE48-802DAF1C 2D5788 00D4+00 1/1 0/0 0/0 .text * syncAram__16JKRDvdAramRipperFP12JKRADCommandi */ -// should match when other functions using sDvdAramAsyncList are decompiled -#ifdef NONMATCHING bool JKRDvdAramRipper::syncAram(JKRADCommand* command, int param_1) { JKRDvdFile* dvdFile = command->mDvdFile; OSLockMutex(&dvdFile->mMutex2); @@ -319,16 +286,6 @@ bool JKRDvdAramRipper::syncAram(JKRADCommand* command, int param_1) { OSUnlockMutex(&dvdFile->mMutex2); return true; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool JKRDvdAramRipper::syncAram(JKRADCommand* param_0, int param_1) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/syncAram__16JKRDvdAramRipperFP12JKRADCommandi.s" -} -#pragma pop -#endif /* 802DAF1C-802DAF5C 2D585C 0040+00 1/1 0/0 0/0 .text __ct__12JKRADCommandFv */ JKRADCommand::JKRADCommand() : mLink(this) { @@ -349,7 +306,7 @@ static OSMutex decompMutex; /* 804508D4-804508D8 000354 0004+00 1/1 1/1 0/0 .sdata sSZSBufferSize__16JKRDvdAramRipper */ -SECTION_SDATA u32 JKRDvdAramRipper::sSZSBufferSize = 0x00000400; +u32 JKRDvdAramRipper::sSZSBufferSize = 0x00000400; /* 80451468-8045146C 000968 0004+00 3/3 0/0 0/0 .sbss szpBuf */ static u8* szpBuf; @@ -382,7 +339,7 @@ static u32 srcOffset; static u32 transLeft; /* 80451490-80451494 000990 0004+00 3/3 0/0 0/0 .sbss srcLimit */ -static int srcLimit; +static u8* srcLimit; /* 80451494-80451498 000994 0004+00 3/3 0/0 0/0 .sbss srcFile */ static JKRDvdFile* srcFile; @@ -445,26 +402,157 @@ int JKRDecompressFromDVDToAram(JKRDvdFile* dvdFile, u32 param_1, u32 fileSize, u } /* 802DB160-802DB3E8 2D5AA0 0288+00 1/1 0/0 0/0 .text decompSZS_subroutine__FPUcUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm int decompSZS_subroutine(u8* param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/decompSZS_subroutine__FPUcUl.s" +static int decompSZS_subroutine(u8* src, u32 dest) { + u32 endAddr; + u8* copySource; + s32 validBitCount; + u32 currCodeByte; + s32 numBytes; + u32 var_r26; + u32 startDest; + + validBitCount = 0; + currCodeByte = 0; + var_r26 = 0; + startDest = dest; + + if (src[0] != 'Y' || src[1] != 'a' || src[2] != 'z' || src[3] != '0') { + return -1; + } + + SYaz0Header* header = (SYaz0Header*)src; + endAddr = dest + (header->length - fileOffset); + if (endAddr > dest + maxDest) { + endAddr = dest + maxDest; + } + + src += 0x10; + do { + if (validBitCount == 0) { + if ((src > srcLimit) && transLeft) { + src = nextSrcData(src); + } + currCodeByte = *src; + validBitCount = 8; + src++; + } + if (currCodeByte & 0x80) { + if (readCount >= fileOffset) { + *(dmaCurrent++) = *src; + dest++; + var_r26++; + if (dmaCurrent == dmaEnd) { + startDest += dmaBufferFlush(startDest); + } + if (dest == endAddr) { + break; + } + } + *(refCurrent++) = *src; + if (refCurrent == refEnd) { + refCurrent = refBuf; + } + src++; + readCount++; + } else { + u32 dist = ((src[0] & 0x0F) << 8) | src[1]; + numBytes = src[0] >> 4; + src += 2; + copySource = refCurrent - dist - 1; + if (copySource < refBuf) { + copySource += refEnd - refBuf; + } + if (numBytes == 0) { + numBytes = *(src++); + numBytes += 0x12; + } else { + numBytes += 2; + } + do { + if (readCount >= fileOffset) { + *(dmaCurrent++) = *copySource; + dest++; + var_r26++; + if (dmaCurrent == dmaEnd) { + startDest += dmaBufferFlush(startDest); + } + if (dest == endAddr) { + break; + } + } + *(refCurrent++) = *copySource; + if (refCurrent == refEnd) { + refCurrent = refBuf; + } + copySource++; + if (copySource == refEnd) { + copySource = refBuf; + } + readCount++; + numBytes--; + } while (numBytes != 0); + } + currCodeByte <<= 1; + validBitCount--; + } while (dest < endAddr); + + dmaBufferFlush(startDest); + *tsPtr = var_r26; + return 0; } -#pragma pop /* 802DB3E8-802DB49C 2D5D28 00B4+00 1/1 0/0 0/0 .text firstSrcData__Fv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm u8* firstSrcData() { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/firstSrcData__Fv.s" +static u8* firstSrcData() { + srcLimit = szpEnd - 0x19; + u8* buffer = szpBuf; + u32 bufSize = szpEnd - buffer; + u32 length = transLeft < bufSize ? transLeft : bufSize; + while (true) { + int result = DVDReadPrio(&srcFile->mFileInfo, buffer, length, 0, 2); + if (result >= 0) { + break; + } + if (JKRDvdAramRipper::errorRetry == 0) { + return NULL; + } + VIWaitForRetrace(); + } + srcOffset += length; + transLeft -= length; + return buffer; } -#pragma pop /* 802DB49C-802DB580 2D5DDC 00E4+00 1/1 0/0 0/0 .text nextSrcData__FPUc */ +// regalloc +#ifdef NONMATCHING +static u8* nextSrcData(u8* src) { + u8* dest; + u32 size = szpEnd - src; + dest = IS_NOT_ALIGNED(size, 0x20) ? szpBuf + 0x20 - (size & (0x20 - 1)) : szpBuf; + memcpy(dest, src, size); + u32 transSize = szpEnd - (dest + size); + if (transSize > transLeft) { + transSize = transLeft; + } + + while (true) { + s32 result = DVDReadPrio(&srcFile->mFileInfo, dest + size, transSize, srcOffset, 2); + if (result >= 0) { + break; + } + if (JKRDvdAramRipper::errorRetry == 0) { + return NULL; + } + VIWaitForRetrace(); + } + srcOffset += transSize; + transLeft -= transSize; + if (transLeft == 0) { + srcLimit = dest + size + transSize; + } + return dest; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -473,38 +561,15 @@ static asm u8* nextSrcData(u8* param_0) { #include "asm/JSystem/JKernel/JKRDvdAramRipper/nextSrcData__FPUc.s" } #pragma pop +#endif /* 802DB580-802DB5E8 2D5EC0 0068+00 1/1 0/0 0/0 .text dmaBufferFlush__FUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm int dmaBufferFlush(u32 param_0) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/dmaBufferFlush__FUl.s" -} -#pragma pop - -/* 802DB5E8-802DB62C 2D5F28 0044+00 0/0 1/0 0/0 .text __sinit_JKRDvdAramRipper_cpp */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void __sinit_JKRDvdAramRipper_cpp(){nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/__sinit_JKRDvdAramRipper_cpp.s" -} -#pragma pop - -#pragma push -#pragma force_active on -REGISTER_CTORS(0x802DB5E8, __sinit_JKRDvdAramRipper_cpp); -#pragma pop - -/* 802DB62C-802DB680 2D5F6C 0054+00 1/1 0/0 0/0 .text __dt__23JSUList<12JKRADCommand>Fv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -extern "C" asm void func_802DB62C(void* _this) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdAramRipper/func_802DB62C.s" +static u32 dmaBufferFlush(u32 param_1) { + if (dmaCurrent == dmaBuf) { + return 0; + } + u32 size = ALIGN_NEXT(dmaCurrent - dmaBuf, 0x20); + JKRAramPiece::orderSync(0, (u32)dmaBuf, param_1, size, NULL); + dmaCurrent = dmaBuf; + return size; } -#pragma pop diff --git a/libs/JSystem/JKernel/JKRDvdArchive.cpp b/libs/JSystem/JKernel/JKRDvdArchive.cpp index 0ea59d56f6..8588410630 100644 --- a/libs/JSystem/JKernel/JKRDvdArchive.cpp +++ b/libs/JSystem/JKernel/JKRDvdArchive.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRDvdArchive -// - #include "JSystem/JKernel/JKRDvdArchive.h" #include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRDvdFile.h" @@ -14,71 +9,6 @@ #include "dolphin/os.h" #include "global.h" -// -// Forward References: -// - -extern "C" void __ct__13JKRDvdArchiveFlQ210JKRArchive15EMountDirection(); -extern "C" void __dt__13JKRDvdArchiveFv(); -extern "C" void open__13JKRDvdArchiveFl(); -extern "C" void fetchResource__13JKRDvdArchiveFPQ210JKRArchive12SDIFileEntryPUl(); -extern "C" void fetchResource__13JKRDvdArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl(); -extern "C" void fetchResource_subroutine__13JKRDvdArchiveFlUlUlPUcUlii(); -extern "C" void fetchResource_subroutine__13JKRDvdArchiveFlUlUlP7JKRHeapiiPPUc(); -extern "C" void getExpandedResSize__13JKRDvdArchiveCFPCv(); -extern "C" extern char const* const JKRDvdArchive__stringBase0; - -// -// External References: -// - -extern "C" void alloc__7JKRHeapFUliP7JKRHeap(); -extern "C" void alloc__7JKRHeapFUli(); -extern "C" void free__7JKRHeapFPvP7JKRHeap(); -extern "C" void free__7JKRHeapFPv(); -extern "C" void copyMemory__7JKRHeapFPvPvUl(); -extern "C" void* __nw__FUlP7JKRHeapi(); -extern "C" void __dl__FPv(); -extern "C" void unmount__13JKRFileLoaderFv(); -extern "C" void becomeCurrent__10JKRArchiveFPCc(); -extern "C" void getResource__10JKRArchiveFPCc(); -extern "C" void getResource__10JKRArchiveFUlPCc(); -extern "C" void readResource__10JKRArchiveFPvUlUlPCc(); -extern "C" void readResource__10JKRArchiveFPvUlPCc(); -extern "C" void removeResourceAll__10JKRArchiveFv(); -extern "C" void removeResource__10JKRArchiveFPv(); -extern "C" void detachResource__10JKRArchiveFPv(); -extern "C" void getResSize__10JKRArchiveCFPCv(); -extern "C" void countFile__10JKRArchiveCFPCc(); -extern "C" void getFirstFile__10JKRArchiveCFPCc(); -extern "C" void __ct__10JKRArchiveFlQ210JKRArchive10EMountMode(); -extern "C" void __dt__10JKRArchiveFv(); -extern "C" void findPtrResource__10JKRArchiveCFPCv(); -extern "C" void setExpandSize__10JKRArchiveFPQ210JKRArchive12SDIFileEntryUl(); -extern "C" void getExpandSize__10JKRArchiveCFPQ210JKRArchive12SDIFileEntry(); -extern "C" void __ct__10JKRDvdFileFl(); -extern "C" void -loadToMainRAM__12JKRDvdRipperFlPUc15JKRExpandSwitchUlP7JKRHeapQ212JKRDvdRipper15EAllocDirectionUlPiPUl(); -extern "C" void prepend__10JSUPtrListFP10JSUPtrLink(); -extern "C" void remove__10JSUPtrListFP10JSUPtrLink(); -extern "C" void panic_f__12JUTExceptionFPCciPCce(); -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_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" void _restgpr_28(); -extern "C" void _restgpr_29(); -extern "C" u8 sVolumeList__13JKRFileLoader[12]; -extern "C" u8 sSystemHeap__7JKRHeap[4]; - -// -// Declarations: -// - /* 802D7BF0-802D7C98 2D2530 00A8+00 0/0 1/1 0/0 .text * __ct__13JKRDvdArchiveFlQ210JKRArchive15EMountDirection */ JKRDvdArchive::JKRDvdArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection) @@ -126,7 +56,7 @@ JKRDvdArchive::~JKRDvdArchive() { /* 802D7DB4-802D8050 2D26F4 029C+00 1/1 0/0 0/0 .text open__13JKRDvdArchiveFl */ bool JKRDvdArchive::open(s32 entryNum) { mArcInfoBlock = NULL; - field_0x64 = NULL; + mDataOffset = 0; mNodes = NULL; mFiles = NULL; mStringTable = NULL; @@ -188,7 +118,7 @@ bool JKRDvdArchive::open(s32 entryNum) { memset(mExpandedSize, 0, sizeof(s32) * mArcInfoBlock->num_file_entries); } - field_0x64 = arcHeader->header_length + arcHeader->file_data_offset; + mDataOffset = arcHeader->header_length + arcHeader->file_data_offset; cleanup: if (arcHeader) { @@ -221,7 +151,7 @@ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { if (!fileEntry->data) { u8* resourcePtr; u32 resourceSize = fetchResource_subroutine( - mEntryNum, this->field_0x64 + fileEntry->data_offset, fileEntry->data_size, mHeap, + mEntryNum, mDataOffset + fileEntry->data_offset, fileEntry->data_size, mHeap, fileCompression, mCompression, &resourcePtr); *returnSize = resourceSize; if (resourceSize == 0) { @@ -246,26 +176,23 @@ void* JKRDvdArchive::fetchResource(SDIFileEntry* fileEntry, u32* returnSize) { /* 802D8168-802D826C 2D2AA8 0104+00 1/0 0/0 0/0 .text * fetchResource__13JKRDvdArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl */ -// ALIGN_PREV(bufferSize, 0x20) is "inlined" in the function parameter. -#ifdef NONMATCHING void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* fileEntry, u32* returnSize) { JUT_ASSERT(504, isMounted()); - u32 otherSize; + u32 expandSize; u32 size = fileEntry->data_size; - u32 dstSize = bufferSize; JKRCompression fileCompression = JKRConvertAttrToCompressionType(fileEntry->getAttr()); if (!fileEntry->data) { - dstSize = ALIGN_PREV(bufferSize, 0x20); - size = fetchResource_subroutine(mEntryNum, field_0x64 + fileEntry->data_offset, - fileEntry->data_size, (u8*)buffer, dstSize, fileCompression, + bufferSize = (s32)ALIGN_PREV(bufferSize, 0x20); + size = fetchResource_subroutine(mEntryNum, mDataOffset + fileEntry->data_offset, + fileEntry->data_size, (u8*)buffer, bufferSize, fileCompression, mCompression); } else { if (fileCompression == COMPRESSION_YAZ0) { - otherSize = getExpandSize(fileEntry); - if (otherSize) { - size = otherSize; + expandSize = getExpandSize(fileEntry); + if (expandSize) { + size = expandSize; } } @@ -281,17 +208,6 @@ void* JKRDvdArchive::fetchResource(void* buffer, u32 bufferSize, SDIFileEntry* f } return buffer; } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void* JKRDvdArchive::fetchResource(void* param_0, u32 param_1, - JKRArchive::SDIFileEntry* param_2, u32* param_3) { - nofralloc -#include "asm/JSystem/JKernel/JKRDvdArchive/fetchResource__13JKRDvdArchiveFPvUlPQ210JKRArchive12SDIFileEntryPUl.s" -} -#pragma pop -#endif /* 802D826C-802D8474 2D2BAC 0208+00 1/1 1/1 0/0 .text * fetchResource_subroutine__13JKRDvdArchiveFlUlUlPUcUlii */ @@ -452,7 +368,7 @@ u32 JKRDvdArchive::getExpandedResSize(const void* resource) const { u8* arcHeader = (u8*)ALIGN_NEXT((u32)buffer, 0x20); JKRDvdToMainRam(mEntryNum, arcHeader, EXPAND_SWITCH_UNKNOWN2, sizeof(SArcHeader), NULL, JKRDvdRipper::ALLOC_DIRECTION_FORWARD, - this->field_0x64 + fileEntry->data_offset, NULL, NULL); + mDataOffset + fileEntry->data_offset, NULL, NULL); DCInvalidateRange(arcHeader, sizeof(SArcHeader)); resourceSize = JKRDecompExpandSize(arcHeader); diff --git a/libs/JSystem/JKernel/JKRDvdFile.cpp b/libs/JSystem/JKernel/JKRDvdFile.cpp index 918e0e340b..aeaecc1de2 100644 --- a/libs/JSystem/JKernel/JKRDvdFile.cpp +++ b/libs/JSystem/JKernel/JKRDvdFile.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRDvdFile -// - #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTException.h" diff --git a/libs/JSystem/JKernel/JKRFile.cpp b/libs/JSystem/JKernel/JKRFile.cpp index c9396d6a9c..b0d8cc0dee 100644 --- a/libs/JSystem/JKernel/JKRFile.cpp +++ b/libs/JSystem/JKernel/JKRFile.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRFile -// - #include "JSystem/JKernel/JKRFile.h" #include "dolphin/vi.h" diff --git a/libs/JSystem/JKernel/JKRFileCache.cpp b/libs/JSystem/JKernel/JKRFileCache.cpp index 3d011991bb..e02e30fe5e 100644 --- a/libs/JSystem/JKernel/JKRFileCache.cpp +++ b/libs/JSystem/JKernel/JKRFileCache.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRFileCache -// - #include "JSystem/JKernel/JKRFileCache.h" #include "JSystem/JKernel/JKRDvdFile.h" #include "JSystem/JKernel/JKRFileFinder.h" diff --git a/libs/JSystem/JKernel/JKRFileFinder.cpp b/libs/JSystem/JKernel/JKRFileFinder.cpp index 354bdc4aef..3edfd654d0 100644 --- a/libs/JSystem/JKernel/JKRFileFinder.cpp +++ b/libs/JSystem/JKernel/JKRFileFinder.cpp @@ -1,15 +1,6 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRFileFinder -// - #include "JSystem/JKernel/JKRFileFinder.h" #include "JSystem/JKernel/JKRArchive.h" -// -// Declarations: -// - /* 802D4638-802D46C4 2CEF78 008C+00 0/0 1/1 0/0 .text __ct__12JKRArcFinderFP10JKRArchivell */ JKRArcFinder::JKRArcFinder(JKRArchive* archive, s32 startIndex, s32 numEntries) : JKRFileFinder() { mArchive = archive; diff --git a/libs/JSystem/JKernel/JKRFileLoader.cpp b/libs/JSystem/JKernel/JKRFileLoader.cpp index 43c8b41bae..9418a2e4f4 100644 --- a/libs/JSystem/JKernel/JKRFileLoader.cpp +++ b/libs/JSystem/JKernel/JKRFileLoader.cpp @@ -1,25 +1,8 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRFileLoader -// - #include "JSystem/JKernel/JKRFileLoader.h" #include "string.h" #include "ctype.h" #include "global.h" -// -// Forward References: -// - -// -// External References: -// - -// -// Declarations: -// - /* ############################################################################################## */ /* 80451418-80451420 000918 0004+04 2/2 3/3 0/0 .sbss sCurrentVolume__13JKRFileLoader */ JKRFileLoader* JKRFileLoader::sCurrentVolume; diff --git a/libs/JSystem/JKernel/JKRHeap.cpp b/libs/JSystem/JKernel/JKRHeap.cpp index b26b0ffe4d..a24a33e94a 100644 --- a/libs/JSystem/JKernel/JKRHeap.cpp +++ b/libs/JSystem/JKernel/JKRHeap.cpp @@ -8,10 +8,6 @@ #include "JSystem/JUtility/JUTException.h" #include "dolphin/os.h" -// -// Declarations: -// - /* 80451370-80451374 000870 0004+00 3/3 44/44 0/0 .sbss sSystemHeap__7JKRHeap */ JKRHeap* JKRHeap::sSystemHeap; diff --git a/libs/JSystem/JKernel/JKRMemArchive.cpp b/libs/JSystem/JKernel/JKRMemArchive.cpp index e664b94e44..7072f6e3fc 100644 --- a/libs/JSystem/JKernel/JKRMemArchive.cpp +++ b/libs/JSystem/JKernel/JKRMemArchive.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRMemArchive -// - #include "JSystem/JKernel/JKRMemArchive.h" #include "JSystem/JKernel/JKRDecomp.h" #include "JSystem/JKernel/JKRDvdRipper.h" @@ -12,18 +7,6 @@ #include "dolphin/os/OSCache.h" #include "global.h" -// -// Forward References: -// - -// -// External References: -// - -// -// Declarations: -// - /* 802D69B8-802D6A6C 2D12F8 00B4+00 0/0 2/2 0/0 .text * __ct__13JKRMemArchiveFlQ210JKRArchive15EMountDirection */ JKRMemArchive::JKRMemArchive(s32 entryNum, JKRArchive::EMountDirection mountDirection) diff --git a/libs/JSystem/JKernel/JKRSolidHeap.cpp b/libs/JSystem/JKernel/JKRSolidHeap.cpp index 186f9c5dba..bd9eedd63a 100644 --- a/libs/JSystem/JKernel/JKRSolidHeap.cpp +++ b/libs/JSystem/JKernel/JKRSolidHeap.cpp @@ -1,25 +1,8 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRSolidHeap -// - #include "JSystem/JKernel/JKRSolidHeap.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTConsole.h" #include "global.h" -// -// Forward References: -// - -// -// External References: -// - -// -// Declarations: -// - /* 802D0A24-802D0AD0 2CB364 00AC+00 0/0 4/4 1/1 .text create__12JKRSolidHeapFUlP7JKRHeapb */ JKRSolidHeap* JKRSolidHeap::create(u32 size, JKRHeap* heap, bool useErrorHandler) { diff --git a/libs/JSystem/JKernel/JKRThread.cpp b/libs/JSystem/JKernel/JKRThread.cpp index 14521e6e66..c310a4fc35 100644 --- a/libs/JSystem/JKernel/JKRThread.cpp +++ b/libs/JSystem/JKernel/JKRThread.cpp @@ -1,8 +1,3 @@ -// -// Generated By: dol2asm -// Translation Unit: JKRThread -// - #include "JSystem/JKernel/JKRThread.h" #include "JSystem/JUtility/JUTAssert.h" #include "JSystem/JUtility/JUTConsole.h" diff --git a/libs/JSystem/JUtility/JUTConsole.cpp b/libs/JSystem/JUtility/JUTConsole.cpp index 4cbf7c38ef..bb593f9606 100644 --- a/libs/JSystem/JUtility/JUTConsole.cpp +++ b/libs/JSystem/JUtility/JUTConsole.cpp @@ -439,41 +439,43 @@ JUTConsoleManager* JUTConsoleManager::createManager(JKRHeap* pHeap) { /* 802E8240-802E82B0 2E2B80 0070+00 3/3 0/0 0/0 .text * appendConsole__17JUTConsoleManagerFP10JUTConsole */ -#ifdef NONMATCHING void JUTConsoleManager::appendConsole(JUTConsole* console) { JUT_ASSERT(961, sManager != 0 && console != 0); - mLinkList.Push_back(console); + soLink_.Push_back(console); + if (mActiveConsole == NULL) { mActiveConsole = console; } } -#else -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JUTConsoleManager::appendConsole(JUTConsole* param_0) { - nofralloc -#include "asm/JSystem/JUtility/JUTConsole/appendConsole__17JUTConsoleManagerFP10JUTConsole.s" -} -#pragma pop -#endif /* 802E82B0-802E8384 2E2BF0 00D4+00 2/2 0/0 0/0 .text * removeConsole__17JUTConsoleManagerFP10JUTConsole */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void JUTConsoleManager::removeConsole(JUTConsole* param_0) { - nofralloc -#include "asm/JSystem/JUtility/JUTConsole/removeConsole__17JUTConsoleManagerFP10JUTConsole.s" +void JUTConsoleManager::removeConsole(JUTConsole* console) { + JUT_ASSERT(982, sManager != 0 && console != 0); + JUT_ASSERT(985, soLink_.Find( console ) != soLink_.end()); + + if (mActiveConsole == console) { + if (soLink_.size() <= 1) { + mActiveConsole = NULL; + } else { + mActiveConsole = console != &soLink_.back() ? soLink_.Element_toValue(console->mListNode.getNext()) : &soLink_.front(); + } + } + + if (JUTGetWarningConsole() == console) + JUTSetWarningConsole(NULL); + if (JUTGetReportConsole() == console) + JUTSetReportConsole(NULL); + + soLink_.Remove(console); } -#pragma pop /* 802E8384-802E8450 2E2CC4 00CC+00 0/0 1/1 0/0 .text draw__17JUTConsoleManagerCFv */ +// missing stack var, different from tww/pik2 #ifdef NONMATCHING void JUTConsoleManager::draw() const { - JGadget::TLinkList<JUTConsole, 4>::const_iterator iter = mLinkList.begin(); - JGadget::TLinkList<JUTConsole, 4>::const_iterator end = mLinkList.end(); + ConsoleList::const_iterator iter = soLink_.begin(); + ConsoleList::const_iterator end = soLink_.end(); for (; iter != end; ++iter) { const JUTConsole* const console = &(*iter); diff --git a/libs/SSystem/SComponent/c_m3d.cpp b/libs/SSystem/SComponent/c_m3d.cpp index 6d3d90db1a..f1851675e9 100644 --- a/libs/SSystem/SComponent/c_m3d.cpp +++ b/libs/SSystem/SComponent/c_m3d.cpp @@ -342,54 +342,54 @@ bool cM3d_Cross_AabSph(const cM3dGAab* pAab, const cM3dGSph* pSph) { /* 80268C5C-80268ED4 26359C 0278+00 3/3 0/0 0/0 .text * cM3d_Check_LinLin__FPC8cM3dGLinPC8cM3dGLinPfPf */ +// matches with literals #ifdef NONMATCHING -int cM3d_Check_LinLin(const cM3dGLin* pLinA, const cM3dGLin* pLinB, f32* pFloatA, f32* pFloatB) { +int cM3d_Check_LinLin(const cM3dGLin* lin_a, const cM3dGLin* lin_b, f32* dst_a, f32* dst_b) { Vec linAVec; Vec linBVec; - pLinA->CalcVec(&linAVec); - pLinB->CalcVec(&linBVec); + lin_a->CalcVec(&linAVec); + lin_b->CalcVec(&linBVec); f32 linALen = VECMag(&linAVec); f32 linBLen = VECMag(&linBVec); if (cM3d_IsZero(linALen) || cM3d_IsZero(linBLen)) { return 1; } else { - f32 invLinALen = /* 1.0 */ FLOAT_LABEL(lit_2273) / linALen; - f32 invLinBLen = /* 1.0 */ FLOAT_LABEL(lit_2273) / linBLen; + f32 invLinALen = 1.0f / linALen; + f32 invLinBLen = 1.0f / linBLen; VECScale(&linAVec, &linAVec, invLinALen); VECScale(&linBVec, &linBVec, invLinBLen); Vec tmp; - VECSubtract(&pLinA->GetStartP(), &pLinB->GetStartP(), &tmp); + VECSubtract(&lin_a->GetStartP(), &lin_b->GetStartP(), &tmp); f32 tmpF = -VECDotProduct(&linAVec, &linBVec); f32 tmpF2 = VECDotProduct(&tmp, &linAVec); VECSquareMag(&tmp); // result not used - f32 tmpF3 = fabsf(/* 1.0 */ FLOAT_LABEL(lit_2273) - (tmpF * tmpF)); + f32 tmpF3 = fabsf(1.0f - (tmpF * tmpF)); if (!cM3d_IsZero(tmpF3)) { f32 tmpF4 = -VECDotProduct(&tmp, &linBVec); - f32 tmpF7 = /* 1.0 */ FLOAT_LABEL(lit_2273) / tmpF3; + f32 tmpF7 = 1.0f / tmpF3; f32 outFloatAtmp = ((tmpF * tmpF4) - tmpF2) * tmpF7; - *pFloatA = outFloatAtmp * invLinALen; + *dst_a = outFloatAtmp * invLinALen; f32 outFloatBtmp = ((tmpF * tmpF2) - tmpF4) * tmpF7; - *pFloatB = outFloatBtmp * invLinBLen; + *dst_b = outFloatBtmp * invLinBLen; return 3; } else { f32 tmpF5 = -tmpF2; - f32 tmpF6 = - /* 0.0 */ FLOAT_LABEL(lit_2256); // would match with literals instead of labels - if (tmpF5 < /* 0.0 */ FLOAT_LABEL(lit_2256) || (tmpF5 > linALen)) { + f32 tmpF6 = 0.0f; + if (tmpF5 < 0.0f || (tmpF5 > linALen)) { tmpF6 = linBLen; tmpF5 = (tmpF6 * tmpF) - tmpF2; } f32 tmpF7 = VECDotProduct(&tmp, &linBVec); - if (tmpF5 < /* 0.0 */ FLOAT_LABEL(lit_2256) || tmpF5 > linALen) { - tmpF5 = /* 0.0 */ FLOAT_LABEL(lit_2256); + if (tmpF5 < 0.0f || tmpF5 > linALen) { + tmpF5 = 0.0f; tmpF6 = tmpF7; } - if (tmpF6 < /* 0.0 */ FLOAT_LABEL(lit_2256) || tmpF6 > linBLen) { + if (tmpF6 < 0.0f || tmpF6 > linBLen) { tmpF5 = linALen; tmpF6 = tmpF7 + (-linALen * tmpF); } - *pFloatA = tmpF5 * invLinALen; - *pFloatB = tmpF6 * invLinBLen; + *dst_a = tmpF5 * invLinALen; + *dst_b = tmpF6 * invLinBLen; return 2; } } @@ -421,33 +421,26 @@ static bool cM3d_CrossInfLineVsInfPlane_proc(f32 pFloatA, f32 pFloatB, const Vec /* 80268F34-80269050 263874 011C+00 3/3 1/1 0/0 .text * cM3d_Cross_LinPla__FPC8cM3dGLinPC8cM3dGPlaP3Vecbb */ +// matches with literals #ifdef NONMATCHING -bool cM3d_Cross_LinPla(const cM3dGLin* pLine, const cM3dGPla* pPlane, Vec* pVecOut, bool pBoolA, - bool pBoolB) { - f32 startVal = pPlane->getPlaneFunc(&pLine->GetStartP()); - f32 endVal = pPlane->getPlaneFunc(&pLine->GetEndP()); - if (startVal * endVal > /* 0.0 */ FLOAT_LABEL(lit_2256)) { - // matches with the literal, but that screws up data - // if (startVal * endVal > 0) { - *pVecOut = pLine->GetEndP(); +bool cM3d_Cross_LinPla(const cM3dGLin* lin, const cM3dGPla* pla, Vec* dst, bool a, bool b) { + f32 startVal = pla->getPlaneFunc(&lin->GetStartP()); + f32 endVal = pla->getPlaneFunc(&lin->GetEndP()); + if (startVal * endVal > 0.0f) { + *dst = lin->GetEnd(); return false; } else { - if (startVal >= /* 0.0 */ FLOAT_LABEL(lit_2256) && - endVal <= /* 0.0 */ FLOAT_LABEL(lit_2256)) - { - // if (startVal >= 0 && endVal <= 0) { - if (pBoolA) { - return cM3d_CrossInfLineVsInfPlane_proc(startVal, endVal, &pLine->GetStartP(), - &pLine->GetEndP(), pVecOut); + if (startVal >= 0.0f && endVal <= 0.0f) { + if (a) { + return cM3d_CrossInfLineVsInfPlane_proc(startVal, endVal, &lin->GetStartP(), &lin->GetEndP(), dst); } } else { - if (pBoolB) { - return cM3d_CrossInfLineVsInfPlane_proc(startVal, endVal, &pLine->GetStartP(), - &pLine->GetEndP(), pVecOut); + if (b) { + return cM3d_CrossInfLineVsInfPlane_proc(startVal, endVal, &lin->GetStartP(), &lin->GetEndP(), dst); } } - *pVecOut = pLine->GetEndP(); - return true; + *dst = lin->GetEnd(); + return false; } } #else |
