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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame]
# `nop` a branch that skips a call to `VIWaitForRetrace`. # `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 0x80013818:dword:0x60000000
[ActionReplay] [ActionReplay]
# Add action replay cheats here. # Add action replay cheats here.
[OnFrame_Enabled] [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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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 0x80277034:dword:0x60000000
0x80277040:dword:0x60000000 0x80277040:dword:0x60000000
[OnFrame_Enabled]
$Limit internal frame rate during startup (speed hack)
[Gecko] [Gecko]
$16:9 Widescreen $16:9 Widescreen
04004600 C002A604 04004600 C002A604
+3 -3
View File
@@ -2,11 +2,11 @@
[OnFrame] [OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`. # 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 0x80149C38:dword:0x60000000
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance) $Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified] [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] [OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`. # 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 0x8014CF88:dword:0x60000000
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance) $Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified] [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] [OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`. # 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 0x80101A80:dword:0x60000000
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance) $Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified] [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] [OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`. # 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 0x80101B08:dword:0x60000000
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance) $Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified] [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] [OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`. # 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 0x8010F210:dword:0x60000000
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance) $Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified] [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] [OnFrame]
# After `GXDrawDone`, `nop` a branch that skips a call to `VIWaitForRetrace`. # 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 0x80101390:dword:0x60000000
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal FPS to VPS (improves performance) $Limit internal frame rate (speed hack)
[Patches_RetroAchievements_Verified] [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 loop waits for a vblank interrupt, spamming `OSYieldThread` in the meantime.
# The patch replaces the call to `VIWaitForRetrace`, which still executes the other threads, # 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. # but sleeps instead of spinlocking when there is no thread to execute.
$Speed hack $Idle loop speed hack
0x802B2908:dword:0x4826F5C9 0x802B2908:dword:0x4826F5C9
[OnFrame_Enabled] [OnFrame_Enabled]
$Speed hack $Idle loop speed hack
[Patches_RetroAchievements_Verified] [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 loop waits for a vblank interrupt, spamming `OSYieldThread` in the meantime.
# The patch replaces the call to `VIWaitForRetrace`, which still executes the other threads, # 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. # but sleeps instead of spinlocking when there is no thread to execute.
$Speed hack $Idle loop speed hack
0x802B3118:dword:0x4826F5B9 0x802B3118:dword:0x4826F5B9
[OnFrame_Enabled] [OnFrame_Enabled]
$Speed hack $Idle loop speed hack
[Patches_RetroAchievements_Verified] [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 loop waits for a vblank interrupt, spamming `OSYieldThread` in the meantime.
# The patch replaces the call to `VIWaitForRetrace`, which still executes the other threads, # 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. # but sleeps instead of spinlocking when there is no thread to execute.
$Speed hack $Idle loop speed hack
0x802B2908:dword:0x4826F5C9 0x802B2908:dword:0x4826F5C9
[OnFrame_Enabled] [OnFrame_Enabled]
$Speed hack $Idle loop speed hack
[Patches_RetroAchievements_Verified] [Patches_RetroAchievements_Verified]
$Speed hack $Idle loop speed hack
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -7,3 +7,6 @@ $BAT Speedhack
[OnFrame_Enabled] [OnFrame_Enabled]
$BAT Speedhack $BAT Speedhack
[Patches_RetroAchievements_Verified]
$BAT Speedhack
+3
View File
@@ -6,3 +6,6 @@ $Limit internal frame rate (speed hack)
[OnFrame_Enabled] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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] [OnFrame_Enabled]
$Limit internal frame rate (speed hack) $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: // After building tests, find the new hash with:
// ./Binaries/Tests/tests --gtest_filter=PatchAllowlist.VerifyHashes // ./Binaries/Tests/tests --gtest_filter=PatchAllowlist.VerifyHashes
static const inline Common::SHA1::Digest ACHIEVEMENT_APPROVED_LIST_HASH = { static const inline Common::SHA1::Digest ACHIEVEMENT_APPROVED_LIST_HASH = {
0x0B, 0x47, 0x3F, 0x5A, 0x84, 0xC0, 0xC1, 0x6D, 0x08, 0x88, 0xE6, 0xCD, 0xD7, 0x85, 0x7A, 0xBA, 0x72, 0xEC, 0x34, 0x11,
0x05, 0x5C, 0xC6, 0x17, 0x60, 0xED, 0x02, 0x3C, 0x75, 0xF0}; 0x2B, 0x16, 0xB1, 0x31, 0xD0, 0x0A, 0x0A, 0xD7, 0xFC, 0xCC};