From 8bfaf9b9adfc8f243fb21976dd592da499041628 Mon Sep 17 00:00:00 2001
From: RT
Date: Fri, 7 Aug 2026 13:07:43 -0500
Subject: [PATCH] Publish V5.1.0b_RC2: rebuilt binaries, repacked props, RC2
documentation
RC2 build, verified to launch on the Windows box and copied back into the
deployment at MW4/. Supersedes RC1 (a0331e78), which predates everything in
sections 12-17 of the test checklist.
Binaries and content
--------------------
* MW4.exe / MW4pro.exe rebuilt from CoreTech GameOS + MW4Application. Carries
the display work that landed after the RC1 build: -tident, the full
gos-displays.txt start-up trace with the CLASH and CTCL-type reports, the
HSH_EnterFullScreen2 panel re-entry fix, the -tmr cameraship ladder, and the
updated -help text.
* Launcher / autoconfig / mw4print / ctcls / MissionLang / ScriptStrings
relinked in the same pass.
* props.mw4 + props.dep fully repacked (deleted first, not incremental), so the
23-entry time list, the restored 7-minute default and the V5.1.0b2 console
title are actually in the package rather than only in the source tree.
* mw4-help.txt regenerated from the new exe; the diff is the proof the built
binary carries the documentation changes.
Documentation, renamed to RC2
-----------------------------
* RELEASE-NOTES-5.1.0b_RC1.{md,html} -> ..._RC2.{md,html}, both hand-maintained
in step, ASCII + CRLF so they open correctly in Notepad on a pod.
- New "Already testing RC1?" block at the top. RC1's notes already described
-tident and the CLASH report, but the RC1 BINARY does not contain them, so
anyone comparing the two needed that stated explicitly.
- Time limits corrected to 23 entries (1-15, 20, 25, 30, 45, 60, 120, 180,
240) with the 7-minute default restoration called out.
- New section on the cameraship Map/Armor screen: background but no overlays
is -ctcltype 2 on a cameraship, not a video card. Includes the
"CTCL type =" log line and -tmr 3 as the follow-up check.
- -fps description corrected: the per-second column is a 5% low and the 1% /
0.1% lows are in the session summary. The old text described behaviour that
had already been changed.
- Switch table gained -tmr; known issues gained stereo-only audio and the
single-monitor -tident caveat; upgrade checklist now names V5.1.0b2.
* testing-checklist-5.1.0b1.txt -> testing-checklist-5.1.0b_RC2.txt, with a
build-requirements header and new sections 12-17 covering -tident, the
display trace (including a deliberate -tmon clash to exercise the CLASH
report), the panel re-entry fix, cameraship/-tmr, 240-minute missions and a
-help verification pass.
* OPTIONS-INI.md: TimeList_Index is documented as no longer driving the console
lobby default (the script uses a literal since the list was expanded) while
TimeList_Value remains live; added a table of the files the game writes next
to MW4.exe. Also repaired the CP949/CP1252 damage in that file - it carried
literal 0xA1 0xE6 arrows, 0x97 em dashes and ~20 '?' characters where dashes
had been lost. Now pure ASCII.
* README.md points at the RC2 notes.
Source
------
MW4Application.cpp help text: -fps now matches what gos-fps.txt actually
prints, and -ctcltype states that a cameraship must use 3 and what goes wrong
when it does not. Audited all 80 switches parsed in the file against the help
array - none missing, and no game-facing switch is parsed anywhere else.
Deployment housekeeping
-----------------------
* dgVoodoo.conf: ScalingMode = stretched_ar, which is the setting the release
notes require and which fails SILENTLY when wrong. FPSLimit was left at 20
from bench testing and would have shipped a 20 fps cap to every Win10/11 pod
- raised to 60.
* banner.txt reset from a test string to the shipped placeholder.
* Removed two stray screen000*.bmp captures and the duplicate dbstruct.txt
(db_schema.sql is the current name, per b4089291).
* .gitignore: gos-displays.txt and gos-fps.txt are truncated on every launch
and are per-machine, so they are no longer mirrored.
Not yet done: multi-monitor pod testing of this binary. -tident, the re-entry
fix and -tmr have not been exercised on real MFD hardware - that is what the
new checklist sections are for.
Co-authored-by: Claude Opus 5 (Anthropic)
Co-authored-by: GitHub Copilot
---
.gitignore | 4 +
.../Code/MW4Application/MW4Application.cpp | 14 +-
MW4/Launcher.exe | 2 +-
MW4/MW4.exe | 4 +-
MW4/MW4pro.exe | 4 +-
MW4/MissionLang.dll | 2 +-
MW4/Resource/props.dep | Bin 1479898 -> 1479898 bytes
MW4/Resource/props.mw4 | 4 +-
MW4/ScriptStrings.dll | 2 +-
MW4/autoconfig.exe | 4 +-
MW4/banner.txt | 2 +-
MW4/ctcls.dll | 2 +-
MW4/dgvoodoo2_files/dgVoodoo.conf | 12 +-
MW4/mw4-help.txt | 43 +++-
MW4/mw4print.exe | 2 +-
MW4/options.ini | 2 +-
MW4/screen0000.bmp | 3 -
MW4/screen0001.bmp | 3 -
OPTIONS-INI.md | 55 +++--
README.md | 2 +-
..._RC1.html => RELEASE-NOTES-5.1.0b_RC2.html | 75 +++++-
...1.0b_RC1.md => RELEASE-NOTES-5.1.0b_RC2.md | 79 ++++++-
testing-checklist-5.1.0b1.txt | 110 ---------
testing-checklist-5.1.0b_RC2.txt | 220 ++++++++++++++++++
24 files changed, 466 insertions(+), 184 deletions(-)
delete mode 100755 MW4/screen0000.bmp
delete mode 100755 MW4/screen0001.bmp
rename RELEASE-NOTES-5.1.0b_RC1.html => RELEASE-NOTES-5.1.0b_RC2.html (82%)
rename RELEASE-NOTES-5.1.0b_RC1.md => RELEASE-NOTES-5.1.0b_RC2.md (81%)
delete mode 100644 testing-checklist-5.1.0b1.txt
create mode 100644 testing-checklist-5.1.0b_RC2.txt
diff --git a/.gitignore b/.gitignore
index a69b17dd..60813275 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,7 @@ FS507D_20161015/
# player-created mechlab variants in the game deploy (local test/play data, per-machine)
MW4/Resource/Variants/
+
+# GameOS run-time reports: rewritten on every launch, per-machine
+MW4/gos-displays.txt
+MW4/gos-fps.txt
diff --git a/Gameleap/code/mw4/Code/MW4Application/MW4Application.cpp b/Gameleap/code/mw4/Code/MW4Application/MW4Application.cpp
index 82895d92..c1f35b8f 100644
--- a/Gameleap/code/mw4/Code/MW4Application/MW4Application.cpp
+++ b/Gameleap/code/mw4/Code/MW4Application/MW4Application.cpp
@@ -937,6 +937,11 @@ static const char* const g_apszCommandLineHelp[] =
" -ctcltype <1-3> CTCL role for this machine:",
" -ctcl <1-3> 1 = console, 2 = game pod, 3 = cameraship.",
" Default when absent: console.",
+" A cameraship MUST use 3. With 2 its Map/Armor",
+" screen still opens and paints its background, but",
+" draws no overlays at all, which looks like a video",
+" card fault. The role in use is reported in",
+" gos-displays.txt as 'CTCL type ='.",
" -dragon Disable CTCL entirely and run standalone.",
" -coop Co-operative arcade mode. Implies 1 coin per game",
" and the game-pod role.",
@@ -997,10 +1002,11 @@ static const char* const g_apszCommandLineHelp[] =
" newer .rpt format.",
" -fps Write a per-second frame pacing report to",
" gos-fps.txt next to the executable: average fps,",
-" 1% low, worst frame in ms, and a count of frames",
-" taking over twice the average (hitches). Useful",
-" for confirming smooth pacing on the MFD modes.",
-" Off unless this switch is given.",
+" 5% low, worst frame in ms, and a count of frames",
+" taking over twice the average (hitches). A summary",
+" written at exit gives the whole-session 1% and",
+" 0.1% lows. Useful for confirming smooth pacing on",
+" the MFD modes. Off unless this switch is given.",
" -gamestats Save game statistics.",
" -help Show this reference and exit without starting.",
"",
diff --git a/MW4/Launcher.exe b/MW4/Launcher.exe
index 57240a2f..dfa0fb27 100755
--- a/MW4/Launcher.exe
+++ b/MW4/Launcher.exe
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2ea7013f13397c153a2819bf3c01e89dec008777f787c18adae941fabe14bcba
+oid sha256:f661cfed93a819c526d0183a3fc4a2f1ffd79eb12a75ac840a1795cb3f510160
size 77892
diff --git a/MW4/MW4.exe b/MW4/MW4.exe
index 51582e2f..3e392871 100755
--- a/MW4/MW4.exe
+++ b/MW4/MW4.exe
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:962dbea3e33bd30d8ce4b3c43e9cb8657920d3532e8eccbb67062f4fb4254972
-size 3665920
+oid sha256:c733c486473df5e92558def73c3acc3f4a696dea8c4a5c9fe8e2476723a56789
+size 3678208
diff --git a/MW4/MW4pro.exe b/MW4/MW4pro.exe
index c266ce3b..8bc09dda 100755
--- a/MW4/MW4pro.exe
+++ b/MW4/MW4pro.exe
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:95a518a9dcf5f13f5a94246d97373b1fd066e6e1e53113b03fd8a0db20ad006d
-size 4411392
+oid sha256:127d0f31f9e6ce05ead5a2185fb07d28ccd4aae84656364f4cd93425a7f5cc32
+size 4431872
diff --git a/MW4/MissionLang.dll b/MW4/MissionLang.dll
index b68c088a..395c7c1e 100755
--- a/MW4/MissionLang.dll
+++ b/MW4/MissionLang.dll
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:84a878268b67db49a08f8cad6bb5058636fe55091e97932b442d78a90987a1a9
+oid sha256:4c596360bac7aa2fb4020755543e3331e0859332cb5676781c1e7b87c1029aa6
size 188416
diff --git a/MW4/Resource/props.dep b/MW4/Resource/props.dep
index 2fd93d62d56fb2ce299ecb236ce0cc3b399530be..2eb2c8c62fcc2b0cf67aea2dfad1e442e22a0463 100755
GIT binary patch
delta 193
zcmcb$GV0dKsD>8C7N!>F7M2#)7Pc1l7LFFqEnK##Z00j$K1@~H?wrcC>mpkfPr%K)
zs@s{(xtSTEoOT`yZXo6XVqPHT17dz47TC^XAsF(G(RF*Gno#j1rltAQ1-A(WZ0Fu1
zG?|I1KmnN-V?2H1ej&N-`}PS<)?@8C7N!>F7M2#)7Pc1l7LFFqEnK##Y?dxeIrpTuJEwB(y2uuna;^WJ
z^mb-*Zf3^m+swEH+QlrmftUw~d4ZS@i1~q7V7r)wpw~M_-tCEMLdBDq)Uu}wZW9XF
z&b>!yG85C5UC6v`-==TeFC@2p-#($qnv4b0A13e%Pk-=2h;O>=c6N^GXI}^@qOsb6
RVn8em#3I|zz7XYI0|2l;NKOC%
diff --git a/MW4/Resource/props.mw4 b/MW4/Resource/props.mw4
index 00e55c72..bf16352f 100755
--- a/MW4/Resource/props.mw4
+++ b/MW4/Resource/props.mw4
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1e4e10ff0d9f7a88d0ccb2b62efb0710e333a0986b1a10904760d68c02829a00
-size 113470513
+oid sha256:48260cd6e432cf276d5a5f233f61d3d2e4294f5483f5b8fe4eabd2e5d23472ba
+size 113471105
diff --git a/MW4/ScriptStrings.dll b/MW4/ScriptStrings.dll
index 6e4545c7..ef6d51b6 100755
--- a/MW4/ScriptStrings.dll
+++ b/MW4/ScriptStrings.dll
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:49792a98a4d15dce66b495c964f7039c76d1d530a0dbf5df452461a86143f20f
+oid sha256:54d3c1b3046cdba46de358d6715f93957d63ce44bf282be2fd4341deef56e95b
size 147456
diff --git a/MW4/autoconfig.exe b/MW4/autoconfig.exe
index 88066b32..274fa5ec 100755
--- a/MW4/autoconfig.exe
+++ b/MW4/autoconfig.exe
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2ec97190b8812c955680f134550ce4a937e3c9d3b95006c37d3609c3ceb4a7a0
-size 516096
+oid sha256:a560a41744d24fad365b297926ee4de89c84d8865f5869aa12d3d0b73595ae8e
+size 528384
diff --git a/MW4/banner.txt b/MW4/banner.txt
index 60c118a6..ccffc2a7 100755
--- a/MW4/banner.txt
+++ b/MW4/banner.txt
@@ -1 +1 @@
-TEST123
+CHANGEME IN YOUR MW4PRINT APPLICATION!
\ No newline at end of file
diff --git a/MW4/ctcls.dll b/MW4/ctcls.dll
index 3cc34fcc..52c903c1 100755
--- a/MW4/ctcls.dll
+++ b/MW4/ctcls.dll
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:aeadc172153339f1ba85ec86bbd5bfbb31cad1adc2ed6fc1245a527ae763089f
+oid sha256:7e7aeb8d02d916a4ce0f526221ae2f3e3b1fe50c20018a2894251beccfde8d20
size 24576
diff --git a/MW4/dgvoodoo2_files/dgVoodoo.conf b/MW4/dgvoodoo2_files/dgVoodoo.conf
index d70344bb..219461e0 100755
--- a/MW4/dgvoodoo2_files/dgVoodoo.conf
+++ b/MW4/dgvoodoo2_files/dgVoodoo.conf
@@ -28,7 +28,7 @@ OutputAPI = bestavailable
Adapters = all
FullScreenOutput = default
FullScreenMode = true
-ScalingMode = unspecified
+ScalingMode = stretched_ar
ProgressiveScanlineOrder = false
EnumerateRefreshRates = false
@@ -37,7 +37,7 @@ Color = 100
Contrast = 100
InheritColorProfileInFullScreenMode = true
-KeepWindowAspectRatio = true
+KeepWindowAspectRatio = false
CaptureMouse = true
CenterAppWindow = false
DisableScreenSaver = false
@@ -119,11 +119,11 @@ DisplayROI =
Resampling = bilinear
PresentationModel = auto
ColorSpace = appdriven
-WatermarkDisplayDuration = 0
+WatermarkDisplayDuration = 30
FreeMouse = false
WindowedAttributes =
FullscreenAttributes =
-FPSLimit = 0
+FPSLimit = 60
Environment =
SystemHookFlags =
@@ -198,8 +198,8 @@ DitherOrderedMatrixSizeScale = 0
DisableAndPassThru = false
-VideoCard = internal3D
-VRAM = 256
+VideoCard = geforce_9800_gt
+VRAM = 1024
Filtering = appdriven
Mipmapping = appdriven
KeepFilterIfPointSampled = false
diff --git a/MW4/mw4-help.txt b/MW4/mw4-help.txt
index 93b1fc4d..54124eb8 100755
--- a/MW4/mw4-help.txt
+++ b/MW4/mw4-help.txt
@@ -27,7 +27,28 @@ DISPLAY AND VIDEO
value of 0 leaves that slot auto-detected.
Separators may be ',' '/' or ':'.
MFD1 and MFD2 only apply with -tmfds 4.
+
+ These are DirectDraw device numbers. They are NOT
+ the numbers shown in Windows Display Settings, and
+ on many machines the two do not match. Do not read
+ them off the Settings screen.
+
+ To find the right values: launch the game once,
+ then open gos-displays.txt next to MW4.exe and read
+ the 'Desktop arrangement, left to right' list. It
+ gives each monitor's position, size and device
+ number. Add 1 to the device number for -tmon.
Example: -tmon 1,2,4,3 swaps the two MFD panels.
+ -tident [seconds] Identify the displays, then exit. Each monitor is
+ filled with a colour and the number to use for it
+ in -tmon. Write the numbers down, then set -tmon in
+ the order main,radar,MFD1,MFD2.
+ This is the reliable way to map the monitors: the
+ numbers Windows Display Settings shows cannot be
+ read by any program, so they cannot be trusted to
+ match. Default 20 seconds; accepts 3 to 120.
+ No display mode is changed and the game does not
+ start - it exits when the time is up.
-tcoop <0-5> How the radar/MFD panels claim their displays.
0 = legacy single call (as shipped; works on XP
and under dgVoodoo2, fails on Windows 10).
@@ -41,6 +62,14 @@ DISPLAY AND VIDEO
panels never contend for it.
5 = as 4, plus ALLOWREBOOT.
Results are reported in gos-displays.txt.
+ -tmr <0-3> Cameraship Map/Armor screen diagnostics.
+ 0 = normal.
+ 1 = wait for the background blit to finish before
+ drawing the overlays.
+ 2 = skip the background image entirely.
+ 3 = as 2, plus a solid magenta test rectangle.
+ Use when that screen shows its background but no
+ overlay graphics or text.
-mechview <1|2> Show the rotating mech view. 1 = on the radar
-mv <1|2> screen, 2 = on the main screen. Default: off.
-3dt Draw the MFD target as a live 3D model instead of
@@ -62,6 +91,11 @@ POD HARDWARE AND ARCADE (CTCL)
-ctcltype <1-3> CTCL role for this machine:
-ctcl <1-3> 1 = console, 2 = game pod, 3 = cameraship.
Default when absent: console.
+ A cameraship MUST use 3. With 2 its Map/Armor
+ screen still opens and paints its background, but
+ draws no overlays at all, which looks like a video
+ card fault. The role in use is reported in
+ gos-displays.txt as 'CTCL type ='.
-dragon Disable CTCL entirely and run standalone.
-coop Co-operative arcade mode. Implies 1 coin per game
and the game-pod role.
@@ -122,10 +156,11 @@ LOGGING AND DIAGNOSTICS
newer .rpt format.
-fps Write a per-second frame pacing report to
gos-fps.txt next to the executable: average fps,
- 1% low, worst frame in ms, and a count of frames
- taking over twice the average (hitches). Useful
- for confirming smooth pacing on the MFD modes.
- Off unless this switch is given.
+ 5% low, worst frame in ms, and a count of frames
+ taking over twice the average (hitches). A summary
+ written at exit gives the whole-session 1% and
+ 0.1% lows. Useful for confirming smooth pacing on
+ the MFD modes. Off unless this switch is given.
-gamestats Save game statistics.
-help Show this reference and exit without starting.
diff --git a/MW4/mw4print.exe b/MW4/mw4print.exe
index 6d64a67a..cc58dce1 100755
--- a/MW4/mw4print.exe
+++ b/MW4/mw4print.exe
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3d98073e95fa1aca62979236d96db05549fb65b6077db8dca0a0e5e5662c2557
+oid sha256:78a0a48adc6125bab4406de62030a0948196be5476a25a3ad40933666b8fb856
size 90112
diff --git a/MW4/options.ini b/MW4/options.ini
index 2e9488fc..ce36c01a 100755
--- a/MW4/options.ini
+++ b/MW4/options.ini
@@ -109,7 +109,7 @@ timescoringatend=10.0
secmissionreplay=30.0
secmissionreport=15.0
MinShift=-180
-lrpt=252026072ab4b906fabd1c154d3d8fd77942028e
+lrpt=072003082ab4b906fabd1c154d3d8fd77942028e
TimeList_Index=5
TimeList_Value=10
RuleBook=1
diff --git a/MW4/screen0000.bmp b/MW4/screen0000.bmp
deleted file mode 100755
index 9b80619f..00000000
--- a/MW4/screen0000.bmp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4fcb6b5e0f63003d151e636c1e21ff34619918f9383627320f1c7eb72031d8ae
-size 1440054
diff --git a/MW4/screen0001.bmp b/MW4/screen0001.bmp
deleted file mode 100755
index 9b80619f..00000000
--- a/MW4/screen0001.bmp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4fcb6b5e0f63003d151e636c1e21ff34619918f9383627320f1c7eb72031d8ae
-size 1440054
diff --git a/OPTIONS-INI.md b/OPTIONS-INI.md
index 7f6cf4db..9e8ce843 100644
--- a/OPTIONS-INI.md
+++ b/OPTIONS-INI.md
@@ -23,7 +23,7 @@ page->GetEntry("bitdepth", &Environment.bitDepth);
Consequences of this design that matter in practice:
-- **Section and key lookup is by name.** A misspelled key is not an error ? `GetEntry`
+- **Section and key lookup is by name.** A misspelled key is not an error -- `GetEntry`
simply returns false and the compiled-in default is kept. **There is no warning.** This
is why several shipped keys silently do nothing (see "Dead settings" below).
- **The file is read at startup**, in `GetGameOSEnvironment` / `InitializeGameEngine`.
@@ -32,7 +32,7 @@ Consequences of this design that matter in practice:
host UI, and `[special commands] killgame` is cleared on use. Hand edits to those
sections can be overwritten.
- A few sections are read via the Win32 profile API (`GetPrivateProfileInt` /
- `GetPrivateProfileString`) instead ? noted per section.
+ `GetPrivateProfileString`) instead -- noted per section.
### Related but separate files
@@ -44,6 +44,17 @@ Consequences of this design that matter in practice:
| `c:\ctcl.ini` | Arcade console configuration (pod IP list, launch command lines, voice macros). Hardcoded path. Not covered here. |
| `banner.txt` | mw4print bottom-of-sheet banner text. Plain text, first line only. |
+### Files the game writes next to `MW4.exe`
+
+Not configuration -- these are outputs, listed here because they are the first place to look
+when something is misconfigured.
+
+| File | Written when | Contents |
+|---|---|---|
+| `gos-displays.txt` | Every launch (truncated each time) | Full display start-up trace: Windows topology, DirectDraw enumeration, role selection with reasons, `-tmon` overrides, desktop left-to-right order, the CTCL role, and an explicit CLASH warning if two roles land on one device. Copy it before relaunching after a failure. |
+| `gos-fps.txt` | Only with `-fps` | Per-second frame pacing (average, 5% low, worst frame, hitch count) plus a whole-session summary with 1% / 0.1% lows. Buffered, so a hard crash loses the tail. |
+| `mw4-help.txt` | Only with `-help` | The full command-line reference; opened in Notepad, and the game then exits. |
+
---
## `[graphics options]`
@@ -57,11 +68,11 @@ Read in `MW4Application.cpp` (`GetGameOSEnvironment`) and `MWOptions.cpp`.
| `screenwidth` | int | 800 | Horizontal resolution, read by `MWOptions`. |
| `screenheight` | int | 600 | Vertical resolution. |
-**Read but overridden in this build ? editing has no effect:**
+**Read but overridden in this build -- editing has no effect:**
| Key | Why |
|---|---|
-| `videodriverindex` | The `GetEntry` call is commented out and `Environment.FullScreenDevice` is forced to `0`. Use the `-tmon` command-line switch to assign display devices instead — run `MW4.exe -tident` first to find out which number is which monitor, as Windows Display Settings numbers do not match. |
+| `videodriverindex` | The `GetEntry` call is commented out and `Environment.FullScreenDevice` is forced to `0`. Use the `-tmon` command-line switch to assign display devices instead -- run `MW4.exe -tident` first to find out which number is which monitor, as Windows Display Settings numbers do not match. |
**Present in the shipped file and consumed by renderer subsystem initialisers**
(`MidLevelRenderer::InitializeClasses`, `gosFX`, `ElementRenderer`, `Compost`), which are
@@ -95,7 +106,7 @@ time.
| `killgame` | bool | false | **Self-clearing kill switch.** If true at startup, the game sets it back to false, saves `options.ini`, and immediately calls `ExitGameOS()`. Intended as a remote "do not start" flag for a pod. |
| `autotorsocenter` | int | 2 | Torso auto-centring mode (`VehicleInterface::perminateTorsoMode`). 0 = off, 1 = slow, 2 = fast. |
-**Read but overridden in this build ? editing has no effect:**
+**Read but overridden in this build -- editing has no effect:**
| Key | Why |
|---|---|
@@ -106,7 +117,7 @@ time.
## `[server]`
-Multiplayer host defaults. **This section is written back** by the host configuration UI ?
+Multiplayer host defaults. **This section is written back** by the host configuration UI --
do not hand-edit it while the game is running.
Verified read: `playerlimit` (`Adept/Application.cpp`, both `GetEntry` and `SetEntry`).
@@ -125,7 +136,7 @@ one-to-one with the in-game host options:
Notes:
-- `allowed*1` / `allowed*2` are 32-bit hex masks covering items 0?31 and 32?63
+- `allowed*1` / `allowed*2` are 32-bit hex masks covering items 0-31 and 32-63
respectively. `ffffffff` = everything permitted.
- `maxplayers` and `maxbots` are serialised to clients as **5-bit fields**, so the maximum
usable value is **31**. Writing 32 truncates to 0. See `RAISING-PLAYER-CAP.md`.
@@ -198,24 +209,24 @@ all offsets are axis offsets applied to the camera or its look-at point.
## `[Battle Tech Misc]`
Read by `CamerashipParams::LoadOptions` (`VehicleInterface.cpp`). **Several key names in
-this section do not describe what they do** ? they appear to be deliberately obscured. The
+this section do not describe what they do** -- they appear to be deliberately obscured. The
mapping below is from the source and is the authoritative meaning.
| Key | Type | Range / clamp | Actually sets |
|---|---|---|---|
-| `SecsMissionReplay` | int | `<0` or `>=100` ¡æ 60 | `g_nSecsMissionReplay` ? mission replay duration. |
-| `SecsMissionReport` | float | `<0` or `>=30` ¡æ 15 | `g_fSecsMissionReport` ? mission report screen duration. |
-| `AutoPowerUpLevel` | float | clamped to 0.0?1.0 | `g_fAutoPowerUpLevel` ? auto power-up threshold. |
-| `NeedFlushLevel` | float | clamped to 0.0?1.0 | `g_fNeedFlushLevel` ? heat level at which flush is advised. |
-| `TimeMsgSender` | float | clamped to 0.1?5.0 | `g_fTimeMsgSender` ? how long a message sender name is shown. |
-| `TimeList_Index` | int | `<0` ¡æ 0, `>=20` ¡æ 3 | `g_nTimeList_Index` ? selected entry in the lobby time-limit dropdown. |
-| `TimeList_Value` | int | `<0` or `>=100` ¡æ 7 | `g_nTimeList_Value` ? lobby time limit in minutes. |
-| `RuleBook` | int | 0 or 1 | ?? **`g_nMechVariant`** ? mech variant feature flag. Nothing to do with a rule book. |
-| `DawnWar` | int | 0 or 1 | ?? **`g_nMechLabOp`** ? mechlab operation flag. |
-| `BiggieSizeIt` | int | 0 or 1 | ?? **`g_nMechPodNum`** ? mech pod count flag, used by the console lobby to enable the larger roster (`USE_O_MORE_PODS`). |
-| `CanYouHearTheFootSteps` | int | 0 or 1 | ?? **`g_nBlackMech`** ? black mech flag. |
+| `SecsMissionReplay` | int | `<0` or `>=100` -> 60 | `g_nSecsMissionReplay` -- mission replay duration. |
+| `SecsMissionReport` | float | `<0` or `>=30` -> 15 | `g_fSecsMissionReport` -- mission report screen duration. |
+| `AutoPowerUpLevel` | float | clamped to 0.0-1.0 | `g_fAutoPowerUpLevel` -- auto power-up threshold. |
+| `NeedFlushLevel` | float | clamped to 0.0-1.0 | `g_fNeedFlushLevel` -- heat level at which flush is advised. |
+| `TimeMsgSender` | float | clamped to 0.1-5.0 | `g_fTimeMsgSender` -- how long a message sender name is shown. |
+| `TimeList_Index` | int | `<0` -> 0, `>=20` -> 3 | `g_nTimeList_Index` -- selected entry in the lobby time-limit dropdown. **No longer used by the console lobby:** since the list was expanded to 23 entries (1-15, 20, 25, 30, 45, 60, 120, 180, 240) `ConLobbyMission.script` uses a literal index for the 7-minute default, so the script stays independent of the exe. Still read by the legacy non-MSL path. |
+| `TimeList_Value` | int | `<0` or `>=100` -> 7 | `g_nTimeList_Value` -- lobby time limit in minutes. Still live: it is the mission length handed to the host, and what `[RookieMission] TimeLimit=-1` resolves to. |
+| `RuleBook` | int | 0 or 1 | **(!)** **`g_nMechVariant`** -- mech variant feature flag. Nothing to do with a rule book. |
+| `DawnWar` | int | 0 or 1 | **(!)** **`g_nMechLabOp`** -- mechlab operation flag. |
+| `BiggieSizeIt` | int | 0 or 1 | **(!)** **`g_nMechPodNum`** -- mech pod count flag, used by the console lobby to enable the larger roster (`USE_O_MORE_PODS`). |
+| `CanYouHearTheFootSteps` | int | 0 or 1 | **(!)** **`g_nBlackMech`** -- black mech flag. |
-### ?? The shipped file misspells two of these
+### WARNING -- the shipped file misspells two of these
The shipped `options.ini` contains:
@@ -289,7 +300,7 @@ Text block: `TextMarginL`, `TextMarginT`, `TextMarginR`, `TextMarginB`, `TextHei
These appear in the shipped `options.ini` but are **not read by any code** in this tree.
They are stock MechWarrior 4 leftovers. Editing them does nothing.
-### `[network options]` ? entire section is dead
+### `[network options]` -- entire section is dead
`connectiontype`, `connectionspeed`, `packetsize`, `defaultconnection`, `playericon`,
`teamicon`.
@@ -313,7 +324,7 @@ populated from the multiplayer connection wizard, not from this file.
## Practical notes
- **Back up `options.ini` before experimenting.** The game rewrites parts of it, and an
- unknown key is silently ignored rather than reported, so a typo produces no diagnostic ?
+ unknown key is silently ignored rather than reported, so a typo produces no diagnostic --
just default behaviour.
- **Per-role files.** On a pod, the launcher copies `options-game.ini`, `options-cam.ini`
or `options-mr.ini` over `options.ini` depending on the machine's role. Edit the role file,
diff --git a/README.md b/README.md
index 358c8ae2..5984419a 100644
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@ release, producing the **V5.1.x** series maintained in this repository.
- **Full build reconstruction** — the complete toolchain (VC6, DX 7.0a, DX Media 6) is
self-contained in `build-env\`; the game and editor build from source with 0 errors
-See `RELEASE-NOTES-5.1.0b_RC1.md` for pod-owner change details, and `CLAUDE.md` for the full
+See `RELEASE-NOTES-5.1.0b_RC2.md` for pod-owner change details, and `CLAUDE.md` for the full
engineering history.
---
diff --git a/RELEASE-NOTES-5.1.0b_RC1.html b/RELEASE-NOTES-5.1.0b_RC2.html
similarity index 82%
rename from RELEASE-NOTES-5.1.0b_RC1.html
rename to RELEASE-NOTES-5.1.0b_RC2.html
index 2871ae42..71cf1436 100644
--- a/RELEASE-NOTES-5.1.0b_RC1.html
+++ b/RELEASE-NOTES-5.1.0b_RC2.html
@@ -2,7 +2,7 @@
-BattleTech: FireStorm V5.1.0b_RC1 - Release Notes
+BattleTech: FireStorm V5.1.0b_RC2 - Release Notes
-BattleTech: FireStorm — V5.1.0b_RC1
-Release notes for pod owners · 25 July 2026
-This build covers everything since the -tbaud RIO update. It is a large release: 58 changes
+
BattleTech: FireStorm — V5.1.0b_RC2
+Release notes for pod owners · 7 August 2026
+This build covers everything since the -tbaud RIO update. It is a large release: 75 changes
spanning multiplayer, cockpit hardware, displays, 'Mech content, the console lobby and the
match printer.
The most important thing to know: if you change nothing in your configuration, this build
behaves like your current one. Every new feature listed here is either a fix that applies
automatically, or an option you have to switch on deliberately. Nothing new is enabled by default.
+Already testing RC1? Here is what is new in RC2
+Everything else in this document was already in RC1 and is unchanged.
+
+-tident -- the game now identifies your monitors for you, so you can set
+ -tmon correctly. See section 4.
+gos-displays.txt now traces the whole display start-up, including a
+ plain-English CLASH warning when two panels land on the same monitor, and a line
+ stating this machine's CTCL role. See section 8.
+- Panels are now released correctly when the display mode changes -- a real fault
+ that could stop the MFDs from restarting. See section 4.
+-tmr -- diagnostics for a cameraship Map/Armor screen that shows its
+ background but no overlays, plus the field check that usually explains it. See section 4.
+- Match time limits now go up to 240 minutes, and the default is 7 minutes again
+ (it had silently become 4). See section 2.
+- The console lobby now reads
V5.1.0b2. Use this to confirm a pod actually
+ received the new content packages.
+
1. Read this first -- required on Windows 10 / 11
Run set-appcompat.bat after installing
@@ -104,8 +121,13 @@ matches. It is the authoritative reference for the file format -- this page only
the feature on.
The Default button restores standard settings, so you can always get back to a clean lobby.
Longer match times
-The multiplayer time limit list has been expanded from 9 options to 18:
-1 through 15 minutes, plus 20, 25 and 30. The dropdown scrolls to fit them.
+The multiplayer time limit list has been expanded from 9 options to 23:
+1 through 15 minutes, plus 20, 25, 30, 45, 60, 120, 180 and 240. The dropdown scrolls
+to fit them. Long-format events no longer need a mission restarted part way through.
+The default time limit is 7 minutes again. While the list was being extended it had
+silently become 4 minutes, because the default was stored as a position in the list rather than as
+a number of minutes. Fixed.
+This is console and content only -- it arrives with the resource packages, not with MW4.exe.
3. Cockpit and RIO hardware
Throttle zero fix
@@ -258,6 +280,20 @@ another program taking the screen. The panels were being re-opened without the p
being closed first, so they collided with themselves. Most pods never saw it; it showed up
reliably on machines where one of the panels was on the monitor Windows treats as primary.
Applies automatically. No configuration needed.
+Cameraship Map/Armor screen shows its background but nothing else
+If the second screen on a cameraship lights up, shows the correct background artwork, and then
+draws no armour, score or map overlays at all, check the pod's launch line first:
+A cameraship must be launched with -ctcltype 3.
+-ctcltype 2 is a game pod.
+With the wrong role the screen still opens and still paints its background -- that part does not
+depend on the role -- but the overlay drawing is skipped entirely. The result looks exactly like a
+graphics card or driver fault, which is how it has been misdiagnosed in the past. It is not.
+The game now records this for you: gos-displays.txt contains a line reading
+CTCL type = 3 (cameraship - overlays WILL be drawn), or the equivalent warning
+if the role is wrong. Check that before suspecting hardware.
+If the role is correct and the overlays are still missing, -tmr 3 draws a solid magenta
+test rectangle on that screen. If the magenta appears, the display and 3D device are working and
+the problem is elsewhere; include gos-displays.txt with the report.
5. 'Mechs and content
Six rookie 'Mechs instead of four
@@ -359,7 +395,8 @@ the shipped language file was a Korean build. They now read More Details
MW4.exe -fps
Writes gos-fps.txt next to the game with a per-second breakdown -- average frame rate, the
-slowest frames, and a count of stutters -- plus a summary at the end. Off unless you ask for it,
+worst 5% of frames, the single worst frame, and a count of stutters -- plus a whole-session summary
+at the end giving the true 1% and 0.1% lows. Off unless you ask for it,
and it costs nothing when unused.
Display troubleshooting log
When display problems occur, the game now writes gos-displays.txt next to the exe listing
@@ -373,6 +410,10 @@ number to use for each -- the same numbers -tident puts on the scre
position 1 : device 0 -> \\.\DISPLAY1 800x600 at 0,0 [WINDOWS PRIMARY]
position 2 : device 3 -> \\.\DISPLAY4 640x480 at 800,122
+
It also records the role this machine was launched as, which is worth checking on any cameraship
+that is not drawing its overlays (section 4):
+ CTCL type = 3 (cameraship - overlays WILL be drawn)
+
The file is rewritten every time the game starts. If you have a failure worth reporting, copy
the file before launching again.
@@ -417,12 +458,20 @@ the file before launching again.
Game starts normally |
+-tmr <0-3> |
+Cameraship Map/Armor screen troubleshooting only |
+Normal behaviour (0) |
+
+
-tcoop <0-5> |
Display troubleshooting only -- do not change |
Standard behaviour (0) |
+-ctcltype <1-3> is not new, but it is worth repeating: 1 = console, 2 = game pod,
+3 = cameraship, and getting it wrong on a cameraship is the usual cause of a blank Map/Armor
+screen (section 4).
10. Known issues and limitations
@@ -436,6 +485,12 @@ the file before launching again.
keep-aspect scaling for correct geometry with black bars at the sides.
- The AppCompat registration is tied to the install folder. Move the game, re-run
set-appcompat.bat.
+- Sound output is two-speaker stereo. Surround and quad speaker rigs are downmixed.
+ This is how the game has always behaved; making use of more speakers is being investigated for a
+ later release.
+-tident is only meaningful on a machine with more than one monitor. On a
+ single-screen test PC it may briefly paint one number over another, because Windows can present a
+ single monitor to the game as two devices. Harmless, and it cannot happen on a real pod.
11. Upgrade checklist
@@ -448,9 +503,11 @@ the file before launching again.
display: all MFD modes (spanned -tmfds 1 / -tmfds 3, split -tmfds 4) and cameraship
mode. Only console mode, on a single display, does without it. Windows XP pods never
need it.
-Launch and confirm the console lobby reads the new version.
+Launch and confirm the console lobby reads V5.1.0b2. If it still shows an
+ older version, the resource packages did not get copied.
If your pod uses MFDs or a cameraship, run MW4.exe -tident once and check each monitor
- shows the role you expect. If any are wrong, note the numbers shown and correct -tmon.
+ shows the role you expect. If any are wrong, note the numbers shown and correct -tmon.
+ On a cameraship, also confirm the launch line uses -ctcltype 3.
Play one mission end to end before putting the pod back into service.
Optional: add [automaticmode] and [RookieMission] to options.ini if you want the new
Load File button or custom rookie missions.
diff --git a/RELEASE-NOTES-5.1.0b_RC1.md b/RELEASE-NOTES-5.1.0b_RC2.md
similarity index 81%
rename from RELEASE-NOTES-5.1.0b_RC1.md
rename to RELEASE-NOTES-5.1.0b_RC2.md
index d3f7e7e6..85889e4c 100644
--- a/RELEASE-NOTES-5.1.0b_RC1.md
+++ b/RELEASE-NOTES-5.1.0b_RC2.md
@@ -1,8 +1,8 @@
-# BattleTech: FireStorm -- V5.1.0b_RC1
+# BattleTech: FireStorm -- V5.1.0b_RC2
**Release notes for pod owners**
-This build covers everything since the `-tbaud` RIO update. It is a large release: 58 changes
+This build covers everything since the `-tbaud` RIO update. It is a large release: 75 changes
spanning multiplayer, cockpit hardware, displays, 'Mech content, the console lobby and the
match printer.
@@ -10,6 +10,24 @@ match printer.
> behaves like your current one. Every new feature listed here is either a fix that applies
> automatically, or an option you have to switch on deliberately. Nothing new is enabled by default.
+### Already testing RC1? Here is what is new in RC2
+
+Everything else in this document was already in RC1 and is unchanged.
+
+- **`-tident`** -- the game now identifies your monitors for you, so you can set `-tmon`
+ correctly. See section 4.
+- **`gos-displays.txt` now traces the whole display start-up**, including a plain-English
+ **CLASH** warning when two panels land on the same monitor, and a line stating this machine's
+ CTCL role. See section 8.
+- **Panels are now released correctly when the display mode changes** -- a real fault that could
+ stop the MFDs from restarting. See section 4.
+- **`-tmr`** -- diagnostics for a cameraship Map/Armor screen that shows its background but no
+ overlays, plus the field check that usually explains it. See section 4.
+- **Match time limits now go up to 240 minutes**, and the default is 7 minutes again (it had
+ silently become 4). See section 2.
+- **The console lobby now reads `V5.1.0b2`.** Use this to confirm a pod actually received the
+ new content packages.
+
---
## 1. Read this first -- required on Windows 10 / 11
@@ -87,8 +105,15 @@ The **Default** button restores standard settings, so you can always get back to
### Longer match times
-The multiplayer time limit list has been expanded from 9 options to 18:
-**1 through 15 minutes, plus 20, 25 and 30.** The dropdown scrolls to fit them.
+The multiplayer time limit list has been expanded from 9 options to 23:
+**1 through 15 minutes, plus 20, 25, 30, 45, 60, 120, 180 and 240.** The dropdown scrolls to fit
+them. Long-format events no longer need a mission restarted part way through.
+
+**The default time limit is 7 minutes again.** While the list was being extended it had silently
+become 4 minutes, because the default was stored as a position in the list rather than as a
+number of minutes. Fixed.
+
+This is console and content only -- it arrives with the resource packages, not with `MW4.exe`.
---
@@ -270,6 +295,25 @@ reliably on machines where one of the panels was on the monitor Windows treats a
**Applies automatically.** No configuration needed.
+### Cameraship Map/Armor screen shows its background but nothing else
+
+If the second screen on a cameraship lights up, shows the correct background artwork, and then
+draws **no armour, score or map overlays at all**, check the pod's launch line first:
+
+> **A cameraship must be launched with `-ctcltype 3`.** `-ctcltype 2` is a game pod.
+
+With the wrong role the screen still opens and still paints its background -- that part does not
+depend on the role -- but the overlay drawing is skipped entirely. The result looks exactly like
+a graphics card or driver fault, which is how it has been misdiagnosed in the past. It is not.
+
+The game now records this for you: `gos-displays.txt` contains a line reading
+`CTCL type = 3 (cameraship - overlays WILL be drawn)`, or the equivalent warning if the role is
+wrong. Check that before suspecting hardware.
+
+If the role is correct and the overlays are still missing, `-tmr 3` draws a solid magenta test
+rectangle on that screen. If the magenta appears, the display and 3D device are working and the
+problem is elsewhere; include `gos-displays.txt` with the report.
+
---
## 5. 'Mechs and content
@@ -405,8 +449,9 @@ MW4.exe -fps
```
Writes `gos-fps.txt` next to the game with a per-second breakdown -- average frame rate, the
-slowest frames, and a count of stutters -- plus a summary at the end. **Off unless you ask for it**,
-and it costs nothing when unused.
+worst 5% of frames, the single worst frame, and a count of stutters -- plus a whole-session
+summary at the end giving the true 1% and 0.1% lows. **Off unless you ask for it**, and it costs
+nothing when unused.
### Display troubleshooting log
@@ -425,6 +470,13 @@ number to use for each -- the same numbers `-tident` puts on the screens:
position 2 : device 3 -> \\.\DISPLAY4 640x480 at 800,122
```
+It also records the role this machine was launched as, which is worth checking on any cameraship
+that is not drawing its overlays (section 4):
+
+```
+ CTCL type = 3 (cameraship - overlays WILL be drawn)
+```
+
> The file is rewritten every time the game starts. If you have a failure worth reporting, copy
> the file before launching again.
@@ -440,8 +492,13 @@ number to use for each -- the same numbers `-tident` puts on the screens:
| `-tbaud ` | COM1 speed for replica RIO boards | Original board speed |
| `-fps` | Write a performance log | No log, no overhead |
| `-help` | Show the full switch reference and exit | Game starts normally |
+| `-tmr <0-3>` | Cameraship Map/Armor screen troubleshooting only | Normal behaviour (0) |
| `-tcoop <0-5>` | Display troubleshooting only -- **do not change** | Standard behaviour (0) |
+`-ctcltype <1-3>` is not new, but it is worth repeating: **1 = console, 2 = game pod,
+3 = cameraship**, and getting it wrong on a cameraship is the usual cause of a blank Map/Armor
+screen (section 4).
+
---
## 10. Known issues and limitations
@@ -456,6 +513,12 @@ number to use for each -- the same numbers `-tident` puts on the screens:
keep-aspect scaling for correct geometry with black bars at the sides.
- **The AppCompat registration is tied to the install folder.** Move the game, re-run
`set-appcompat.bat`.
+- **Sound output is two-speaker stereo.** Surround and quad speaker rigs are downmixed. This is
+ how the game has always behaved; making use of more speakers is being investigated for a
+ later release.
+- **`-tident` is only meaningful on a machine with more than one monitor.** On a single-screen
+ test PC it may briefly paint one number over another, because Windows can present a single
+ monitor to the game as two devices. Harmless, and it cannot happen on a real pod.
---
@@ -469,9 +532,11 @@ number to use for each -- the same numbers `-tident` puts on the screens:
display: all MFD modes (spanned `-tmfds 1` / `-tmfds 3`, split `-tmfds 4`) and cameraship
mode. Only console mode, on a single display, does without it. Windows XP pods never
need it.
-5. Launch and confirm the console lobby reads the new version.
+5. Launch and confirm the console lobby reads **`V5.1.0b2`**. If it still shows an older
+ version, the resource packages did not get copied.
6. If your pod uses MFDs or a cameraship, run `MW4.exe -tident` once and check each monitor
shows the role you expect. If any are wrong, note the numbers shown and correct `-tmon`.
+ On a cameraship, also confirm the launch line uses `-ctcltype 3`.
7. Play one mission end to end before putting the pod back into service.
8. Optional: add `[automaticmode]` and `[RookieMission]` to `options.ini` if you want the new
Load File button or custom rookie missions.
diff --git a/testing-checklist-5.1.0b1.txt b/testing-checklist-5.1.0b1.txt
deleted file mode 100644
index 47c7df71..00000000
--- a/testing-checklist-5.1.0b1.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-Testing Checklist -- eaa5fd3 through 2026-07-23
-Branch: 5.1.0b-in-progress
-Last known-good pod test: before eaa5fd3
-================================================
-
-1. DUAL MFD (mode 4) -- right device stagger fix
- [ ] In a pod with two MFD screens (mode 4), verify right MFD shows correct
- channel data (channels 3-4) and does not flash blank/grid-only frames
- [ ] Left MFD still shows channels 0-2 correctly at all times
- [ ] Radar display unaffected
- [ ] Mode 1 (single MFD) still works normally (code path unchanged)
-
-2. SERIAL RIO / -tbaud BAUD RATE SCALING
- [ ] Default 9600 baud RIO board: poll timeout is 50 ms (same as before)
- [ ] High-speed board at 115200 baud: poll timeout is ~5 ms (faster response)
- [ ] Custom -tbaud 31250: timeout is ceil(480000/31250) = 16 ms
- [ ] Verify no regression in button/lamp/analog response at all three rates
- [ ] Verify game launches normally without -tbaud flag
-
-3. MULTIPLAYER -- 16 PILOTS + 1 CAMERASHIP
- [ ] Host a 16-player game; a 17th connection as cameraship can join without
- "Too many player/bots" error
- [ ] The cameraship slot does not count against the pilot cap in the lobby
- [ ] Standard 16-pilot session (no cameraship) still works normally
- [ ] Player limit slider in lobby still functions correctly at runtime
- [ ] COOP mode unaffected (still caps at 9 pilots + bots)
-
-4. MECH LOADOUTS
- [ ] Battlemaster IS: spawns with PPC, 6x ML (3 RT/3 LT), 2x MG (200 rds), SRM6 (15 rds)
- [ ] Battlemaster IS: all weapons in group 1 except SRM6 (group 2)
- [ ] Battlemaster Clan 2C: spawns with ER PPC, 6x ER ML, 2x Clan Gauss (16 rds each), Clan SSRM6 (15 rds)
- [ ] Behemoth / Behemoth II: Gauss rifles fire with group 1 (not group 3)
-
-5. CONLOBBY -- V5.1.0b2 / SUPER6 MECH ROTATION
- [ ] Console title displays "BattleTech Console V5.1.0b2"
- [ ] Rookie mech cycle shows 6 mechs: Archer, Loki, Madcat, Thor, Vulture, Warhammer
- [ ] Right-click random mech picks from all 6 (not 5)
- [ ] MP time-limit dropdown shows 23 entries (1-15, 20, 25, 30, 45, 60, 120, 180, 240 min) and scrolls correctly
- [ ] MP time-limit defaults to 7 min (was wrongly defaulting to 4)
- [ ] Lobby launches correctly with 1-16 players
-
-6. MW4PRINT v2.0
- [ ] Print job completes normally; version banner shows "2.0 / 2026"
- [ ] File -> Database Settings (Ctrl+D) dialog opens; MySQL host/user/pass/db fields editable
- [ ] With a MySQL server configured, a print job exports match data to the database
- [ ] Without MySQL configured (or libmysql.dll absent), print job completes silently with no crash
- [ ] File -> Banner Setting... opens; changing the text updates the printed bottom-of-sheet URL
- [ ] Banner setting persists after closing and reopening mw4print
-
-7. LANGUAGE DLL -- ENGLISH BUTTON LABELS
- [ ] After a game crash/exception, the GameOS error dialog shows English button
- labels (More Details / Continue / Exit) instead of Korean ??? characters
-
-8. SOURCE ENCODING / BUILD HEALTH
- [ ] Full Release build completes 0 errors (the min/max fix was the last issue)
- [ ] No new warnings introduced beyond the pre-existing 384
-
-------------------------------------------------
-Added 2026-07-23 (commit 5813aeb6)
-------------------------------------------------
-
-9. ROOKIE MISSION -- CONFIGURABLE DEFAULTS VIA options.ini
- These defaults are read by CTCL_SetCDSP at startup and exposed as gosScript
- globals (g_szRookieMission, g_nRookieGameType, g_nRookieTimeLimit, etc.).
- The console script reads them instead of hardcoded values when "Default" is
- clicked or when the Rookie mission auto-loads.
-
- [ ] Without [RookieMission] section in options.ini: Rookie mission defaults
- to "ScarabStronghold - Attrition", game type Attrition, unlimited ammo on,
- all other params at zero/off -- same behavior as before
- [ ] Add [RookieMission] section to options.ini with MissionName and GameType
- overridden; restart game; "Default" button in console loads the specified
- mission and game type correctly
- [ ] TimeLimit=-1 in options.ini: lobby uses the server's default time setting
- (g_nTimeList_Value); TimeLimit=5 sets the lobby time limit to 5 minutes
- [ ] All 12 overridable params work individually: Visibility, Weather, TimeOfDay,
- Radar, HeatOn, FriendlyFire, SplashDamage, UnlimitedAmmo, WeaponJam,
- AdvanceMode, ArmorMode
- [ ] Game launches and functions normally when [RookieMission] section is absent
- (no crash, no STOP on missing keys)
- [ ] Requires rebuild: MW4.exe (Release + Profile); ScriptStrings.dll
-
-10. MECHLAB -- TURN RATE LABEL (StringResource.rc)
- IDS_ML_CH_TURNRATE changed from "Turn Rate (Degrees/Sec.):" to
- "Turn Rate (Top Speed Rad/Sec):". ScriptStrings.dll must be rebuilt.
-
- [ ] In mechlab, the turn rate stat row label reads "Turn Rate (Top Speed Rad/Sec):"
- [ ] No other mechlab labels affected
- [ ] Requires rebuild: ScriptStrings.dll (part of normal MW4Application build)
-
-11. HSH ASSET FILE RENAMES -- MFD AND MECHS PORTRAITS
- Several hsh/ BMP files were misnamed relative to what the game loads.
- Filenames now match the canonical stems used in huddamage.cpp texturename[]
- (hsh/MFD, hsh/hud, hsh/radar/hud) and GetLocString DNL strings (hsh/Mechs).
-
- hsh/MFD/ -- in-game target MFD damage display (uses texturename[] canonical):
- [ ] Assassin II: MFD shows correct silhouette during combat
- (was assassinii.bmp, now assassin2.bmp -- matches M_Assassin2 entry)
- [ ] All other MFD silhouettes display correctly in combat for all 65 mechs
- (bulk refresh from 5.0.7D release; verify no missing/black MFD panels)
-
- hsh/Mechs/ -- mw4print post-match scorecard portraits:
- [ ] Print a post-match scorecard featuring a Battlemaster IIc pilot;
- portrait image appears (was battlemasteriic.bmp, now "battlemaster iic.bmp")
- [ ] Print a scorecard featuring a Behemoth II pilot; portrait appears
- (was behemothii.bmp, now "behemoth ii.bmp")
- [ ] Print a scorecard featuring a Mad Cat MKII pilot; portrait appears
- (was "mad cat mk.ii.bmp", now "mad cat mkii.bmp")
- [ ] Scorecards for all other mechs still show portraits correctly
-
diff --git a/testing-checklist-5.1.0b_RC2.txt b/testing-checklist-5.1.0b_RC2.txt
new file mode 100644
index 00000000..af8f8da1
--- /dev/null
+++ b/testing-checklist-5.1.0b_RC2.txt
@@ -0,0 +1,220 @@
+Testing Checklist -- V5.1.0b_RC2 (eaa5fd3 through 2026-08-07)
+Branch: 5.1.0b-in-progress
+Last known-good pod test: before eaa5fd3
+Sections 1-11 were already in RC1; sections 12-17 are new in RC2.
+
+Build requirements for RC2:
+ * MW4.exe (Release + Profile) -- CoreTech GameOS and MW4Application changed
+ (-tident, display trace, panel re-entry fix, -tmr, help text).
+ * Resource repack -- ConLobby.script / ConLobbyMission.script / the mech
+ subsystems live in props.mw4. Delete resource\props.mw4 and props.dep, then
+ run build-env\build-resources.ps1 so the repack is full, not incremental.
+ * Redeploy with build-env\deploy-mw4.ps1, then run set-appcompat.bat at the
+ install path.
+================================================
+
+1. DUAL MFD (mode 4) -- right device stagger fix
+ [ ] In a pod with two MFD screens (mode 4), verify right MFD shows correct
+ channel data (channels 3-4) and does not flash blank/grid-only frames
+ [ ] Left MFD still shows channels 0-2 correctly at all times
+ [ ] Radar display unaffected
+ [ ] Mode 1 (single MFD) still works normally (code path unchanged)
+
+2. SERIAL RIO / -tbaud BAUD RATE SCALING
+ [ ] Default 9600 baud RIO board: poll timeout is 50 ms (same as before)
+ [ ] High-speed board at 115200 baud: poll timeout is ~5 ms (faster response)
+ [ ] Custom -tbaud 31250: timeout is ceil(480000/31250) = 16 ms
+ [ ] Verify no regression in button/lamp/analog response at all three rates
+ [ ] Verify game launches normally without -tbaud flag
+
+3. MULTIPLAYER -- 16 PILOTS + 1 CAMERASHIP
+ [ ] Host a 16-player game; a 17th connection as cameraship can join without
+ "Too many player/bots" error
+ [ ] The cameraship slot does not count against the pilot cap in the lobby
+ [ ] Standard 16-pilot session (no cameraship) still works normally
+ [ ] Player limit slider in lobby still functions correctly at runtime
+ [ ] COOP mode unaffected (still caps at 9 pilots + bots)
+
+4. MECH LOADOUTS
+ [ ] Battlemaster IS: spawns with PPC, 6x ML (3 RT/3 LT), 2x MG (200 rds), SRM6 (15 rds)
+ [ ] Battlemaster IS: all weapons in group 1 except SRM6 (group 2)
+ [ ] Battlemaster Clan 2C: spawns with ER PPC, 6x ER ML, 2x Clan Gauss (16 rds each), Clan SSRM6 (15 rds)
+ [ ] Behemoth / Behemoth II: Gauss rifles fire with group 1 (not group 3)
+
+5. CONLOBBY -- V5.1.0b2 / SUPER6 MECH ROTATION
+ [ ] Console title displays "BattleTech Console V5.1.0b2"
+ [ ] Rookie mech cycle shows 6 mechs: Archer, Loki, Madcat, Thor, Vulture, Warhammer
+ [ ] Right-click random mech picks from all 6 (not 5)
+ [ ] MP time-limit dropdown shows 23 entries (1-15, 20, 25, 30, 45, 60, 120, 180, 240 min) and scrolls correctly
+ [ ] MP time-limit defaults to 7 min (was wrongly defaulting to 4)
+ [ ] Lobby launches correctly with 1-16 players
+
+6. MW4PRINT v2.0
+ [ ] Print job completes normally; version banner shows "2.0 / 2026"
+ [ ] File -> Database Settings (Ctrl+D) dialog opens; MySQL host/user/pass/db fields editable
+ [ ] With a MySQL server configured, a print job exports match data to the database
+ [ ] Without MySQL configured (or libmysql.dll absent), print job completes silently with no crash
+ [ ] File -> Banner Setting... opens; changing the text updates the printed bottom-of-sheet URL
+ [ ] Banner setting persists after closing and reopening mw4print
+
+7. LANGUAGE DLL -- ENGLISH BUTTON LABELS
+ [ ] After a game crash/exception, the GameOS error dialog shows English button
+ labels (More Details / Continue / Exit) instead of Korean ??? characters
+
+8. SOURCE ENCODING / BUILD HEALTH
+ [ ] Full Release build completes 0 errors (the min/max fix was the last issue)
+ [ ] No new warnings introduced beyond the pre-existing 384
+
+------------------------------------------------
+Added 2026-07-23 (commit 5813aeb6)
+------------------------------------------------
+
+9. ROOKIE MISSION -- CONFIGURABLE DEFAULTS VIA options.ini
+ These defaults are read by CTCL_SetCDSP at startup and exposed as gosScript
+ globals (g_szRookieMission, g_nRookieGameType, g_nRookieTimeLimit, etc.).
+ The console script reads them instead of hardcoded values when "Default" is
+ clicked or when the Rookie mission auto-loads.
+
+ [ ] Without [RookieMission] section in options.ini: Rookie mission defaults
+ to "ScarabStronghold - Attrition", game type Attrition, unlimited ammo on,
+ all other params at zero/off -- same behavior as before
+ [ ] Add [RookieMission] section to options.ini with MissionName and GameType
+ overridden; restart game; "Default" button in console loads the specified
+ mission and game type correctly
+ [ ] TimeLimit=-1 in options.ini: lobby uses the server's default time setting
+ (g_nTimeList_Value); TimeLimit=5 sets the lobby time limit to 5 minutes
+ [ ] All 12 overridable params work individually: Visibility, Weather, TimeOfDay,
+ Radar, HeatOn, FriendlyFire, SplashDamage, UnlimitedAmmo, WeaponJam,
+ AdvanceMode, ArmorMode
+ [ ] Game launches and functions normally when [RookieMission] section is absent
+ (no crash, no STOP on missing keys)
+ [ ] Requires rebuild: MW4.exe (Release + Profile); ScriptStrings.dll
+
+10. MECHLAB -- TURN RATE LABEL (StringResource.rc)
+ IDS_ML_CH_TURNRATE changed from "Turn Rate (Degrees/Sec.):" to
+ "Turn Rate (Top Speed Rad/Sec):". ScriptStrings.dll must be rebuilt.
+
+ [ ] In mechlab, the turn rate stat row label reads "Turn Rate (Top Speed Rad/Sec):"
+ [ ] No other mechlab labels affected
+ [ ] Requires rebuild: ScriptStrings.dll (part of normal MW4Application build)
+
+11. HSH ASSET FILE RENAMES -- MFD AND MECHS PORTRAITS
+ Several hsh/ BMP files were misnamed relative to what the game loads.
+ Filenames now match the canonical stems used in huddamage.cpp texturename[]
+ (hsh/MFD, hsh/hud, hsh/radar/hud) and GetLocString DNL strings (hsh/Mechs).
+
+ hsh/MFD/ -- in-game target MFD damage display (uses texturename[] canonical):
+ [ ] Assassin II: MFD shows correct silhouette during combat
+ (was assassinii.bmp, now assassin2.bmp -- matches M_Assassin2 entry)
+ [ ] All other MFD silhouettes display correctly in combat for all 65 mechs
+ (bulk refresh from 5.0.7D release; verify no missing/black MFD panels)
+
+ hsh/Mechs/ -- mw4print post-match scorecard portraits:
+ [ ] Print a post-match scorecard featuring a Battlemaster IIc pilot;
+ portrait image appears (was battlemasteriic.bmp, now "battlemaster iic.bmp")
+ [ ] Print a scorecard featuring a Behemoth II pilot; portrait appears
+ (was behemothii.bmp, now "behemoth ii.bmp")
+ [ ] Print a scorecard featuring a Mad Cat MKII pilot; portrait appears
+ (was "mad cat mk.ii.bmp", now "mad cat mkii.bmp")
+ [ ] Scorecards for all other mechs still show portraits correctly
+
+------------------------------------------------
+Added for RC2 (2026-07-25 through 2026-08-07)
+------------------------------------------------
+
+12. -tident DISPLAY IDENTIFY MODE (new switch)
+ MW4.exe -tident [3..120, default 20] paints every display with a colour,
+ its -tmon number, its DirectDraw device index and its current role, then
+ exits. Uses DDSCL_NORMAL + GDI: no exclusive mode, no display mode change.
+
+ [ ] MW4.exe -tident on a 4-monitor pod: every monitor shows a distinct
+ colour and a large number; no monitor is left on the desktop
+ [ ] The role shown on each monitor (main / radar / mfd1 / mfd2) matches
+ what that monitor actually displays during a mission
+ [ ] The game exits on its own when the timer expires, and does NOT start
+ [ ] -tident 5 exits after ~5 s; -tident 200 clamps to the accepted range
+ [ ] After -tident, the desktop is unchanged: same resolution, colour depth
+ and monitor arrangement as before (nothing to restore by hand)
+ [ ] Works on a pod where the MFD modes are currently failing (that is the
+ case it exists for)
+ [ ] Everything painted on screen also appears in gos-displays.txt
+ [ ] Typing those numbers into -tmon puts each panel on the intended monitor
+
+13. gos-displays.txt FULL START-UP TRACE
+ Startup-only logging; no frame-loop cost. File is truncated each launch.
+
+ [ ] File is created next to MW4.exe on every launch, including launches
+ that fail during panel bring-up (open-append-close, survives a crash)
+ [ ] Header shows the exe path, the full command line, and -tmfds / -tmon
+ converted to 0-based device indices
+ [ ] Windows desktop topology section lists every \\.\DISPLAYn with its
+ friendly name, attached/primary state and current mode
+ [ ] Each enumeration callback is logged with GUID and resolved monitor
+ [ ] Device table appears three times (before merge, after merge, final)
+ and the adapter grouping lists devices sharing one card
+ [ ] Role selection prints the chosen device AND the reason each skipped
+ device was skipped
+ [ ] Each -tmon override reports APPLIED or REJECTED with what auto-detect
+ had chosen
+ [ ] "Desktop arrangement, left to right" block matches the physical layout
+ [ ] CLASH check: deliberately run -tmon with the same device twice (e.g.
+ -tmon 1,1,3,4) and confirm the report names the clash explicitly
+ [ ] "CTCL type = " line is present and correct on console, game pod and
+ cameraship
+ [ ] Startup time is not noticeably longer than the previous build
+
+14. PANEL RE-ENTRY FIX (HSH_EnterFullScreen2 releases before re-opening)
+ Panels used to be re-opened without the previous DirectDraw objects being
+ released, leaking the exclusive claim. Bites hardest when a panel sits on
+ the monitor Windows treats as primary.
+
+ [ ] Full MFD pod (-tmfds 4) survives an Alt-Tab out and back with all
+ panels still drawing
+ [ ] Panels still work after a display mode change (shell -> mission ->
+ shell, and mission restart)
+ [ ] gos-displays.txt shows HSH_EnterFullScreen2 running more than once with
+ NO DDERR_EXCLUSIVEMODEALREADYSET / DDERR_NOCOOPERATIVELEVELSET on the
+ later entries
+ [ ] Cameraship (mr_device) path: same Alt-Tab / mode-change test
+ [ ] Test at least once on a machine where a panel IS on the Windows primary
+ monitor -- that is the configuration that used to fail
+
+15. CAMERASHIP MAP/ARMOR SCREEN AND -tmr
+ Field report root cause was -ctcltype 2 (game pod) on a cameraship, not a
+ video card. Overlays are gated on the CTCL role; the background is not.
+
+ [ ] Cameraship launched with -ctcltype 3: Map/Armor screen shows background
+ AND armour/score/map overlays
+ [ ] gos-displays.txt reads "CTCL type = 3 (cameraship - overlays WILL be
+ drawn)"
+ [ ] Launch the same machine with -ctcltype 2 and confirm the documented
+ symptom (background only, no overlays) and the matching log line --
+ this is the triage rule, worth seeing once
+ [ ] -tmr 0 (default / switch absent): behaviour identical to the previous
+ build
+ [ ] -tmr 3 paints a magenta test rectangle on the Map/Armor screen
+ [ ] -tmr 1 and -tmr 2 run without crashing
+ [ ] Draw-call counts are reported for the first 5 frames when -tmr is set
+
+16. MP TIME LIMITS TO 240 MIN -- IN-MISSION BEHAVIOUR
+ Extends section 5, which covers the lobby dropdown, the 7-minute default
+ and the console title. Content only (props.mw4). Requires a full repack:
+ delete resource\props.mw4 and props.dep first, then run
+ build-env\build-resources.ps1.
+
+ [ ] Default button returns the time limit to 7 minutes
+ [ ] Select 240 minutes, launch, and confirm the in-mission timer starts at
+ 240:00 and counts down correctly
+ [ ] Mission ends on time expiry at a long setting (spot-check one, e.g. 45)
+ [ ] PC host lobby (HostLobbyMission) time list shows the same 23 entries and
+ does not crash when opened -- the else-branch re-brace
+
+17. -help AND DOCUMENTATION
+ [ ] MW4.exe -help writes mw4-help.txt and opens it; game does not start
+ [ ] -tident, -tmr, -tcoop, -tbaud, -tmfds 4, -tmon and -fps all appear with
+ correct ranges
+ [ ] -tmon entry states these are NOT Windows Display Settings numbers
+ [ ] -ctcltype entry states a cameraship must use 3
+ [ ] -fps entry describes the per-second 5% low and the session 1% / 0.1%
+ summary (matches what gos-fps.txt actually prints)
+