From 69dcab6b86f7e62bfbdc685f3a5a530fc83f6a43 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Wed, 4 Dec 2024 02:45:10 -0300 Subject: [PATCH 01/16] extend shot rendering to 32/9 --- src/engine/fox_beam.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/fox_beam.c b/src/engine/fox_beam.c index 62d2d39d..5ce18251 100644 --- a/src/engine/fox_beam.c +++ b/src/engine/fox_beam.c @@ -1237,8 +1237,8 @@ void PlayerShot_DrawShot(PlayerShot* shot) { Matrix_MultVec3f(gGfxMatrix, &sp11C, &sShotViewPos); if ((sShotViewPos.z < 0.0f) && (sShotViewPos.z > -10000.0f)) { var_fv1 = fabsf(sShotViewPos.x); // probably fake. The use of temps was likely different - if (var_fv1 < (fabsf(sShotViewPos.z * 0.5f) + 500.0f)) { - if (fabsf(sShotViewPos.y) < (fabsf(sShotViewPos.z * 0.5f) + 500.0f)) { + if (var_fv1 < (fabsf(sShotViewPos.z * /* 0.5f */ 1.0f) + 500.0f)) { + if (fabsf(sShotViewPos.y) < (fabsf(sShotViewPos.z * /* 0.5f */ 1.0f) + 500.0f)) { isDrawn = true; } } From ab490e4e171e12170426d3a842e1a4b779fc41ac Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Wed, 4 Dec 2024 14:04:56 -0300 Subject: [PATCH 02/16] adjust player drawing for widescreen --- src/engine/fox_display.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/fox_display.c b/src/engine/fox_display.c index 480f7375..988112c6 100644 --- a/src/engine/fox_display.c +++ b/src/engine/fox_display.c @@ -1361,7 +1361,7 @@ bool Display_CheckPlayerVisible(s32 index, s32 reflectY) { Matrix_MultVec3f(gGfxMatrix, &src, &dest); if ((dest.z < 200.0f) && (dest.z > -12000.0f)) { - if (fabsf(dest.x) < (fabsf(dest.z * 0.5f) + 500.0f)) { + if (fabsf(dest.x) < (fabsf(dest.z * /*0.5f*/ 1.5f) + 500.0f)) { if (fabsf(dest.y) < (fabsf(dest.z * 0.5f) + 500.0f)) { if (reflectY == 0) { sPlayersVisible[index] = true; From 5ede801584553ddb1e5a5316236cdf718d33bab5 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Wed, 4 Dec 2024 14:13:13 -0300 Subject: [PATCH 03/16] playershot widescreen fix --- src/engine/fox_beam.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/fox_beam.c b/src/engine/fox_beam.c index 5ce18251..b95015e6 100644 --- a/src/engine/fox_beam.c +++ b/src/engine/fox_beam.c @@ -1237,8 +1237,8 @@ void PlayerShot_DrawShot(PlayerShot* shot) { Matrix_MultVec3f(gGfxMatrix, &sp11C, &sShotViewPos); if ((sShotViewPos.z < 0.0f) && (sShotViewPos.z > -10000.0f)) { var_fv1 = fabsf(sShotViewPos.x); // probably fake. The use of temps was likely different - if (var_fv1 < (fabsf(sShotViewPos.z * /* 0.5f */ 1.0f) + 500.0f)) { - if (fabsf(sShotViewPos.y) < (fabsf(sShotViewPos.z * /* 0.5f */ 1.0f) + 500.0f)) { + if (var_fv1 < (fabsf(sShotViewPos.z * /* 0.5f */ 1.5f) + 500.0f)) { + if (fabsf(sShotViewPos.y) < (fabsf(sShotViewPos.z * 0.5f) + 500.0f)) { isDrawn = true; } } From 3b4f750efcb5b464e070e4f55487de2349d7a6e7 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Wed, 4 Dec 2024 16:22:14 -0300 Subject: [PATCH 04/16] stick tester --- src/engine/fox_display.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/engine/fox_display.c b/src/engine/fox_display.c index 988112c6..e8ecce74 100644 --- a/src/engine/fox_display.c +++ b/src/engine/fox_display.c @@ -2133,11 +2133,11 @@ void Display_Update(void) { #if 0 RCP_SetupDL(&gMasterDisp, SETUPDL_83); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); - Graphics_DisplaySmallText(10, 210, 1.0f, 1.0f, "PATH1:"); - Graphics_DisplaySmallNumber(60, 210, (int) ABS(path1)); - Graphics_DisplaySmallText(10, 220, 1.0f, 1.0f, "PATH2:"); - Graphics_DisplaySmallNumber(60, 220, (int) ABS(path2)); - if (path1 < 0.0f) Graphics_DisplaySmallText(110, 210, 1.0f, 1.0f, "NEG:"); - if (path2 < 0.0f) Graphics_DisplaySmallText(110, 220, 1.0f, 1.0f, "NEG:"); + Graphics_DisplaySmallText(10, 210, 1.0f, 1.0f, "STICK_X:"); + Graphics_DisplaySmallNumber(60, 210, (int) ABS(gInputPress->stick_x)); + Graphics_DisplaySmallText(10, 220, 1.0f, 1.0f, "STICK_Y:"); + Graphics_DisplaySmallNumber(60, 220, (int) ABS(gInputPress->stick_y)); + if (gInputPress->stick_x < 0) Graphics_DisplaySmallText(110, 210, 1.0f, 1.0f, "NEG:"); + if (gInputPress->stick_y < 0) Graphics_DisplaySmallText(110, 220, 1.0f, 1.0f, "NEG:"); #endif } From 2e74bbbb8c7c52da2ef464b24734c0884947bff8 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 00:16:51 -0300 Subject: [PATCH 05/16] silence warnings --- src/port/ui/ImguiUI.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index 5d110b4a..32c092f3 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -100,24 +100,24 @@ void DrawSettingsMenu(){ .isPercentage = true, })) { float val = CVarGetFloat("gMainMusicVolume", 1.0f) * 100; - gSaveFile.save.data.musicVolume = val; - Audio_SetVolume(AUDIO_TYPE_MUSIC, val); + gSaveFile.save.data.musicVolume = (u8) val; + Audio_SetVolume(AUDIO_TYPE_MUSIC, (u8) val); } if (UIWidgets::CVarSliderFloat("Voice Volume", "gVoiceVolume", 0.0f, 1.0f, 1.0f, { .format = "%.0f%%", .isPercentage = true, })) { float val = CVarGetFloat("gVoiceVolume", 1.0f) * 100; - gSaveFile.save.data.voiceVolume = val; - Audio_SetVolume(AUDIO_TYPE_VOICE, val); + gSaveFile.save.data.voiceVolume = (u8) val; + Audio_SetVolume(AUDIO_TYPE_VOICE, (u8) val); } if (UIWidgets::CVarSliderFloat("Sound Effects Volume", "gSFXMusicVolume", 0.0f, 1.0f, 1.0f, { .format = "%.0f%%", .isPercentage = true, })) { float val = CVarGetFloat("gSFXMusicVolume", 1.0f) * 100; - gSaveFile.save.data.sfxVolume = val; - Audio_SetVolume(AUDIO_TYPE_SFX, val); + gSaveFile.save.data.sfxVolume = (u8) val; + Audio_SetVolume(AUDIO_TYPE_SFX, (u8) val); } static std::unordered_map audioBackendNames = { From 04047776105e6249fffcd84c237a5c047f6ca5cd Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 00:17:05 -0300 Subject: [PATCH 06/16] Widescreen Radar --- src/engine/fox_hud.c | 68 ++++++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/src/engine/fox_hud.c b/src/engine/fox_hud.c index d75d993e..0b005b1a 100644 --- a/src/engine/fox_hud.c +++ b/src/engine/fox_hud.c @@ -304,7 +304,7 @@ void HUD_BoostGaugeCool_Draw(f32 xPos, f32 yPos, f32 xScale, f32 yScale) { } } -void HUD_MatrixTranslateCoord(f32* transX, f32* transY) { +void HUD_MatrixTranslateCoordLeft(f32* transX, f32* transY) { *transX = OTRGetRectDimensionFromLeftEdge(*transX) - (SCREEN_WIDTH / 2.0f); *transY = (SCREEN_HEIGHT / 2.0f) - *transY; } @@ -381,7 +381,7 @@ void HUD_GoldRings_Draw(void) { scale += 0.06f; } - HUD_MatrixTranslateCoord(&x, &y); + HUD_MatrixTranslateCoordLeft(&x, &y); Matrix_Translate(gGfxMatrix, x, y, -100.0f, MTXF_NEW); Matrix_Scale(gGfxMatrix, scale, scale, scale, MTXF_APPLY); Matrix_Scale(gGfxMatrix, ringScale, ringScale, ringScale, MTXF_APPLY); @@ -403,7 +403,7 @@ void HUD_GoldRings_Draw(void) { RCP_SetupDL(&gMasterDisp, SETUPDL_62); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); - HUD_MatrixTranslateCoord(&D_800D1AC4[i + 1], &D_800D1AD8[i + 1]); + HUD_MatrixTranslateCoordLeft(&D_800D1AC4[i + 1], &D_800D1AD8[i + 1]); Matrix_Push(&gGfxMatrix); Matrix_Translate(gGfxMatrix, D_800D1AC4[i + 1], D_800D1AD8[i + 1], -100.0f, MTXF_NEW); @@ -436,7 +436,7 @@ void HUD_GoldRings_Draw(void) { scale += 0.06f; } - HUD_MatrixTranslateCoord(&x, &y); + HUD_MatrixTranslateCoordLeft(&x, &y); Matrix_Translate(gGfxMatrix, x, y, -100.0f, MTXF_NEW); Matrix_Scale(gGfxMatrix, scale, scale, scale, MTXF_APPLY); Matrix_Scale(gGfxMatrix, ringScale, ringScale, ringScale, MTXF_APPLY); @@ -1492,8 +1492,7 @@ void HUD_PauseScreen_Update(void) { case 3: Graphics_FillRectangle(&gMasterDisp, OTRGetRectDimensionFromLeftEdge(0), 0, - OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH), SCREEN_HEIGHT, 0, 0, 0, - 255); + OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH), SCREEN_HEIGHT, 0, 0, 0, 255); gFillScreenAlphaTarget = 0; @@ -1543,8 +1542,7 @@ void HUD_PauseScreen_Update(void) { case 4: Graphics_FillRectangle(&gMasterDisp, OTRGetRectDimensionFromLeftEdge(0), 0, - OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH), SCREEN_HEIGHT, 0, 0, 0, - 255); + OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH), SCREEN_HEIGHT, 0, 0, 0, 255); if (sPauseScreenTimer[0] < 140) { break; } @@ -1563,8 +1561,7 @@ void HUD_PauseScreen_Update(void) { case 5: Graphics_FillRectangle(&gMasterDisp, OTRGetRectDimensionFromLeftEdge(0), 0, - OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH ), SCREEN_HEIGHT, 0, 0, 0, - 255); + OTRGetRectDimensionFromRightEdge(SCREEN_WIDTH), SCREEN_HEIGHT, 0, 0, 0, 255); for (i = 0; i < 6; i++) { if (gPrevPlanetTeamShields[i] == -1) { @@ -2012,6 +2009,9 @@ void HUD_RadarMarks_Setup(void) { } } +static f32 gHudOffsetRect = 0.0f; +static f32 gHudOffsetPers = 0.0f; + s32 HUD_RadarMarks_Update(void) { s32 i; f32 scale; @@ -2020,11 +2020,32 @@ s32 HUD_RadarMarks_Update(void) { f32 z1; f32 x = 0; f32 y = 0; - s32 pad; f32 temp; f32 temp2; f32 temp3; + switch (gCurrentLevel) { + case LEVEL_CORNERIA: + gHudOffsetRect = OTRGetDimensionFromRightEdge(0.0f); + gHudOffsetPers = gHudOffsetRect * 2.15f; + break; + + case LEVEL_SECTOR_Z: + gHudOffsetRect = OTRGetDimensionFromRightEdge(0.0f); + gHudOffsetPers = gHudOffsetRect * 5.50f; + break; + + case LEVEL_BOLSE: + gHudOffsetRect = OTRGetDimensionFromRightEdge(0.0f); + gHudOffsetPers = gHudOffsetRect * 2.70f; + break; + + default: + gHudOffsetRect = OTRGetDimensionFromRightEdge(0.0f); + gHudOffsetPers = gHudOffsetRect * 3.35f; + break; + } + if (!gVersusMode) { if (gLevelMode != LEVELMODE_ALL_RANGE) { return 0; @@ -2098,7 +2119,7 @@ s32 HUD_RadarMarks_Update(void) { } HUD_RadarMarks_Setup(); - HUD_RadarWindow_Draw(x, y); + HUD_RadarWindow_Draw(x + gHudOffsetRect, y); if (!gVersusMode && ((gCurrentLevel == LEVEL_SECTOR_Z) || (gCurrentLevel == LEVEL_FORTUNA) || (gCurrentLevel == LEVEL_VENOM_2) || @@ -2109,15 +2130,18 @@ s32 HUD_RadarMarks_Update(void) { switch (gCurrentLevel) { case LEVEL_SECTOR_Z: - Lib_TextureRect_IA8(&gMasterDisp, D_SZ_60012D0, 16, 9, 251.0f + D_800D1E10, 181.0f, 1.00f, 1.00f); + Lib_TextureRect_IA8(&gMasterDisp, D_SZ_60012D0, 16, 9, gHudOffsetRect + 251.0f + D_800D1E10, 181.0f, + 1.00f, 1.00f); break; case LEVEL_FORTUNA: - Lib_TextureRect_IA8(&gMasterDisp, D_FO_6001260, 16, 16, 251.0f + D_800D1E10, 178.0f, 1.00f, 1.00f); + Lib_TextureRect_IA8(&gMasterDisp, D_FO_6001260, 16, 16, gHudOffsetRect + 251.0f + D_800D1E10, 178.0f, + 1.00f, 1.00f); break; case LEVEL_BOLSE: - Lib_TextureRect_IA8(&gMasterDisp, D_BO_6000C80, 16, 16, 251.0f + D_800D1E10, 178.0f, 1.00f, 1.00f); + Lib_TextureRect_IA8(&gMasterDisp, D_BO_6000C80, 16, 16, gHudOffsetRect + (251.0f + D_800D1E10), 178.0f, + 1.00f, 1.00f); break; case LEVEL_SECTOR_Y: @@ -2128,22 +2152,25 @@ s32 HUD_RadarMarks_Update(void) { if ((y < 150.0f) || (y > 206.0f)) { break; } - Lib_TextureRect_IA8(&gMasterDisp, D_SY_6000840, 64, 64, 250.0f + D_800D1E10, temp, 0.25f, 0.25f); + Lib_TextureRect_IA8(&gMasterDisp, D_SY_6000840, 64, 64, gHudOffsetRect + 250.0f + D_800D1E10, temp, + 0.25f, 0.25f); } break; case LEVEL_KATINA: - Lib_TextureRect_IA8(&gMasterDisp, D_KA_6001260, 8, 8, 254.0f + D_800D1E10, 182.0f, 1.00f, 1.00f); + Lib_TextureRect_IA8(&gMasterDisp, D_KA_6001260, 8, 8, 254.0f + D_800D1E10 + gHudOffsetRect, 182.0f, + 1.00f, 1.00f); break; case LEVEL_VENOM_2: - Lib_TextureRect_IA8(&gMasterDisp, D_VE2_6002890, 16, 16, 251.0f + D_800D1E10, 178.0f, 1.00f, 1.00f); + Lib_TextureRect_IA8(&gMasterDisp, D_VE2_6002890, 16, 16, gHudOffsetRect + 251.0f + D_800D1E10, 178.0f, + 1.00f, 1.00f); break; } } Matrix_Push(&gGfxMatrix); - Matrix_Translate(gGfxMatrix, x1, y1, z1, MTXF_APPLY); + Matrix_Translate(gGfxMatrix, x1 + gHudOffsetPers, y1, z1, MTXF_APPLY); if ((gCurrentLevel == LEVEL_SECTOR_Z) && (D_hud_80161710 != 0)) { Matrix_Push(&gGfxMatrix); @@ -2897,8 +2924,7 @@ void HUD_KillCountStars_Update(void) { } void HUD_VS_ShieldGaugeFrame_Draw(f32 xPos, f32 yPos, f32 xScale, f32 yScale) { - Lib_TextureRect_IA8(&gMasterDisp, aVsShieldGaugeFrameTex, 80, 26, xPos, yPos, xScale, - yScale); + Lib_TextureRect_IA8(&gMasterDisp, aVsShieldGaugeFrameTex, 80, 26, xPos, yPos, xScale, yScale); } void HUD_VS_ShieldGaugeTex_Draw(f32 xPos, f32 yPos, f32 xScale, f32 yScale, f32 width) { From a23d9246b2095d60235c36b4bb0c4608a086325d Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 00:46:58 -0300 Subject: [PATCH 07/16] arrow widescreen alignment --- src/engine/fox_hud.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/engine/fox_hud.c b/src/engine/fox_hud.c index 0b005b1a..d785ed03 100644 --- a/src/engine/fox_hud.c +++ b/src/engine/fox_hud.c @@ -2800,11 +2800,20 @@ void HUD_EdgeArrows_Draw(s32 idx, bool arg1) { Matrix_RotateZ(gGfxMatrix, M_DTOR * D_800D1F88[idx], MTXF_APPLY); } + // Simplified perspective alignment based on X position + f32 xPos = D_800D1EF8[idx]; + + if (xPos < 0.0f) { + xPos = xPos * OTRGetAspectRatio() + 1; + } else if (xPos > 0.0f) { + xPos = xPos * OTRGetAspectRatio() - 1; + } + if (arg1) { - Matrix_Translate(gGfxMatrix, D_800D1EF8[idx] + D_800D1FE8[idx], D_800D1F28[idx] + D_800D2018[idx], + Matrix_Translate(gGfxMatrix, xPos + D_800D1FE8[idx], D_800D1F28[idx] + D_800D2018[idx], D_800D1F58[idx], MTXF_APPLY); } else { - Matrix_Translate(gGfxMatrix, D_800D1EF8[idx], D_800D1F28[idx], D_800D1F58[idx], MTXF_APPLY); + Matrix_Translate(gGfxMatrix, xPos, D_800D1F28[idx], D_800D1F58[idx], MTXF_APPLY); } Matrix_RotateZ(gGfxMatrix, M_DTOR * D_800D1FB8[idx], MTXF_APPLY); From 7c263a09000136c0a063c1a4c7421ec2e929ec16 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 02:35:52 -0300 Subject: [PATCH 08/16] Widescreen Radio --- src/engine/fox_hud.c | 53 +++++++++++++++++++------------ src/engine/fox_message.c | 6 ++-- src/engine/fox_radio.c | 20 ++++++------ src/overlays/ovl_menu/fox_title.c | 12 +++---- 4 files changed, 52 insertions(+), 39 deletions(-) diff --git a/src/engine/fox_hud.c b/src/engine/fox_hud.c index d785ed03..c9d95d75 100644 --- a/src/engine/fox_hud.c +++ b/src/engine/fox_hud.c @@ -117,6 +117,11 @@ Gfx sRadioDamageDL[] = { gsSPEndDisplayList(), }; +void HUD_MatrixTranslateCoordLeft(f32* transX, f32* transY) { + *transX = OTRGetRectDimensionFromLeftEdge(*transX) - (SCREEN_WIDTH / 2.0f); + *transY = (SCREEN_HEIGHT / 2.0f) - *transY; +} + // Used in the status screen, and when losing a life void HUD_LivesCount1_Draw(f32 xPos, f32 yPos, s32 lifeCount) { u8* sLifeIconTex[] = { aArwingLifeIconTex, aBlueMarineLifeIconTex, aLandmasterLifeIconTex }; @@ -203,16 +208,22 @@ void HUD_TeamDownWrench_Draw(s32 arg0) { } } } else { + f32 x = 48.0f; + f32 y = 0.0f; + HUD_MatrixTranslateCoordLeft(&x, &y); + y = -81.0f; + Lib_InitOrtho(&gMasterDisp); Matrix_Push(&gGfxMatrix); - Matrix_Translate(gGfxMatrix, -234.0f, -167.0f, -600.0f, MTXF_APPLY); + Matrix_Translate(gGfxMatrix, x, y, -600.0f, MTXF_APPLY); Matrix_RotateZ(gGfxMatrix, M_PI / 4, MTXF_APPLY); - Matrix_Scale(gGfxMatrix, 0.68f, 0.68f, 1.0f, MTXF_APPLY); + Matrix_Scale(gGfxMatrix, 0.31f, 0.31f, 1.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, aDownWrenchDL); Matrix_RotateZ(gGfxMatrix, 3 * M_PI / 2, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, aDownWrenchDL); Matrix_Pop(&gGfxMatrix); + Lib_InitPerspective(&gMasterDisp); } } @@ -304,11 +315,6 @@ void HUD_BoostGaugeCool_Draw(f32 xPos, f32 yPos, f32 xScale, f32 yScale) { } } -void HUD_MatrixTranslateCoordLeft(f32* transX, f32* transY) { - *transX = OTRGetRectDimensionFromLeftEdge(*transX) - (SCREEN_WIDTH / 2.0f); - *transY = (SCREEN_HEIGHT / 2.0f) - *transY; -} - void HUD_GoldRings_Draw(void) { Gfx* sGoldRingDLs[] = { aGoldRingFrame1DL, aGoldRingFrame2DL, aGoldRingFrame3DL, aGoldRingFrame4DL, @@ -2242,49 +2248,51 @@ void HUD_RadioCharacterName_Draw(void) { RCP_SetupDL(&gMasterDisp, SETUPDL_76_POINT); gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 0, 255); + f32 xPos = OTRGetRectDimensionFromLeftEdge(73.0f); + switch ((s32) gRadioMsgRadioId) { case RCID_FOX: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "FOX"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "FOX"); break; case RCID_FALCO: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "FALCO"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "FALCO"); break; case RCID_SLIPPY: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "SLIPPY"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "SLIPPY"); break; case RCID_PEPPY: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "PEPPY"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "PEPPY"); break; case RCID_WOLF: case RCID_WOLF_2: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "WOLF"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "WOLF"); break; case RCID_LEON: case RCID_LEON_2: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "LEON"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "LEON"); break; case RCID_PIGMA: case RCID_PIGMA_2: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "PIGMA"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "PIGMA"); break; case RCID_ANDREW: case RCID_ANDREW_2: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "ANDREW"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "ANDREW"); break; case RCID_BILL: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "BILL"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "BILL"); break; case RCID_KATT: - Graphics_DisplaySmallText(73, 173, 1.0f, 1.0f, "KATT"); + Graphics_DisplaySmallText(xPos, 173, 1.0f, 1.0f, "KATT"); break; } } @@ -2615,12 +2623,18 @@ void HUD_RadioDamage_Draw(void) { if ((D_80161788 != 0) || (D_8016178C != 0)) { RCP_SetupDL(&gMasterDisp, SETUPDL_12); gDPSetPrimColor(gMasterDisp++, 0, 0, r, g, b, alpha); + f32 x = 48.0f; + f32 y = 0.0f; + HUD_MatrixTranslateCoordLeft(&x, &y); + y = -81.0f; + Lib_InitOrtho(&gMasterDisp); Matrix_Push(&gGfxMatrix); - Matrix_Translate(gGfxMatrix, -53.9f, -38.5f, -139.4f, MTXF_APPLY); - Matrix_Scale(gGfxMatrix, 1.0f, 1.0f, 1.0f, MTXF_APPLY); + Matrix_Translate(gGfxMatrix, x, y, -139.4f, MTXF_APPLY); + Matrix_Scale(gGfxMatrix, 2.25f, 2.25f, 2.25f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, sRadioDamageDL); Matrix_Pop(&gGfxMatrix); + Lib_InitPerspective(&gMasterDisp); } } @@ -2778,7 +2792,6 @@ void HUD_VsModePortraitTex_Draw(f32 xPos, f32 yPos, f32 scale, s32 idx) { Lib_TextureRect_RGBA16(&gMasterDisp, sVsModeFaceDL[idx], 44, 44, xPos, yPos, scale, scale); } -// LTODO: Align these void HUD_EdgeArrows_Draw(s32 idx, bool arg1) { f32 D_800D1EF8[] = { 0.0f, 0.0f, -9.0f, 9.0f, 10.0f, 10.0f, 10.0f, 10.0f, 0.0f, 0.0f, -8.0f, 8.0f }; f32 D_800D1F28[] = { -7.0f, 7.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 8.0f, -8.0f, 0.0f, 0.0f }; diff --git a/src/engine/fox_message.c b/src/engine/fox_message.c index 5b7a9d06..888b0f2b 100644 --- a/src/engine/fox_message.c +++ b/src/engine/fox_message.c @@ -19,8 +19,8 @@ u16 Message_IdFromPtr(u16* msgPtr) { MsgLookup* lookup = (MsgLookup*) LOAD_ASSET(gMsgLookup); while (lookup->msgPtr != NULL) { - if(GameEngine_OTRSigCheck(msgPtr)){ - if(strcmp(((char*) msgPtr) + 7, lookup->path) == 0){ + if (GameEngine_OTRSigCheck(msgPtr)) { + if (strcmp(((char*) msgPtr) + 7, lookup->path) == 0) { return lookup->msgId; } } else { @@ -65,7 +65,7 @@ void Message_DisplayChar(Gfx** gfxPtr, u16 msgChar, s32 xpos, s32 ypos) { gDPLoadTextureBlock_4b((*gfxPtr)++, gTextCharTextures[msgChar >> 2], G_IM_FMT_CI, 16, 13, msgChar % 4U, 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((*gfxPtr)++, xpos << 2, ypos << 2, (xpos + 13) << 2, (ypos + 13) << 2, G_TX_RENDERTILE, 64, 0, + gSPWideTextureRectangle((*gfxPtr)++, xpos << 2, ypos << 2, (xpos + 13) << 2, (ypos + 13) << 2, G_TX_RENDERTILE, 64, 0, 1024, 1024); } diff --git a/src/engine/fox_radio.c b/src/engine/fox_radio.c index 91708ad6..57a0ad4f 100644 --- a/src/engine/fox_radio.c +++ b/src/engine/fox_radio.c @@ -127,21 +127,21 @@ void Radio_PlayMessage(u16* msg, RadioCharacterId character) { case GSTATE_TITLE: case GSTATE_ENDING: gRadioPrintPosY = 176; - gRadioPrintPosX = 85; - gRadioTextBoxPosX = 80.0f; + gRadioPrintPosX = OTRGetRectDimensionFromLeftEdge(85.0f); + gRadioTextBoxPosX = OTRGetRectDimensionFromLeftEdge(80.0f); gRadioTextBoxPosY = 174.0f; gRadioTextBoxScaleX = 4.63f; - gRadioPortraitPosX = 32.0f; + gRadioPortraitPosX = OTRGetRectDimensionFromLeftEdge(32.0f); gRadioPortraitPosY = 174.0f; break; case GSTATE_PLAY: gRadioPrintPosY = 180; - gRadioPrintPosX = 79; - gRadioTextBoxPosX = 74.0f; + gRadioPrintPosX = OTRGetRectDimensionFromLeftEdge(79.0f); + gRadioTextBoxPosX = OTRGetRectDimensionFromLeftEdge(74.0f); gRadioTextBoxPosY = 178.0f; gRadioTextBoxScaleX = 4.53f; - gRadioPortraitPosX = 26.0f; + gRadioPortraitPosX = OTRGetRectDimensionFromLeftEdge(26.0f); gRadioPortraitPosY = 178.0f; break; } @@ -700,12 +700,12 @@ void Radio_Draw(void) { (gCurrentRadioPortrait != RCID_1000)) { RCP_SetupDL(&gMasterDisp, SETUPDL_76_POINT); gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 0, 255); - Graphics_DisplaySmallText(31, 167, 1.0f, 1.0f, "DOWN"); + Graphics_DisplaySmallText(OTRGetRectDimensionFromLeftEdge(31.0f), 167, 1.0f, 1.0f, "DOWN"); HUD_TeamDownWrench_Draw(1); } if (((gCurrentRadioPortrait != RCID_STATIC) && (gCurrentRadioPortrait != RCID_STATIC + 1)) && (gCurrentRadioPortrait != RCID_1000)) { - HUD_TeamShields_Draw(22.0f, 165.0f, gTeamShields[idx]); + HUD_TeamShields_Draw(OTRGetRectDimensionFromLeftEdge(22.0f), 165.0f, gTeamShields[idx]); } } @@ -749,11 +749,11 @@ void Radio_Draw(void) { (gCurrentRadioPortrait != RCID_STATIC + 1) && (gCurrentRadioPortrait != RCID_1000)) { RCP_SetupDL(&gMasterDisp, SETUPDL_76_POINT); gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 0, 255); - Graphics_DisplaySmallText(31, 167, 1.0f, 1.0f, "DOWN"); + Graphics_DisplaySmallText(OTRGetRectDimensionFromLeftEdge(31.0f), 167, 1.0f, 1.0f, "DOWN"); } if (((gCurrentRadioPortrait != RCID_STATIC) && (gCurrentRadioPortrait != RCID_STATIC + 1)) && (gCurrentRadioPortrait != RCID_1000)) { - HUD_TeamShields_Draw(22.0f, 165.0f, gActors[idx].health * 2.55f); + HUD_TeamShields_Draw(OTRGetRectDimensionFromLeftEdge(22.0f), 165.0f, gActors[idx].health * 2.55f); } } if (((gCurrentRadioPortrait != RCID_STATIC) && (gCurrentRadioPortrait != RCID_STATIC + 1)) && diff --git a/src/overlays/ovl_menu/fox_title.c b/src/overlays/ovl_menu/fox_title.c index 57d13a51..5dc79d88 100644 --- a/src/overlays/ovl_menu/fox_title.c +++ b/src/overlays/ovl_menu/fox_title.c @@ -3629,21 +3629,21 @@ void Title_Radio_PlayMessage(u16** msgList, RadioCharacterId character) { switch (gGameState) { case GSTATE_TITLE: gRadioPrintPosY = 176; - gRadioPrintPosX = 85; - gRadioTextBoxPosX = 80.0f; + gRadioPrintPosX = OTRGetRectDimensionFromLeftEdge(85); + gRadioTextBoxPosX = OTRGetRectDimensionFromLeftEdge(80.0f); gRadioTextBoxPosY = 174.0f; gRadioTextBoxScaleX = 4.63f; - gRadioPortraitPosX = 32.0f; + gRadioPortraitPosX = OTRGetRectDimensionFromLeftEdge(32.0f); gRadioPortraitPosY = 174.0f; break; case GSTATE_PLAY: gRadioPrintPosY = 179; - gRadioPrintPosX = 79; - gRadioTextBoxPosX = 74.0f; + gRadioPrintPosX = OTRGetRectDimensionFromLeftEdge(79); + gRadioTextBoxPosX = OTRGetRectDimensionFromLeftEdge(74.0f); gRadioTextBoxPosY = 178.0f; gRadioTextBoxScaleX = 4.53f; - gRadioPortraitPosX = 26.0f; + gRadioPortraitPosX = OTRGetRectDimensionFromLeftEdge(26.0f); gRadioPortraitPosY = 178.0f; } From 3ef29ac3b1fd80feab4684549d13a6b3e24c5fe6 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 02:48:59 -0300 Subject: [PATCH 09/16] avoid widescreen Radio at the ending --- src/engine/fox_radio.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/engine/fox_radio.c b/src/engine/fox_radio.c index 57a0ad4f..847cd40b 100644 --- a/src/engine/fox_radio.c +++ b/src/engine/fox_radio.c @@ -125,7 +125,6 @@ void Radio_PlayMessage(u16* msg, RadioCharacterId character) { switch (gGameState) { case GSTATE_TITLE: - case GSTATE_ENDING: gRadioPrintPosY = 176; gRadioPrintPosX = OTRGetRectDimensionFromLeftEdge(85.0f); gRadioTextBoxPosX = OTRGetRectDimensionFromLeftEdge(80.0f); @@ -135,6 +134,16 @@ void Radio_PlayMessage(u16* msg, RadioCharacterId character) { gRadioPortraitPosY = 174.0f; break; + case GSTATE_ENDING: + gRadioPrintPosY = 176; + gRadioPrintPosX = 85.0f; + gRadioTextBoxPosX = 80.0f; + gRadioTextBoxPosY = 174.0f; + gRadioTextBoxScaleX = 4.63f; + gRadioPortraitPosX = 32.0f; + gRadioPortraitPosY = 174.0f; + break; + case GSTATE_PLAY: gRadioPrintPosY = 180; gRadioPrintPosX = OTRGetRectDimensionFromLeftEdge(79.0f); @@ -428,10 +437,12 @@ void func_radio_800BAAE8(void) { if (mirror) { Lib_TextureRect_RGBA16_MirX(&gMasterDisp, radioPortraitTex, 44, 44, gRadioPortraitPosX, - gRadioPortraitPosY + 20.0f + sp38 + gRadioPortraitScaleY, 1.0f, gRadioPortraitScaleY); + gRadioPortraitPosY + 20.0f + sp38 + gRadioPortraitScaleY, 1.0f, + gRadioPortraitScaleY); } else { Lib_TextureRect_RGBA16(&gMasterDisp, radioPortraitTex, 44, 44, gRadioPortraitPosX, - gRadioPortraitPosY + 20.0f + sp38 + gRadioPortraitScaleY, 1.0f, gRadioPortraitScaleY); + gRadioPortraitPosY + 20.0f + sp38 + gRadioPortraitScaleY, 1.0f, + gRadioPortraitScaleY); } } } @@ -607,8 +618,7 @@ void Radio_Draw(void) { if (ret == 0) { gRadioState = 31; } - } - else { + } else { gRadioMsgCharIndex++; } } From 18631e7292cc6a55a61d07029f6933b32ccaed4b Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 15:14:47 -0300 Subject: [PATCH 10/16] disable versus mode for now --- include/mods.h | 2 +- src/overlays/ovl_menu/fox_option.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/mods.h b/include/mods.h index e578db1c..7fe9a71f 100644 --- a/include/mods.h +++ b/include/mods.h @@ -96,8 +96,8 @@ void RamMod_Update(void); void Spawner(void); #endif -#define DEBUG_SKIP_BRIEFING 1 #define DEBUG_BOSS_KILLER 0 +#define DEBUG_VERSUS 0 /* diff --git a/src/overlays/ovl_menu/fox_option.c b/src/overlays/ovl_menu/fox_option.c index 4cb71e02..f6c4a602 100644 --- a/src/overlays/ovl_menu/fox_option.c +++ b/src/overlays/ovl_menu/fox_option.c @@ -971,6 +971,11 @@ void Option_MainMenu_Update(void) { } if (gControllerPress[gMainController].button & (A_BUTTON | START_BUTTON)) { +#if DEBUG_VERSUS == 0 + if (sMainMenuCursor == 2) { + break; + } +#endif AUDIO_PLAY_SFX(NA_SE_ARWING_DECIDE, gDefaultSfxSource, 4); sLightningYpos = sOptionCardPosY[sMainMenuCursor]; sDrawCursor = false; From cda21a4dea31274ee0273fee96c645e5ad02c457 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 15:15:20 -0300 Subject: [PATCH 11/16] update jukebox menu description --- src/port/ui/ImguiUI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/port/ui/ImguiUI.cpp b/src/port/ui/ImguiUI.cpp index 32c092f3..b7c4539a 100644 --- a/src/port/ui/ImguiUI.cpp +++ b/src/port/ui/ImguiUI.cpp @@ -532,7 +532,7 @@ void DrawDebugMenu() { }); UIWidgets::CVarCheckbox("SFX Jukebox", "gSfxJukebox", { - .tooltip = "Allows you to play sound effects from the game" + .tooltip = "Press L in the Expert Sound options to play sound effects from the game" }); UIWidgets::CVarCheckbox("Spawner Mod", "gSpawnerMod", { From c878b6bcc925e000ae2b16190bb62cb485d5bac7 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 15:15:35 -0300 Subject: [PATCH 12/16] widescreen team help arrows --- src/engine/fox_display.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/engine/fox_display.c b/src/engine/fox_display.c index e8ecce74..48c8f25d 100644 --- a/src/engine/fox_display.c +++ b/src/engine/fox_display.c @@ -35,7 +35,7 @@ void KillBoss(void); #endif void Display_DrawHelpAlert(void) { - bool sp7C; + bool centered; // Enemy pos is centered, so both help arrows should be displayed f32 sp78; f32 sp74; Vec3f sp68; @@ -44,11 +44,13 @@ void Display_DrawHelpAlert(void) { if ((gPlayState == PLAY_PAUSE) || (gTeamHelpActor == NULL)) { return; } + if ((gTeamHelpActor->obj.status != OBJ_ACTIVE) || (gPlayer[0].state_1C8 != PLAYERSTATE_1C8_ACTIVE)) { gTeamHelpActor = NULL; gTeamHelpTimer = 0; return; } + if (gTeamHelpTimer != 0) { gTeamHelpTimer--; if (gTeamHelpTimer == 0) { @@ -67,9 +69,9 @@ void Display_DrawHelpAlert(void) { Matrix_MultVec3f(gCalcMatrix, &sp68, &sp5C); - sp7C = false; + centered = false; if ((sp5C.z < 0.0f) && (sp5C.z > -12000.0f) && (fabsf(sp5C.x) < fabsf(sp5C.z * 0.4f))) { - sp7C = true; + centered = true; } RCP_SetupDL(&gMasterDisp, SETUPDL_12); @@ -86,19 +88,19 @@ void Display_DrawHelpAlert(void) { break; } - switch (sp7C) { + switch (centered) { case false: if (gTeamHelpActor->sfxSource[0] > 0.0f) { - sp78 = 20.0f; + sp78 = 20.0f * OTRGetAspectRatio()-8; sp74 = M_PI / 2; } else { - sp78 = -20.0f; + sp78 = -20.0f * OTRGetAspectRatio()+8; sp74 = -M_PI / 2; } Matrix_Push(&gGfxMatrix); // @port: Tag the transform. - FrameInterpolation_RecordOpenChild("Display_DrawHelpAlert", sp7C); + FrameInterpolation_RecordOpenChild("Display_DrawHelpAlert", centered); Matrix_Translate(gGfxMatrix, sp78, 0.0f, -50.0f, MTXF_APPLY); Matrix_RotateZ(gGfxMatrix, sp74, MTXF_APPLY); @@ -112,20 +114,22 @@ void Display_DrawHelpAlert(void) { break; case true: + // right arrow (both at the same time) Matrix_Push(&gGfxMatrix); // @port: Tag the transform. - FrameInterpolation_RecordOpenChild("Display_DrawHelpAlert", sp7C); - - Matrix_Translate(gGfxMatrix, 20.0f, 0.0f, -50.0f, MTXF_APPLY); + FrameInterpolation_RecordOpenChild("Display_DrawHelpAlert", centered); + Matrix_Translate(gGfxMatrix, 20.0f * OTRGetAspectRatio() - 8, 0.0f, -50.0f, MTXF_APPLY); Matrix_RotateZ(gGfxMatrix, -M_PI / 2, MTXF_APPLY); Matrix_Scale(gGfxMatrix, 0.03f, 0.03f, 0.03f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_1023700); Matrix_Pop(&gGfxMatrix); sp78 = -20.0f; + + // left arrow (both in simultaneous) Matrix_Push(&gGfxMatrix); - Matrix_Translate(gGfxMatrix, -20.0f, 0.0f, -50.0f, MTXF_APPLY); + Matrix_Translate(gGfxMatrix, -20.0f * OTRGetAspectRatio() + 8, 0.0f, -50.0f, MTXF_APPLY); Matrix_RotateZ(gGfxMatrix, M_PI / 2, MTXF_APPLY); Matrix_Scale(gGfxMatrix, 0.03f, 0.03f, 0.03f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); @@ -136,23 +140,23 @@ void Display_DrawHelpAlert(void) { FrameInterpolation_RecordCloseChild(); break; } - - switch (sp7C) { + + switch (centered) { case false: RCP_SetupDL(&gMasterDisp, SETUPDL_76_POINT); gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 0, 255); if (sp78 < 0.0f) { - Graphics_DisplaySmallText(43 - 19, 106, 1.0f, 1.0f, "HELP!!"); + Graphics_DisplaySmallText(OTRGetRectDimensionFromLeftEdge(38.0f), 106, 1.0f, 1.0f, "HELP!!"); } else { - Graphics_DisplaySmallText(SCREEN_WIDTH - 43 - 19, 106, 1.0f, 1.0f, "HELP!!"); + Graphics_DisplaySmallText(OTRGetRectDimensionFromRightEdge(248), 106, 1.0f, 1.0f, "HELP!!"); } break; case true: RCP_SetupDL(&gMasterDisp, SETUPDL_76_POINT); gDPSetPrimColor(gMasterDisp++, 0x00, 0x00, 255, 255, 0, 255); - Graphics_DisplaySmallText(43 - 19, 106, 1.0f, 1.0f, "HELP!!"); - Graphics_DisplaySmallText(SCREEN_WIDTH - 43 - 19, 106, 1.0f, 1.0f, "HELP!!"); + Graphics_DisplaySmallText(OTRGetRectDimensionFromLeftEdge(38.0f) , 106, 1.0f, 1.0f, "HELP!!"); + Graphics_DisplaySmallText(OTRGetRectDimensionFromRightEdge(248), 106, 1.0f, 1.0f, "HELP!!"); break; } } From b70da4c31af36a9340b2bc39317a452105ff06fd Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Fri, 6 Dec 2024 14:45:14 -0600 Subject: [PATCH 13/16] Bump torch and added compressed rom support --- config.yml | 9 +++++++++ tools/Torch | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/config.yml b/config.yml index 6e7b92c6..dbfa5f0d 100644 --- a/config.yml +++ b/config.yml @@ -1,5 +1,14 @@ # Supported Star Fox 64 Versions: US, JP +09f0d105f476b00efa5303a3ebc42e60a7753b7a: + name: Star Fox 64 (U) (V1.1) (Compressed) + preprocess: + decompress_mio0: + method: mio0-comptool + type: decompress + target: f7475fb11e7e6830f82883412638e8390791ab87 + restart: true + f7475fb11e7e6830f82883412638e8390791ab87: name: Star Fox 64 (U) (V1.1) path: assets/yaml/us/rev1 diff --git a/tools/Torch b/tools/Torch index c7d12dad..ed4ee26f 160000 --- a/tools/Torch +++ b/tools/Torch @@ -1 +1 @@ -Subproject commit c7d12dadb52c69bf2ada005006cfd0da5a14f615 +Subproject commit ed4ee26fe6d6ec113efc54d188c5864f44c1e14d From 366d3f00228a0fa92eb2c0f57f9e43e6301da52a Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 19:31:19 -0300 Subject: [PATCH 14/16] fix lives counter textures --- src/engine/fox_hud.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/engine/fox_hud.c b/src/engine/fox_hud.c index c9d95d75..89d7b618 100644 --- a/src/engine/fox_hud.c +++ b/src/engine/fox_hud.c @@ -124,8 +124,8 @@ void HUD_MatrixTranslateCoordLeft(f32* transX, f32* transY) { // Used in the status screen, and when losing a life void HUD_LivesCount1_Draw(f32 xPos, f32 yPos, s32 lifeCount) { - u8* sLifeIconTex[] = { aArwingLifeIconTex, aBlueMarineLifeIconTex, aLandmasterLifeIconTex }; - u16* sLifeIconTLUT[] = { aArwingLifeIconTLUT, aBlueMarineLifeIconTLUT, aLandmasterLifeIconTLUT }; + u8* sLifeIconTex[] = { aArwingLifeIconTex, aLandmasterLifeIconTex, aBlueMarineLifeIconTex }; + u16* sLifeIconTLUT[] = { aArwingLifeIconTLUT, aLandmasterLifeIconTLUT, aBlueMarineLifeIconTLUT }; Player* player; s32 lifeIconIdx; s32 maxLives; @@ -919,8 +919,8 @@ void HUD_DrawLevelClearScreen(void) { // Used in gameplay hud void HUD_LivesCount2_Draw(f32 x, f32 y, s32 number) { - u8* sLivesCounterTexs[] = { aArwingLifeIconTex, aBlueMarineLifeIconTex, aLandmasterLifeIconTex }; - u16* sLivesCounterTLUTs[] = { aArwingLifeIconTLUT, aBlueMarineLifeIconTLUT, aLandmasterLifeIconTLUT }; + u8* sLivesCounterTexs[] = { aArwingLifeIconTex, aLandmasterLifeIconTex, aBlueMarineLifeIconTex }; + u16* sLivesCounterTLUTs[] = { aArwingLifeIconTLUT, aLandmasterLifeIconTLUT, aBlueMarineLifeIconTLUT }; Player* player = &gPlayer[0]; f32 x0; f32 x1; @@ -2823,8 +2823,8 @@ void HUD_EdgeArrows_Draw(s32 idx, bool arg1) { } if (arg1) { - Matrix_Translate(gGfxMatrix, xPos + D_800D1FE8[idx], D_800D1F28[idx] + D_800D2018[idx], - D_800D1F58[idx], MTXF_APPLY); + Matrix_Translate(gGfxMatrix, xPos + D_800D1FE8[idx], D_800D1F28[idx] + D_800D2018[idx], D_800D1F58[idx], + MTXF_APPLY); } else { Matrix_Translate(gGfxMatrix, xPos, D_800D1F28[idx], D_800D1F58[idx], MTXF_APPLY); } From f2be16d1e511de071d58863be79650a75838bee5 Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Fri, 6 Dec 2024 20:45:32 -0300 Subject: [PATCH 15/16] fix ranking interpolation --- src/overlays/ovl_menu/fox_option.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/overlays/ovl_menu/fox_option.c b/src/overlays/ovl_menu/fox_option.c index f6c4a602..6510ef6e 100644 --- a/src/overlays/ovl_menu/fox_option.c +++ b/src/overlays/ovl_menu/fox_option.c @@ -2163,6 +2163,7 @@ void Option_RankingMenu_Draw(void) { Option_Color_FlashRed(&D_menu_801B93F0); colorGB = D_menu_801B93F0; gDPSetPrimColor(gMasterDisp++, 0, 0, 255, colorGB, colorGB, 255); + // Selection arrow Lib_TextureRect_IA8(&gMasterDisp, D_VS_MENU_7004010, 8, 8, 70.0f, (D_menu_801B93E4 * 17.0f) + 55.0f, 1.0f, 1.0f); } @@ -2245,13 +2246,19 @@ void Option_80197914(void) { for (i = 0, vec1 = D_menu_801AF100, vec2 = D_menu_801AF118; i < 2; i++, vec1++, vec2++) { Matrix_Push(&gGfxMatrix); - Matrix_Translate(gGfxMatrix, vec1->x, vec1->y, -500.0f, MTXF_APPLY); + // @port: Tag the transform. + FrameInterpolation_RecordOpenChild("RANKING_BORDERS", i); + + Matrix_Translate(gGfxMatrix, vec1->x, vec1->y, -500.0f, MTXF_APPLY); // @port: Increase the scale by 2.5f to compensate for missing borders Matrix_Scale(gGfxMatrix, vec2->x * 4, vec2->y + 2.5f, 1.0f, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, D_menu_801AEF30); Matrix_Pop(&gGfxMatrix); + + // @port Pop the transform id. + FrameInterpolation_RecordCloseChild(); } } @@ -2610,11 +2617,17 @@ f32 D_menu_801AF144 = 2.7f; void Option_RankingRouteMedal_Draw(f32 xPos, f32 yPos, f32 zPos) { RCP_SetupDL(&gMasterDisp, SETUPDL_53); Matrix_Push(&gGfxMatrix); + // @port: Tag the transform. + FrameInterpolation_RecordOpenChild("Option_RankingRouteMedal_Draw", (u32) xPos << 8 | (u32) yPos); + Matrix_Translate(gGfxMatrix, xPos - D_menu_801AF140, yPos + D_menu_801AF144, zPos, MTXF_APPLY); Matrix_Scale(gGfxMatrix, D_menu_801AF13C, D_menu_801AF13C, D_menu_801AF13C, MTXF_APPLY); Matrix_SetGfxMtx(&gMasterDisp); gSPDisplayList(gMasterDisp++, aMapMedalDL); Matrix_Pop(&gGfxMatrix); + + // @port Pop the transform id. + FrameInterpolation_RecordCloseChild(); } s32 Option_GetRouteLineColor(PlanetId start, PlanetId end) { From cbaa2b5a4adaf24a4a4de25f83b3d9b2e9d9111b Mon Sep 17 00:00:00 2001 From: Sonic Dreamcaster Date: Sat, 7 Dec 2024 02:45:37 -0300 Subject: [PATCH 16/16] definitive (hopefully) radio crash fix. --- src/engine/fox_radio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/fox_radio.c b/src/engine/fox_radio.c index 847cd40b..eb443767 100644 --- a/src/engine/fox_radio.c +++ b/src/engine/fox_radio.c @@ -613,8 +613,8 @@ void Radio_Draw(void) { if (!(fakeTemp)) { ret = Audio_GetCurrentVoiceStatus(); - if (gRadioMsgCharIndex < 60) { - if (gRadioMsg[gRadioMsgCharIndex + 1] == MSGCHAR_NXT && *gRadioMsg != 38) { + if (gRadioMsg[gRadioMsgCharIndex + 1] != MSGCHAR_END) { + if (gRadioMsg[gRadioMsgCharIndex + 1] == MSGCHAR_NXT) { if (ret == 0) { gRadioState = 31; }