fix(launcher): handle Game-z.exe builds and ignore extendtext.exe

Soulstones 1 ships `Game-z.exe` rather than `Game.exe`. Find-GameExe preferred
`Game.exe` and otherwise fell back to the shallowest non-ignored .exe, which for
that build resolved to `extendtext.exe` — a dev tool that was missing from the
ignore list — instead of the real launcher.

Add extendtext.exe to $ignore and replace the single-name preference with a
$launcherNames list (Game.exe, then Game-z.exe) before the shallowest-exe
fallback.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
ginnoirandClaude Opus 5 committed 2026-08-10 21:01:42 -05:00
1 parent 79ed715dbb
commit a391292a6a
1 file changed
+11 -5
+11 -5
View File
@@ -31,17 +31,23 @@ param(
$ErrorActionPreference = 'Stop'
# dev/editor exes that ship alongside the game but are NOT the launcher
$ignore = @('animmaker.exe', 'rpgxp.exe', 'rgss', 'editor.exe', 'unins', 'setup.exe')
$ignore = @('animmaker.exe', 'rpgxp.exe', 'rgss', 'editor.exe', 'unins', 'setup.exe', 'extendtext.exe')
# launcher names in preference order — some builds ship mkxp-z as Game-z.exe
# instead of Game.exe (e.g. Soulstones 1).
$launcherNames = @('Game.exe', 'Game-z.exe')
function Find-GameExe([string]$root) {
# Prefer Game.exe; fall back to the shallowest non-ignored .exe.
# Prefer a known launcher name; fall back to the shallowest non-ignored .exe.
$candidates = Get-ChildItem -LiteralPath $root -Recurse -File -Filter '*.exe' -ErrorAction SilentlyContinue |
Where-Object { $n = $_.Name.ToLower(); -not ($ignore | Where-Object { $n -like "*$_*" }) } |
Sort-Object { ($_.FullName -split '[\\/]').Count } # shallowest first
$game = $candidates | Where-Object { $_.Name -ieq 'Game.exe' } | Select-Object -First 1
if (-not $game) { $game = $candidates | Select-Object -First 1 }
return $game
foreach ($name in $launcherNames) {
$game = $candidates | Where-Object { $_.Name -ieq $name } | Select-Object -First 1
if ($game) { return $game }
}
return $candidates | Select-Object -First 1
}
# Resolve the starting directory from whatever Playnite passed.