diff --git a/include/d/d_drawlist.h b/include/d/d_drawlist.h index 9eecac2d61..4126c715f3 100644 --- a/include/d/d_drawlist.h +++ b/include/d/d_drawlist.h @@ -308,8 +308,11 @@ private: /* 0x0000C */ dDlst_shadowSimple_c mSimple[128]; /* 0x0340C */ int mNextID; /* 0x03410 */ dDlst_shadowReal_c mReal[8]; - /* 0x15EB0 */ TGXTexObj field_0x15eb0[2]; - /* 0x15EF0 */ void* field_0x15ef0[2]; + /* 0x15EB0 */ TGXTexObj mShadowTexObj[2]; + /* 0x15EF0 */ void* mShadowTexData[2]; + #if TARGET_PC + int mTexResScale; + #endif }; class dDlst_window_c { diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index 42ac8075c7..2ef4732455 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -1440,16 +1440,17 @@ void dDlst_shadowSimple_c::set(cXyz* param_0, f32 param_1, f32 param_2, cXyz* pa void dDlst_shadowControl_c::init() { #if TARGET_PC - u16 resMult = dusk::getSettings().game.shadowResolutionMultiplier; + mTexResScale = dusk::getSettings().game.shadowResolutionMultiplier; // Increase shadow map resolution u16 l_realImageSize[2] = { - static_cast(192 * resMult), - static_cast(64 * resMult) + static_cast(192 * mTexResScale), + static_cast(64 * mTexResScale) }; #else static u16 l_realImageSize[2] = {192, 64}; #endif + for (int i = 0; i < 2; i++) { u16 size = l_realImageSize[i]; @@ -1458,10 +1459,13 @@ void dDlst_shadowControl_c::init() { #else u32 buffer_size = GXGetTexBufferSize(size, size, 5, GX_DISABLE, 0); #endif - field_0x15ef0[i] = JKR_NEW_ARRAY_ARGS(u8, buffer_size, 0x20); - GXInitTexObj(&field_0x15eb0[i], field_0x15ef0[i], size, size, GX_TF_RGB5A3, GX_CLAMP, + delete mShadowTexData[i]; + mShadowTexData[i] = JKR_NEW_ARRAY_ARGS(u8, buffer_size, 0x20); + + mShadowTexObj[i].reset(); + GXInitTexObj(&mShadowTexObj[i], mShadowTexData[i], size, size, GX_TF_RGB5A3, GX_CLAMP, GX_CLAMP, GX_DISABLE); - GXInitTexObjLOD(&field_0x15eb0[i], GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, + GXInitTexObjLOD(&mShadowTexObj[i], GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, GX_FALSE, GX_FALSE, GX_ANISO_1); } } @@ -1479,25 +1483,13 @@ void dDlst_shadowControl_c::reset() { mRealNum = 0; field_0x4 = NULL; -#ifdef TARGET_PC - field_0x15eb0[0].reset(); - field_0x15eb0[1].reset(); +#if TARGET_PC + if (mTexResScale != dusk::getSettings().game.shadowResolutionMultiplier) + init(); #endif } -#if TARGET_PC -int lastShadowValue = 0; -#endif - void dDlst_shadowControl_c::imageDraw(Mtx param_0) { - #if TARGET_PC - if (lastShadowValue != dusk::getSettings().game.shadowResolutionMultiplier) { - reset(); - init(); - lastShadowValue = dusk::getSettings().game.shadowResolutionMultiplier; - } - #endif - static u8 l_matDL[] ATTRIBUTE_ALIGN(32) = { 0x10, 0x00, 0x00, 0x10, 0x0E, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x04, 0x00, 0x61, 0x28, 0x38, 0x00, 0x00, 0x61, 0xC0, 0x08, 0xFF, 0xF2, @@ -1530,7 +1522,7 @@ void dDlst_shadowControl_c::imageDraw(Mtx param_0) { j3dSys.setDrawModeOpaTexEdge(); J3DShape::resetVcdVatCache(); dDlst_shadowReal_c* shadowReal = field_0x4; - int r29 = 0; + int chan = 0; int tex = 0; u16 r27; u16 r26; @@ -1539,8 +1531,8 @@ void dDlst_shadowControl_c::imageDraw(Mtx param_0) { #endif for (; shadowReal; shadowReal = shadowReal->getZsortNext()) { if (shadowReal->isUse()) { - if (r29 == 0) { - r27 = GXGetTexObjWidth(field_0x15eb0 + tex); + if (chan == 0) { + r27 = GXGetTexObjWidth(&mShadowTexObj[tex]); r26 = r27 * 2; #ifdef TARGET_PC GXCreateFrameBuffer(r26, r26); @@ -1549,27 +1541,27 @@ void dDlst_shadowControl_c::imageDraw(Mtx param_0) { GXSetViewport(0.0f, 0.0f, r26, r26, 0.0f, 1.0f); GXSetScissor(0, 0, r26, r26); } - GXSetTevColor(GX_TEVREG0, l_imageDrawColor[r29]); - if (r29 == 3) { + GXSetTevColor(GX_TEVREG0, l_imageDrawColor[chan]); + if (chan == 3) { GXSetColorUpdate(GX_DISABLE); GXSetAlphaUpdate(GX_ENABLE); } shadowReal->imageDraw(param_0); - r29 = (r29 + 1) % 4; - if (r29 == 0) { + chan = (chan + 1) % 4; + if (chan == 0) { GXSetTexCopySrc(0, 0, r26, r26); GXSetTexCopyDst(r27, r27, GX_TF_RGB5A3, GX_TRUE); GXSetColorUpdate(GX_ENABLE); - GXCopyTex(field_0x15ef0[tex++], GX_TRUE); + GXCopyTex(mShadowTexData[tex++], GX_TRUE); GXPixModeSync(); GXSetAlphaUpdate(GX_DISABLE); } } } - if (r29) { + if (chan) { GXSetTexCopySrc(0, 0, r26, r26); GXSetTexCopyDst(r27, r27, GX_TF_RGB5A3, GX_TRUE); - GXCopyTex(field_0x15ef0[tex], GX_TRUE); + GXCopyTex(mShadowTexData[tex], GX_TRUE); GXPixModeSync(); GXSetAlphaUpdate(GX_DISABLE); } @@ -1621,7 +1613,7 @@ void dDlst_shadowControl_c::draw(Mtx param_0) { for (int i2 = 0, i3 = 0; real != NULL; real = real->getZsortNext()) { if (real->isUse()) { if (i2 == 0) { - TGXTexObj* obj = &field_0x15eb0[i3]; + TGXTexObj* obj = &mShadowTexObj[i3]; i3++; GXLoadTexObj(obj, GX_TEXMAP0); diff --git a/src/dusk/imgui/ImGuiDebugPad.cpp b/src/dusk/imgui/ImGuiDebugPad.cpp index 75dc8d77a6..b1591f1968 100644 --- a/src/dusk/imgui/ImGuiDebugPad.cpp +++ b/src/dusk/imgui/ImGuiDebugPad.cpp @@ -47,4 +47,15 @@ void DuskDebugPad() { pad.mMainStickValue = 1.0f; pad.mMainStickAngle = -0x4000; } + + if (ImGui::IsKeyDown(ImGuiKey_Q)) { + pad.mTriggerLeft = 1.0; + pad.mTrigLockL = 1; + pad.mHoldLockL = 1; + } + if (ImGui::IsKeyDown(ImGuiKey_E)) { + pad.mTriggerRight = 1.0; + pad.mTrigLockR = 1; + pad.mHoldLockR = 1; + } }