Implement unlocked framerates via interpolation (#315)

* Disable waitForTick and waitBlanking

* Initial frame interpolation implementation

* Initial batch of speed fixes

* Fix Iron Boots

* Strip dead code once used for debugging

* Interpolate shadows

* Revert overzealous/redundant lookups

* Fix JUTFader

* Fix field map cursor

* Fix various particle effects

* Fix Midna when riding Wolf Link

* Fix title logo

* Title Logo 2: Electric Boogaloo

* Fixed grass and flowers

* "Unlock Framerate" config option (WIP)

* Wrap more things in TARGET_PC

* Finish wrapping things in TARGET_PC

* Missed one

* Disable dComIfGd_drawXluListInvisible when interpolating

---------

Co-authored-by: Luke Street <luke@street.dev>
This commit is contained in:
Irastris
2026-04-11 03:06:25 -04:00
committed by GitHub
parent 8c07d8bb8e
commit fb9178cac9
33 changed files with 1039 additions and 147 deletions
+16 -12
View File
@@ -19,24 +19,24 @@ JUTFader::JUTFader(int x, int y, int width, int height, JUtility::TColor pColor)
void JUTFader::control() {
if (0 <= mEStatus && mEStatus-- == 0) {
mStatus = field_0x24;
}
mStatus = field_0x24;
}
if (mStatus == 1) {
return;
}
if (mStatus == 1) {
return;
}
switch (mStatus) {
switch (mStatus) {
case 0:
mColor.a = 0xFF;
break;
case 2:
#if AVOID_UB
#if AVOID_UB
if (field_0x8 == 0) {
mStatus = 1;
break;
}
#endif
#endif
mColor.a = 0xFF - ((++field_0xa * 0xFF) / field_0x8);
if (field_0xa >= field_0x8) {
@@ -45,12 +45,12 @@ void JUTFader::control() {
break;
case 3:
#if AVOID_UB
#if AVOID_UB
if (field_0x8 == 0) {
mStatus = 0;
break;
}
#endif
#endif
mColor.a = ((++field_0xa * 0xFF) / field_0x8);
if (field_0xa >= field_0x8) {
@@ -58,8 +58,12 @@ void JUTFader::control() {
}
break;
}
draw();
}
#ifndef TARGET_PC
// Frame interpolation: draw call moved to JFWDisplay
draw();
#endif
}
void JUTFader::draw() {