From da25cb84cc2a5d0d44418a9bfae5d2bb8bf81384 Mon Sep 17 00:00:00 2001 From: Brian Degenhardt Date: Sun, 16 Aug 2026 11:18:41 -0700 Subject: [PATCH] Android: call eeClampMode 4 Exact, the name the other frontends use The desktop and Big Picture pickers landed the same tier as Exact, and GameIndex.md documents it under that name. Android was the only frontend calling it something else, which made the same setting look like two different ones depending on which screen the user was on. The translation key moves with the label rather than keeping the old name for a value it no longer matches, so the map stays alphabetical and there is nothing left to mislead the next reader. --- .../android/app/src/main/java/com/armsx2/config/Settings.kt | 4 ++-- platforms/android/app/src/main/java/com/armsx2/i18n/I18n.kt | 4 ++-- .../main/java/com/armsx2/ui/emulation/EmulationMenuScreen.kt | 2 +- .../src/main/java/com/armsx2/ui/settings/PerformanceTab.kt | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/platforms/android/app/src/main/java/com/armsx2/config/Settings.kt b/platforms/android/app/src/main/java/com/armsx2/config/Settings.kt index ed2f081734..23047dabdf 100644 --- a/platforms/android/app/src/main/java/com/armsx2/config/Settings.kt +++ b/platforms/android/app/src/main/java/com/armsx2/config/Settings.kt @@ -69,7 +69,7 @@ data class Settings( val eeCycleRate: Int = 0, /** EmuCore/Speedhacks/EECycleSkip — 0..3. 0 = no skip. */ val eeCycleSkip: Int = 0, - /** EE/FPU clamp mode — 0 None / 1 Normal / 2 Extra / 3 Full / 4 Ludicrous + /** EE/FPU clamp mode — 0 None / 1 Normal / 2 Extra / 3 Full / 4 Exact * (PCSX2 default Normal). Unpacks to EmuCore/CPU/Recompiler * fpuOverflow/fpuExtraOverflow/fpuFullMode/fpuExactMode. * 4 is Full plus the rest of the EE multiplier's one-ULP deficit and a @@ -971,7 +971,7 @@ data class Settings( fun floatAt(key: String): Float? = ini[key]?.toFloatOrNull() fun strAt(key: String): String? = ini[key] - // EE/FPU clamp (0 None / 1 Normal / 2 Extra / 3 Full / 4 Ludicrous) is packed by + // EE/FPU clamp (0 None / 1 Normal / 2 Extra / 3 Full / 4 Exact) is packed by // applyTo into four cumulative bool keys (fpuOverflow>=1, fpuExtraOverflow>=2, // fpuFullMode>=3, fpuExactMode>=4). Read them back highest-first, and treat the // exact key's absence as an older core rather than as mode 3 — a build without it diff --git a/platforms/android/app/src/main/java/com/armsx2/i18n/I18n.kt b/platforms/android/app/src/main/java/com/armsx2/i18n/I18n.kt index 41ca026a3b..fed7bec594 100644 --- a/platforms/android/app/src/main/java/com/armsx2/i18n/I18n.kt +++ b/platforms/android/app/src/main/java/com/armsx2/i18n/I18n.kt @@ -1019,10 +1019,10 @@ val EN: Map = mapOf( "patches.widescreen.description" to "Automatically applies a widescreen patch to EVERY game that has one — you don't pick them per game. Games that weren't built for 16:9 can come out stretched, cropped, or missing on-screen text, so turn this off if a game looks wrong. Applies at boot — restart the game after changing this.", "perf.advancedSpeedhacks.legend" to "MTVU - runs VU1 on its own thread (faster on multi-core); can break games needing tight EE/VU1 sync.\n", "perf.advancedSpeedhacks.title" to "Advanced Speedhacks", + "perf.clamp.exact" to "Exact", "perf.clamp.extra" to "Extra", "perf.clamp.extraSign" to "Extra+Sign", "perf.clamp.full" to "Full", - "perf.clamp.ludicrous" to "Ludicrous", "perf.clamp.none" to "None", "perf.clamp.normal" to "Normal", "perf.displayFpsCap.description" to "Caps the PRESENTED (display) frame rate — emulation keeps full speed, so this is a display cap, not true emulation FPS. Any value works (use with Speed Limit % to fine-tune per game). 0 = off; values between the clean rates (60/30/20/15) pace a little unevenly.", @@ -1040,7 +1040,7 @@ val EN: Map = mapOf( "perf.eeCycleRate.label" to "EE Cycle Rate", "perf.eeCycleSkip.description" to "Skips EE cycles for speed. Can cause stutter, physics bugs, or crashes.", "perf.eeCycleSkip.label" to "EE Cycle Skip", - "perf.eeFpuClamping.description" to "FPU overflow/rounding accuracy. Ludicrous reproduces the EE's multiplier and divider bit-for-bit, for the few games that check results exactly — it is the slowest setting by some way. Games that carry their own clamping entry in the game database keep that entry instead of this. Restart the game to apply.", + "perf.eeFpuClamping.description" to "FPU overflow/rounding accuracy. Exact reproduces the EE's multiplier and divider bit-for-bit, for the few games that check results exactly — it is the slowest setting by some way. Games that carry their own clamping entry in the game database keep that entry instead of this. Restart the game to apply.", "perf.eeFpuClamping.label" to "EE/FPU Clamping", "perf.eeFpuRoundMode.description" to "EE FPU float rounding. Chop (toward zero) is the PS2 default — change only if a game needs it. Restart the game to apply.", "perf.eeFpuRoundMode.label" to "EE FPU Round Mode", diff --git a/platforms/android/app/src/main/java/com/armsx2/ui/emulation/EmulationMenuScreen.kt b/platforms/android/app/src/main/java/com/armsx2/ui/emulation/EmulationMenuScreen.kt index 3390f9589e..5ca0c02dc5 100644 --- a/platforms/android/app/src/main/java/com/armsx2/ui/emulation/EmulationMenuScreen.kt +++ b/platforms/android/app/src/main/java/com/armsx2/ui/emulation/EmulationMenuScreen.kt @@ -1031,7 +1031,7 @@ private fun PerformancePane(state: EmulationMenuUiState, viewModel: EmulationMen ) HorizontalOptions( title = str("perf.eeFpuClamping.label"), - options = listOf(str("perf.clamp.none"), str("perf.clamp.normal"), str("perf.clamp.extra"), str("perf.clamp.full"), str("perf.clamp.ludicrous")) + options = listOf(str("perf.clamp.none"), str("perf.clamp.normal"), str("perf.clamp.extra"), str("perf.clamp.full"), str("perf.clamp.exact")) .mapIndexed { index, label -> index to label }, selected = settings.eeClampMode, onSelect = { value -> viewModel.updateSettings { it.copy(eeClampMode = value) } }, diff --git a/platforms/android/app/src/main/java/com/armsx2/ui/settings/PerformanceTab.kt b/platforms/android/app/src/main/java/com/armsx2/ui/settings/PerformanceTab.kt index 7ecca656a5..c033155fed 100644 --- a/platforms/android/app/src/main/java/com/armsx2/ui/settings/PerformanceTab.kt +++ b/platforms/android/app/src/main/java/com/armsx2/ui/settings/PerformanceTab.kt @@ -244,7 +244,7 @@ fun PerformanceTab(state: MutableState) { // at a speed cost. Needs a recompiler reset, so restart the game. SegmentedRow( label = str("perf.eeFpuClamping.label"), - options = listOf(str("perf.clamp.none"), str("perf.clamp.normal"), str("perf.clamp.extra"), str("perf.clamp.full"), str("perf.clamp.ludicrous")), + options = listOf(str("perf.clamp.none"), str("perf.clamp.normal"), str("perf.clamp.extra"), str("perf.clamp.full"), str("perf.clamp.exact")), selectedIndex = s.eeClampMode.coerceIn(0, 4), description = str("perf.eeFpuClamping.description"), onChange = { apply(s.copy(eeClampMode = it)) },