Maps in widened views: TAB overlay in place, M map across the full width
- hud: shift SetViewport/Clear with moved windows (TAB overview map) - megamap: view constants patched to the render width (clip, scroll limit, edge scrolling, centre, dark band, zoomed view and its markers); frame stretched to the screen edges, zoom controls and their click area centred - hud: Anchor::Screen windows are drawn and clicked unshifted but still own the event scope - autotest waits for log markers instead of fixed delays (~18 s per run) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
a7f8496b2b
commit
c6c5530709
9 files changed
+327
-18
No files matched your search
@@ -11,7 +11,7 @@
|
||||
param(
|
||||
[string]$Name = "autotest",
|
||||
[string]$Ini = "",
|
||||
[int]$LoadSeconds = 30,
|
||||
[int]$LoadTimeoutSeconds = 60,
|
||||
# Row of the save game in the load screen's list (1-3 visible rows).
|
||||
[int]$Save = 1,
|
||||
# Runs in-game after loading, before the screenshots (e.g. clicks).
|
||||
@@ -28,12 +28,13 @@ if ($Ini) { Set-Content $iniPath ($iniBackup + "`r`n" + $Ini + "`r`n") -Encoding
|
||||
$game = $null
|
||||
try {
|
||||
$game = Start-Sacred
|
||||
Click-At 1720 779 -AfterMs 4000 # main menu: "Spiel laden"
|
||||
Click-At 1720 779 -AfterMs 1500 # main menu: "Spiel laden"
|
||||
if ($Save -gt 1) {
|
||||
Click-At 1342 (609 + ($Save - 1) * 254) -AfterMs 800 # load screen: the save's name (rows 254 px apart)
|
||||
}
|
||||
Click-At 2382 568 -AfterMs 2000 # load screen: "Laden"
|
||||
Click-At 1551 826 -AfterMs ($LoadSeconds * 1000) # confirm: "Ok"
|
||||
Click-At 1551 826 -AfterMs 0 # confirm: "Ok"
|
||||
Wait-Log "cEngine End and exit constructor" -TimeoutSeconds $LoadTimeoutSeconds -AfterMs 1500 -Game $game
|
||||
if ($InGame) { & $InGame }
|
||||
Save-Screen "screenshots\${Name}_ingame.png" | Out-Null
|
||||
Press-Key 0x1B -AfterMs 2500 # ESC menu
|
||||
|
||||
+27
-5
@@ -31,16 +31,38 @@ function Focus-Sacred($Game) {
|
||||
[SacredRe.Input]::SetForegroundWindow($Game.MainWindowHandle)
|
||||
}
|
||||
|
||||
function Start-Sacred([string]$Arguments = "log", [int]$WaitSeconds = 18) {
|
||||
$script:LogPath = Join-Path $script:Root "build\x86-debug\sacred_re.log"
|
||||
|
||||
# Waits until sacred_re.log (written anew at every start) has at least $Count
|
||||
# lines containing $Pattern, focusing the game meanwhile; then waits $AfterMs.
|
||||
function Wait-Log([string]$Pattern, [int]$Count = 1, [int]$TimeoutSeconds = 60, [int]$AfterMs = 500, $Game = $null) {
|
||||
$deadline = (Get-Date).AddSeconds($TimeoutSeconds)
|
||||
while ((Get-Date) -lt $deadline) {
|
||||
if ($Game) { Focus-Sacred $Game | Out-Null }
|
||||
$found = 0
|
||||
if (Test-Path $script:LogPath) {
|
||||
$found = @(Select-String -Path $script:LogPath -Pattern $Pattern -SimpleMatch).Count
|
||||
}
|
||||
if ($found -ge $Count) { Start-Sleep -Milliseconds $AfterMs; return }
|
||||
Start-Sleep -Milliseconds 200
|
||||
}
|
||||
throw "timeout waiting for '$Pattern' in sacred_re.log"
|
||||
}
|
||||
|
||||
# Starts the game and returns once its main menu is up (the UI manager
|
||||
# starts its menu thread a second time when the menu appears).
|
||||
function Start-Sacred([string]$Arguments = "log") {
|
||||
if (Get-Process sacred -ErrorAction SilentlyContinue) { throw "sacred.exe is already running" }
|
||||
if (Test-Path $script:LogPath) { Remove-Item $script:LogPath -ErrorAction SilentlyContinue }
|
||||
$null = Start-Process (Join-Path $script:Root "build\x86-debug\sacred_re.exe") -ArgumentList $Arguments
|
||||
$game = $null
|
||||
for ($i = 0; $i -lt $WaitSeconds * 4; $i++) {
|
||||
for ($i = 0; $i -lt 80 -and -not $game; $i++) {
|
||||
Start-Sleep -Milliseconds 250
|
||||
if (-not $game) { $game = Get-Process sacred -ErrorAction SilentlyContinue | Select-Object -First 1 }
|
||||
if ($game) { Focus-Sacred $game | Out-Null }
|
||||
$game = Get-Process sacred -ErrorAction SilentlyContinue | Select-Object -First 1
|
||||
}
|
||||
if (-not $game -or $game.HasExited) { throw "sacred.exe did not start (or crashed)" }
|
||||
if (-not $game) { throw "sacred.exe did not start" }
|
||||
Wait-Log "starting menu thread!" -Count 2 -AfterMs 1500 -Game $game
|
||||
if ($game.HasExited) { throw "sacred.exe crashed" }
|
||||
$game
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user