diff options
| author | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2023-12-27 23:46:12 -0500 |
|---|---|---|
| committer | LagoLunatic <LagoLunatic@users.noreply.github.com> | 2023-12-27 23:46:12 -0500 |
| commit | 65d892ca03955cc63b2b843dd1c64c8aa91eda54 (patch) | |
| tree | f89e4d71d9648e666f52257a5df8c2ea71d7156e /src/d/d_drawlist.cpp | |
| parent | 6185ff81de7a75b1da34353cfec7562d60e96231 (diff) | |
bk, real shadow work
Diffstat (limited to 'src/d/d_drawlist.cpp')
| -rw-r--r-- | src/d/d_drawlist.cpp | 51 |
1 files changed, 45 insertions, 6 deletions
diff --git a/src/d/d_drawlist.cpp b/src/d/d_drawlist.cpp index f9e69217..344d2ba7 100644 --- a/src/d/d_drawlist.cpp +++ b/src/d/d_drawlist.cpp @@ -821,7 +821,7 @@ cBgS_ShdwDraw::~cBgS_ShdwDraw() { } /* 800841B0-8008450C .text setShadowRealMtx__FPA4_fPA4_fPA4_fP4cXyzP4cXyzffP18dDlst_shadowPoly_cf */ -void setShadowRealMtx(Mtx, Mtx, Mtx, cXyz*, cXyz*, f32, f32, dDlst_shadowPoly_c*, f32) { +u8 setShadowRealMtx(Mtx, Mtx, Mtx, cXyz*, cXyz*, f32, f32, dDlst_shadowPoly_c*, f32) { /* Nonmatching */ } @@ -831,8 +831,29 @@ u32 dDlst_shadowReal_c::set(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) } /* 800846C8-80084844 .text set2__18dDlst_shadowReal_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ -u32 dDlst_shadowReal_c::set2(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { - /* Nonmatching */ +u32 dDlst_shadowReal_c::set2(u32 r26, s8 r27, J3DModel* r31, cXyz* r28, f32 f30, f32 f31, dKy_tevstr_c* tevstr) { + if (mModelNum == 0) { + cXyz lightPos = dKy_plight_near_pos(); + if (tevstr) { + lightPos = tevstr->mLightPosWorld; + } + mAlpha = setShadowRealMtx( + mViewMtx, mRenderProjMtx, mReceiverProjMtx, &lightPos, r28, f30, f31, &mShadowRealPoly, + r27 == 0 ? 0.0f : f31 * 0.00025f + ); + if (mAlpha == 0) { + return 0; + } + mState = 1; + mKey = r26; + field_0x1 = r27; + mModelNum = 0; + } + + JUT_ASSERT(3999, mModelNum < MODEL_MAX); + + mpModels[mModelNum++] = r31; + return mKey; } /* 80084844-800848E8 .text add__18dDlst_shadowReal_cFP8J3DModel */ @@ -909,7 +930,8 @@ int dDlst_shadowControl_c::setReal(u32 key, s8 size, J3DModel* model, cXyz* pos, dDlst_shadowReal_c * real = &mReal[0]; for (s32 i = 0; i < (s32)ARRAY_SIZE(mReal); i++, real++) { if (real->isNoUse()) { - return real->set(i, size, model, pos, f0, f1, tevstr); + while (++mNextID == 0) {} + return real->set(mNextID, size, model, pos, f0, f1, tevstr); } } @@ -917,8 +939,25 @@ int dDlst_shadowControl_c::setReal(u32 key, s8 size, J3DModel* model, cXyz* pos, } /* 80085170-8008520C .text setReal2__21dDlst_shadowControl_cFUlScP8J3DModelP4cXyzffP12dKy_tevstr_c */ -int dDlst_shadowControl_c::setReal2(u32, s8, J3DModel*, cXyz*, f32, f32, dKy_tevstr_c*) { - /* Nonmatching */ +int dDlst_shadowControl_c::setReal2(u32 key, s8 size, J3DModel* model, cXyz* pos, f32 f0, f32 f1, dKy_tevstr_c* tevstr) { + if (key != 0) { + dDlst_shadowReal_c * real = &mReal[0]; + for (s32 i = 0; i < (s32)ARRAY_SIZE(mReal); i++, real++) { + if (real->isUse() && real->checkKey(key)) { + return real->set2(key, size, model, pos, f0, f1, tevstr); + } + } + } + + dDlst_shadowReal_c * real = &mReal[0]; + for (s32 i = 0; i < (s32)ARRAY_SIZE(mReal); i++, real++) { + if (real->isNoUse()) { + while (++mNextID == 0) {} + return real->set2(mNextID, size, model, pos, f0, f1, tevstr); + } + } + + return 0; } /* 8008520C-80085274 .text addReal__21dDlst_shadowControl_cFUlP8J3DModel */ |
