Boot forensics: first-breath log line + generation-safe bat logging

Field 2026-07-23 (second night): a player's join.bat failed 3x in a row
with a 0-byte join.log -- indistinguishable from 'never ran'.  Two
causes of evidence loss fixed:

1. The first flushed log line now happens the INSTANT the log opens
   (version, pid, args, first-process vs relaunched-generation).  An
   empty log after this build means the exe was killed before WinMain
   -- an external cause (antivirus/loader), not ours.
2. The menu->game relaunch chain truncated join.log each generation
   (BT_LOG_APPEND was unset in the player bats): the crashed
   generation's evidence was erased by the next attempt.  The bats now
   delete the log once per bat run and append across generations.

Also explains the confusing 'The game has exited' bat message on
SUCCESSFUL launches (the menu process exits after relaunching the game
detached) -- the log now records the whole chain.
This commit is contained in:
arcattack
2026-07-23 21:33:27 -05:00
parent 3ee980ba46
commit 26439c2e1a
6 changed files with 29 additions and 0 deletions
+11
View File
@@ -197,6 +197,17 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
? (std::ios::out | std::ios::app) : std::ios::out);
std::cout.rdbuf(logfile.rdbuf());
// FIRST-BREATH line, flushed IMMEDIATELY (field 2026-07-23: a player's
// exe died repeatedly with a 0-byte join.log -- indistinguishable from
// "never ran"). After this line, an empty log can only mean the exe was
// killed before WinMain (antivirus / loader) -- an external cause, not
// ours. Cheap forensics: version, PID, args, generation markers.
std::cout << "[boot] btl4 " << BT_VERSION_STRING << " pid="
<< (unsigned)GetCurrentProcessId()
<< " args='" << (lpCmdLine ? lpCmdLine : "") << "'"
<< (getenv("BT_FE_LOOP") ? " (relaunched generation)" : " (first process)")
<< std::endl << std::flush;
// BT_JOYCONFIG=1: the generic-joystick capture wizard (flight sticks /
// HOTAS / pedals -- L4JOY.h). Console prompts detect which device/axis
// the player moves for each pod control and write the joystick section
+4
View File
@@ -9,7 +9,11 @@ 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)
if exist content\join.log del content\join.log
set BT_LOG=join.log
set BT_LOG_APPEND=1
set BT_START_INSIDE=1
set BT_DEV_GAUGES=1
cd content
+4
View File
@@ -12,7 +12,11 @@ set BT_PLATFORM=glass
if not exist "build\Release\btl4.exe" goto badpath
if not exist "content\OPERATOR.EGG" goto badpath
set BT_RELAY=10.0.0.46: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)
if exist content\join.log del content\join.log
set BT_LOG=join.log
set BT_LOG_APPEND=1
set BT_START_INSIDE=1
set BT_DEV_GAUGES=1
cd content
+4
View File
@@ -13,7 +13,11 @@ if not exist "content\OPERATOR.EGG" goto badpath
set BT_JOYCONFIG=1
set BT_START_INSIDE=1
set BT_DEV_GAUGES=1
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)
if exist content\join.log del content\join.log
set BT_LOG=join.log
set BT_LOG_APPEND=1
set BT_FE_SOLO=1
cd content
..\build\Release\btl4.exe
+4
View File
@@ -12,7 +12,11 @@ if not exist "build\Release\btl4.exe" goto badpath
if not exist "content\OPERATOR.EGG" goto badpath
set BT_START_INSIDE=1
set BT_DEV_GAUGES=1
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)
if exist content\join.log del content\join.log
set BT_LOG=join.log
set BT_LOG_APPEND=1
set BT_FE_SOLO=1
cd content
..\build\Release\btl4.exe
+2
View File
@@ -9,7 +9,9 @@ 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
if exist content\steam.log del content\steam.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.