summaryrefslogtreecommitdiff
path: root/src/d/d_drawlist.cpp
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2023-12-27 23:46:12 -0500
committerLagoLunatic <LagoLunatic@users.noreply.github.com>2023-12-27 23:46:12 -0500
commit65d892ca03955cc63b2b843dd1c64c8aa91eda54 (patch)
treef89e4d71d9648e666f52257a5df8c2ea71d7156e /src/d/d_drawlist.cpp
parent6185ff81de7a75b1da34353cfec7562d60e96231 (diff)
bk, real shadow work
Diffstat (limited to 'src/d/d_drawlist.cpp')
-rw-r--r--src/d/d_drawlist.cpp51
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 */