@echo off rem BT411 -- STEAM play (EXPERIMENTAL, dev testers). Launches the glass rem front-end menu: HOST a Steam lobby or JOIN one from the menu -- there rem is no address to configure; sessions form through the Steam lobby. rem Requires: the Steam client RUNNING and logged in, and the steam build rem extracted next to content\. cd /d %~dp0 if not exist "build\Release\btl4.exe" goto badpath if not exist "content\BTL4.RES" goto badpath set BT_PLATFORM=glass set BT_STEAM_NET=1 rem KEEP the previous run's log (a crash report died 2026-07-26 because a rem re-run deleted the only evidence). Rotate, never delete. if exist content\steam.old.log del content\steam.old.log if exist content\steam.log ren content\steam.log steam.old.log set BT_LOG=steam.log set BT_LOG_APPEND=1 rem Cockpit view + MFD gauges -- the same client flags the join bats set rem (field report: players booted 3rd-person without them). Inherited by rem the menu's mission relaunch. set BT_START_INSIDE=1 set BT_DEV_GAUGES=1 rem full menu here (all modes + steam buttons); clear the solo trim in rem case this shell ran play_solo.bat first set BT_FE_SOLO= cd content rem ------------------------------------------------------------------ rem OUR GENERATION ONLY (2026-07-27). The wait loop below used to hold rem this window open for ANY btl4.exe on the machine -- a second client, rem the operator's own pod, or an orphan left by a crash. The window rem then never printed the sign-off and looked hung: the reported "it rem leaves the terminal open". Snapshot the PIDs alive BEFORE we launch; rem those belong to somebody else and must not hold us here. rem ------------------------------------------------------------------ setlocal EnableDelayedExpansion set "BT_PRE=," for /f "tokens=1,2" %%P in ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq btl4.exe" /NH 2^>nul') do ( if /I "%%P"=="btl4.exe" set "BT_PRE=!BT_PRE!%%Q," ) ..\build\Release\btl4.exe rem ------------------------------------------------------------------ rem HANDOFF WAIT (2026-07-25). The front end does NOT stay resident: it rem CreateProcess()es the mission generation and ExitProcess(0)s itself rem (btl4console.cpp). So OUR child exiting means "the menu handed off", rem NOT "the game closed" -- without this wait the window announced "The rem game has exited" while the game was still loading, which reads as a rem crash to a playtester. Wait for the handed-off generation(s) to go. rem rem NO EXTERNAL TOOLS: `find`, `findstr` and `timeout` are all shadowed by rem Git-Bash / MSYS / GnuWin32 builds of the same names when those are on rem PATH (a dev box, or a player who installed git). The MSYS `find` is rem the Unix one and dies with "find: '/I': No such file or directory", rem and GNU `timeout` takes different arguments. So: parse tasklist with rem a pure-cmd for/f, and call both helpers by ABSOLUTE System32 path. rem A genuinely dead exe leaves no process and falls straight through, so rem the #41 launch forensics above still work. If tasklist is missing rem entirely the loop degrades to reporting immediately -- the old rem behaviour, never a hang. rem ------------------------------------------------------------------ :btwait set "BT_STILL_RUNNING=" for /f "tokens=1,2" %%P in ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq btl4.exe" /NH 2^>nul') do ( if /I "%%P"=="btl4.exe" ( rem a PID that was NOT in the pre-launch snapshot is ours set "BT_STRIP=!BT_PRE:,%%Q,=!" if "!BT_STRIP!"=="!BT_PRE!" set "BT_STILL_RUNNING=1" ) ) if defined BT_STILL_RUNNING ( %SystemRoot%\System32\timeout.exe /t 2 /nobreak >nul 2>nul goto btwait ) echo. echo The game has exited. If it closed unexpectedly, send the operator echo content\steam.log. Steam not running = the menu still works but echo lobbies will not appear. pause exit /b :badpath echo. echo ================================================== echo ERROR: this file is not in the right place, or echo the zip was not fully extracted. echo. echo It must sit in the EXTRACTED game folder, next to echo the 'content' and 'build' folders. echo ================================================== echo. pause