GameSettings: Approve speed hacks for RetroAchievements

Some of the speed hacks were not approved for RetroAchievements, meaning that users had to choose between not getting hardcore achievements, or having poor performance.

Also, renamed the instances of `$Limit internal FPS to VPS (improves performance)` to `$Limit internal frame rate (speed hack)` for consistency. They are enabled by default, so unless the user disabled them, it won't break the configuration.
This commit is contained in:
Martino Fontana
2026-06-16 22:27:02 +02:00
parent 485f5cae55
commit a5f6ba81fa
45 changed files with 134 additions and 32 deletions
File diff suppressed because one or more lines are too long
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+5 -2
View File
@@ -8,11 +8,14 @@ SyncOnSkipIdle = False
[OnFrame]
# `nop` a branch that skips a call to `VIWaitForRetrace`.
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
0x80013818:dword:0x60000000
[ActionReplay]
# Add action replay cheats here.
[OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -10,3 +10,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -10,3 +10,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -5,6 +5,9 @@ $Limit internal frame rate during startup (speed hack)
0x80277034:dword:0x60000000
0x80277040:dword:0x60000000
[OnFrame_Enabled]
$Limit internal frame rate during startup (speed hack)
[Gecko]
$16:9 Widescreen
04004600 C002A604
+3 -3
View File
@@ -2,11 +2,11 @@
[OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`.
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
0x80149C38:dword:0x60000000
[OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
+3 -3
View File
@@ -2,11 +2,11 @@
[OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`.
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
0x8014CF88:dword:0x60000000
[OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
+3 -3
View File
@@ -2,11 +2,11 @@
[OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`.
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
0x80101A80:dword:0x60000000
[OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
+3 -3
View File
@@ -2,11 +2,11 @@
[OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`.
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
0x80101B08:dword:0x60000000
[OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
+3 -3
View File
@@ -2,11 +2,11 @@
[OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`.
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
0x8010F210:dword:0x60000000
[OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
+3 -3
View File
@@ -2,11 +2,11 @@
[OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`.
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
0x80101390:dword:0x60000000
[OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal FPS to VPS (improves performance)
$Limit internal frame rate (speed hack)
+3 -3
View File
@@ -6,11 +6,11 @@
# The loop waits for a vblank interrupt, spamming `OSYieldThread` in the meantime.
# The patch replaces the call to `VIWaitForRetrace`, which still executes the other threads,
# but sleeps instead of spinlocking when there is no thread to execute.
$Speed hack
$Idle loop speed hack
0x802B2908:dword:0x4826F5C9
[OnFrame_Enabled]
$Speed hack
$Idle loop speed hack
[Patches_RetroAchievements_Verified]
$Speed hack
$Idle loop speed hack
+3 -3
View File
@@ -6,11 +6,11 @@
# The loop waits for a vblank interrupt, spamming `OSYieldThread` in the meantime.
# The patch replaces the call to `VIWaitForRetrace`, which still executes the other threads,
# but sleeps instead of spinlocking when there is no thread to execute.
$Speed hack
$Idle loop speed hack
0x802B3118:dword:0x4826F5B9
[OnFrame_Enabled]
$Speed hack
$Idle loop speed hack
[Patches_RetroAchievements_Verified]
$Speed hack
$Idle loop speed hack
+3 -3
View File
@@ -6,11 +6,11 @@
# The loop waits for a vblank interrupt, spamming `OSYieldThread` in the meantime.
# The patch replaces the call to `VIWaitForRetrace`, which still executes the other threads,
# but sleeps instead of spinlocking when there is no thread to execute.
$Speed hack
$Idle loop speed hack
0x802B2908:dword:0x4826F5C9
[OnFrame_Enabled]
$Speed hack
$Idle loop speed hack
[Patches_RetroAchievements_Verified]
$Speed hack
$Idle loop speed hack
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -7,3 +7,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled]
$BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled]
$Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified]
$Limit internal frame rate (speed hack)
+2 -2
View File
@@ -9,5 +9,5 @@ static constexpr std::string_view ACHIEVEMENT_APPROVED_LIST_FILENAME = "Approved
// After building tests, find the new hash with:
// ./Binaries/Tests/tests --gtest_filter=PatchAllowlist.VerifyHashes
static const inline Common::SHA1::Digest ACHIEVEMENT_APPROVED_LIST_HASH = {
0x0B, 0x47, 0x3F, 0x5A, 0x84, 0xC0, 0xC1, 0x6D, 0x08, 0x88,
0x05, 0x5C, 0xC6, 0x17, 0x60, 0xED, 0x02, 0x3C, 0x75, 0xF0};
0xE6, 0xCD, 0xD7, 0x85, 0x7A, 0xBA, 0x72, 0xEC, 0x34, 0x11,
0x2B, 0x16, 0xB1, 0x31, 0xD0, 0x0A, 0x0A, 0xD7, 0xFC, 0xCC};