summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-01-24 04:00:46 -0800
committerGitHub <noreply@github.com>2024-01-24 14:00:46 +0200
commitba44ade90c3f04f5c163278fcadc4361c263acbb (patch)
tree3b7948dc4dcf260ff61230da15ddea595635cbc8 /libs
parentb2310b84b65e62d9f1a82a5b9e52766b325b765f (diff)
more various JSystem work (#2046)
* most of J3DAnmLoader done * J3D / JKernel / JUTConsole work * remove asm * fix build * dol 50%
Diffstat (limited to 'libs')
-rw-r--r--libs/JSystem/J2DGraph/J2DPicture.cpp165
-rw-r--r--libs/JSystem/J2DGraph/J2DWindowEx.cpp12
-rw-r--r--libs/JSystem/J3DGraphAnimator/J3DAnimation.cpp24
-rw-r--r--libs/JSystem/J3DGraphAnimator/J3DModel.cpp43
-rw-r--r--libs/JSystem/J3DGraphBase/J3DGD.cpp226
-rw-r--r--libs/JSystem/J3DGraphBase/J3DMatBlock.cpp274
-rw-r--r--libs/JSystem/J3DGraphBase/J3DMaterial.cpp37
-rw-r--r--libs/JSystem/J3DGraphBase/J3DPacket.cpp30
-rw-r--r--libs/JSystem/J3DGraphBase/J3DShape.cpp19
-rw-r--r--libs/JSystem/J3DGraphBase/J3DTevs.cpp72
-rw-r--r--libs/JSystem/J3DGraphBase/J3DTransform.cpp272
-rw-r--r--libs/JSystem/J3DGraphLoader/J3DAnmLoader.cpp857
-rw-r--r--libs/JSystem/J3DGraphLoader/J3DClusterLoader.cpp176
-rw-r--r--libs/JSystem/JFramework/JFWDisplay.cpp21
-rw-r--r--libs/JSystem/JGadget/linklist.cpp104
-rw-r--r--libs/JSystem/JKernel/JKRAram.cpp138
-rw-r--r--libs/JSystem/JKernel/JKRAramArchive.cpp162
-rw-r--r--libs/JSystem/JKernel/JKRAramBlock.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRAramHeap.cpp17
-rw-r--r--libs/JSystem/JKernel/JKRAramPiece.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRAramStream.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRArchivePri.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRArchivePub.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRAssertHeap.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRCompArchive.cpp18
-rw-r--r--libs/JSystem/JKernel/JKRDecomp.cpp9
-rw-r--r--libs/JSystem/JKernel/JKRDisposer.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRDvdAramRipper.cpp281
-rw-r--r--libs/JSystem/JKernel/JKRDvdArchive.cpp106
-rw-r--r--libs/JSystem/JKernel/JKRDvdFile.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRFile.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRFileCache.cpp5
-rw-r--r--libs/JSystem/JKernel/JKRFileFinder.cpp9
-rw-r--r--libs/JSystem/JKernel/JKRFileLoader.cpp17
-rw-r--r--libs/JSystem/JKernel/JKRHeap.cpp4
-rw-r--r--libs/JSystem/JKernel/JKRMemArchive.cpp17
-rw-r--r--libs/JSystem/JKernel/JKRSolidHeap.cpp17
-rw-r--r--libs/JSystem/JKernel/JKRThread.cpp5
-rw-r--r--libs/JSystem/JUtility/JUTConsole.cpp44
-rw-r--r--libs/SSystem/SComponent/c_m3d.cpp69
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