Files
BT411/content/CONTROLS.MAP
T
arcattackandClaude Fable 5 6783619069 Gitea #9: the upper-MFD PRESET pages (3 MFDs x 5) live -- SetPresetMode
table re-decoded to the ModeMFD bits + desktop J/K/L page cycle

The preset system was unwired by ONE defect in the message layer: the
SetPresetMode @004d1b24 table @0051dbf0 had been transcribed from the
section dump as BIG-endian dwords ({0x1e,0x01000000} instead of
{0x1e,0x01}), so a preset press set a garbage high bit -- and for group 1
items 3-4 / group 2 items 0-2 stomped the LIVE NonMapping / Intercom /
ModeSecondary* bits -- while the real page bits never moved.  Ground
truth (section_dump.txt:72901-72908, little-endian + BTL4MODE.HPP [T0]):
set = ModeMFD{1,2,3}{Quad,Eng1-4} = 1<<(group*5+item), bits 0-14, fully
disjoint from the #6 secondary trio (bits 18-20); group 2 is MFD3, NOT a
duplicate of the secondary views.

What the 15 presets show (l4gauge.cfg): group = the MFD (Mfd1 lower left
/ Mfd2 upper center / Mfd3 lower right), item 0 = the btquad.pcx Quad
overview (up to 4 vehicleSubSystems cluster panels), items 1-4 = the
full-screen engineering-detail pages (bteng.pcx + prepEngr screens
group*4+1..4 + the cluster eng children: GENERATOR SELECT A-D, POWER
graph, COOLING loop, DAMAGE, ammo).  Empty screens are authored per mech
(Blackhawk: 3/11/12 empty).

Authentic dispatch (streamed "L4" .CTL EventMappings, BT_CTRLMAP_LOG
dump): each MFD owns the 8-button RIO bank around it, MODE-MASK-gated --
Mfd1 = 0x08-0x0F, Mfd2 = 0x20-0x27, Mfd3 = 0x00-0x07.  Quad page ->
direct-select buttons for the POPULATED eng pages (mapper msgs
Aux1Eng1-4 0x4-0x7 / Aux2* 0x9-0xC / Aux3* 0xE-0x11); eng page -> one
back-to-Quad button (0x3/0x8/0xD) + per-subsystem controls.  These
records already install and fire on desktop (btinput passes the live
manager mask), so the NUMPAD profile's 0x20-0x27 keys page MFD2
authentically.

Port wiring (the #6 pattern): keys J/K/L -> actions Mfd1/2/3Cycle ->
gBTPresetCycle -> L4MechControlsMapper::CyclePresetModeNow(group) -- a
documented desktop shim (24 mode-dependent pod buttons don't fit a
keyboard) that cycles Quad -> populated Eng pages -> Quad, visiting
exactly the pod-reachable set; the body is the authentic SetPresetMode.

Dev-composite: BTDrawGaugeSurfaces now draws the Eng1-3 planes at their
sibling cells and skips any mono plane whose channel is BlankColor,
honoring the mode-driven reconfigure (RemapGraphicsPort) -- each dev
cell shows the ACTIVE page like the pod monitor.  This supersedes and
removes the 2026-07-12 GAUGREND "frozen-dial" scaffold (forced all 15
page bits active under BT_DEV_GAUGES; it pinned the shared Eng plane on
the highest screen and ate the page flips).

Pixel-verified (BT_PRESET_TEST + BT_DEV_GAUGES_DOCK + BT_SHOT,
Blackhawk): all three MFDs page Quad -> SYSTEM NN eng details -> back to
Quad in lockstep with the [mode] preset mask log; group 0 skips the
authored-empty screen 3, group 2 skips 11/12.  Un-regressed: N display
cycle (0x450421->0x490421->0x510421, page bits intact), M control mode,
CONTROLS.MAP 52 bindings parse clean.

Diags: BT_MODE_LOG ([mode] preset), BT_PRESET_TEST=<frame>.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 17:30:35 -05:00

111 lines
5.3 KiB
Plaintext

# ==========================================================================
# BT411 CONTROLS.MAP -- desktop input bindings (keyboard + XInput gamepad)
# ==========================================================================
# One binding per line, '#' starts a comment, keywords are case-insensitive.
# Loaded at game start; DELETE THIS FILE to restore these exact defaults
# (the same profile is compiled in). Alternate profile: CONTROLS_NUMPAD.MAP
# (copy it over this file to use it).
#
# key <name> button <addr> [toggle]
# key <name> axis <axis> deflect <n>
# key <name> axis <axis> rate <n-per-second>
# key <name> keypad pilot|external <0-15>
# key <name> pckey <char>
# key <name> action <name>
# pad <button> button <addr> | action <name> | pckey <char> | keypad ...
# padaxis <src> axis <axis> [invert] [deadzone <d>] [rate <n-per-second>]
#
# <addr> RIO button address 0x00-0x47 (hex or decimal):
# 0x00-0x0F aux lower right/left banks 0x10-0x1B secondary panel
# 0x20-0x37 aux upper center/left/right (presets + target hotbox)
# 0x3D Panic 0x3F throttle-head (REVERSE THRUST)
# 0x40 Main trigger 0x41-0x44 hat 0x45 Pinky 0x46 Middle 0x47 Upper
# <axis> Throttle | LeftPedal | RightPedal | Pedals (signed, + = right)
# | JoystickX (torso twist) | JoystickY
# <name> A-Z, D0-D9 (digit row), F1-F12, NumPad0-NumPad9, Up, Down, Left,
# Right, Space, Enter, Shift, Ctrl, Alt, PageUp, PageDown, Home,
# End, Insert, Delete, OemMinus, Oemplus, Oemcomma, OemPeriod,
# OemOpenBrackets, OemCloseBrackets, ...
# <button> A B X Y DPadUp DPadDown DPadLeft DPadRight Start Back
# LeftShoulder RightShoulder LeftThumb RightThumb
# LeftTrigger RightTrigger (as digital, >= 50% pressed)
# <src> LeftStickX LeftStickY RightStickX RightStickY
# LeftTrigger RightTrigger
# action ViewToggle LookBehind AllStop ModeCycle DisplayCycle Valve Flush
# ConfigHold Generator1-4 Reconnect Mfd1Cycle Mfd2Cycle Mfd3Cycle
# pckey sends an authentic 1995 PC-keyboard hotkey (the in-cockpit
# dispatcher): '+'/'-' = target zoom, 'w'..'o' = pilot select,
# 'a','b','c','d','f','g','s','v','x','z' = display presets, ...
#
# 'deflect' holds the axis there while the key is down and springs back on
# release; 'rate' walks the axis by <n> per second and the position sticks
# (the throttle lever). A key bound here is REMOVED from the legacy typed-
# hotkey channel (no double dispatch); unbound keys keep their authentic
# 1995 meaning (see pckey above).
#
# ---- WASD CLASSIC (the shipped default) ----------------------------------
# Driving: W/S sweep the throttle lever (sticks, detent at zero); A/D are
# the turn pedals (spring back); Q/E twist the torso; R/F aim the torso
# up/down (elevation); X = all stop (recenters twist AND pitch).
key W axis Throttle rate 0.7
key S axis Throttle rate -0.7
key Up axis Throttle rate 0.7
key Down axis Throttle rate -0.7
key A axis LeftPedal deflect 1
key D axis RightPedal deflect 1
key Left axis LeftPedal deflect 1
key Right axis RightPedal deflect 1
key Q axis JoystickX deflect -1
key E axis JoystickX deflect 1
key R axis JoystickY deflect 1
key F axis JoystickY deflect -1
key X action AllStop
# Fire: the pod joystick's four buttons.
key D1 button 0x40 # Main trigger (lasers group)
key Space button 0x40
key D2 button 0x46 # Middle thumb (PPCs group)
key D3 button 0x47 # Upper thumb (missiles group)
key Ctrl button 0x47
key D4 button 0x45 # Pinky (4th group)
# Systems.
key G action ConfigHold # hold + fire keys = regroup the weapon
key C action Valve # coolant valve cycle
key H action Flush # coolant flush (HOLD -- dumps reservoir coolant)
key M action ModeCycle # Basic -> Standard -> Veteran controls
key N action DisplayCycle # secondary schematic: Damage -> Critical -> Heat
key J action Mfd1Cycle # lower-left MFD page: Quad -> Eng detail pages
key K action Mfd2Cycle # upper-center MFD page (engineering)
key L action Mfd3Cycle # lower-right MFD page
key V action ViewToggle # cockpit <-> chase camera (dev)
key B action LookBehind # HOLD = the pod's rear-view button
key F5 action Generator1
key F6 action Generator2
key F7 action Generator3
key F8 action Generator4
key F9 action Reconnect
# ---- Xbox controller -----------------------------------------------------
# Left stick steers (the pedals), right stick twists the torso and pushes
# the throttle lever; triggers fire.
padaxis LeftStickX axis Pedals deadzone 0.24
padaxis LeftStickY axis JoystickY deadzone 0.24
padaxis RightStickX axis JoystickX deadzone 0.24
padaxis RightStickY axis Throttle rate 0.75 deadzone 0.24
pad RightTrigger button 0x40 # Main
pad LeftTrigger button 0x47 # Upper (missiles)
pad RightShoulder button 0x46 # Middle (PPCs)
pad LeftShoulder button 0x45 # Pinky
pad DPadUp button 0x42 # hat up
pad DPadDown button 0x41 # hat back
pad DPadLeft button 0x44 # hat left
pad DPadRight button 0x43 # hat right
pad B action AllStop
pad Y action ViewToggle
pad X action LookBehind
pad Start action ModeCycle
pad RightThumb action DisplayCycle
pad Back action Valve