From c9aafcf7c5c0662ee26c19ad0fa91d0eaa1defba Mon Sep 17 00:00:00 2001 From: Rozelette Date: Mon, 19 Sep 2022 21:30:27 -0500 Subject: [PATCH] Add hack to load bss texture in ovl_En_Jsjutan (fixes #69) (#1482) * Add hack to load bss texture in ovl_En_Jsjutan * Remove (debug?) reference to jsjutanShadowTex in LUS --- OTRExporter/OTRExporter/DisplayListExporter.cpp | 7 ++++++- libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp | 5 ----- soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c | 6 ++---- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/OTRExporter/OTRExporter/DisplayListExporter.cpp b/OTRExporter/OTRExporter/DisplayListExporter.cpp index f233f2d78..9a9bd6350 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/libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp b/libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp index 9fde7e276..4c193fa4a 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 8d39aa03d..98b86d211 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,13 +394,12 @@ void EnJsjutan_Draw(Actor* thisx, GlobalContext* globalCtx2) { } func_80A89A6C(this, globalCtx); - jsjutanShadowTex = sShadowTex; if (this->unk_164) { 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 +418,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++);