From 317107283a63c15aab2e1119c0b92795625b3ed2 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Mon, 6 Nov 2023 17:19:01 -0800 Subject: [PATCH] misc matches --- include/JSystem/J3DGraphAnimator/J3DModel.h | 2 +- src/JSystem/J2DGraph/J2DPicture.cpp | 4 +- src/JSystem/J2DGraph/J2DScreen.cpp | 14 +--- src/JSystem/J2DGraph/J2DTextBox.cpp | 71 +++++++++++++++++++-- src/JSystem/J3DGraphAnimator/J3DModel.cpp | 63 +++++++++--------- 5 files changed, 100 insertions(+), 54 deletions(-) diff --git a/include/JSystem/J3DGraphAnimator/J3DModel.h b/include/JSystem/J3DGraphAnimator/J3DModel.h index 58ac20a45..b1e179462 100644 --- a/include/JSystem/J3DGraphAnimator/J3DModel.h +++ b/include/JSystem/J3DGraphAnimator/J3DModel.h @@ -141,7 +141,7 @@ public: /* 0x014 */ u32 mUserArea; /* 0x018 */ Vec mBaseScale; /* 0x024 */ Mtx mBaseTransformMtx; - /* 0x054 */ Mtx mInternalView; + /* 0x054 */ Mtx mViewBaseMtx; /* 0x084 */ u8* mpScaleFlagArr; /* 0x088 */ u8* mpEvlpScaleFlagArr; /* 0x08C */ Mtx* mpNodeMtx; diff --git a/src/JSystem/J2DGraph/J2DPicture.cpp b/src/JSystem/J2DGraph/J2DPicture.cpp index ed32cce03..a2a9053a7 100644 --- a/src/JSystem/J2DGraph/J2DPicture.cpp +++ b/src/JSystem/J2DGraph/J2DPicture.cpp @@ -152,7 +152,6 @@ J2DPicture::~J2DPicture() { /* 802D3824-802D3A08 .text insert__10J2DPictureFPC7ResTIMGUcf */ bool J2DPicture::insert(const ResTIMG* pTimg, u8 idx, f32 param_3) { - /* Nonmatching */ if (!pTimg || mNumTexture >= 4 || idx >= 4 || idx > mNumTexture) { return false; } @@ -162,8 +161,7 @@ bool J2DPicture::insert(const ResTIMG* pTimg, u8 idx, f32 param_3) { mBlendKonstColorF[i] = mBlendKonstColorF[i - 1]; mBlendKonstAlphaF[i] = mBlendKonstAlphaF[i - 1]; } - s32 mask = (1 << idx) - 1; - mValidTexture = (mValidTexture & mask) | ((mValidTexture & ~mask) << 1); + mValidTexture = (mValidTexture & ((1 << idx) - 1)) | ((mValidTexture & ~((1 << idx) - 1)) << 1); mpTexture[idx] = texture; mValidTexture |= (1 << idx); mBlendKonstColorF[idx] = param_3; diff --git a/src/JSystem/J2DGraph/J2DScreen.cpp b/src/JSystem/J2DGraph/J2DScreen.cpp index f68726d3a..c86b62f6d 100644 --- a/src/JSystem/J2DGraph/J2DScreen.cpp +++ b/src/JSystem/J2DGraph/J2DScreen.cpp @@ -4,25 +4,15 @@ // #include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/J2DGraph/J2DPicture.h" #include "JSystem/J2DGraph/J2DTextBox.h" +#include "JSystem/J2DGraph/J2DWindow.h" #include "JSystem/J2DGraph/J2DOrthoGraph.h" #include "JSystem/JKernel/JKRArchive.h" #include "JSystem/JKernel/JKRFileLoader.h" #include "JSystem/JSupport/JSUMemoryStream.h" #include "JSystem/JUtility/JUTAssert.h" -class J2DWindow : public J2DPane { -public: - J2DWindow(J2DPane * pPane, JSURandomInputStream * pStream); - u8 pad[0x114 - 0x0cc]; -}; - -class J2DPicture : public J2DPane { -public: - J2DPicture(J2DPane * pPane, JSURandomInputStream * pStream); - u8 pad[0x124 - 0x0cc]; -}; - /* 802D08E4-802D0944 .text __dt__9J2DScreenFv */ J2DScreen::~J2DScreen() { } diff --git a/src/JSystem/J2DGraph/J2DTextBox.cpp b/src/JSystem/J2DGraph/J2DTextBox.cpp index 13f887224..2fd7e2840 100644 --- a/src/JSystem/J2DGraph/J2DTextBox.cpp +++ b/src/JSystem/J2DGraph/J2DTextBox.cpp @@ -4,21 +4,78 @@ // #include "JSystem/J2DGraph/J2DTextBox.h" -#include "dolphin/types.h" +#include "JSystem/JKernel/JKRFileLoader.h" +#include "JSystem/JSupport/JSURandomInputStream.h" +#include "JSystem/JUtility/JUTResource.h" /* 802D51D8-802D5268 .text __ct__10J2DTextBoxFPCcPCc */ -J2DTextBox::J2DTextBox(const char*, const char*) { - /* Nonmatching */ +J2DTextBox::J2DTextBox(const char* font, const char* str) : mpFont(NULL), mStringPtr(NULL) { + void * font_res = JKRFileLoader::getGlbResource(font, NULL); + initiate((ResFONT*) font_res, str, HBIND_LEFT, VBIND_TOP); } /* 802D5268-802D55D4 .text __ct__10J2DTextBoxFP7J2DPaneP20JSURandomInputStream */ -J2DTextBox::J2DTextBox(J2DPane*, JSURandomInputStream*) { - /* Nonmatching */ +J2DTextBox::J2DTextBox(J2DPane* parent, JSURandomInputStream* stream) : mpFont(NULL), mStringPtr(NULL) { + s32 streamPos = stream->getPosition(); + J2DPaneHeader header; + s32 endPos; + u8 num; + stream->read(&header, sizeof(header)); + mMagic = header.mMagic; + endPos = streamPos + header.mSize; + makePaneStream(parent, stream); + JUTResReference resRef; + num = stream->readU8(); + ResFONT * font_res = (ResFONT *) resRef.getResource(stream, 'FONT', NULL); + if (font_res != NULL) + mpFont = new JUTResFont(font_res, NULL); + + mCharColor.set(stream->readU32()); + mGradColor.set(stream->readU32()); + u8 bindingFlag = stream->readU8(); + mBindingH = (bindingFlag >> 2) & 0x03; + mBindingV = (bindingFlag >> 0) & 0x03; + + mCharSpace = stream->readS16(); + mLineSpace = stream->readS16(); + mFontSizeX = stream->readU16(); + mFontSizeY = stream->readU16(); + + s16 stringLen = stream->readU16(); + mStringPtr = new char[stringLen + 1]; + stream->read(mStringPtr, stringLen); + mStringPtr[stringLen] = '\0'; + + num -= 10; + if (num) { + u8 isConnectParent = stream->readU8(); + if (isConnectParent) + setConnectParent(true); + num--; + } + + mBlack = JUtility::TColor(0); + mWhite = JUtility::TColor(0xffffffff); + + if (num) { + mBlack.set(stream->readU32()); + num--; + } + if (num) { + mWhite.set(stream->readU32()); + num--; + } + + field_0xd8 = 0.0f; + field_0xdc = 0.0f; + + stream->seek(endPos, JSUStreamSeekFrom_SET); + mTextFontOwned = true; } /* 802D55D4-802D5660 .text __ct__10J2DTextBoxFUlRCQ29JGeometry8TBox2PC7ResFONTPCc18J2DTextBoxHBinding18J2DTextBoxVBinding */ -J2DTextBox::J2DTextBox(u32, const JGeometry::TBox2&, const ResFONT*, const char*, J2DTextBoxHBinding, J2DTextBoxVBinding) { - /* Nonmatching */ +J2DTextBox::J2DTextBox(u32 tag, const JGeometry::TBox2& bounds, const ResFONT* font_res, const char* str, J2DTextBoxHBinding hbind, J2DTextBoxVBinding vbind) : J2DPane(tag, bounds), mpFont(NULL), mStringPtr(NULL) { + initiate(font_res, str, hbind, vbind); } /* 802D5660-802D5820 .text initiate__10J2DTextBoxFPC7ResFONTPCc18J2DTextBoxHBinding18J2DTextBoxVBinding */ diff --git a/src/JSystem/J3DGraphAnimator/J3DModel.cpp b/src/JSystem/J3DGraphAnimator/J3DModel.cpp index 81b410393..fff7defe7 100644 --- a/src/JSystem/J3DGraphAnimator/J3DModel.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DModel.cpp @@ -38,7 +38,7 @@ void J3DModel::initialize() { mBaseScale.z = 1.0f; MTXIdentity(mBaseTransformMtx); - MTXIdentity(mInternalView); + MTXIdentity(mViewBaseMtx); mpScaleFlagArr = NULL; mpEvlpScaleFlagArr = NULL; @@ -319,19 +319,19 @@ s32 J3DModel::createMatPacket(J3DModelData* pModelData, u32 flag) { } /* 802EDF60-802EE1D4 .text createBumpMtxArray__8J3DModelFP12J3DModelDataUl */ -s32 J3DModel::createBumpMtxArray(J3DModelData* modelData, u32 flag) { +s32 J3DModel::createBumpMtxArray(J3DModelData* modelData, u32 bufferNum) { /* Nonmatching */ if (modelData->getModelDataType() == 0) { - u16 num = 0; + u16 bumpMtxNum = 0; for (s32 matIdx = 0; matIdx < modelData->getMaterialNum(); matIdx++) { J3DMaterial * pMaterial = getModelData()->getMaterialNodePointer(matIdx); if (pMaterial->getNBTScale()->mbHasScale == 1) - num += pMaterial->getShape()->countBumpMtxNum(); + bumpMtxNum += pMaterial->getShape()->countBumpMtxNum(); } - if (num != 0 && flag != 0) { + if (bumpMtxNum != 0 && bufferNum != 0) { for (s32 i = 0; i < 2; i++) { - mpBumpMtxArr[i] = new Mtx33**[num]; + mpBumpMtxArr[i] = new Mtx33**[bumpMtxNum]; if (mpBumpMtxArr[i] == NULL) return kJ3DError_Alloc; } @@ -342,8 +342,8 @@ s32 J3DModel::createBumpMtxArray(J3DModelData* modelData, u32 flag) { for (s32 matIdx = 0; matIdx < modelData->getMaterialNum(); matIdx++) { J3DMaterial * pMaterial = getModelData()->getMaterialNodePointer(matIdx); if (pMaterial->getNBTScale()->mbHasScale == 1) { - mpBumpMtxArr[i][matIdx] = new Mtx33*[num]; - if (mpBumpMtxArr[i][matIdx] == NULL) + mpBumpMtxArr[i][bumpMtxOffset] = new Mtx33*[bufferNum]; + if (mpBumpMtxArr[i][bumpMtxOffset] == NULL) return kJ3DError_Alloc; pMaterial->getShape()->setBumpMtxOffset(bumpMtxOffset); bumpMtxOffset++; @@ -356,16 +356,17 @@ s32 J3DModel::createBumpMtxArray(J3DModelData* modelData, u32 flag) { for (s32 matIdx = 0; matIdx < modelData->getMaterialNum(); matIdx++) { J3DMaterial * pMaterial = getModelData()->getMaterialNodePointer(matIdx); if (pMaterial->getNBTScale()->mbHasScale == 1) { - for (u32 j = 0; j < flag; j++) { - mpBumpMtxArr[i][matIdx][j] = new(0x20) Mtx33[modelData->getDrawMtxNum()]; - if (mpBumpMtxArr[i][matIdx][j] == NULL) + for (u32 j = 0; j < bufferNum; j++) { + mpBumpMtxArr[i][bumpMtxOffset][j] = new(0x20) Mtx33[modelData->getDrawMtxNum()]; + if (mpBumpMtxArr[i][bumpMtxOffset][j] == NULL) return kJ3DError_Alloc; } + bumpMtxOffset++; } } } - if (num != 0) + if (bumpMtxNum != 0) getModelData()->setBumpFlag(1); } @@ -403,7 +404,6 @@ void J3DModel::unlock() { /* 802EE2C4-802EE42C .text calcMaterial__8J3DModelFv */ void J3DModel::calcMaterial() { - /* Nonmatching - regswap */ j3dSys.setModel(this); j3dSys.setTexture(mModelData->getTexture()); @@ -419,10 +419,10 @@ void J3DModel::calcMaterial() { j3dSys.offFlag(8); } - for (u16 i = 0; i < mModelData->getMaterialNum(); i++) { + for (u16 i = 0; i < getModelData()->getMaterialNum(); i++) { j3dSys.setMatPacket(&mpMatPacket[i]); - J3DMaterial* pMaterial = mModelData->getMaterialNodePointer(i); + J3DMaterial* pMaterial = getModelData()->getMaterialNodePointer(i); if (pMaterial->getMaterialAnm() != NULL) pMaterial->getMaterialAnm()->calc(pMaterial); @@ -488,8 +488,8 @@ s32 J3DModel::setSkinDeform(J3DSkinDeform* pSkinDeform, u32 flags) { /* 802EE5D8-802EE67C .text calcAnmMtx__8J3DModelFv */ void J3DModel::calcAnmMtx() { - j3dSys.setCurrentMtxCalc(getModelData()->getJointTree().getBasicMtxCalc()); j3dSys.setModel(this); + j3dSys.setCurrentMtxCalc(getModelData()->getJointTree().getBasicMtxCalc()); if (checkFlag(J3DMdlFlag_Unk00002)) j3dSys.getCurrentMtxCalc()->init(j3dDefaultScale, j3dDefaultMtx); @@ -601,25 +601,25 @@ extern void J3DPSMtxArrayConcat(f32(*)[4], f32(*)[4], f32(*)[4], u32); /* 802EEBDC-802EEE30 .text calcDrawMtx__8J3DModelFv */ void J3DModel::calcDrawMtx() { - switch (mFlags & 0x03) { - case 1: - for (u32 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) + switch (getMtxCalcMode()) { + case 0: + for (u16 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) MTXConcat(j3dSys.getViewMtx(), getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]); - if (getModelData()->getDrawFullWgtMtxNum() < getModelData()->getDrawMtxNum()) + if (getModelData()->getDrawFullWgtMtxNum() > getModelData()->getDrawMtxNum()) J3DPSMtxArrayConcat(j3dSys.getViewMtx(), (MtxP)mpWeightEnvMtx, (MtxP)getDrawMtxPtr(), getModelData()->getWEvlpMtxNum()); break; - case 0: - for (u32 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) + case 1: + for (u16 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) MTXCopy(getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]); - for (u32 i = 0; i < getModelData()->getWEvlpMtxNum(); i++) + for (u16 i = 0; i < getModelData()->getWEvlpMtxNum(); i++) MTXCopy(getWeightAnmMtx(i), getDrawMtxPtr()[getModelData()->getDrawFullWgtMtxNum() + i]); break; case 2: - calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, mInternalView); - for (u32 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) - MTXConcat(mInternalView, getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]); - if (getModelData()->getDrawFullWgtMtxNum() < getModelData()->getDrawMtxNum()) - J3DPSMtxArrayConcat(mInternalView, (MtxP)mpWeightEnvMtx, (MtxP)getDrawMtxPtr(), getModelData()->getWEvlpMtxNum()); + calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, mViewBaseMtx); + for (u16 i = 0; i < getModelData()->getDrawFullWgtMtxNum(); i++) + MTXConcat(mViewBaseMtx, getAnmMtx(getModelData()->getDrawMtxIndex(i)), getDrawMtxPtr()[i]); + if (getModelData()->getDrawFullWgtMtxNum() > getModelData()->getDrawMtxNum()) + J3DPSMtxArrayConcat(mViewBaseMtx, (MtxP)mpWeightEnvMtx, (MtxP)getDrawMtxPtr(), getModelData()->getWEvlpMtxNum()); break; } } @@ -631,12 +631,12 @@ void J3DModel::viewCalc() { if (mModelData->checkFlag(0x20)) { if (getMtxCalcMode() == 2) - calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, (MtxP)&mInternalView); + calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, (MtxP)&mViewBaseMtx); prepareShapePackets(); } else if (isCpuSkinningOn()) { if (getMtxCalcMode() == 2) - calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, (MtxP)&mInternalView); + calcViewBaseMtx(j3dSys.getViewMtx(), mBaseScale, mBaseTransformMtx, (MtxP)&mViewBaseMtx); prepareShapePackets(); } else { @@ -737,6 +737,7 @@ void J3DModel::calcBBoard() { void J3DModel::prepareShapePackets() { /* Nonmatching */ u16 shapeNum = getModelData()->getShapeNum(); + for (u16 i = 0; i < shapeNum; i++) { J3DShapePacket* pkt = getShapePacket(i); pkt->setScaleFlagArray(mpScaleFlagArr); @@ -760,7 +761,7 @@ void J3DModel::prepareShapePackets() { pShape->offFlag(J3DSysFlag_SkinNrmCpu); if (getMtxCalcMode() == 2) - pkt->setBaseMtxPtr(&mInternalView); + pkt->setBaseMtxPtr(&mViewBaseMtx); else pkt->setBaseMtxPtr(&j3dSys.mViewMtx); }