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
This commit is contained in:
Rozelette 2022-09-19 21:30:27 -05:00 committed by GitHub
parent 34d6212ab2
commit c9aafcf7c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 10 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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++);