@echo off rem BT411 -- join 107.202.218.169's game (internet). Seat/mech assigned rem by the operator. Keep this file next to content\ + build\. cd /d %~dp0 rem ONE unified build (2026-07-21): the exe carries every layer; the GLASS rem platform env arms the desktop cockpit (clickable MFD buttons, trigger rem config, bindings.txt keymap). set BT_PLATFORM=glass if not exist "build\Release\btl4.exe" goto badpath if not exist "content\OPERATOR.EGG" goto badpath set BT_RELAY=107.202.218.169:1500 rem one fresh log per bat run; the menu->game relaunch chain APPENDS rem so every generation's lines survive (0-byte logs = killed pre-start) REM keep the PREVIOUS session's log: a crash report died 2026-07-26 REM because re-running this bat deleted the only evidence. if exist content\join.old.log del content\join.old.log if exist content\join.log ren content\join.log join.old.log set BT_LOG=join.log set BT_LOG_APPEND=1 set BT_START_INSIDE=1 set BT_DEV_GAUGES=1 cd content rem JOIN-GAME menu (2026-07-22): pick your CALLSIGN + MECH, click JOIN -- rem your choice is sent to the operator and lands in the mission roster. set BT_FE_JOIN=1 rem LAUNCH FORENSICS (#41): bracket the exe from outside -- if it dies rem before it can write its own log, this report still records when it rem ran, how it exited, and whether it ever created its log at all. echo [%DATE% %TIME%] launching btl4.exe > launch_report.txt 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 set BT_EXITCODE=%ERRORLEVEL% echo [%DATE% %TIME%] btl4.exe exited with code %BT_EXITCODE% >> launch_report.txt if not exist join.log echo join.log WAS NEVER CREATED: the exe was blocked before it could run (loader failure or antivirus) >> launch_report.txt if exist join.log for %%A in (join.log) do echo join.log size: %%~zA bytes >> launch_report.txt 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 you did NOT quit on purpose echo (crash, or it never connected), send the operator BOTH files: echo content\join.log and content\launch_report.txt echo Otherwise the session may not be up yet -- try again. pause exit /b :badpath echo. echo ================================================== echo ERROR: this file is not in the right place. echo. echo It must sit in the EXTRACTED game folder, next to echo the 'content' and 'build' folders. echo. echo Fix: right-click the .zip - Extract All, open the echo extracted folder, and run this file from THERE. echo (Do NOT run it from inside the zip.) echo ================================================== echo. pause