options.ini had no documentation. This documents every section and key, compiled
by reading the actual read sites rather than by describing the shipped file, so
that settings which look active but are not are identified as such.
Covers [graphics options], [sound options], [special commands], [server],
[joystick], [Cameraship Params], [Battle Tech Misc], [RookieMission] and
[battle tech print], plus how the file is loaded, which parts the game writes
back, and the per-role options-game/cam/mr variants.
Notable findings, all verified against source:
- The entire [network options] section is DEAD. None of connectiontype,
connectionspeed, packetsize, defaultconnection, playericon or teamicon is read
by any code; the connection type actually used comes from the multiplayer
connection wizard. These are stock MW4 leftovers.
- Several [Battle Tech Misc] keys have names that do not describe what they do,
and the real meanings are now recorded: RuleBook sets g_nMechVariant, DawnWar
sets g_nMechLabOp, BiggieSizeIt sets g_nMechPodNum (the console lobby's larger
roster flag), and CanYouHearTheFootSteps sets g_nBlackMech.
- The shipped options.ini misspells two keys. It contains secmissionreplay and
secmissionreport, but the code reads SecsMissionReplay and SecsMissionReport.
The shipped values are therefore ignored and the compiled defaults apply.
- Three keys are read and then immediately overridden, so editing them does
nothing: videodriverindex (device forced to 0), huddamagemode and
hudtargetdamagemode (both forced false). Their GetEntry calls are commented out.
- [special commands] killgame is a self-clearing kill switch: if true at startup
the game rewrites it to false, saves options.ini and exits immediately.
- maxplayers/maxbots are serialised to clients as 5-bit fields, so 31 is the
maximum usable value; cross-referenced to RAISING-PLAYER-CAP.md.
Also records why a typo produces no diagnostic: GetEntry returns false and the
compiled default is kept silently. Page and key lookup were confirmed to be
case-insensitive (NotationFile::FindPage lowercases; Page::FindNote uses
_stricmp), so the capitalisation differences between the shipped file and the
code are harmless -- the misspellings above are not.
Co-authored-by: Claude Opus 5 (Anthropic) <noreply@anthropic.com>
Co-authored-by: GitHub Copilot <copilot@github.com>