From fd7b92dac81a93945683c24782e03269925890bb Mon Sep 17 00:00:00 2001 From: cadmic Date: Wed, 11 Sep 2024 03:07:25 -0700 Subject: [PATCH] [ntsc-1.2] Match remaining functions (#2182) * Match remaining ntsc-1.2 functions * "fake" -> "Fake match?" --- src/code/PreRender.c | 21 ++++++++++++++------ src/code/gfxprint.c | 46 ++++++++++++++++++++++++++++++++------------ src/code/z_kankyo.c | 6 +++++- 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/src/code/PreRender.c b/src/code/PreRender.c index aedc0d07a0..441dddade5 100644 --- a/src/code/PreRender.c +++ b/src/code/PreRender.c @@ -80,7 +80,9 @@ void PreRender_CopyImage(PreRender* this, Gfx** gfxP, void* img, void* imgDst) { s32 lrt; // Make sure that we don't load past the end of the source image - nRows = MIN(rowsRemaining, nRows); + if (nRows > rowsRemaining) { + nRows = rowsRemaining; + } // Determine the upper and lower bounds of the rect to draw ult = curRow; @@ -215,7 +217,9 @@ void func_800C170C(PreRender* this, Gfx** gfxP, void* buf, void* bufSave, u32 r, s32 lrt; // Make sure that we don't load past the end of the source image - nRows = MIN(rowsRemaining, nRows); + if (nRows > rowsRemaining) { + nRows = rowsRemaining; + } // Determine the upper and lower bounds of the rect to draw ult = curRow; @@ -457,15 +461,16 @@ void func_800C213C(PreRender* this, Gfx** gfxP) { curRow = 0; while (rowsRemaining > 0) { s32 uls = 0; + s32 ult = curRow; s32 lrs = this->width - 1; - s32 ult; s32 lrt; // Make sure that we don't load past the end of the source image - nRows = MIN(rowsRemaining, nRows); + if (nRows > rowsRemaining) { + nRows = rowsRemaining; + } - // Determine the upper and lower bounds of the rect to draw - ult = curRow; + // Determine the lower bound of the rect to draw lrt = curRow + nRows - 1; // Load the frame buffer line @@ -473,11 +478,15 @@ void func_800C213C(PreRender* this, Gfx** gfxP) { this->height, uls, ult, lrs, lrt, 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); + rtile = rtile; // Fake match? + // Load the coverage line gDPLoadMultiTile(gfx++, this->cvgSave, 0x0160, rtile, G_IM_FMT_I, G_IM_SIZ_8b, this->width, this->height, uls, ult, lrs, lrt, 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); + rtile = rtile; // Fake match? + // Draw a texture for which the rgb channels come from the framebuffer and the alpha channel comes from // coverage, modulated by env color gSPTextureRectangle(gfx++, uls << 2, ult << 2, (lrs + 1) << 2, (lrt + 1) << 2, G_TX_RENDERTILE, uls << 5, diff --git a/src/code/gfxprint.c b/src/code/gfxprint.c index dd80bcfd19..db586a8513 100644 --- a/src/code/gfxprint.c +++ b/src/code/gfxprint.c @@ -132,9 +132,17 @@ static u8 sDefaultSpecialFlags; #endif void GfxPrint_Setup(GfxPrint* this) { - s32 width = 16; - s32 height = 256; + s32 width; + s32 height; s32 i; + s32 pal; + s32 cm; + s32 masks; + s32 maskt; + s32 shift; + s32 line; + s32 tmem = 0; + s32 fmt = G_IM_FMT_CI; gDPPipeSync(this->dList++); gDPSetOtherMode(this->dList++, @@ -142,27 +150,41 @@ void GfxPrint_Setup(GfxPrint* this) { G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, G_AC_NONE | G_ZS_PRIM | G_RM_XLU_SURF | G_RM_XLU_SURF2); gDPSetCombineMode(this->dList++, G_CC_DECALRGBA, G_CC_DECALRGBA); - gDPLoadTextureBlock_4b(this->dList++, sGfxPrintFontData, G_IM_FMT_CI, 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); + + width = 16; + height = 256; + cm = G_TX_NOMIRROR | G_TX_WRAP; + masks = G_TX_NOMASK; + maskt = G_TX_NOMASK; + shift = G_TX_NOLOD; + + gDPLoadMultiBlock_4b(this->dList++, sGfxPrintFontData, 0, G_TX_RENDERTILE, G_IM_FMT_CI, width, height, 0, cm, cm, + masks, maskt, shift, shift); gDPLoadTLUT(this->dList++, 64, 0x100, sGfxPrintFontTLUT); for (i = 1; i < 4; i++) { - gDPSetTile(this->dList++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2, i, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, - G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPSetTileSize(this->dList++, i * 2, 0, 0, 15 << 2, 255 << 2); + gDPSetTile(this->dList++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2, i, cm, maskt, shift, cm, masks, shift); + gDPSetTileSize(this->dList++, i * 2, 0 << 2, 0 << 2, (width - 1) << 2, (height - 1) << 2); } gDPSetColor(this->dList++, G_SETPRIMCOLOR, this->color.rgba); - gDPLoadMultiTile_4b(this->dList++, sGfxPrintRainbowData, 0, 1, G_IM_FMT_CI, 2, 8, 0, 0, 1, 7, 4, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, 1, 3, G_TX_NOLOD, G_TX_NOLOD); + width = 2; + height = 8; + cm = G_TX_NOMIRROR | G_TX_WRAP; + masks = 1; + maskt = 3; + shift = G_TX_NOLOD; + pal = 4; + line = 1; + gDPLoadMultiTile_4b(this->dList++, sGfxPrintRainbowData, 0, 1, G_IM_FMT_CI, width, height, 0, 0, width - 1, + height - 1, pal, cm, cm, masks, maskt, shift, shift); gDPLoadTLUT(this->dList++, 16, 0x140, sGfxPrintRainbowTLUT); for (i = 1; i < 4; i++) { - gDPSetTile(this->dList++, G_IM_FMT_CI, G_IM_SIZ_4b, 1, 0, i * 2 + 1, 4, G_TX_NOMIRROR | G_TX_WRAP, 3, - G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 1, G_TX_NOLOD); - gDPSetTileSize(this->dList++, i * 2 + 1, 0, 0, 1 << 2, 7 << 2); + gDPSetTile(this->dList++, fmt, G_IM_SIZ_4b, line, tmem, i * 2 + 1, pal, cm, maskt, shift, cm, masks, shift); + gDPSetTileSize(this->dList++, i * 2 + 1, 0 << 2, 0 << 2, (width - 1) << 2, (height - 1) << 2); } } diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index ea5bf96722..52be77e440 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -1577,7 +1577,9 @@ void Environment_DrawLensFlare(PlayState* play, EnvironmentContext* envCtx, View sqrtf((SQ(lookDirX) + SQ(lookDirY) + SQ(lookDirZ)) * (SQ(posDirX) + SQ(posDirY) + SQ(posDirZ))); lensFlareAlphaScaleTarget = cosAngle * 3.5f; - lensFlareAlphaScaleTarget = CLAMP_MAX(lensFlareAlphaScaleTarget, 1.0f); + if (lensFlareAlphaScaleTarget > 1.0f) { + lensFlareAlphaScaleTarget = 1.0f; + } if (!isSun) { lensFlareAlphaScaleTarget = cosAngle; @@ -1625,7 +1627,9 @@ void Environment_DrawLensFlare(PlayState* play, EnvironmentContext* envCtx, View alpha *= 1.0f - fogInfluence; +#if !PLATFORM_N64 if (1) {} +#endif if (!(isOffScreen ^ 0)) { Math_SmoothStepToF(&envCtx->lensFlareAlphaScale, lensFlareAlphaScaleTarget, 0.5f, 0.05f, 0.001f);