From aecb7424d56f7c0dfd37f6f4e19ef531b449c3da Mon Sep 17 00:00:00 2001 From: Trueffel <106771418+Trueffeloot@users.noreply.github.com> Date: Sun, 29 Dec 2024 16:56:25 +0100 Subject: [PATCH] d_stage linked and one function in m_do_ext matched (#2272) --- configure.py | 2 +- include/dolphin/gx.h | 8 ++++++++ include/m_Do/m_Do_ext.h | 16 ++++++++-------- src/d/d_stage.cpp | 25 ++----------------------- src/m_Do/m_Do_ext.cpp | 40 +++++++++++++++++++++++++++++++++++++--- 5 files changed, 56 insertions(+), 35 deletions(-) diff --git a/configure.py b/configure.py index e71456304f..fd272afa91 100644 --- a/configure.py +++ b/configure.py @@ -442,7 +442,7 @@ config.libs = [ "progress_category": "game", "host": True, "objects": [ - Object(NonMatching, "d/d_stage.cpp"), + Object(Matching, "d/d_stage.cpp"), Object(Matching, "d/d_map.cpp"), Object(Matching, "d/d_com_inf_game.cpp", extra_cflags=['-pragma "nosyminline on"']), Object(Matching, "d/d_com_static.cpp"), diff --git a/include/dolphin/gx.h b/include/dolphin/gx.h index b9fa1486d9..7512bbaae9 100644 --- a/include/dolphin/gx.h +++ b/include/dolphin/gx.h @@ -99,6 +99,10 @@ volatile PPCWGPipe GXWGFifo AT_ADDRESS(GXFIFO_ADDR); GX_XF_LOAD_REG_HDR(cmd); \ } +static inline void GXNormal1x16(const u16 x) { + GXWGFifo.u16 = x; +} + static inline void GXPosition3f32(const f32 x, const f32 y, const f32 z) { GXWGFifo.f32 = x; GXWGFifo.f32 = y; @@ -145,6 +149,10 @@ static inline void GXTexCoord1x8(const u8 s) { GXWGFifo.u8 = s; } +static inline void GXTexCoord1x16(const u16 s) { + GXWGFifo.u16 = s; +} + static inline void GXPosition2u16(const u16 x, const u16 y) { GXWGFifo.u16 = x; GXWGFifo.u16 = y; diff --git a/include/m_Do/m_Do_ext.h b/include/m_Do/m_Do_ext.h index 36788aad6b..4320d106a3 100644 --- a/include/m_Do/m_Do_ext.h +++ b/include/m_Do/m_Do_ext.h @@ -526,18 +526,18 @@ public: /* 800134F8 */ void setMaterial(); /* 800135D0 */ void draw(); - cXyz* getPos(int i_idx) { return field_0x38[i_idx].field_0x0; } - f32* getSize(int i_idx) { return field_0x38[i_idx].field_0x4; } + cXyz* getPos(int i_idx) { return mpLines[i_idx].field_0x0; } + f32* getSize(int i_idx) { return mpLines[i_idx].field_0x4; } private: - /* 0x08 */ GXTexObj field_0x8; - /* 0x28 */ GXColor field_0x28; - /* 0x2C */ dKy_tevstr_c* field_0x2c; - /* 0x30 */ u16 field_0x30; + /* 0x08 */ GXTexObj mTextureObject; + /* 0x28 */ GXColor mColor; + /* 0x2C */ dKy_tevstr_c* mpTevStr; + /* 0x30 */ u16 mNumLines; /* 0x32 */ u16 field_0x32; /* 0x34 */ u16 field_0x34; - /* 0x36 */ u8 field_0x36; - /* 0x38 */ mDoExt_3Dline_c* field_0x38; + /* 0x36 */ u8 mIsDrawn; + /* 0x38 */ mDoExt_3Dline_c* mpLines; }; class mDoExt_3DlineMat0_c : public mDoExt_3DlineMat_c { diff --git a/src/d/d_stage.cpp b/src/d/d_stage.cpp index 2bc4f5ff1b..b270b49897 100644 --- a/src/d/d_stage.cpp +++ b/src/d/d_stage.cpp @@ -2729,7 +2729,6 @@ stage_scls_info_dummy_class* dStage_stageDt_c::getSclsInfo() const { } /* 800272F0-800274B0 021C30 01C0+00 0/0 1/1 0/0 .text dStage_changeScene4Event__FiScibfUlsi */ -// NONMATCHING regalloc int dStage_changeScene4Event(int i_exitId, s8 room_no, int i_wipe, bool param_3, f32 speed, u32 mode, s16 angle, int param_7) { stage_scls_info_dummy_class* scls; @@ -2748,19 +2747,8 @@ int dStage_changeScene4Event(int i_exitId, s8 room_no, int i_wipe, bool param_3, stage_scls_info_class* scls_info = &scls->mEntries[i_exitId]; - s32 wipe; - s32 wipe_time; - if (i_wipe == -1) { - wipe = dStage_sclsInfo_getWipe(scls_info); - } else { - wipe = i_wipe; - } - - if (i_wipe == -1) { - wipe_time = dStage_sclsInfo_getWipeTime(scls_info); - } else { - wipe_time = 0; - } + s32 wipe = i_wipe == -1 ? dStage_sclsInfo_getWipe(scls_info) : i_wipe; + s32 wipe_time = i_wipe == -1 ? dStage_sclsInfo_getWipeTime(scls_info) : 0; s32 layer = dStage_sclsInfo_getSceneLayer(scls_info); int timeH = dStage_sclsInfo_getTimeH(scls_info); @@ -3495,12 +3483,3 @@ int dStage_stageDt_c::getMapPath(void) { void dStage_stageDt_c::setElst(dStage_Elst_c* i_Elst) { mElst = i_Elst; } - -/* ############################################################################################## */ -/* 80450D7C-80450D80 -00001 0004+00 0/0 0/0 0/0 .sbss None */ -#pragma push -#pragma force_active on -static u8 pad_80450D7C[4]; -#pragma pop - -/* 80378A50-80378A50 0050B0 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/src/m_Do/m_Do_ext.cpp b/src/m_Do/m_Do_ext.cpp index 228ece62dc..3c7767ee66 100644 --- a/src/m_Do/m_Do_ext.cpp +++ b/src/m_Do/m_Do_ext.cpp @@ -4,6 +4,7 @@ */ #include "m_Do/m_Do_ext.h" +#include "JSystem/J3DGraphBase/J3DDrawBuffer.h" #include "JSystem/J3DGraphAnimator/J3DMaterialAnm.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/JKernel/JKRAssertHeap.h" @@ -2340,8 +2341,37 @@ void mDoExt_3DlineMat1_c::setMaterial() { } /* 800135D0-8001373C 00DF10 016C+00 1/0 0/0 0/0 .text draw__19mDoExt_3DlineMat1_cFv */ +// NONMATCHING- some smaller issues void mDoExt_3DlineMat1_c::draw() { - // NONMATCHING + GXLoadTexObj(&mTextureObject, GX_TEXMAP0); + GXSetTexCoordScaleManually(GX_TEXCOORD0, 1, GXGetTexObjWidth(&mTextureObject), GXGetTexObjHeight(&mTextureObject)); + GXSetTevColor(GX_TEVREG2, mColor); + if (mpTevStr != NULL) { + dKy_Global_amb_set(mpTevStr); + } + mDoExt_3Dline_c* lines = mpLines; + s32 vert_num = (field_0x34 & 0x7fff) << 1; + for (s32 i = 0; i < mNumLines; i++) { + GXSetArray(GX_VA_POS, lines[mIsDrawn].field_0x8, 0xC); + GXSetArray(GX_VA_NRM, lines[mIsDrawn].field_0x10, 0x3); + GXSetArray(GX_VA_TEX0, lines[mIsDrawn].field_0x18, 0x8); + GXBegin(GX_TRIANGLESTRIP, GX_VTXFMT0, vert_num); + + s16 tempJ; + for (u32 j = 0; j < (u32)field_0x34; j += 1) { + GXPosition1x16(j); + GXNormal1x16(j); + GXTexCoord1x16(j); + tempJ = j + 1; + GXPosition1x16(tempJ); + GXNormal1x16(tempJ); + GXTexCoord1x16(tempJ); + } + GXEnd(); + lines++; + } + GXSetTexCoordScaleManually(GX_TEXCOORD0, 0, 0, 0); + mIsDrawn ^= 1; } /* 8001373C-80013FB0 00E07C 0874+00 0/0 0/0 6/6 .text @@ -2359,8 +2389,12 @@ void mDoExt_3DlineMat1_c::update(int param_0, _GXColor& param_1, dKy_tevstr_c* p /* 80014738-8001479C 00F078 0064+00 0/0 0/0 29/29 .text * setMat__26mDoExt_3DlineMatSortPacketFP18mDoExt_3DlineMat_c */ -void mDoExt_3DlineMatSortPacket::setMat(mDoExt_3DlineMat_c* param_0) { - // NONMATCHING +void mDoExt_3DlineMatSortPacket::setMat(mDoExt_3DlineMat_c* i_3DlineMat) { + if (mp3DlineMat == NULL) { + dComIfGd_getListPacket()->entryImm(this, 0); + } + i_3DlineMat->field_0x4 = mp3DlineMat; + mp3DlineMat = i_3DlineMat; } /* 8001479C-80014804 00F0DC 0068+00 1/0 0/0 0/0 .text draw__26mDoExt_3DlineMatSortPacketFv */