Skip to content

Commit 314e53b

Browse files
220111125hz
authored andcommitted
Recommended settings for Persona 3 Reload (#568)
Persona 3 Reload (Steam 2161700) gets a recommended list that stops its logos and movies flashing. Most frames showed a flat colour or diagonal streaks instead of the picture. The fix is two existing switches, with no runtime change.
1 parent 356a398 commit 314e53b

2 files changed

Lines changed: 31 additions & 6 deletions

File tree

‎app/Madeira/GameRecommendations.swift‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1424,6 +1424,8 @@ extension GameRecommendations {
14241424
programs: ["theescapists2.exe"], steamPrograms: [], list: escapists2),
14251425
SteamTitle(appIDs: [4000], folders: ["garrysmod"],
14261426
programs: ["gmod.exe"], steamPrograms: [], list: garrysMod),
1427+
SteamTitle(appIDs: [2161700], folders: ["p3r"],
1428+
programs: ["p3r.exe"], steamPrograms: [], list: persona3Reload),
14271429
SteamTitle(appIDs: [980610], folders: ["quaver"],
14281430
programs: ["quaver.exe"], steamPrograms: [], list: quaver),
14291431
SteamTitle(appIDs: [239140], folders: ["dying light"],
@@ -1553,6 +1555,27 @@ extension GameRecommendations {
15531555
""",
15541556
avx: false, nvidia: false, wineVCRT: false, display: "fit")
15551557

1558+
/// Persona 3 Reload (Steam App ID 2161700). Device-tested on an iPhone 17 Pro Max (2026-11-04): its logos and movies
1559+
/// flashed because the quad that shows them reads its UVs from a typed view in an UPLOAD ring, and the converted
1560+
/// shaders ignore a typed view's element offset, so a view off a 64-byte boundary read the bytes before it (a flat
1561+
/// texel or streaks in those frames). typed-view-align and typed-view-shadow stop that. Some frame stutters remain
1562+
/// in the game. This is the owner's working list as it ran, without env.FEX_TSOENABLED = 1 (already FEX's default),
1563+
/// so it has no block of tested defaults.
1564+
static let persona3Reload = GameRecommendation(
1565+
id: "persona-3-reload", title: "Persona 3 Reload", version: 1,
1566+
config: """
1567+
# Madeira's recommended settings for Persona 3 Reload.
1568+
# Reset to Recommended, at the bottom of the game's settings, brings them back.
1569+
typed-view-align = 16
1570+
typed-view-shadow = 1
1571+
pool-split = 1
1572+
real-suspend = 1
1573+
env.MADEIRA_X64_IMAGE_NOCOPY = 1
1574+
env.MADEIRA_FEX_AVX = 1
1575+
env.MADEIRA_EC_HOOK_TRACE = 0
1576+
""",
1577+
avx: false, nvidia: false, wineVCRT: false)
1578+
15561579
/// Garry's Mod (Steam App ID 4000). Device-tested on an iPhone 17 Pro Max (2026-10-31): multiplayer works on Steam's
15571580
/// x86-64 branch (64-bit gmod.exe, 60 FPS against 17-53 on the 32-bit default branch) with the launch option
15581581
/// -nochromium, since the Chromium menu's helpers don't start yet. The pool lines make room for the 64-bit

‎tests/host/check-game-recommendations.py‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def block(source, start, end):
7676
'batman-arkham-city-goty', 'trails-in-the-sky-1st-chapter', 'subnautica-2', 'rdr1-steam', 'resident-evil-requiem', 'resident-evil-requiem-demo',
7777
'life-is-strange-remastered', 'life-is-strange-2', 'project-zomboid', 'spiderheck', 'rounds', 'plateup',
7878
'final-fantasy-tactics-ivalice-chronicles', 'jetboard-joust', 'dead-as-disco', 'tung', 'sekiro-shadows-die-twice', 'stardew-valley',
79-
'glyphica-typing-survival', 'the-adventures-of-elliot', 'the-escapists-2', 'garrys-mod'}
79+
'glyphica-typing-survival', 'the-adventures-of-elliot', 'the-escapists-2', 'garrys-mod', 'persona-3-reload'}
8080
assert set(presets) == {'rdr2-steam', 'rdr2-other', 'gta5e-steam', 'gta5e-other', 'gta5l-steam', 'gta5l-other', 'gta4-steam',
8181
'ghost-of-tsushima', 'god-of-war', 'horizon-zero-dawn', 'horizon-forbidden-west', 'ratchet-clank-rift-apart',
8282
'crysis-remastered', 'crysis-2-remastered', 'crysis-3-remastered', 'rockstar-launcher', 'rockstar-launcher-setup',
@@ -168,8 +168,8 @@ def block(source, start, end):
168168
if ident in ('dark-souls-remastered', 'dark-souls-iii'):
169169
p['tested'], p['fork'] = [line for line in p['lines'][2:] if not line.startswith('#')], []
170170
continue
171-
# The Fallout lists are the standard one plus a switch: the games ran with it.
172-
if ident in ('standard', 'fallout-new-vegas', 'fallout-3', 'black-ops-1', 'black-ops-2', 'borderlands-2'):
171+
# The Fallout lists are the standard one plus a switch: the games ran with it. Persona 3 Reload's is the list as it ran.
172+
if ident in ('standard', 'fallout-new-vegas', 'fallout-3', 'black-ops-1', 'black-ops-2', 'borderlands-2', 'persona-3-reload'):
173173
assert not set(FORK_DEFAULTS) & set(p['lines']), (ident, "the standard list has none of madeira-bcd's defaults")
174174
p['tested'], p['fork'] = p['lines'][2:], []
175175
continue
@@ -422,8 +422,8 @@ def settings(lines):
422422
assert got['switches'] == ('avx: true, nvidia: true, wineVCRT: false, fastSync: true, semaphoreFastPath: false, '
423423
'resolution: "1280x720", display: "fit"'), got['switches']
424424
assert not any(line.startswith(('view-census', 'typed-view-align', 'typed-view-shadow'))
425-
for p in presets.values() if p not in (hzd, got, hfw) for line in p['lines']), \
426-
'the typed-view fix is HZD\'s, GoT\'s and HFW\'s only'
425+
for p in presets.values() if p not in (hzd, got, hfw, presets['persona-3-reload']) for line in p['lines']), \
426+
'the typed-view fix is HZD\'s, GoT\'s, HFW\'s and Persona 3 Reload\'s only'
427427
# Horizon Forbidden West, version 5 (community builds 517-534): AVX and NVIDIA on, frees released at once,
428428
# programs from their own image, the swap file and a 3 GB budget with events, the typed-view fix with the
429429
# large table, float3 copies (typed-view-rgb32) and MipLevels 0 as the full chain (mip0-full).
@@ -804,7 +804,9 @@ def settings(lines):
804804
"The Escapists 2 by App ID, folder and program")
805805
check(id(steam + #"\GarrysMod"#, 4000) == "garrys-mod" && id(steam + #"\GarrysMod\bin\win64\gmod.exe"#) == "garrys-mod"
806806
&& id(steam + #"\GarrysMod\hl2.exe"#) == "garrys-mod", "Garry's Mod by App ID, folder and program, both branches")
807-
check(R.steamTitles.count == 51 && R.all.count == 77, "51 merged titles, 77 lists")
807+
check(id(steam + #"\P3R"#, 2161700) == "persona-3-reload" && id(steam + #"\P3R\P3R\Binaries\Win64\P3R.exe"#) == "persona-3-reload",
808+
"Persona 3 Reload by App ID, folder and program")
809+
check(R.steamTitles.count == 52 && R.all.count == 78, "52 merged titles, 78 lists")
808810
check(id(#"C:\Games\Foo\foo.exe"#) == "none" && id(steam + #"\Portal 2"#, 620) == "none", "other games")
809811
check(id("") == "none" && id("C:\\") == "none", "no path")
810812
print("PASS: Steam games by App ID or steamapps\\common folder, GTA V Enhanced and RDR2 inside and outside Steam, GoT, GoW, the Horizon games, Rift Apart and the three Crysis Remastered games by their programs, GTA V Legacy outside Steam, the 51 merged Steam titles, others none")

0 commit comments

Comments
 (0)