From 5bf2cc707c9d1878f5ef3ec94effa5178b4a71a9 Mon Sep 17 00:00:00 2001 From: daft7 Date: Mon, 6 Oct 2025 22:12:37 -0500 Subject: [PATCH 1/2] Start on xShadowSimple, partial match of xShadowSimple_CacheInit --- src/SB/Core/x/xShadowSimple.cpp | 68 +++++++++++++++++++++++++++++++++ src/SB/Core/x/xShadowSimple.h | 5 +++ 2 files changed, 73 insertions(+) diff --git a/src/SB/Core/x/xShadowSimple.cpp b/src/SB/Core/x/xShadowSimple.cpp index 8cc281bcd..21e382db3 100644 --- a/src/SB/Core/x/xShadowSimple.cpp +++ b/src/SB/Core/x/xShadowSimple.cpp @@ -24,6 +24,74 @@ void xQuickCullForLine(xQCData* q, const xLine3* ln) xQuickCullForLine(&xqc_def_ctrl, q, ln); } +void xShadowSimple_CacheInit(xShadowSimpleCache* cache, xEnt* ent, u8 alpha) +{ + S32 i; + S32 n; + U32 j; + class zSimpleShadowTableHeader* sst; + class RwRaster* raster; + U32 flags; + U32 size; + class RwTexture* tex; + ///////////////////////////////////// + U32 sp8; + S32 var_r20; + S32 var_r24; + U32 var_r31; + + //memset(NULL, 0x98); + cache->corner[0].z = 1e38f; + cache->corner[1].y = 1e38f; + cache->flags = 4; + cache->alpha = alpha; + + // u32 sp8; + // s32 var_r20; + // s32 var_r24; + // u32 var_r31; + + // memset(NULL, 0x98); + + + if (ent->model != NULL) + { + if ((U32)(ent->model->shadowID + 0x21530000) != -0x4111U) + { + return; + } + var_r31 = 0U; + var_r20 = 0; + for (i = 0; i < xSTAssetCountByType('SHDW'); i += 1) + { + sst = (zSimpleShadowTableHeader*)xSTFindAssetByType('SHDW', i, &sp8); + var_r24 = 0; + for (j = 0; j < (U32)sst->num; j += 1) + { + if ((U32)ent->model->modelID == 0) + { + if (xSTFindAsset(sst->num, NULL) != NULL) + { + var_r31 = (U32)xSTFindAsset(sst->num, NULL); + var_r20 = sst->num; + } + else + { + var_r31 = 0xDEADBEEFU; + } + } + } + } + if ((var_r31 == 0U) || ((U32)(var_r31 + 0x21530000) == -0x4111U)) + { + var_r31 = sShadRaster->width; + } + cache->corner[1].x = var_r31; + cache->flags |= (S16)var_r20; + ent->model->shadowID = var_r31; + } +} + void xShadowSimple_Init() { memset(sCollQueue, 0, sizeof(sCollQueue)); diff --git a/src/SB/Core/x/xShadowSimple.h b/src/SB/Core/x/xShadowSimple.h index d718f670d..ee7abef1d 100644 --- a/src/SB/Core/x/xShadowSimple.h +++ b/src/SB/Core/x/xShadowSimple.h @@ -45,6 +45,11 @@ struct xShadowSimpleCache xVec3 corner[4]; }; +struct zSimpleShadowTableHeader { + // total size: 0x4 + U32 num; +}; + void xShadowSimple_Render(); void xShadowSimple_Add(xShadowSimpleCache* cache, xEnt* ent, F32 radius, F32 ecc); void xShadowSimple_CacheInit(xShadowSimpleCache* cache, xEnt* ent, U8 alpha); From 0a3a3e7964efe4e1c74ef8d4c991b9698428a14d Mon Sep 17 00:00:00 2001 From: daft7 Date: Thu, 9 Oct 2025 20:20:30 -0500 Subject: [PATCH 2/2] Eliminated a few more variables, cleaned up some. --- src/SB/Core/x/xShadowSimple.cpp | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/SB/Core/x/xShadowSimple.cpp b/src/SB/Core/x/xShadowSimple.cpp index 21e382db3..2a62bec72 100644 --- a/src/SB/Core/x/xShadowSimple.cpp +++ b/src/SB/Core/x/xShadowSimple.cpp @@ -34,11 +34,9 @@ void xShadowSimple_CacheInit(xShadowSimpleCache* cache, xEnt* ent, u8 alpha) U32 flags; U32 size; class RwTexture* tex; - ///////////////////////////////////// - U32 sp8; + S32 var_r20; S32 var_r24; - U32 var_r31; //memset(NULL, 0x98); cache->corner[0].z = 1e38f; @@ -46,25 +44,17 @@ void xShadowSimple_CacheInit(xShadowSimpleCache* cache, xEnt* ent, u8 alpha) cache->flags = 4; cache->alpha = alpha; - // u32 sp8; - // s32 var_r20; - // s32 var_r24; - // u32 var_r31; - - // memset(NULL, 0x98); - - if (ent->model != NULL) { if ((U32)(ent->model->shadowID + 0x21530000) != -0x4111U) { return; } - var_r31 = 0U; + flags = 0U; var_r20 = 0; for (i = 0; i < xSTAssetCountByType('SHDW'); i += 1) { - sst = (zSimpleShadowTableHeader*)xSTFindAssetByType('SHDW', i, &sp8); + sst = (zSimpleShadowTableHeader*)xSTFindAssetByType('SHDW', i, &size); var_r24 = 0; for (j = 0; j < (U32)sst->num; j += 1) { @@ -72,23 +62,23 @@ void xShadowSimple_CacheInit(xShadowSimpleCache* cache, xEnt* ent, u8 alpha) { if (xSTFindAsset(sst->num, NULL) != NULL) { - var_r31 = (U32)xSTFindAsset(sst->num, NULL); + flags = (U32)xSTFindAsset(sst->num, NULL); var_r20 = sst->num; } else { - var_r31 = 0xDEADBEEFU; + flags = 0xDEADBEEFU; } } } } - if ((var_r31 == 0U) || ((U32)(var_r31 + 0x21530000) == -0x4111U)) + if ((flags == 0U) || ((U32)(flags + 0x21530000) == -0x4111U)) { - var_r31 = sShadRaster->width; + flags = sShadRaster->width; } - cache->corner[1].x = var_r31; + cache->corner[1].x = flags; cache->flags |= (S16)var_r20; - ent->model->shadowID = var_r31; + ent->model->shadowID = flags; } }