diff --git a/docs/OPEN_ISSUES_FOR_TESTERS.txt b/docs/OPEN_ISSUES_FOR_TESTERS.txt index 8f7510f..05ce071 100644 --- a/docs/OPEN_ISSUES_FOR_TESTERS.txt +++ b/docs/OPEN_ISSUES_FOR_TESTERS.txt @@ -5,8 +5,11 @@ build. Section A is the payoff -- please verify. ============================================================================= HOW TO REPORT: drop a line in Discord with the issue number and PASS / - FAIL / what you saw. Screenshots and rough times help; logs get collected - as usual. + FAIL / what you saw. Screenshots and rough times help. + LOGS -- NEW, ONE CLICK: double-click SENDLOGS.bat in the game folder after + the session. It puts ONE small zip on your Desktop with every log from the + night (session logs, matchlogs, launch breadcrumbs) -- attach that one file. + No more hunting for the right .log, no more missing parts. ============================================================================= ----------------------------------------------------------------------------- diff --git a/game/btl4main.cpp b/game/btl4main.cpp index 6136192..f4d007e 100644 --- a/game/btl4main.cpp +++ b/game/btl4main.cpp @@ -731,29 +731,18 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine lt = shifted; } } - // SIZE ROLL-OVER -- never deletes anything, but keeps each FILE small - // enough to actually send. A playtest evening concatenates into one - // file (4.3 MB from a single session in scratchpad/night5/), and the - // channel this evidence travels through is a chat attachment. Part 0 - // is _YYYYMMDD.log; once it passes the cap the NEXT launch opens - // _YYYYMMDD.1.log, and so on. Checked only at open, so one very - // long session can still overrun -- that is deliberate: never split a - // live session across files. - const DWORD part_max = 8UL * 1024UL * 1024UL; - for (int part = 0; part < 1000; ++part) - { - if (part == 0) - wsprintfA(resolvedLog, "%s_%04d%02d%02d.log", - logStem, (int)lt.wYear, (int)lt.wMonth, (int)lt.wDay); - else - wsprintfA(resolvedLog, "%s_%04d%02d%02d.%d.log", - logStem, (int)lt.wYear, (int)lt.wMonth, (int)lt.wDay, part); - WIN32_FILE_ATTRIBUTE_DATA fad; - if (!GetFileAttributesExA(resolvedLog, GetFileExInfoStandard, &fad)) - break; // does not exist yet -- use it - if (fad.nFileSizeHigh == 0 && fad.nFileSizeLow < part_max) - break; // still room to append - } + // ONE NIGHT = ONE FILE (the 8 MB size roll-over RETIRED 2026-08-13). + // The roll existed because the evidence channel is a Discord + // attachment (free-tier cap: 10 MB today; 8 MB when this shipped) -- + // but multi-part files cost us field evidence the moment they + // existed: testers attach "the log" (the newest part) and part 0 + // stays home (night16: Elengil's 20:17 ET incident window was in the + // unsent pre-rotation part). Transport is now SENDLOGS.bat (ships + // in the dist root): zips every log/matchlog/lastrun to one ~10:1 + // compressed attachment, so raw file size no longer matters and the + // whole night reads as one uninterrupted file. + wsprintfA(resolvedLog, "%s_%04d%02d%02d.log", + logStem, (int)lt.wYear, (int)lt.wMonth, (int)lt.wDay); logSelfNamed = 1; } } diff --git a/players/SENDLOGS.bat b/players/SENDLOGS.bat new file mode 100644 index 0000000..3e40112 --- /dev/null +++ b/players/SENDLOGS.bat @@ -0,0 +1,19 @@ +@echo off +rem ========================================================================== +rem BT411 -- package tonight's logs into ONE Discord-attachable zip. +rem Double-click me after a playtest. The zip lands on your DESKTOP as +rem BTLOGS__.zip -- attach that one file in Discord. +rem Collects: every session log, matchlog, and launch breadcrumb. Nothing +rem is deleted or modified; this only makes a copy. +rem ========================================================================== +cd /d "%~dp0" +powershell -NoProfile -ExecutionPolicy Bypass -Command ^ + "$d = Get-Date -Format yyyyMMdd_HHmm;" ^ + "$out = Join-Path ([Environment]::GetFolderPath('Desktop')) (\"BTLOGS_{0}_{1}.zip\" -f $env:COMPUTERNAME, $d);" ^ + "$files = Get-ChildItem -Path 'content\*.log','content\lastrun_*.txt','content\matchlog_*.txt','content\cdb_*.txt' -ErrorAction SilentlyContinue | Where-Object { $_.LastWriteTime -gt (Get-Date).AddHours(-36) };" ^ + "if (-not $files) { Write-Host 'No logs found -- run me from the BT411 folder (next to the content directory).'; exit 1 }" ^ + "Compress-Archive -Force -Path $files.FullName -DestinationPath $out;" ^ + "Write-Host ('Wrote ' + $out + ' (' + $files.Count + ' files, ' + [math]::Round((Get-Item $out).Length/1MB,1) + ' MB)');" +echo. +echo Attach the BTLOGS zip from your Desktop in Discord. Thanks! +pause diff --git a/tools/mkdist.py b/tools/mkdist.py index 8c91ded..23133c9 100644 --- a/tools/mkdist.py +++ b/tools/mkdist.py @@ -77,7 +77,7 @@ def main(): exes = ["build/Release/btl4.exe"] bats = ["players/play_solo.bat", "players/join.bat", "players/join_lan.bat", - "players/joyconfig.bat"] + "players/joyconfig.bat", "players/SENDLOGS.bat"] if steam_on: bats.append("players/play_steam.bat") for p in exes + bats: