From 19942ae77bff6950f4fde5cf85a6b756f16e8730 Mon Sep 17 00:00:00 2001 From: rozlette Date: Thu, 15 Sep 2022 01:33:57 -0500 Subject: [PATCH 1/2] Add hack to load bss texture in ovl_En_Jsjutan --- OTRExporter/OTRExporter/DisplayListExporter.cpp | 7 ++++++- soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/OTRExporter/OTRExporter/DisplayListExporter.cpp b/OTRExporter/OTRExporter/DisplayListExporter.cpp index f233f2d7893..9a9bd6350f8 100644 --- a/OTRExporter/OTRExporter/DisplayListExporter.cpp +++ b/OTRExporter/OTRExporter/DisplayListExporter.cpp @@ -653,8 +653,13 @@ void OTRExporter_DisplayList::Save(ZResource* res, const fs::path& outPath, Bina uint32_t seg = data & 0xFFFFFFFF; int32_t texAddress = Seg2Filespace(data, dList->parent->baseAddress); - if (!Globals::Instance->HasSegment(GETSEGNUM(seg), res->parent->workerID)) + if (!Globals::Instance->HasSegment(GETSEGNUM(seg), res->parent->workerID) || (res->GetName() == "sShadowMaterialDL")) { + if (res->GetName() == "sShadowMaterialDL") { + // sShadowMaterialDL (In ovl_En_Jsjutan) has a texture in bss. This is a hack to override the reference to one + // to segment C. The actor has been modified to load the texture into segment C. + seg = 0x0C000000; + } int32_t __ = (data & 0x00FF000000000000) >> 48; int32_t www = (data & 0x00000FFF00000000) >> 32; diff --git a/soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c b/soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c index 8d39aa03d6e..fceedee3a47 100644 --- a/soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c +++ b/soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c @@ -402,7 +402,7 @@ void EnJsjutan_Draw(Actor* thisx, GlobalContext* globalCtx2) { this->unk_164 = false; u8* carpTex = ResourceMgr_LoadTexByName(sCarpetTex); u8* shadTex = sShadowTex; - for (i = 0; i < ARRAY_COUNT(shadTex); i++) { + for (i = 0; i < ARRAY_COUNT(sShadowTex); i++) { if (((u16*)carpTex)[i] != 0) { // Hack to bypass ZAPD exporting textures as u64. shadTex[i] = 0xFF; } else { @@ -421,6 +421,7 @@ void EnJsjutan_Draw(Actor* thisx, GlobalContext* globalCtx2) { G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); // Draws the carpet's shadow texture. + gSPSegment(POLY_OPA_DISP++, 0x0C, sShadowTex); gSPDisplayList(POLY_OPA_DISP++, sShadowMaterialDL); gDPPipeSync(POLY_OPA_DISP++); From dbbf5632873ff681d23372a6ab8e03f924413093 Mon Sep 17 00:00:00 2001 From: rozlette Date: Thu, 15 Sep 2022 02:05:11 -0500 Subject: [PATCH 2/2] Remove (debug?) reference to jsjutanShadowTex in LUS --- libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp | 5 ----- soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c | 3 --- 2 files changed, 8 deletions(-) diff --git a/libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp b/libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp index 9fde7e2768b..4c193fa4a54 100644 --- a/libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp +++ b/libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp @@ -2110,11 +2110,6 @@ unsigned int dListBP; int matrixBP; uintptr_t clearMtx; -extern "C" -{ - uintptr_t jsjutanShadowTex = 0; -}; - static void gfx_run_dl(Gfx* cmd) { //puts("dl"); int dummy = 0; diff --git a/soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c b/soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c index fceedee3a47..98b86d21156 100644 --- a/soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c +++ b/soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c @@ -367,8 +367,6 @@ void EnJsjutan_Update(Actor* thisx, GlobalContext* globalCtx2) { thisx->shape.rot.z = Math_CosS(globalCtx->gameplayFrames * 3500) * 300.0f; } -extern uintptr_t jsjutanShadowTex; - void EnJsjutan_Draw(Actor* thisx, GlobalContext* globalCtx2) { EnJsjutan* this = (EnJsjutan*)thisx; GlobalContext* globalCtx = globalCtx2; @@ -396,7 +394,6 @@ void EnJsjutan_Draw(Actor* thisx, GlobalContext* globalCtx2) { } func_80A89A6C(this, globalCtx); - jsjutanShadowTex = sShadowTex; if (this->unk_164) { this->unk_164 = false;