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.
This commit is contained in:
Brian Degenhardt
2026-08-16 11:18:41 -07:00
parent 541b1abfaf
commit da25cb84cc
4 changed files with 6 additions and 6 deletions
@@ -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
@@ -1019,10 +1019,10 @@ val EN: Map<String, String> = 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<String, String> = 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",
@@ -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) } },
@@ -244,7 +244,7 @@ fun PerformanceTab(state: MutableState<Settings>) {
// 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)) },