one night = ONE log file: the 8MB size roll-over retired (it cost field evidence the moment it existed -- night16: Elengil's incident window sat in an unsent pre-rotation part; testers attach 'the log' = the newest part). The 6am log-day boundary stays. Transport moves to players/SENDLOGS.bat (ships at the dist root): one double-click zips every log/matchlog/lastrun from the last 36h to a Desktop BTLOGS_<machine>_<date>.zip (~10:1 text compression -- a 13MB night = 1.8MB, well under Discord's 10MB free cap, which is what the roll-over was protecting against). Handout HOW TO REPORT updated; mkdist carries the bat

This commit is contained in:
Joe DiPrima
2026-08-13 00:45:21 -05:00
parent fcd592c0f2
commit e614924107
4 changed files with 37 additions and 26 deletions
+5 -2
View File
@@ -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.
=============================================================================
-----------------------------------------------------------------------------
+12 -23
View File
@@ -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 <stem>_YYYYMMDD.log; once it passes the cap the NEXT launch opens
// <stem>_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;
}
}
+19
View File
@@ -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_<machine>_<date>.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
+1 -1
View File
@@ -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: