From 41e899a9d7e6b06b193cb6a4802f0b01a0be483c Mon Sep 17 00:00:00 2001 From: arcattack Date: Fri, 24 Jul 2026 10:02:51 -0500 Subject: [PATCH] Issue #41: launch forensics in the player bats -- exit code + never-started detection David's failures leave a 0-byte (or absent) join.log -- the exe can't testify about a death before WinMain. The bats now bracket it from OUTSIDE: launch_report.txt records the launch timestamp, the exe's EXIT CODE (fingerprints the failure class: 0xC0000135 DLL-not-found, 0xC0000005 AV, AV-kill signatures, our clean exits), whether join.log was ever created (never-created = blocked before our first instruction), and its size. Verified with a synthetic -1073741819 exit. The 'exited' message now asks players to send BOTH files. With this + the 507 first-breath line + the crash self-report, every failure mode now leaves evidence somewhere: bat report (pre-WinMain), first-breath (WinMain reached), [crash] stack (anything after). Co-Authored-By: Claude Opus 4.8 (1M context) --- players/join.bat | 12 ++++++++++-- players/join_lan.bat | 12 ++++++++++-- players/joyconfig.bat | 8 ++++++++ players/play_solo.bat | 8 ++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/players/join.bat b/players/join.bat index 91f531a..1779f9f 100644 --- a/players/join.bat +++ b/players/join.bat @@ -20,11 +20,19 @@ 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 ..\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 echo. echo The game has exited. If you did NOT quit on purpose -echo (crash, or it never connected), send the operator the -echo file content\join.log so they can see what happened. +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 diff --git a/players/join_lan.bat b/players/join_lan.bat index 0b4e245..f6fb9c1 100644 --- a/players/join_lan.bat +++ b/players/join_lan.bat @@ -23,11 +23,19 @@ 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 ..\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 echo. echo The game has exited. If you did NOT quit on purpose -echo (crash, or it never connected), send the operator the -echo file content\join.log so they can see what happened. +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 diff --git a/players/joyconfig.bat b/players/joyconfig.bat index d1719f1..1a058ff 100644 --- a/players/joyconfig.bat +++ b/players/joyconfig.bat @@ -20,7 +20,15 @@ set BT_LOG=join.log set BT_LOG_APPEND=1 set BT_FE_SOLO=1 cd content +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 ..\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 exit /b :badpath echo. diff --git a/players/play_solo.bat b/players/play_solo.bat index 1a09300..48f6bd1 100644 --- a/players/play_solo.bat +++ b/players/play_solo.bat @@ -19,7 +19,15 @@ set BT_LOG=join.log set BT_LOG_APPEND=1 set BT_FE_SOLO=1 cd content +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 ..\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 echo. echo The game has exited. If it closed unexpectedly, echo send the operator content\join.log.