mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-01 01:08:48 -04:00
Merge branch 'main' of https://github.com/TakaRikka/dusk
This commit is contained in:
@@ -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 {
|
||||
|
||||
+24
-32
@@ -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<u16>(192 * resMult),
|
||||
static_cast<u16>(64 * resMult)
|
||||
static_cast<u16>(192 * mTexResScale),
|
||||
static_cast<u16>(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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user