summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRozelette <Rozelette@users.noreply.github.com>2022-09-19 21:30:27 -0500
committerGitHub <noreply@github.com>2022-09-19 22:30:27 -0400
commitc9aafcf7c5c0662ee26c19ad0fa91d0eaa1defba (patch)
tree7d84aae9eac825aad744e28c01cdbddc4dee1da9
parent34d6212ab2c843a8f6f4befeb3b8dd979614c032 (diff)
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
-rw-r--r--OTRExporter/OTRExporter/DisplayListExporter.cpp7
-rw-r--r--libultraship/libultraship/Lib/Fast3D/gfx_pc.cpp5
-rw-r--r--soh/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c6
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++);