summaryrefslogtreecommitdiff
path: root/soh/src/code
diff options
context:
space:
mode:
authorMelonSpeedruns <melonspeedruns@outlook.com>2022-05-05 12:09:45 -0400
committerGitHub <noreply@github.com>2022-05-05 12:09:45 -0400
commite55dcfa0a0d17a0dafaba8826b1d430ef53b771a (patch)
treec23c05d9bb7741653e5812f301099122ee99a3cf /soh/src/code
parentc99f10169e90049f2e72c004a167e4c90f35d927 (diff)
parent091983b3e3c0d0a1938d85a1f9c2e776f873603a (diff)
Merge branch 'HarbourMasters:develop' into develop
Diffstat (limited to 'soh/src/code')
-rw-r--r--soh/src/code/game.c6
-rw-r--r--soh/src/code/z_actor.c57
-rw-r--r--soh/src/code/z_fbdemo_circle.c2
-rw-r--r--soh/src/code/z_kankyo.c38
-rw-r--r--soh/src/code/z_map_exp.c32
-rw-r--r--soh/src/code/z_room.c19
6 files changed, 114 insertions, 40 deletions
diff --git a/soh/src/code/game.c b/soh/src/code/game.c
index b69537fd8..a411523ec 100644
--- a/soh/src/code/game.c
+++ b/soh/src/code/game.c
@@ -421,8 +421,12 @@ void GameState_Update(GameState* gameState) {
int32_t prevTime = CVar_GetS32("gPrevTime", gSaveContext.dayTime);
gSaveContext.dayTime = prevTime;
+ } else {
+ CVar_SetS32("gPrevTime", -1);
}
-
+
+ //since our CVar is same value and properly default to 0 there is not problems doing this in single line.
+ gSaveContext.language = CVar_GetS32("gLanguages", 0);
gameState->frames++;
}
diff --git a/soh/src/code/z_actor.c b/soh/src/code/z_actor.c
index bb55009bb..9a56000ec 100644
--- a/soh/src/code/z_actor.c
+++ b/soh/src/code/z_actor.c
@@ -758,12 +758,14 @@ void func_8002CDE4(GlobalContext* globalCtx, TitleCardContext* titleCtx) {
}
void TitleCard_InitBossName(GlobalContext* globalCtx, TitleCardContext* titleCtx, void* texture, s16 x, s16 y, u8 width,
- u8 height) {
+ u8 height, s16 hasTranslation) {
if (ResourceMgr_OTRSigCheck(texture))
texture = ResourceMgr_LoadTexByName(texture);
titleCtx->texture = texture;
+ titleCtx->isBossCard = true;
+ titleCtx->hasTranslation = hasTranslation;
titleCtx->x = x;
titleCtx->y = y;
titleCtx->width = width;
@@ -957,7 +959,7 @@ void TitleCard_InitPlaceName(GlobalContext* globalCtx, TitleCardContext* titleCt
default:
titleCtx->texture = NULL;
return;
-
+
}
char newName[512];
@@ -981,6 +983,8 @@ void TitleCard_InitPlaceName(GlobalContext* globalCtx, TitleCardContext* titleCt
titleCtx->texture = ResourceMgr_LoadTexByName(texture);
//titleCtx->texture = texture;
+ titleCtx->isBossCard = false;
+ titleCtx->hasTranslation = false;
titleCtx->x = x;
titleCtx->y = y;
titleCtx->width = width;
@@ -1009,6 +1013,9 @@ void TitleCard_Draw(GlobalContext* globalCtx, TitleCardContext* titleCtx) {
s32 doubleWidth;
s32 titleY;
s32 titleSecondY;
+ s32 textureLanguageOffset;
+ s32 shiftTopY;
+ s32 shiftBottomY;
if (titleCtx->alpha != 0) {
width = titleCtx->width;
@@ -1022,31 +1029,47 @@ void TitleCard_Draw(GlobalContext* globalCtx, TitleCardContext* titleCtx) {
height = (width * height > 0x1000) ? 0x1000 / width : height;
titleSecondY = titleY + (height * 4);
+ textureLanguageOffset = 0x0;
+ shiftTopY = 0x0;
+ shiftBottomY = 0x1000;
+
+ //if this card is bosses cards, has translation and that is not using English language.
+ if (titleCtx->isBossCard && titleCtx->hasTranslation && gSaveContext.language != LANGUAGE_ENG) {
+ textureLanguageOffset = (width * height * gSaveContext.language);
+ if (gSaveContext.language == LANGUAGE_GER) {
+ shiftTopY = 0x400;
+ shiftBottomY = 0x1400;
+ } else if (gSaveContext.language == LANGUAGE_FRA) {
+ shiftTopY = 0x800;
+ shiftBottomY = 0x1800;
+ }
+ }
+
// WORLD_OVERLAY_DISP Goes over POLY_XLU_DISP but under POLY_KAL_DISP
WORLD_OVERLAY_DISP = func_80093808(WORLD_OVERLAY_DISP);
gDPSetPrimColor(WORLD_OVERLAY_DISP++, 0, 0, (u8)titleCtx->intensity, (u8)titleCtx->intensity, (u8)titleCtx->intensity,
(u8)titleCtx->alpha);
- gDPLoadTextureBlock(WORLD_OVERLAY_DISP++, (uintptr_t)titleCtx->texture, G_IM_FMT_IA,
+ gDPLoadTextureBlock(WORLD_OVERLAY_DISP++, (uintptr_t)titleCtx->texture + textureLanguageOffset + shiftTopY, G_IM_FMT_IA,
G_IM_SIZ_8b,
width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
-
- gSPTextureRectangle(WORLD_OVERLAY_DISP++, titleX, titleY, ((doubleWidth * 2) + titleX) - 4, titleY + (height * 4) - 1,
+ //Removing the -1 there remove the gap between top and bottom textures.
+ gSPTextureRectangle(WORLD_OVERLAY_DISP++, titleX, titleY, ((doubleWidth * 2) + titleX) - 4, titleY + (height * 4),
G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
height = titleCtx->height - height;
// If texture is bigger than 0x1000, display the rest
if (height > 0) {
- gDPLoadTextureBlock(WORLD_OVERLAY_DISP++, (uintptr_t)titleCtx->texture + 0x1000,
+ gDPLoadTextureBlock(WORLD_OVERLAY_DISP++, (uintptr_t)titleCtx->texture + textureLanguageOffset + shiftBottomY,
G_IM_FMT_IA,
G_IM_SIZ_8b, width, height, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
-
+ //Removing the -1 there remove the gap between top and bottom textures.
gSPTextureRectangle(WORLD_OVERLAY_DISP++, titleX, titleSecondY, ((doubleWidth * 2) + titleX) - 4,
- titleSecondY + (height * 4) - 1, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ titleSecondY + (height * 4), G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_actor.c", 2880);
@@ -1122,7 +1145,7 @@ void Actor_Init(Actor* actor, GlobalContext* globalCtx) {
CollisionCheck_InitInfo(&actor->colChkInfo);
actor->floorBgId = BGCHECK_SCENE;
ActorShape_Init(&actor->shape, 0.0f, NULL, 0.0f);
- //if (Object_IsLoaded(&globalCtx->objectCtx, actor->objBankIndex))
+ //if (Object_IsLoaded(&globalCtx->objectCtx, actor->objBankIndex))
{
//Actor_SetObjectDependency(globalCtx, actor);
actor->init(actor, globalCtx);
@@ -2358,7 +2381,7 @@ void Actor_UpdateAll(GlobalContext* globalCtx, ActorContext* actorCtx) {
actor->sfx = 0;
if (actor->init != NULL) {
- if (Object_IsLoaded(&globalCtx->objectCtx, actor->objBankIndex))
+ if (Object_IsLoaded(&globalCtx->objectCtx, actor->objBankIndex))
{
Actor_SetObjectDependency(globalCtx, actor);
actor->init(actor, globalCtx);
@@ -2547,10 +2570,16 @@ void func_80030FA8(GraphicsContext* gfxCtx) {
gDPLoadTextureBlock(POLY_XLU_DISP++, gLensOfTruthMaskTex, G_IM_FMT_I, G_IM_SIZ_8b, 64, 64, 0,
G_TX_MIRROR | G_TX_CLAMP, G_TX_MIRROR | G_TX_CLAMP, 6, 6, G_TX_NOLOD, G_TX_NOLOD);
+ s32 x = OTRGetRectDimensionFromLeftEdge(0) << 2;
+ s32 w = OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH) << 2;
+
+ float ratio = OTRGetAspectRatio();
+
gDPSetTileSize(POLY_XLU_DISP++, G_TX_RENDERTILE, 384, 224, 892, 732);
- gSPTextureRectangle(POLY_XLU_DISP++, 0, 0, 1280, 960, G_TX_RENDERTILE, 2240, 1600, 576, 597);
+ // TODO: Do correct math to fix it
+ gSPWideTextureRectangle(POLY_XLU_DISP++, x, 0, x + abs(x), 960, G_TX_RENDERTILE, 0, 0, 0, 0);
+ gSPWideTextureRectangle(POLY_XLU_DISP++, 0, 0, w, 960, G_TX_RENDERTILE, 2240, 1600, 576, 597);
gDPPipeSync(POLY_XLU_DISP++);
-
CLOSE_DISPS(gfxCtx, "../z_actor.c", 6183);
}
@@ -2894,7 +2923,7 @@ void Actor_FreeOverlay(ActorOverlay* actorOverlay) {
osSyncPrintf(VT_FGCOL(CYAN));
if (actorOverlay->numLoaded == 0) {
-
+
if (actorOverlay->initInfo->reset != NULL) {
actorOverlay->initInfo->reset();
}
@@ -3020,7 +3049,7 @@ Actor* Actor_Spawn(ActorContext* actorCtx, GlobalContext* globalCtx, s16 actorId
if (objBankIndex < 0 && !gMapLoading)
objBankIndex = 0;
-
+
if ((objBankIndex < 0) ||
((actorInit->category == ACTORCAT_ENEMY) && Flags_GetClear(globalCtx, globalCtx->roomCtx.curRoom.num))) {
// "No data bank!! <data bank=%d> (profilep->bank=%d)"
diff --git a/soh/src/code/z_fbdemo_circle.c b/soh/src/code/z_fbdemo_circle.c
index b19948737..a6a46a0e4 100644
--- a/soh/src/code/z_fbdemo_circle.c
+++ b/soh/src/code/z_fbdemo_circle.c
@@ -145,8 +145,6 @@ void TransitionCircle_Draw(void* thisx, Gfx** gfxP) {
modelView = this->modelView[this->frame];
- this->color.rgba = 0xFFFFFFFF;
-
this->frame ^= 1;
gDPPipeSync(gfx++);
texScroll = Gfx_BranchTexScroll(&gfx, this->texX, this->texY, 0x10, 0x40);
diff --git a/soh/src/code/z_kankyo.c b/soh/src/code/z_kankyo.c
index f3ac083ab..9f7518374 100644
--- a/soh/src/code/z_kankyo.c
+++ b/soh/src/code/z_kankyo.c
@@ -743,7 +743,7 @@ void Environment_UpdateSkybox(GlobalContext* globalCtx, u8 skyboxId, Environment
if (envCtx->skyboxDmaState == SKYBOX_DMA_FILE2_DONE) {
envCtx->skyboxDmaState = SKYBOX_DMA_PAL2_START;
- if ((newSkybox2Index & 1) ^ ((newSkybox2Index & 4) >> 2))
+ if ((newSkybox2Index & 1) ^ ((newSkybox2Index & 4) >> 2))
{
SkyboxTableEntry entryA = sSkyboxTable[newSkybox2Index];
LoadSkyboxPalette(skyboxCtx, 0, entryA.palettes[0], 16, 8);
@@ -753,7 +753,7 @@ void Environment_UpdateSkybox(GlobalContext* globalCtx, u8 skyboxId, Environment
DmaMgr_SendRequest2(&envCtx->dmaRequest, (uintptr_t)skyboxCtx->palettes,
gSkyboxFiles[newSkybox2Index].palette.vromStart, size, 0, &envCtx->loadQueue, NULL,
"../z_kankyo.c", 1342);*/
- } else
+ } else
{
SkyboxTableEntry entryA = sSkyboxTable[newSkybox2Index];
LoadSkyboxPalette(skyboxCtx, 1, entryA.palettes[0], 16, 8);
@@ -769,12 +769,12 @@ void Environment_UpdateSkybox(GlobalContext* globalCtx, u8 skyboxId, Environment
}
if ((envCtx->skyboxDmaState == SKYBOX_DMA_FILE1_START) || (envCtx->skyboxDmaState == SKYBOX_DMA_FILE2_START)) {
- //if (osRecvMesg(&envCtx->loadQueue, 0, OS_MESG_NOBLOCK) == 0)
+ //if (osRecvMesg(&envCtx->loadQueue, 0, OS_MESG_NOBLOCK) == 0)
{
envCtx->skyboxDmaState++;
}
} else if (envCtx->skyboxDmaState >= SKYBOX_DMA_FILE1_DONE) {
- //if (osRecvMesg(&envCtx->loadQueue, 0, OS_MESG_NOBLOCK) == 0)
+ //if (osRecvMesg(&envCtx->loadQueue, 0, OS_MESG_NOBLOCK) == 0)
{
envCtx->skyboxDmaState = SKYBOX_DMA_INACTIVE;
}
@@ -2275,6 +2275,29 @@ Color_RGB8 sSandstormEnvColors[] = {
{ 50, 40, 0 },
};
+Gfx* gFieldSandstormDL_Custom = NULL;
+
+void Environment_PatchSandstorm(GlobalContext* globalCtx) {
+ if (gFieldSandstormDL_Custom) return;
+
+ gFieldSandstormDL_Custom = ResourceMgr_PatchGfxByName(gFieldSandstormDL, -3);
+
+ const Gfx gFSPatchDL[2] = { gsSPEndDisplayList() };
+ bool patched = false;
+ Gfx* cmd = gFieldSandstormDL_Custom;
+ int id = 0;
+
+ while (!patched) {
+ const uint32_t opcode = cmd->words.w0 >> 24;
+ if (opcode == G_TEXRECT) {
+ gFieldSandstormDL_Custom[id] = gFSPatchDL[0];
+ patched = true;
+ }
+ ++cmd;
+ id++;
+ }
+}
+
void Environment_DrawSandstorm(GlobalContext* globalCtx, u8 sandstormState) {
s32 primA1;
s32 envA1;
@@ -2288,6 +2311,8 @@ void Environment_DrawSandstorm(GlobalContext* globalCtx, u8 sandstormState) {
u16 sp94;
u16 sp92;
+ Environment_PatchSandstorm(globalCtx);
+
switch (sandstormState) {
case 3:
if ((globalCtx->sceneNum == SCENE_SPOT13) && (globalCtx->roomCtx.curRoom.num == 0)) {
@@ -2394,8 +2419,11 @@ void Environment_DrawSandstorm(GlobalContext* globalCtx, u8 sandstormState) {
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, (u32)sp96 % 0x1000, 0, 0x200, 0x20, 1, (u32)sp94 % 0x1000,
0xFFF - ((u32)sp92 % 0x1000), 0x100, 0x40));
gDPSetTextureLUT(POLY_XLU_DISP++, G_TT_NONE);
- gSPDisplayList(POLY_XLU_DISP++, gFieldSandstormDL);
+ gSPDisplayList(POLY_XLU_DISP++, gFieldSandstormDL_Custom);
+ gSPWideTextureRectangle(POLY_XLU_DISP++, OTRGetRectDimensionFromLeftEdge(0) << 2, 0,
+ OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH) << 2, 0x03C0, G_TX_RENDERTILE, 0, 0, 0x008C,
+ -0x008C);
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_kankyo.c", 4068);
D_8015FDB0 += (s32)sp98;
diff --git a/soh/src/code/z_map_exp.c b/soh/src/code/z_map_exp.c
index cfef800c9..e97a1a1a5 100644
--- a/soh/src/code/z_map_exp.c
+++ b/soh/src/code/z_map_exp.c
@@ -737,21 +737,33 @@ void Minimap_Draw(GlobalContext* globalCtx) {
if (((globalCtx->sceneNum != SCENE_SPOT01) && (globalCtx->sceneNum != SCENE_SPOT04) &&
(globalCtx->sceneNum != SCENE_SPOT08)) ||
(LINK_AGE_IN_YEARS != YEARS_ADULT)) {
+ s16 IconSize = 8;
+ s16 PosX = gMapData->owEntranceIconPosX[sEntranceIconMapIndex];
+ s16 PosY = gMapData->owEntranceIconPosY[sEntranceIconMapIndex];
+ //gFixDungeonMinimapIcon fix both Y position of visible icon and hide these non needed.
+ if (CVar_GetS32("gFixDungeonMinimapIcon", 1) != 0){
+ //No idea why and how Original value work but this does actually fix them all.
+ PosY = PosY+1024;
+ }
+ s16 TopLeftX = OTRGetRectDimensionFromRightEdge(PosX) << 2;
+ s16 TopLeftY = PosY << 2;
+ s16 TopLeftW = OTRGetRectDimensionFromRightEdge(PosX + IconSize) << 2;
+ s16 TopLeftH = (PosY + IconSize) << 2;
if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
(gSaveContext.infTable[26] & gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
-
+ if (gMapData->owEntranceIconPosY[sEntranceIconMapIndex] << 2 != 0 && CVar_GetS32("gFixDungeonMinimapIcon", 1) != 0){
+ gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b,
+ IconSize, IconSize, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
+ G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
+ gSPWideTextureRectangle(OVERLAY_DISP++, TopLeftX, TopLeftY, TopLeftW, TopLeftH, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ }
+ } else if (CVar_GetS32("gAlwaysShowDungeonMinimapIcon", 0) != 0){ //Ability to show entrance Before beating the dungeon itself
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b,
- 8, 8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
+ IconSize, IconSize, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP,
G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
-
- gSPWideTextureRectangle(OVERLAY_DISP++,
- OTRGetRectDimensionFromLeftEdge(gMapData->owEntranceIconPosX[sEntranceIconMapIndex]) << 2,
- gMapData->owEntranceIconPosY[sEntranceIconMapIndex] << 2,
- OTRGetRectDimensionFromLeftEdge(gMapData->owEntranceIconPosX[sEntranceIconMapIndex] + 8) << 2,
- (gMapData->owEntranceIconPosY[sEntranceIconMapIndex] + 8) << 2,
- G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
- }
+ gSPWideTextureRectangle(OVERLAY_DISP++, TopLeftX, TopLeftY, TopLeftW, TopLeftH, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
+ }
}
if ((globalCtx->sceneNum == SCENE_SPOT08) && (gSaveContext.infTable[26] & gBitFlags[9])) {
diff --git a/soh/src/code/z_room.c b/soh/src/code/z_room.c
index 93aab731f..5212799a6 100644
--- a/soh/src/code/z_room.c
+++ b/soh/src/code/z_room.c
@@ -126,7 +126,7 @@ void func_80095D04(GlobalContext* globalCtx, Room* room, u32 flags) {
sp90.y = polygonDlist->pos.y;
sp90.z = polygonDlist->pos.z;
SkinMatrix_Vec3fMtxFMultXYZW(&globalCtx->viewProjectionMtxF, &sp90, &sp84, &sp80);
- if (-(f32)polygonDlist->unk_06 < sp84.z)
+ if (-(f32)polygonDlist->unk_06 < sp84.z)
{
temp_f2 = sp84.z - polygonDlist->unk_06;
if (temp_f2 < globalCtx->lightCtx.fogFar) {
@@ -171,7 +171,7 @@ void func_80095D04(GlobalContext* globalCtx, Room* room, u32 flags) {
Gfx* temp2;
polygonDlist = spB4->unk_00;
- if (iREG(86) != 0)
+ if (iREG(86) != 0)
{
temp = sp78;
for (phi_v1 = 0; phi_v1 < polygon2->num; phi_v1++, temp++) {
@@ -180,7 +180,7 @@ void func_80095D04(GlobalContext* globalCtx, Room* room, u32 flags) {
}
}
- if (((iREG(86) == 1) && (iREG(89) >= sp9C)) || ((iREG(86) == 2) && (iREG(89) == sp9C)))
+ if (((iREG(86) == 1) && (iREG(89) >= sp9C)) || ((iREG(86) == 2) && (iREG(89) == sp9C)))
{
if (flags & 1) {
temp2 = polygonDlist->opa;
@@ -224,7 +224,7 @@ void func_80095D04(GlobalContext* globalCtx, Room* room, u32 flags) {
s32 func_80096238(void* data) {
OSTime time;
- if (*(u32*)data == JPEG_MARKER)
+ if (*(u32*)data == JPEG_MARKER)
{
char* decodedJpeg = ResourceMgr_LoadJPEG(data, 320 * 240 * 2);
//char* decodedJpeg = ResourceMgr_LoadJPEG(data, 480 * 240 * 2);
@@ -235,8 +235,8 @@ s32 func_80096238(void* data) {
osSyncPrintf("ワークバッファアドレス(Zバッファ)%08x\n", gZBuffer);
time = osGetTime();
-
- //if (!Jpeg_Decode(data, gZBuffer, gGfxSPTaskOutputBuffer, sizeof(gGfxSPTaskOutputBuffer)))
+
+ //if (!Jpeg_Decode(data, gZBuffer, gGfxSPTaskOutputBuffer, sizeof(gGfxSPTaskOutputBuffer)))
if (1)
{
memcpy(data, decodedJpeg, 320 * 240 * 2);
@@ -294,14 +294,17 @@ void func_8009638C(Gfx** displayList, void* source, void* tlut, u16 width, u16 h
bg->b.frameW = width * 4;
bg->b.frameH = height * 4;
guS2DInitBg(bg);
-
- gDPSetOtherMode(displayListHead++, mode0 | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE,
+
+ gDPSetOtherMode(displayListHead++, mode0 | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_FILL | G_PM_NPRIMITIVE,
G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2);
gDPSetFillColor(displayListHead++, GPACK_RGBA5551(0, 0, 0, 1) << 16 | GPACK_RGBA5551(0, 0, 0, 1));
gDPFillWideRectangle(displayListHead++, OTRGetRectDimensionFromLeftEdge(0), 0,
OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH), SCREEN_HEIGHT);
+ gDPSetOtherMode(displayListHead++, mode0 | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE,
+ G_AC_THRESHOLD | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2);
+
gDPLoadMultiTile(displayListHead++, bg->b.imagePtr, 0,
G_TX_RENDERTILE, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, 0, 0, 0, 0 + 31,
0 + 31, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD,