From 59975a6fa1cedf96a03330f39af3a50f24b3a477 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Wed, 8 Apr 2026 11:20:08 -0400 Subject: [PATCH 1/5] Oxygen & Tears of Light now widescreen --- src/d/d_meter_HIO.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/d/d_meter_HIO.cpp b/src/d/d_meter_HIO.cpp index dbfe11cf53..c23e6c3230 100644 --- a/src/d/d_meter_HIO.cpp +++ b/src/d/d_meter_HIO.cpp @@ -2293,7 +2293,10 @@ void dMeter_drawHIO_c::updateOnWide() { g_drawHIO.mMainHUDButtonsPosX = mDoGph_gInf_c::ScaleHUDXRight(g_drawHIO.mMainHUDButtonsPosX); g_drawHIO.mRingHUDButtonsPosX = mDoGph_gInf_c::ScaleHUDXRight(g_drawHIO.mRingHUDButtonsPosX); + g_drawHIO.mLightDrop.mVesselPosX = mDoGph_gInf_c::ScaleHUDXRight(g_drawHIO.mLightDrop.mVesselPosX); + g_drawHIO.mLightDrop.mVesselTalkPosX = mDoGph_gInf_c::ScaleHUDXRight(g_drawHIO.mLightDrop.mVesselTalkPosX); g_drawHIO.mRupeeKeyPosX = mDoGph_gInf_c::ScaleHUDXRight(g_drawHIO.mRupeeKeyPosX); + g_drawHIO.mOxygenMeterPosX = mDoGph_gInf_c::ScaleHUDXLeft(g_drawHIO.mOxygenMeterPosX); g_drawHIO.mButtonCrossOFFPosX = mDoGph_gInf_c::ScaleHUDXLeft(g_drawHIO.mButtonCrossOFFPosX); g_drawHIO.mButtonCrossONPosX = mDoGph_gInf_c::ScaleHUDXLeft(g_drawHIO.mButtonCrossONPosX); g_drawHIO.mLifeGaugePosX = mDoGph_gInf_c::ScaleHUDXLeft(g_drawHIO.mLifeGaugePosX); From 10d0b014c636d304c5223a07534847b822988f3a Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Wed, 8 Apr 2026 11:39:53 -0400 Subject: [PATCH 2/5] Modified line width back to vanilla default --- src/d/d_map_path.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d/d_map_path.cpp b/src/d/d_map_path.cpp index f7ce0f1a51..c57dd85a48 100644 --- a/src/d/d_map_path.cpp +++ b/src/d/d_map_path.cpp @@ -19,7 +19,7 @@ constexpr u16 kMapResolutionMultiplier = 4; // Line widths are relative to the framebuffer size. Since we're rendering to a separate // framebuffer, we have to scale them accordingly. The original game used about half of the // EFB for the map rendering, so this is a reasonable approximation. -constexpr u8 kMapLineWidthMultiplier = 2; +constexpr u8 kMapLineWidthMultiplier = 1; #endif void dMpath_n::dTexObjAggregate_c::create() { From 406580c5d64e920282d35e5350d83a5c235d2863 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Wed, 8 Apr 2026 11:44:35 -0400 Subject: [PATCH 3/5] nvm that --- src/d/d_map_path.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/d/d_map_path.cpp b/src/d/d_map_path.cpp index c57dd85a48..f7ce0f1a51 100644 --- a/src/d/d_map_path.cpp +++ b/src/d/d_map_path.cpp @@ -19,7 +19,7 @@ constexpr u16 kMapResolutionMultiplier = 4; // Line widths are relative to the framebuffer size. Since we're rendering to a separate // framebuffer, we have to scale them accordingly. The original game used about half of the // EFB for the map rendering, so this is a reasonable approximation. -constexpr u8 kMapLineWidthMultiplier = 1; +constexpr u8 kMapLineWidthMultiplier = 2; #endif void dMpath_n::dTexObjAggregate_c::create() { From a94fa51c805f5b1422cc9c13677035dd80346c8f Mon Sep 17 00:00:00 2001 From: Jeffrey Crowell Date: Wed, 8 Apr 2026 15:13:21 -0400 Subject: [PATCH 4/5] Fix Crash at the end of the Armogohma cutscene #282 zero stack buffers in JASSeqParser::cmdPrintf on PC builds use AVOID_UB instead of TARGET_PC --- libs/JSystem/src/JAudio2/JASSeqParser.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/JSystem/src/JAudio2/JASSeqParser.cpp b/libs/JSystem/src/JAudio2/JASSeqParser.cpp index 376ec22b4c..b2077ce499 100644 --- a/libs/JSystem/src/JAudio2/JASSeqParser.cpp +++ b/libs/JSystem/src/JAudio2/JASSeqParser.cpp @@ -813,9 +813,15 @@ s32 JASSeqParser::cmdDump(JASTrack* param_0, u32* param_1) { } s32 JASSeqParser::cmdPrintf(JASTrack* param_0, u32* param_1) { +#if AVOID_UB + u8 stack_c[4] = {0}; + u32 stack_10[4] = {0}; + char buffer[128] = {0}; +#else u8 stack_c[4]; u32 stack_10[4]; char buffer[128]; +#endif JASSeqCtrl* seqCtrl = param_0->getSeqCtrl(); u32 r30 = 0; From 7fd77e611b1aa7cc8e282719cc57adcd58555f43 Mon Sep 17 00:00:00 2001 From: MelonSpeedruns Date: Wed, 8 Apr 2026 17:17:03 -0400 Subject: [PATCH 5/5] Fixes senses when changing window size --- src/d/actor/d_a_alink_effect.inc | 3 +-- src/d/d_kankyo.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/d/actor/d_a_alink_effect.inc b/src/d/actor/d_a_alink_effect.inc index 1c02cb54f0..d595cd4293 100644 --- a/src/d/actor/d_a_alink_effect.inc +++ b/src/d/actor/d_a_alink_effect.inc @@ -1564,8 +1564,7 @@ void daAlink_c::setMetamorphoseEffectStartLink() { #endif #if TARGET_PC - static const Vec effWideScale = {mDoGph_gInf_c::getAspect(), 1.0f, 1.0f}; - emitter->setGlobalParticleScale(effWideScale); + emitter->setGlobalParticleScale(mDoGph_gInf_c::getScale(), 1.0f); #endif } diff --git a/src/d/d_kankyo.cpp b/src/d/d_kankyo.cpp index b9262bab23..8644d433aa 100644 --- a/src/d/d_kankyo.cpp +++ b/src/d/d_kankyo.cpp @@ -821,12 +821,20 @@ static void dKy_FiveSenses_fullthrottle_dark_static1() { } if (kankyo->senses_ef_emitter1 != NULL) { + #if TARGET_PC + kankyo->senses_ef_emitter1->setGlobalParticleScale(mDoGph_gInf_c::getScale(), 1.0f); + #endif + kankyo->senses_ef_emitter1->setGlobalTranslation(particle_pos.x, particle_pos.y, particle_pos.z); kankyo->senses_ef_emitter1->setGlobalAlpha(kankyo->senses_effect_strength * 255.0f); } if (kankyo->senses_ef_emitter2 != NULL) { + #if TARGET_PC + kankyo->senses_ef_emitter2->setGlobalParticleScale(mDoGph_gInf_c::getScale(), 1.0f); + #endif + kankyo->senses_ef_emitter2->setGlobalTranslation(particle_pos.x, particle_pos.y, particle_pos.z);