1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-02-27 03:24:45 +00:00

Doc shrink_window, rename system to Letterbox (#1341)

* docs

* missed some hex

* document Gfx_SetupFrame

* review
This commit is contained in:
fig02 2022-08-15 09:39:06 -04:00 committed by GitHub
parent dda78f9e2c
commit fec5cd84af
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 134 additions and 107 deletions

View file

@ -1159,7 +1159,7 @@ Gfx* Gfx_TwoTexScroll(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 wi
Gfx* Gfx_TwoTexScrollEnvColor(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2, Gfx* Gfx_TwoTexScrollEnvColor(GraphicsContext* gfxCtx, s32 tile1, u32 x1, u32 y1, s32 width1, s32 height1, s32 tile2,
u32 x2, u32 y2, s32 width2, s32 height2, s32 r, s32 g, s32 b, s32 a); u32 x2, u32 y2, s32 width2, s32 height2, s32 r, s32 g, s32 b, s32 a);
Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a); Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a);
void func_80095248(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b); void Gfx_SetupFrame(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b);
void func_80095974(GraphicsContext* gfxCtx); void func_80095974(GraphicsContext* gfxCtx);
void func_80095AA0(PlayState* play, Room* room, Input* arg2, UNK_TYPE arg3); void func_80095AA0(PlayState* play, Room* room, Input* arg2, UNK_TYPE arg3);
void func_8009638C(Gfx** displayList, void* source, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 mode0, void func_8009638C(Gfx** displayList, void* source, void* tlut, u16 width, u16 height, u8 fmt, u8 siz, u16 mode0,
@ -1415,13 +1415,13 @@ void TransitionFade_Draw(void* thisx, Gfx** gfxP);
s32 TransitionFade_IsDone(void* thisx); s32 TransitionFade_IsDone(void* thisx);
void TransitionFade_SetColor(void* thisx, u32 color); void TransitionFade_SetColor(void* thisx, u32 color);
void TransitionFade_SetType(void* thisx, s32 type); void TransitionFade_SetType(void* thisx, s32 type);
void ShrinkWindow_SetVal(s32 value); void Letterbox_SetSizeTarget(s32 target);
u32 ShrinkWindow_GetVal(void); u32 Letterbox_GetSizeTarget(void);
void ShrinkWindow_SetCurrentVal(s32 currentVal); void Letterbox_SetSize(s32 size);
u32 ShrinkWindow_GetCurrentVal(void); u32 Letterbox_GetSize(void);
void ShrinkWindow_Init(void); void Letterbox_Init(void);
void ShrinkWindow_Destroy(void); void Letterbox_Destroy(void);
void ShrinkWindow_Update(s32 updateRate); void Letterbox_Update(s32 updateRate);
// ? DbCamera_AddVecSph(?); // ? DbCamera_AddVecSph(?);
// ? DbCamera_CalcUpFromPitchYawRoll(?); // ? DbCamera_CalcUpFromPitchYawRoll(?);
// ? DbCamera_SetTextValue(?); // ? DbCamera_SetTextValue(?);

View file

@ -2135,14 +2135,14 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
} else if (CHECK_BTN_ALL(sPlay->state.input[2].press.button, BTN_CLEFT)) { } else if (CHECK_BTN_ALL(sPlay->state.input[2].press.button, BTN_CLEFT)) {
sDbCamAnim.unk_0A = 0; sDbCamAnim.unk_0A = 0;
Interface_ChangeAlpha(2); Interface_ChangeAlpha(2);
ShrinkWindow_SetVal(0); Letterbox_SetSizeTarget(0);
D_8016110C = 0; D_8016110C = 0;
return 2; return 2;
} }
if (func_800B91B0(cam, dbCamera) == 0) { if (func_800B91B0(cam, dbCamera) == 0) {
Interface_ChangeAlpha(2); Interface_ChangeAlpha(2);
ShrinkWindow_SetVal(0); Letterbox_SetSizeTarget(0);
Audio_PlaySfxGeneral(NA_SE_SY_GET_RUPY, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_GET_RUPY, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
} }
@ -2301,7 +2301,7 @@ s32 DbCamera_UpdateDemoControl(DbCamera* dbCamera, Camera* cam) {
sDbCamAnim.unk_0A = 1; sDbCamAnim.unk_0A = 1;
sDbCamAnim.unk_0C = 0; sDbCamAnim.unk_0C = 0;
Interface_ChangeAlpha(50); Interface_ChangeAlpha(50);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
D_8016110C = 0; D_8016110C = 0;
Audio_PlaySfxGeneral(NA_SE_SY_HP_RECOVER, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_HP_RECOVER, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);

View file

@ -1,79 +1,89 @@
#include "global.h" #include "global.h"
s32 D_8012CED0 = 0; typedef enum {
/* 0 */ LETTERBOX_STATE_IDLE,
/* 1 */ LETTERBOX_STATE_GROWING,
/* 2 */ LETTERBOX_STATE_SHRINKING
} LetterboxState;
s32 sShrinkWindowVal = 0; s32 sLetterboxState = LETTERBOX_STATE_IDLE;
s32 sShrinkWindowCurrentVal = 0;
void ShrinkWindow_SetVal(s32 value) { s32 sLetterboxSizeTarget = 0;
s32 sLetterboxSize = 0;
void Letterbox_SetSizeTarget(s32 target) {
if (HREG(80) == 0x13 && HREG(81) == 1) { if (HREG(80) == 0x13 && HREG(81) == 1) {
osSyncPrintf("shrink_window_setval(%d)\n", value); osSyncPrintf("shrink_window_setval(%d)\n", target);
} }
sShrinkWindowVal = value;
sLetterboxSizeTarget = target;
} }
u32 ShrinkWindow_GetVal(void) { u32 Letterbox_GetSizeTarget(void) {
return sShrinkWindowVal; return sLetterboxSizeTarget;
} }
void ShrinkWindow_SetCurrentVal(s32 currentVal) { void Letterbox_SetSize(s32 size) {
if (HREG(80) == 0x13 && HREG(81) == 1) { if (HREG(80) == 0x13 && HREG(81) == 1) {
osSyncPrintf("shrink_window_setnowval(%d)\n", currentVal); osSyncPrintf("shrink_window_setnowval(%d)\n", size);
} }
sShrinkWindowCurrentVal = currentVal;
sLetterboxSize = size;
} }
u32 ShrinkWindow_GetCurrentVal(void) { u32 Letterbox_GetSize(void) {
return sShrinkWindowCurrentVal; return sLetterboxSize;
} }
void ShrinkWindow_Init(void) { void Letterbox_Init(void) {
if (HREG(80) == 0x13 && HREG(81) == 1) { if (HREG(80) == 0x13 && HREG(81) == 1) {
osSyncPrintf("shrink_window_init()\n"); osSyncPrintf("shrink_window_init()\n");
} }
D_8012CED0 = 0;
sShrinkWindowVal = 0; sLetterboxState = LETTERBOX_STATE_IDLE;
sShrinkWindowCurrentVal = 0; sLetterboxSizeTarget = 0;
sLetterboxSize = 0;
} }
void ShrinkWindow_Destroy(void) { void Letterbox_Destroy(void) {
if (HREG(80) == 0x13 && HREG(81) == 1) { if (HREG(80) == 0x13 && HREG(81) == 1) {
osSyncPrintf("shrink_window_cleanup()\n"); osSyncPrintf("shrink_window_cleanup()\n");
} }
sShrinkWindowCurrentVal = 0;
sLetterboxSize = 0;
} }
void ShrinkWindow_Update(s32 updateRate) { void Letterbox_Update(s32 updateRate) {
s32 off; s32 step;
if (updateRate == 3) { if (updateRate == 3) {
off = 10; step = 10;
} else { } else {
off = 30 / updateRate; step = 30 / updateRate;
} }
if (sShrinkWindowCurrentVal < sShrinkWindowVal) { if (sLetterboxSize < sLetterboxSizeTarget) {
if (D_8012CED0 != 1) { if (sLetterboxState != LETTERBOX_STATE_GROWING) {
D_8012CED0 = 1; sLetterboxState = LETTERBOX_STATE_GROWING;
} }
if (sShrinkWindowCurrentVal + off < sShrinkWindowVal) { if (sLetterboxSize + step < sLetterboxSizeTarget) {
sShrinkWindowCurrentVal += off; sLetterboxSize += step;
} else { } else {
sShrinkWindowCurrentVal = sShrinkWindowVal; sLetterboxSize = sLetterboxSizeTarget;
} }
} else if (sShrinkWindowVal < sShrinkWindowCurrentVal) { } else if (sLetterboxSizeTarget < sLetterboxSize) {
if (D_8012CED0 != 2) { if (sLetterboxState != LETTERBOX_STATE_SHRINKING) {
D_8012CED0 = 2; sLetterboxState = LETTERBOX_STATE_SHRINKING;
} }
if (sShrinkWindowVal < sShrinkWindowCurrentVal - off) { if (sLetterboxSizeTarget < sLetterboxSize - step) {
sShrinkWindowCurrentVal -= off; sLetterboxSize -= step;
} else { } else {
sShrinkWindowCurrentVal = sShrinkWindowVal; sLetterboxSize = sLetterboxSizeTarget;
} }
} else { } else {
D_8012CED0 = 0; sLetterboxState = LETTERBOX_STATE_IDLE;
} }
if (HREG(80) == 0x13) { if (HREG(80) == 0x13) {
@ -89,9 +99,10 @@ void ShrinkWindow_Update(s32 updateRate) {
HREG(88) = 0; HREG(88) = 0;
HREG(89) = 0; HREG(89) = 0;
} }
HREG(83) = D_8012CED0;
HREG(84) = sShrinkWindowCurrentVal; HREG(83) = sLetterboxState;
HREG(85) = sShrinkWindowVal; HREG(84) = sLetterboxSize;
HREG(86) = off; HREG(85) = sLetterboxSizeTarget;
HREG(86) = step;
} }
} }

View file

@ -749,34 +749,34 @@ s32 Camera_CopyPREGToModeValues(Camera* camera) {
return true; return true;
} }
#define SHRINKWIN_MASK (0xF000) #define LETTERBOX_MASK (0xF000)
#define SHRINKWINVAL_MASK (0x7000) #define LETTERBOX_SIZE_MASK (0x7000)
#define SHRINKWIN_CURVAL (0x8000) #define LETTERBOX_INSTANT (0x8000)
#define IFACE_ALPHA_MASK (0x0F00) #define IFACE_ALPHA_MASK (0x0F00)
void Camera_UpdateInterface(s16 flags) { void Camera_UpdateInterface(s16 flags) {
s16 interfaceAlpha; s16 interfaceAlpha;
if ((flags & SHRINKWIN_MASK) != SHRINKWIN_MASK) { if ((flags & LETTERBOX_MASK) != LETTERBOX_MASK) {
switch (flags & SHRINKWINVAL_MASK) { switch (flags & LETTERBOX_SIZE_MASK) {
case 0x1000: case 0x1000:
sCameraShrinkWindowVal = 0x1A; sCameraLetterboxSize = 26;
break; break;
case 0x2000: case 0x2000:
sCameraShrinkWindowVal = 0x1B; sCameraLetterboxSize = 27;
break; break;
case 0x3000: case 0x3000:
sCameraShrinkWindowVal = 0x20; sCameraLetterboxSize = 32;
break; break;
default: default:
sCameraShrinkWindowVal = 0; sCameraLetterboxSize = 0;
break; break;
} }
if (flags & SHRINKWIN_CURVAL) { if (flags & LETTERBOX_INSTANT) {
ShrinkWindow_SetCurrentVal(sCameraShrinkWindowVal); Letterbox_SetSize(sCameraLetterboxSize);
} else { } else {
ShrinkWindow_SetVal(sCameraShrinkWindowVal); Letterbox_SetSizeTarget(sCameraLetterboxSize);
} }
} }
@ -6941,7 +6941,7 @@ void Camera_Init(Camera* camera, View* view, CollisionContext* colCtx, PlayState
camera->xzOffsetUpdateRate = CAM_DATA_SCALED(OREG(2)); camera->xzOffsetUpdateRate = CAM_DATA_SCALED(OREG(2));
camera->yOffsetUpdateRate = CAM_DATA_SCALED(OREG(3)); camera->yOffsetUpdateRate = CAM_DATA_SCALED(OREG(3));
camera->fovUpdateRate = CAM_DATA_SCALED(OREG(4)); camera->fovUpdateRate = CAM_DATA_SCALED(OREG(4));
sCameraShrinkWindowVal = 0x20; sCameraLetterboxSize = 32;
sCameraInterfaceAlpha = 0; sCameraInterfaceAlpha = 0;
camera->unk_14C = 0; camera->unk_14C = 0;
camera->setting = camera->prevSetting = CAM_SET_FREE0; camera->setting = camera->prevSetting = CAM_SET_FREE0;

View file

@ -2227,7 +2227,7 @@ s16 sNextUID = 0;
s32 sCameraInterfaceFlags = 1; s32 sCameraInterfaceFlags = 1;
s32 sCameraInterfaceAlpha = 0x02; s32 sCameraInterfaceAlpha = 0x02;
s32 sCameraShrinkWindowVal = 0x20; s32 sCameraLetterboxSize = 32;
s32 D_8011D3AC = -1; s32 D_8011D3AC = -1;
s16 D_8011D3B0[] = { s16 D_8011D3B0[] = {

View file

@ -188,7 +188,7 @@ u32 func_8006472C(PlayState* play, CutsceneContext* csCtx, f32 target) {
void func_80064760(PlayState* play, CutsceneContext* csCtx) { void func_80064760(PlayState* play, CutsceneContext* csCtx) {
Interface_ChangeAlpha(1); Interface_ChangeAlpha(1);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
if (func_8006472C(play, csCtx, 1.0f)) { if (func_8006472C(play, csCtx, 1.0f)) {
Audio_SetCutsceneFlag(1); Audio_SetCutsceneFlag(1);
@ -199,7 +199,7 @@ void func_80064760(PlayState* play, CutsceneContext* csCtx) {
void func_800647C0(PlayState* play, CutsceneContext* csCtx) { void func_800647C0(PlayState* play, CutsceneContext* csCtx) {
func_80068C3C(play, csCtx); func_80068C3C(play, csCtx);
Interface_ChangeAlpha(1); Interface_ChangeAlpha(1);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
if (func_8006472C(play, csCtx, 1.0f)) { if (func_8006472C(play, csCtx, 1.0f)) {
Audio_SetCutsceneFlag(1); Audio_SetCutsceneFlag(1);
@ -2018,8 +2018,8 @@ void func_80068ECC(PlayState* play, CutsceneContext* csCtx) {
if (gSaveContext.cutsceneTrigger == 0) { if (gSaveContext.cutsceneTrigger == 0) {
Interface_ChangeAlpha(1); Interface_ChangeAlpha(1);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
ShrinkWindow_SetCurrentVal(0x20); Letterbox_SetSize(32);
csCtx->state++; csCtx->state++;
} }

View file

@ -102,7 +102,7 @@ void GameOver_Update(PlayState* play) {
gameOverCtx->state++; gameOverCtx->state++;
gGameOverTimer = 0; gGameOverTimer = 0;
Environment_InitGameOverLights(play); Environment_InitGameOverLights(play);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
return; return;
case GAMEOVER_REVIVE_RUMBLE: case GAMEOVER_REVIVE_RUMBLE:

View file

@ -58,7 +58,7 @@ void KaleidoScopeCall_Update(PlayState* play) {
if ((pauseCtx->state != 0) || (pauseCtx->debugState != 0)) { if ((pauseCtx->state != 0) || (pauseCtx->debugState != 0)) {
if (pauseCtx->state == 1) { if (pauseCtx->state == 1) {
if (ShrinkWindow_GetCurrentVal() == 0) { if (Letterbox_GetSize() == 0) {
HREG(80) = 7; HREG(80) = 7;
HREG(82) = 3; HREG(82) = 3;
R_PAUSE_MENU_MODE = 1; R_PAUSE_MENU_MODE = 1;

View file

@ -53,8 +53,8 @@ void KaleidoSetup_Update(PlayState* play) {
WREG(2) = -6240; WREG(2) = -6240;
R_UPDATE_RATE = 2; R_UPDATE_RATE = 2;
if (ShrinkWindow_GetVal()) { if (Letterbox_GetSizeTarget() != 0) {
ShrinkWindow_SetVal(0); Letterbox_SetSizeTarget(0);
} }
func_800F64E0(1); func_800F64E0(1);

View file

@ -196,7 +196,7 @@ void Play_Destroy(GameState* thisx) {
this->transitionMode = TRANS_MODE_OFF; this->transitionMode = TRANS_MODE_OFF;
} }
ShrinkWindow_Destroy(); Letterbox_Destroy();
TransitionFade_Destroy(&this->transitionFade); TransitionFade_Destroy(&this->transitionFade);
VisMono_Destroy(&D_80161498); VisMono_Destroy(&D_80161498);
@ -383,7 +383,7 @@ void Play_Init(GameState* thisx) {
this->transitionType = TRANS_TYPE_FADE_BLACK_SLOW; this->transitionType = TRANS_TYPE_FADE_BLACK_SLOW;
} }
ShrinkWindow_Init(); Letterbox_Init();
TransitionFade_Init(&this->transitionFade); TransitionFade_Init(&this->transitionFade);
TransitionFade_SetType(&this->transitionFade, 3); TransitionFade_SetType(&this->transitionFade, 3);
TransitionFade_SetColor(&this->transitionFade, RGBA8(160, 160, 160, 255)); TransitionFade_SetColor(&this->transitionFade, RGBA8(160, 160, 160, 255));
@ -962,7 +962,7 @@ void Play_Update(PlayState* this) {
SfxSource_UpdateAll(this); SfxSource_UpdateAll(this);
PLAY_LOG(3777); PLAY_LOG(3777);
ShrinkWindow_Update(R_UPDATE_RATE); Letterbox_Update(R_UPDATE_RATE);
PLAY_LOG(3783); PLAY_LOG(3783);
TransitionFade_Update(&this->transitionFade, R_UPDATE_RATE); TransitionFade_Update(&this->transitionFade, R_UPDATE_RATE);
@ -1044,7 +1044,7 @@ void Play_Draw(PlayState* this) {
gSPSegment(POLY_XLU_DISP++, 0x02, this->sceneSegment); gSPSegment(POLY_XLU_DISP++, 0x02, this->sceneSegment);
gSPSegment(OVERLAY_DISP++, 0x02, this->sceneSegment); gSPSegment(OVERLAY_DISP++, 0x02, this->sceneSegment);
func_80095248(gfxCtx, 0, 0, 0); Gfx_SetupFrame(gfxCtx, 0, 0, 0);
if ((HREG(80) != 10) || (HREG(82) != 0)) { if ((HREG(80) != 10) || (HREG(82) != 0)) {
POLY_OPA_DISP = Play_SetFog(this, POLY_OPA_DISP); POLY_OPA_DISP = Play_SetFog(this, POLY_OPA_DISP);

View file

@ -33,7 +33,7 @@ void PreNMI_Draw(PreNMIState* this) {
OPEN_DISPS(gfxCtx, "../z_prenmi.c", 96); OPEN_DISPS(gfxCtx, "../z_prenmi.c", 96);
gSPSegment(POLY_OPA_DISP++, 0x00, NULL); gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
func_80095248(gfxCtx, 0, 0, 0); Gfx_SetupFrame(gfxCtx, 0, 0, 0);
Gfx_SetupDL_36Opa(gfxCtx); Gfx_SetupDL_36Opa(gfxCtx);
gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(255, 255, 255, 1) << 16) | GPACK_RGBA5551(255, 255, 255, 1)); gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(255, 255, 255, 1) << 16) | GPACK_RGBA5551(255, 255, 255, 1));
gDPFillRectangle(POLY_OPA_DISP++, 0, this->timer + 100, SCREEN_WIDTH - 1, this->timer + 100); gDPFillRectangle(POLY_OPA_DISP++, 0, this->timer + 100, SCREEN_WIDTH - 1, this->timer + 100);

View file

@ -1438,28 +1438,39 @@ Gfx* Gfx_EnvColor(GraphicsContext* gfxCtx, s32 r, s32 g, s32 b, s32 a) {
return displayList; return displayList;
} }
void func_80095248(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b) { /**
* Sets up the frame for drawing.
* Initializes the scissor region to full screen.
* Set up the framebuffer and z-buffer.
* The whole screen is filled with the color supplied as arguments.
* Letterbox is also applied here, and will share the color of the screen base.
*/
void Gfx_SetupFrame(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b) {
OPEN_DISPS(gfxCtx, "../z_rcp.c", 2386); OPEN_DISPS(gfxCtx, "../z_rcp.c", 2386);
// Set up the RDP render state for rectangles in FILL mode
gSPDisplayList(POLY_OPA_DISP++, sFillSetupDL); gSPDisplayList(POLY_OPA_DISP++, sFillSetupDL);
gSPDisplayList(POLY_XLU_DISP++, sFillSetupDL); gSPDisplayList(POLY_XLU_DISP++, sFillSetupDL);
gSPDisplayList(OVERLAY_DISP++, sFillSetupDL); gSPDisplayList(OVERLAY_DISP++, sFillSetupDL);
// Set the scissor region to the full screen
gDPSetScissor(POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); gDPSetScissor(POLY_OPA_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight);
gDPSetScissor(POLY_XLU_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); gDPSetScissor(POLY_XLU_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight);
gDPSetScissor(OVERLAY_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight); gDPSetScissor(OVERLAY_DISP++, G_SC_NON_INTERLACE, 0, 0, gScreenWidth, gScreenHeight);
// Set up the framebuffer, primitives will be drawn here
gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer);
gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer);
gDPSetColorImage(POLY_XLU_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); gDPSetColorImage(POLY_XLU_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer);
gDPSetColorImage(OVERLAY_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); gDPSetColorImage(OVERLAY_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer);
// Set up the z-buffer
gDPSetDepthImage(POLY_OPA_DISP++, gZBuffer); gDPSetDepthImage(POLY_OPA_DISP++, gZBuffer);
gDPSetDepthImage(POLY_XLU_DISP++, gZBuffer); gDPSetDepthImage(POLY_XLU_DISP++, gZBuffer);
gDPSetDepthImage(OVERLAY_DISP++, gZBuffer); gDPSetDepthImage(OVERLAY_DISP++, gZBuffer);
if ((R_PAUSE_MENU_MODE < 2) && (gTrnsnUnkState < 2)) { if ((R_PAUSE_MENU_MODE < 2) && (gTrnsnUnkState < 2)) {
s32 ret = ShrinkWindow_GetCurrentVal(); s32 letterboxSize = Letterbox_GetSize();
if (HREG(80) == 16) { if (HREG(80) == 16) {
if (HREG(95) != 16) { if (HREG(95) != 16) {
@ -1481,7 +1492,7 @@ void func_80095248(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b) {
} }
if (HREG(81) & 1) { if (HREG(81) & 1) {
HREG(83) = ret; HREG(83) = letterboxSize;
} }
if (HREG(81) & 2) { if (HREG(81) & 2) {
@ -1491,7 +1502,7 @@ void func_80095248(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b) {
} }
if (HREG(82) & 1) { if (HREG(82) & 1) {
ret = HREG(83); letterboxSize = HREG(83);
} }
if (HREG(82) & 2) { if (HREG(82) & 2) {
@ -1501,27 +1512,32 @@ void func_80095248(GraphicsContext* gfxCtx, u8 r, u8 g, u8 b) {
} }
} }
// Set the whole z buffer to maximum depth
// Don't bother with pixels that are being covered by the letterbox
gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gZBuffer); gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gZBuffer);
gDPSetCycleType(POLY_OPA_DISP++, G_CYC_FILL); gDPSetCycleType(POLY_OPA_DISP++, G_CYC_FILL);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_NOOP, G_RM_NOOP2); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_NOOP, G_RM_NOOP2);
gDPSetFillColor(POLY_OPA_DISP++, (GPACK_ZDZ(G_MAXFBZ, 0) << 16) | GPACK_ZDZ(G_MAXFBZ, 0)); gDPSetFillColor(POLY_OPA_DISP++, (GPACK_ZDZ(G_MAXFBZ, 0) << 16) | GPACK_ZDZ(G_MAXFBZ, 0));
gDPFillRectangle(POLY_OPA_DISP++, 0, ret, gScreenWidth - 1, gScreenHeight - ret - 1); gDPFillRectangle(POLY_OPA_DISP++, 0, letterboxSize, gScreenWidth - 1, gScreenHeight - letterboxSize - 1);
gDPPipeSync(POLY_OPA_DISP++); gDPPipeSync(POLY_OPA_DISP++);
// Fill the whole screen with the base color
// Don't bother with pixels that are being covered by the letterbox
gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer); gDPSetColorImage(POLY_OPA_DISP++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gScreenWidth, gfxCtx->curFrameBuffer);
gDPSetCycleType(POLY_OPA_DISP++, G_CYC_FILL); gDPSetCycleType(POLY_OPA_DISP++, G_CYC_FILL);
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_NOOP, G_RM_NOOP2); gDPSetRenderMode(POLY_OPA_DISP++, G_RM_NOOP, G_RM_NOOP2);
gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1));
gDPFillRectangle(POLY_OPA_DISP++, 0, ret, gScreenWidth - 1, gScreenHeight - ret - 1); gDPFillRectangle(POLY_OPA_DISP++, 0, letterboxSize, gScreenWidth - 1, gScreenHeight - letterboxSize - 1);
gDPPipeSync(POLY_OPA_DISP++); gDPPipeSync(POLY_OPA_DISP++);
if (ret > 0) { // Draw the letterbox if applicable (uses the same color as the screen base)
if (letterboxSize > 0) {
gDPPipeSync(OVERLAY_DISP++); gDPPipeSync(OVERLAY_DISP++);
gDPSetCycleType(OVERLAY_DISP++, G_CYC_FILL); gDPSetCycleType(OVERLAY_DISP++, G_CYC_FILL);
gDPSetRenderMode(OVERLAY_DISP++, G_RM_NOOP, G_RM_NOOP2); gDPSetRenderMode(OVERLAY_DISP++, G_RM_NOOP, G_RM_NOOP2);
gDPSetFillColor(OVERLAY_DISP++, (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); gDPSetFillColor(OVERLAY_DISP++, (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1));
gDPFillRectangle(OVERLAY_DISP++, 0, 0, gScreenWidth - 1, ret - 1); gDPFillRectangle(OVERLAY_DISP++, 0, 0, gScreenWidth - 1, letterboxSize - 1);
gDPFillRectangle(OVERLAY_DISP++, 0, gScreenHeight - ret, gScreenWidth - 1, gScreenHeight - 1); gDPFillRectangle(OVERLAY_DISP++, 0, gScreenHeight - letterboxSize, gScreenWidth - 1, gScreenHeight - 1);
gDPPipeSync(OVERLAY_DISP++); gDPPipeSync(OVERLAY_DISP++);
} }
} }

View file

@ -16,7 +16,7 @@ void Sample_Draw(SampleState* this) {
gSPSegment(POLY_OPA_DISP++, 0x00, NULL); gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment); gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment);
func_80095248(gfxCtx, 0, 0, 0); Gfx_SetupFrame(gfxCtx, 0, 0, 0);
view->flags = VIEW_VIEWING | VIEW_VIEWPORT | VIEW_PROJECTION_PERSPECTIVE; view->flags = VIEW_VIEWING | VIEW_VIEWPORT | VIEW_PROJECTION_PERSPECTIVE;
View_Apply(view, VIEW_ALL); View_Apply(view, VIEW_ALL);

View file

@ -135,7 +135,7 @@ void View_GetViewport(View* view, Viewport* viewport) {
*viewport = view->viewport; *viewport = view->viewport;
} }
void View_ApplyShrinkWindow(View* view) { void View_ApplyLetterbox(View* view) {
s32 varY; s32 varY;
s32 varX; s32 varX;
s32 pad; s32 pad;
@ -145,7 +145,7 @@ void View_ApplyShrinkWindow(View* view) {
s32 lry; s32 lry;
GraphicsContext* gfxCtx = view->gfxCtx; GraphicsContext* gfxCtx = view->gfxCtx;
varY = ShrinkWindow_GetCurrentVal(); varY = Letterbox_GetSize();
varX = -1; // The following is optimized to varX = 0 but affects codegen varX = -1; // The following is optimized to varX = 0 but affects codegen
@ -296,7 +296,7 @@ s32 View_ApplyPerspective(View* view) {
View_ViewportToVp(vp, &view->viewport); View_ViewportToVp(vp, &view->viewport);
view->vp = *vp; view->vp = *vp;
View_ApplyShrinkWindow(view); View_ApplyLetterbox(view);
gSPViewport(POLY_OPA_DISP++, vp); gSPViewport(POLY_OPA_DISP++, vp);
gSPViewport(POLY_XLU_DISP++, vp); gSPViewport(POLY_XLU_DISP++, vp);
@ -398,7 +398,7 @@ s32 View_ApplyOrtho(View* view) {
View_ViewportToVp(vp, &view->viewport); View_ViewportToVp(vp, &view->viewport);
view->vp = *vp; view->vp = *vp;
View_ApplyShrinkWindow(view); View_ApplyLetterbox(view);
gSPViewport(POLY_OPA_DISP++, vp); gSPViewport(POLY_OPA_DISP++, vp);
gSPViewport(POLY_XLU_DISP++, vp); gSPViewport(POLY_XLU_DISP++, vp);

View file

@ -790,7 +790,7 @@ void BossMo_Tentacle(BossMo* this, PlayState* play) {
tent_shake: tent_shake:
case MO_TENT_SHAKE: case MO_TENT_SHAKE:
if (this->timers[0] == 138) { if (this->timers[0] == 138) {
ShrinkWindow_SetVal(0); Letterbox_SetSizeTarget(0);
Interface_ChangeAlpha(0xB); Interface_ChangeAlpha(0xB);
} }
if ((this->timers[0] % 8) == 0) { if ((this->timers[0] % 8) == 0) {

View file

@ -470,7 +470,7 @@ void func_80A79C78(EnIn* this, PlayState* play) {
} }
player->actor.freezeTimer = 10; player->actor.freezeTimer = 10;
this->actor.flags &= ~ACTOR_FLAG_0; this->actor.flags &= ~ACTOR_FLAG_0;
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
Interface_ChangeAlpha(2); Interface_ChangeAlpha(2);
} }
@ -791,7 +791,7 @@ void func_80A7AA40(EnIn* this, PlayState* play) {
this->unk_308.unk_00 = 1; this->unk_308.unk_00 = 1;
this->unk_1FC = 0; this->unk_1FC = 0;
play->csCtx.frames = 0; play->csCtx.frames = 0;
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
Interface_ChangeAlpha(2); Interface_ChangeAlpha(2);
this->actionFunc = func_80A7ABD4; this->actionFunc = func_80A7ABD4;
} }

View file

@ -180,7 +180,7 @@ void func_80B4B010(EnZl1* this, PlayState* play) {
play->envCtx.fillScreen = true; play->envCtx.fillScreen = true;
Play_CameraSetAtEye(play, this->subCamId, &subCamAt, &subCamEye); Play_CameraSetAtEye(play, this->subCamId, &subCamAt, &subCamEye);
Play_CameraSetFov(play, this->subCamId, 30.0f); Play_CameraSetFov(play, this->subCamId, 30.0f);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
Interface_ChangeAlpha(2); Interface_ChangeAlpha(2);
player->actor.world.pos = playerPos; player->actor.world.pos = playerPos;
player->actor.speedXZ = 0.0f; player->actor.speedXZ = 0.0f;

View file

@ -329,7 +329,7 @@ s32 EnZl4_SetupFromLegendCs(EnZl4* this, PlayState* play) {
player->linearVelocity = playerx->speedXZ = 0.0f; player->linearVelocity = playerx->speedXZ = 0.0f;
EnZl4_SetActiveCamMove(play, 5); EnZl4_SetActiveCamMove(play, 5);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
Interface_ChangeAlpha(2); Interface_ChangeAlpha(2);
this->talkTimer2 = 0; this->talkTimer2 = 0;
return true; return true;
@ -1151,7 +1151,7 @@ void EnZl4_Cutscene(EnZl4* this, PlayState* play) {
Audio_PlayFanfare(NA_BGM_APPEAR); Audio_PlayFanfare(NA_BGM_APPEAR);
EnZl4_SetActiveCamDir(play, 0); EnZl4_SetActiveCamDir(play, 0);
Interface_ChangeAlpha(2); Interface_ChangeAlpha(2);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
this->talkState = 0; this->talkState = 0;
this->csState++; this->csState++;
break; break;

View file

@ -5246,7 +5246,7 @@ void Fishing_UpdateOwner(Actor* thisx, PlayState* play2) {
} }
case 2: case 2:
ShrinkWindow_SetVal(0x1B); Letterbox_SetSizeTarget(27);
spFC.x = sLurePos.x - player->actor.world.pos.x; spFC.x = sLurePos.x - player->actor.world.pos.x;
spFC.z = sLurePos.z - player->actor.world.pos.z; spFC.z = sLurePos.z - player->actor.world.pos.z;

View file

@ -2972,7 +2972,7 @@ void func_80836448(PlayState* play, Player* this, LinkAnimationHeader* anim) {
} }
OnePointCutscene_Init(play, 9806, cond ? 120 : 60, &this->actor, CAM_ID_MAIN); OnePointCutscene_Init(play, 9806, cond ? 120 : 60, &this->actor, CAM_ID_MAIN);
ShrinkWindow_SetVal(0x20); Letterbox_SetSizeTarget(32);
} }
} }

View file

@ -1606,7 +1606,7 @@ void FileSelect_Main(GameState* thisx) {
gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment); gSPSegment(POLY_OPA_DISP++, 0x01, this->staticSegment);
gSPSegment(POLY_OPA_DISP++, 0x02, this->parameterSegment); gSPSegment(POLY_OPA_DISP++, 0x02, this->parameterSegment);
func_80095248(this->state.gfxCtx, 0, 0, 0); Gfx_SetupFrame(this->state.gfxCtx, 0, 0, 0);
this->stickRelX = input->rel.stick_x; this->stickRelX = input->rel.stick_x;
this->stickRelY = input->rel.stick_y; this->stickRelY = input->rel.stick_y;
@ -1825,7 +1825,7 @@ void FileSelect_InitContext(GameState* thisx) {
this->unk_1CAD6[3] = 8; this->unk_1CAD6[3] = 8;
this->unk_1CAD6[4] = 10; this->unk_1CAD6[4] = 10;
ShrinkWindow_SetVal(0); Letterbox_SetSizeTarget(0);
gSaveContext.skyboxTime = CLOCK_TIME(0, 0); gSaveContext.skyboxTime = CLOCK_TIME(0, 0);
gSaveContext.dayTime = CLOCK_TIME(0, 0); gSaveContext.dayTime = CLOCK_TIME(0, 0);

View file

@ -22,7 +22,7 @@ void func_80803C5C(TitleSetupState* this) {
void TitleSetup_Main(GameState* thisx) { void TitleSetup_Main(GameState* thisx) {
TitleSetupState* this = (TitleSetupState*)thisx; TitleSetupState* this = (TitleSetupState*)thisx;
func_80095248(this->state.gfxCtx, 0, 0, 0); Gfx_SetupFrame(this->state.gfxCtx, 0, 0, 0);
TitleSetup_SetupTitleScreen(this); TitleSetup_SetupTitleScreen(this);
func_80803C5C(this); func_80803C5C(this);
} }

View file

@ -650,7 +650,7 @@ void MapSelect_DrawMenu(MapSelectState* this) {
OPEN_DISPS(gfxCtx, "../z_select.c", 930); OPEN_DISPS(gfxCtx, "../z_select.c", 930);
gSPSegment(POLY_OPA_DISP++, 0x00, NULL); gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
func_80095248(gfxCtx, 0, 0, 0); Gfx_SetupFrame(gfxCtx, 0, 0, 0);
SET_FULLSCREEN_VIEWPORT(&this->view); SET_FULLSCREEN_VIEWPORT(&this->view);
View_Apply(&this->view, VIEW_ALL); View_Apply(&this->view, VIEW_ALL);
Gfx_SetupDL_28Opa(gfxCtx); Gfx_SetupDL_28Opa(gfxCtx);
@ -674,7 +674,7 @@ void MapSelect_DrawLoadingScreen(MapSelectState* this) {
OPEN_DISPS(gfxCtx, "../z_select.c", 977); OPEN_DISPS(gfxCtx, "../z_select.c", 977);
gSPSegment(POLY_OPA_DISP++, 0x00, NULL); gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
func_80095248(gfxCtx, 0, 0, 0); Gfx_SetupFrame(gfxCtx, 0, 0, 0);
SET_FULLSCREEN_VIEWPORT(&this->view); SET_FULLSCREEN_VIEWPORT(&this->view);
View_Apply(&this->view, VIEW_ALL); View_Apply(&this->view, VIEW_ALL);
Gfx_SetupDL_28Opa(gfxCtx); Gfx_SetupDL_28Opa(gfxCtx);
@ -695,7 +695,7 @@ void MapSelect_Draw(MapSelectState* this) {
OPEN_DISPS(gfxCtx, "../z_select.c", 1013); OPEN_DISPS(gfxCtx, "../z_select.c", 1013);
gSPSegment(POLY_OPA_DISP++, 0x00, NULL); gSPSegment(POLY_OPA_DISP++, 0x00, NULL);
func_80095248(gfxCtx, 0, 0, 0); Gfx_SetupFrame(gfxCtx, 0, 0, 0);
SET_FULLSCREEN_VIEWPORT(&this->view); SET_FULLSCREEN_VIEWPORT(&this->view);
View_Apply(&this->view, VIEW_ALL); View_Apply(&this->view, VIEW_ALL);

View file

@ -124,7 +124,7 @@ void ConsoleLogo_Main(GameState* thisx) {
gSPSegment(POLY_OPA_DISP++, 0, NULL); gSPSegment(POLY_OPA_DISP++, 0, NULL);
gSPSegment(POLY_OPA_DISP++, 1, this->staticSegment); gSPSegment(POLY_OPA_DISP++, 1, this->staticSegment);
func_80095248(this->state.gfxCtx, 0, 0, 0); Gfx_SetupFrame(this->state.gfxCtx, 0, 0, 0);
ConsoleLogo_Calc(this); ConsoleLogo_Calc(this);
ConsoleLogo_Draw(this); ConsoleLogo_Draw(this);