Files
BT411/players
arcattackandClaude Opus 5 150961176c merge fix-ups: the four review findings + a build portability gate the merge exposed
Applied on top of the glass-cockpit-refit merge, all from the pre-merge review:

1. README CONTROLS TABLE REWRITTEN for the new default board.  It still taught
   "W/S throttle, A/D turn" while the defaults moved flight to the numpad and
   handed the letter rows to the MFD banks -- a fresh install would read
   controls that do not work.  The new table teaches the numpad flight block,
   the panel-on-your-keys groups, F7 for control mode (was M), backtick for the
   camera (was V), the coolant valves on 1-3/QWE with the detent warning kept,
   and PgUp/PgDn volume.  UPGRADERS ARE TOLD EXPLICITLY that their preserved
   bindings.txt keeps their old keys, and that deleting it opts into the board.

2. BACKTICK VIEW-TOGGLE GUARDED.  The bindings-row-wins rule (KeyHasBinding)
   covered V and J/K/L but not backtick itself, which polled unconditionally --
   and BACKTICK is a nameable, unbound key, so binding it to a button
   double-dispatched (button + camera).  Both halves of the view poll are now
   guarded.

3. ENVIRON.INI REFUSES ONE-SHOTS.  The loader applied ANY key=value line, and
   BT_JOYCONFIG in the file would defeat the #66 one-shot in a sneaky way: the
   wizard DELETES the process var after running, so in every relaunched child
   there is no real env var left to win over the file -- capture wizard at
   every mission start.  BT_JOYCONFIG is now skipped with the reason in the
   template header, which also warns that test/debug hooks (BT_MP_FORCE_DMG
   and friends) do not belong in a file that silently persists forever.

4. VOLUME DOCUMENTED EVERYWHERE IT WAS MISSING.  CONTROLS.md gains the
   PgUp/PgDn row (the old "- / = (see below)" cell pointed at a note that never
   mentioned volume) and the note that the keys moved so they no longer share a
   key with anything in any layout; the bindings template header reserves
   PgUp/PgDn informally.

5. L4KEYLIGHT BUILD GATE (found by building the merge on this machine).  The
   C++/WinRT Dynamic Lighting TU does not compile against SDK 10.0.19041 --
   its bundled cppwinrt fails inside winrt/base itself (C2039 'wait_for').
   CMake now detects an SDK older than 10.0.22000 and builds a dormant stub
   with the same five-function scalar interface (logs once at Start, identical
   behaviour otherwise) -- extending the feature's own runtime philosophy
   ("no Dynamic Lighting -> log once, stay dormant") to build time.  Dynamic
   Lighting is a Windows 11 22H2 feature, so nothing real is lost on an older
   build machine, and machines with a newer SDK build the real mirror
   unchanged.

VERIFIED on the merged tree (4.11.572):
  * build clean -- 0 compile errors; the 40 /FORCE-tolerated unresolved
    externals are byte-identical to every pre-merge build (20
    CreateStreamedSubsystem + 20 DefaultData; the earlier claim that all 40
    were CSS was shorthand -- corrected here for the record).
  * solo boot: environ.ini template written + loaded, mode resolver announces
    the surround, historical bands L276/R276/T223/B336 confirmed, keylight
    stub logs its dormant line, BT_SHOT capture shows the under-glass button
    treatment and the corrected hat labels, 0 faults.
  * PgUp/PgDn volume PROVEN LIVE via injected keys: 5%->10%->15%->10%, saved
    to volume.cfg.  (Side catch: content\volume.cfg had been sitting at 0.00
    from an old test -- anyone using this tree had a silent game; reset.)
  * full relay cycle on the merged exe: 2 pods staged, launch pair, mission,
    StopMission, round RESET -- all clean.
  * all three console suites still pass; checkctx CLEAN.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 13:24:22 -05:00
..

BattleTech {VERSION} -- multiplayer client
==========================================

IMPORTANT: FULLY EXTRACT this zip first (right-click - Extract All).
Do NOT run anything from inside the zip.  The .bat files must sit next
to the 'content' and 'build' folders.

UPGRADING from an older version?  Extract the new zip OVER your
existing game folder and say YES TO OVERWRITE.  Do NOT delete the
folder first -- your personal files (content\bindings.txt with your
key/joystick setup, content\volume.cfg with your volume) are not in
the zip and survive an extract-over-top, but a delete wipes them.
If you prefer a clean delete anyway, copy those two files out first
and put them back after.

TO JOIN AN INTERNET GAME:   double-click  join.bat
   -- pick your CALLSIGN and MECH, click JOIN (your choice is sent to
   the operator; waits for the session if it's not up yet)
TO JOIN A LAN GAME:         double-click  join_lan.bat  (operator's LAN;
   same callsign/mech menu)
SINGLE-PLAYER:              double-click  play_solo.bat  -- opens the
   mission menu: pick your mech (all 18), map, experience level,
   colours, weather and mission length, then launch
{STEAM}STEAM INTERNET PLAY:        double-click  play_steam.bat  (EXPERIMENTAL --
{STEAM}   needs the Steam client running; host or join from the menu)

Your seat is assigned automatically; you'll pilot the mech you picked
in the join menu (the operator can override it).
When a round ends your game AUTOMATICALLY rejoins for the next one
(same seat, same mech) -- just wait for the operator's next launch.
Close the window to leave for real.
If the game closes unexpectedly, send the operator content\join.log.

AFTER A MULTIPLAYER SESSION: the game writes a small match report
(content\matchlog_<date>_<time>_<number>.txt) and, on join.bat /
join_lan.bat, UPLOADS IT TO THE OPERATOR BY ITSELF at the end of each
round -- you do not need to send it.  Please send one MANUALLY only if
the game CRASHED mid-round (the upload happens on a clean round end, so
a crash loses it) or if you were playing SOLO or over STEAM (no relay
to upload through).
IF ANYTHING CRASHED OR MISBEHAVED, send content\join.log -- that one is
never uploaded and only exists on your machine.

You start INSIDE the cockpit with the pod's MFD panels composited
around the view (one window).  The red MFD buttons, radar rails and
joystick buttons are all MOUSE-CLICKABLE -- right-click a button to
latch it held.  Press V any time to toggle the external camera.

CONTROLS (keyboard) -- NEW DEFAULT LAYOUT THIS BUILD:
  The keyboard IS the cockpit button board now: the letter and number
  rows are the MFD button banks laid out where they sit on the panel,
  and FLIGHT LIVES ON THE NUMBER PAD.  Full map: CONTROLS.txt.

  UPGRADING?  Your saved content\bindings.txt is kept, so YOUR KEYS DO
  NOT CHANGE (W/S throttle etc. still works for you).  Delete
  bindings.txt to switch to the new board described below.

  FLIGHT (number pad -- NUMLOCK ON):
  NumPad 8/2 ........... torso aim up/down     NumPad 7/9 .... left/right pedal
  NumPad 4/6 ........... torso twist           NumPad 5 ...... all stop
  NumPad 0 or Space .... main trigger          NumPad 1/3/. .. pinky/middle/upper
  Shift/Ctrl ........... throttle up/down      Alt ........... reverse thrust
  Left/Down/Right ...... look left/behind/right  Up .......... torso centre
  ` (backtick) ......... cockpit / chase camera
  PgUp / PgDn .......... game volume up/down (saved between sessions)

  THE PANEL ON YOUR KEYS: 1-4/QWER = heat & coolant, 5-8/TYUI =
  engineering, 9-0-minus-equals/OP[] = comm, ASDF/ZXCV = left weapons,
  HJKL/NM,. = right weapons, F1-F12 = the map columns (F1/F2 zoom,
  F4 crouch, F7 CONTROL MODE, F9-F12 Generators A-D).  G and B are
  deliberately unbound -- feel for the gap.  Every button also stays
  mouse-clickable on screen (right-click latches it held).

  NOTE: you SPAWN IN BASIC control mode (the pod's rookie setting) --
  in BASIC the stick steers and the pedals do NOTHING.  Press F7 once
  for MID (pedals steer, stick twists the torso -- the full
  experience).  If 'turning does not work', it is this, not a bug.
  CONTROL MODE (BAS/MID/ADV, the F7 key IN the cockpit) is NOT the
  menu's EXPERIENCE setting (novice/standard/veteran/expert) -- that
  one changes the simulation (heat, damage), not your controls.
  1/2/3/Q/W/E are the six coolant valves and 4 (hold) is the flush.
  CAREFUL with the valves: the detents go 1 - 5 - 50 (max) -
  0 (CLOSED!) - back to 1.  One press past max SHUTS THE LOOP OFF and
  everything on it will overheat -- watch the valve dial on the coolant
  screen.  Boosting one loop starves the others (the supply is shared).
  A weapon gone quiet with ammo left has probably JAMMED (heat makes
  ballistic weapons jam -- authentic!).  Check its panel's ENG DATA page
  for the jam lamp (a cocked round with warning bolts).  The pod's fix
  is the EJECT button on that weapon's ENG DATA page: TAP to eject the
  jammed round (weapon reloads and returns to service), HOLD ~3s to
  jettison the whole bay before it cooks off.  Watch the TEMP strip and
  pace salvos.
  NEW: on a jam or a bay fire, that system's ENG-page buttons now FLASH
  to catch your eye -- the pod's own annunciator, restored.
  NEW AND DANGEROUS: an AMMO BAY FIRE is now genuinely lethal.  You get
  a fire icon by the ammo counter, the flashing buttons, and about TEN
  SECONDS -- then the bay detonates for (rounds x per-round damage),
  which can and will kill you.  HOLD the EJECT button on that weapon to
  dump the bay and put the fire out.  Previously these fires were
  harmless; they are not any more, so treat one as an emergency.
  G (hold) + fire key .. regroup a weapon onto that trigger -- or hold a
     weapon panel's red PROGRAM button with the mouse and tap a fire key;
     the joystick diagram on the panel shows the binding live.

KNOWN ISSUE THIS BUILD -- a weapon that goes dark after you press ENG-page
buttons: the BUS MODE button detaches that weapon from its generator on
its second press, and the automatic re-attach is not working yet.  The
symptom is a weapon whose recharge arc and ready dot are BOTH blank and
which will not fire, while its panel still shows normal data.  THE FIX:
press one of the GENERATOR SELECT buttons (A/B/C/D) on that weapon's
panel and it comes straight back.  Not a lost mech -- just that button.

An Xbox controller works out of the box.  FLIGHT STICKS / HOTAS /
pedals: run joyconfig.bat ONCE -- a wizard asks you to move each
control (stick, twist, throttle, fire buttons), writes the bindings,
and drops you into the solo menu to try them.  Rebind keys in
content\bindings.txt (regenerates with defaults if deleted).

FULL CONTROLS REFERENCE: see CONTROLS.txt next to this file -- every one of
the pod's 72 cockpit buttons, what it does, and which display it sits on.

COCKPIT LAYOUT: content\environ.ini (written on first run, every option
documented in the file itself) sizes the MFDs and the map, moves the map out
of the middle of the road, or breaks each display into its own window.  The
cockpit now scales to ANY window shape without distorting -- drag it, maximise
it, or launch with -fit for borderless full screen.

RGB KEYBOARDS: if yours supports Windows Dynamic Lighting, the keys you have
bound to cockpit buttons glow in the panel's colours and flash along with it.

This build: {VERSION}.  Private -- do not redistribute.
{EXPIRE}Test builds STOP WORKING 14 days after they are made -- if the game
{EXPIRE}says it has expired, just grab the operator's newest zip.