diff --git a/mm/include/macros.h b/mm/include/macros.h index 9ca7cdab4..2516b320a 100644 --- a/mm/include/macros.h +++ b/mm/include/macros.h @@ -109,6 +109,7 @@ // #region 2S2H [Port] // Compute 0x0E segment value as compile time constant for 32bit and 64bit #define D_0E000000_TO_SEGMENTED(member) ((0x0E000000 + offsetof(GfxMasterList, member)) | 1) +#define D_0F000000_TO_SEGMENTED (0x0F000000 | 1) // #endregion #endif // MACROS_H diff --git a/mm/include/sys_cfb.h b/mm/include/sys_cfb.h index f8f0d4539..3c970926a 100644 --- a/mm/include/sys_cfb.h +++ b/mm/include/sys_cfb.h @@ -20,14 +20,14 @@ extern void* gWorkBuffer; extern u64* gGfxSPTaskOutputBufferPtr; extern void* gGfxSPTaskOutputBufferEnd; -extern u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; -extern u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +extern u16* gZBufferLoRes[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u16* gWorkBufferLoRes[SCREEN_WIDTH * SCREEN_HEIGHT]; +extern u64* gGfxSPTaskOutputBufferLoRes[0x3000]; extern void* gGfxSPTaskOutputBufferEndLoRes; -extern u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; -extern u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; -extern u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +extern u16* gZBufferHiRes[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u16* gWorkBufferHiRes[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +extern u64* gGfxSPTaskOutputBufferHiRes[0x3000]; extern void* gGfxSPTaskOutputBufferEndHiRes; extern s16 gCfbWidth; extern s16 gCfbHeight; diff --git a/mm/src/code/graph.c b/mm/src/code/graph.c index ac81cb1d6..76a09e29c 100644 --- a/mm/src/code/graph.c +++ b/mm/src/code/graph.c @@ -357,6 +357,9 @@ void Graph_Update(GraphicsContext* gfxCtx, GameState* gameState) { CHECK_BTN_ALL(gameState->input[0].cur.button, BTN_L | BTN_R)) { STOP_GAMESTATE(gameState); gSaveContext.gameMode = GAMEMODE_NORMAL; + gSaveContext.nextDayTime = NEXT_TIME_NONE; + gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; + gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; SET_NEXT_GAMESTATE(gameState, MapSelect_Init, sizeof(MapSelectState)); } } @@ -386,7 +389,7 @@ void RunFrame() { } runFrameContext.nextOvl = &gGameStateOverlayTable[0]; - + SysCfb_Init(); Graph_Init(&runFrameContext.gfxCtx); while (runFrameContext.nextOvl) { runFrameContext.ovl = runFrameContext.nextOvl; diff --git a/mm/src/code/sys_cfb.c b/mm/src/code/sys_cfb.c index 4b88a1d85..98a99ceba 100644 --- a/mm/src/code/sys_cfb.c +++ b/mm/src/code/sys_cfb.c @@ -14,16 +14,16 @@ void* gGfxSPTaskOutputBufferEnd; void* sCfbLoRes1; void* sCfbLoRes0; -u16 (*gZBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; -u16 (*gWorkBufferLoRes)[SCREEN_WIDTH * SCREEN_HEIGHT]; -u64 (*gGfxSPTaskOutputBufferLoRes)[0x3000]; +u16* gZBufferLoRes[SCREEN_WIDTH * SCREEN_HEIGHT]; +u16* gWorkBufferLoRes[SCREEN_WIDTH * SCREEN_HEIGHT]; +u64* gGfxSPTaskOutputBufferLoRes[0x3000]; void* gGfxSPTaskOutputBufferEndLoRes; void* sCfbHiRes1; void* sCfbHiRes0; -u16 (*gZBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; -u16 (*gWorkBufferHiRes)[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; -u64 (*gGfxSPTaskOutputBufferHiRes)[0x3000]; +u16* gZBufferHiRes[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +u16* gWorkBufferHiRes[HIRES_BUFFER_WIDTH * HIRES_BUFFER_HEIGHT]; +u64* gGfxSPTaskOutputBufferHiRes[0x3000]; void* gGfxSPTaskOutputBufferEndHiRes; s16 gCfbWidth; @@ -46,9 +46,9 @@ extern u16 gFramebufferHiRes1[HIRES_BUFFER_WIDTH][HIRES_BUFFER_HEIGHT]; void SysCfb_SetLoResMode(void) { gFramebuffers[1] = sCfbLoRes1; gFramebuffers[0] = sCfbLoRes0; - gZBufferPtr = *gZBufferLoRes; + gZBufferPtr = gZBufferLoRes; gWorkBuffer = gWorkBufferLoRes; - gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferLoRes; + gGfxSPTaskOutputBufferPtr = gGfxSPTaskOutputBufferLoRes; gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndLoRes; gCfbWidth = SCREEN_WIDTH; gCfbHeight = SCREEN_HEIGHT; @@ -63,9 +63,9 @@ void SysCfb_SetLoResMode(void) { void SysCfb_SetHiResMode(void) { gFramebuffers[1] = sCfbHiRes1; gFramebuffers[0] = sCfbHiRes0; - gZBufferPtr = *gZBufferHiRes; + gZBufferPtr = gZBufferHiRes; gWorkBuffer = gWorkBufferHiRes; - gGfxSPTaskOutputBufferPtr = *gGfxSPTaskOutputBufferHiRes; + gGfxSPTaskOutputBufferPtr = gGfxSPTaskOutputBufferHiRes; gGfxSPTaskOutputBufferEnd = gGfxSPTaskOutputBufferEndHiRes; if (1) {} gCfbWidth = HIRES_BUFFER_WIDTH; @@ -75,7 +75,7 @@ void SysCfb_SetHiResMode(void) { gScreenWidth = gCfbWidth; gScreenHeight = gCfbHeight; if ((gCfbWidth == SCREEN_WIDTH_HIRES) && (gCfbHeight == SCREEN_HEIGHT_HIRES)) { - //gActiveViMode = &osViModeNtscHpf1; + // gActiveViMode = &osViModeNtscHpf1; } else { s32 rightAdjust; s32 lowerAdjust; diff --git a/mm/src/code/z_play.c b/mm/src/code/z_play.c index f8b601a78..a72d6c109 100644 --- a/mm/src/code/z_play.c +++ b/mm/src/code/z_play.c @@ -1231,15 +1231,13 @@ void Play_DrawMain(PlayState* this) { SET_FULLSCREEN_VIEWPORT(&spA8); View_ApplyTo(&spA8, &sp218); - // BENTODO: incorrect render - // this->transitionCtx.draw(&this->transitionCtx.instanceData, &sp218); + this->transitionCtx.draw(&this->transitionCtx.instanceData, &sp218); } TransitionFade_Draw(&this->unk_18E48, &sp218); - // BENTODO: fill framebuffer? if (gVisMonoColor.a != 0) { sPlayVisMono.primColor.rgba = gVisMonoColor.rgba; - // VisMono_Draw(&sPlayVisMono, &sp218); + VisMono_Draw(&sPlayVisMono, &sp218); } gSPEndDisplayList(sp218++); diff --git a/mm/src/code/z_rcp.c b/mm/src/code/z_rcp.c index fc0794e31..d94dd6c4d 100644 --- a/mm/src/code/z_rcp.c +++ b/mm/src/code/z_rcp.c @@ -1462,11 +1462,11 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gSPDisplayList(&masterGfx[1], sFillSetupDL); - gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); + gDPSetColorImage(&masterGfx[2], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000_TO_SEGMENTED); if (zbuffer != NULL) { gDPSetDepthImage(&masterGfx[3], zbuffer); } else { - gDPSetDepthImage(&masterGfx[3], D_0F000000); + gDPSetDepthImage(&masterGfx[3], D_0F000000_TO_SEGMENTED); } gSPEndDisplayList(&masterGfx[4]); @@ -1492,7 +1492,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g gSPDisplayList(&masterGfx[5], D_0E000000_TO_SEGMENTED(clearFillRect)); - gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); + gDPSetColorImage(&masterGfx[6], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000_TO_SEGMENTED); gSPEndDisplayList(&masterGfx[7]); } @@ -1500,7 +1500,7 @@ void func_8012CF0C(GraphicsContext* gfxCtx, s32 clearFb, s32 clearZb, u8 r, u8 g masterGfx = gGfxMasterDL->clearFrameBuffer; - gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); + gDPSetColorImage(&masterGfx[0], G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000_TO_SEGMENTED); gDPSetCycleType(&masterGfx[1], G_CYC_FILL); gDPSetRenderMode(&masterGfx[2], G_RM_NOOP, G_RM_NOOP2); gDPSetFillColor(&masterGfx[3], (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); diff --git a/mm/src/code/z_visfbuf.c b/mm/src/code/z_visfbuf.c index 85f495e7a..fd3b8eb1f 100644 --- a/mm/src/code/z_visfbuf.c +++ b/mm/src/code/z_visfbuf.c @@ -53,7 +53,7 @@ void VisFbuf_DrawBgToColorImage(Gfx** gfxP, uObjBg* bg, void* img, s32 width, s3 gDPPipeSync(gfx++); // Reset the color image and scissor to frame's defaults - gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000); + gDPSetColorImage(gfx++, G_IM_FMT_RGBA, G_IM_SIZ_16b, gCfbWidth, D_0F000000_TO_SEGMENTED); gSPDisplayList(gfx++, D_0E000000_TO_SEGMENTED(setScissor)); *gfxP = gfx; @@ -312,11 +312,11 @@ void VisFbuf_Draw(VisFbuf* this, Gfx** gfxP, void* img) { switch (this->mode) { case VIS_FBUF_MODE_GENERAL: - VisFbuf_DrawGeneral(this, &gfx, D_0F000000, img, gScreenWidth, gScreenHeight); + VisFbuf_DrawGeneral(this, &gfx, D_0F000000_TO_SEGMENTED, img, gScreenWidth, gScreenHeight); break; case VIS_FBUF_MODE_INTERPOLATE: - VisFbuf_DrawInterpolate(this, &gfx, D_0F000000, gScreenWidth, gScreenHeight); + VisFbuf_DrawInterpolate(this, &gfx, D_0F000000_TO_SEGMENTED, gScreenWidth, gScreenHeight); break; default: diff --git a/mm/src/code/z_vismono.c b/mm/src/code/z_vismono.c index 510d027ef..c851ae458 100644 --- a/mm/src/code/z_vismono.c +++ b/mm/src/code/z_vismono.c @@ -68,7 +68,7 @@ void VisMono_DesaturateTLUT(u16* tlut) { Gfx* VisMono_DesaturateDList(Gfx* gfx) { s32 y; s32 height = VISMONO_CFBFRAG_HEIGHT; - u16* cfbFrag = D_0F000000; + u16* cfbFrag = D_0F000000_TO_SEGMENTED; gDPPipeSync(gfx++); // `G_TT_IA16`: use color-indexed images, and IA16 palettes diff --git a/mm/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c b/mm/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c index 8e307efd4..e42eff5f1 100644 --- a/mm/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c +++ b/mm/src/overlays/fbdemos/ovl_fbdemo_wipe5/z_fbdemo_wipe5.c @@ -94,7 +94,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { G_AD_PATTERN | G_CD_MAGICSQ | G_CK_NONE | G_TC_CONV | G_TF_POINT | G_TT_NONE | G_TL_TILE | G_TD_CLAMP | G_TP_NONE | G_CYC_COPY | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PIXEL | G_RM_NOOP | G_RM_NOOP2); - VisFbuf_SetBgSimple(&gfx, D_0F000000, workBuffer, width, height, VIS_FBUF_BG_CYC_COPY); + VisFbuf_SetBgSimple(&gfx, D_0F000000_TO_SEGMENTED, workBuffer, width, height, VIS_FBUF_BG_CYC_COPY); } else { if (alpha == 255) { gDPSetOtherMode(gfx++, @@ -110,7 +110,7 @@ void TransitionWipe5_Draw(void* thisx, Gfx** gfxP) { gDPSetEnvColor(gfx++, 255, 255, 255, alpha); gDPSetCombineLERP(gfx++, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, ENVIRONMENT); - VisFbuf_SetBgSimple(&gfx, workBuffer, D_0F000000, width, height, VIS_FBUF_BG_CYC_1CYC); + VisFbuf_SetBgSimple(&gfx, workBuffer, D_0F000000_TO_SEGMENTED, width, height, VIS_FBUF_BG_CYC_1CYC); } gDPPipeSync(gfx++); gSPLoadUcode(gfx++, SysUcode_GetUCode(), SysUcode_GetUCodeData()); diff --git a/mm/src/overlays/gamestates/ovl_title/z_title.c b/mm/src/overlays/gamestates/ovl_title/z_title.c index 16223bb1c..52b8034a7 100644 --- a/mm/src/overlays/gamestates/ovl_title/z_title.c +++ b/mm/src/overlays/gamestates/ovl_title/z_title.c @@ -145,6 +145,9 @@ void ConsoleLogo_Main(GameState* thisx) { // #region 2S2H [Debug] Eventually we'll get rid of this if (CVarGetInteger("gDebugEnabled", 0)) { gSaveContext.gameMode = GAMEMODE_NORMAL; + gSaveContext.nextDayTime = NEXT_TIME_NONE; + gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; + gSaveContext.prevHudVisibility = HUD_VISIBILITY_ALL; SET_NEXT_GAMESTATE(&this->state, MapSelect_Init, sizeof(MapSelectState)); // #endregion } else {