Files
BT411/content/CONTROLS_NUMPAD.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

108 lines
4.4 KiB
Plaintext

# ==========================================================================
# BT411 CONTROLS_NUMPAD.MAP -- the community-suggested numpad layout
# (corrected). To use it: copy this file over CONTROLS.MAP.
# Grammar + address reference: see CONTROLS.MAP.
# ==========================================================================
# Corrections vs. the original suggestion:
# - keypads are NOT button addresses 0x50-0x6F (that space doesn't exist);
# use `keypad pilot|external <0-15>` when those panels get mapped
# - there is no clickable on-screen cockpit -- every function you want
# must be bound here
# - keyboard fire buttons added (the suggestion only had Main; Pinky/
# Middle/Upper were pad-only, stranding weapons regrouped onto them)
# - Ctrl throttle-down kept, but missiles moved off Ctrl to NumPad3
# - 0x36/0x37 are target-hotbox buttons (pilot select), not "config 1/2"
# - port actions (view, all-stop, mode cycle, valve, generators) bound
#
# ---- Driving: number pad ------------------------------------------------
key NumPad8 axis Throttle rate 0.75 # lever up
key NumPad2 axis Throttle rate -0.75 # lever down
key NumPad4 axis LeftPedal deflect 1 # turn left
key NumPad6 axis RightPedal deflect 1 # turn right
key NumPad7 axis JoystickX deflect -1 # torso twist left
key NumPad9 axis JoystickX deflect 1 # torso twist right
key Home axis JoystickY deflect 1 # torso aim up
key End axis JoystickY deflect -1 # torso aim down
key NumPad5 action AllStop
key Shift axis Throttle rate 0.75 # throttle up (alt)
key Ctrl axis Throttle rate -0.75 # throttle down (alt)
key Alt button 0x3F # throttle-head = REVERSE THRUST
# ---- Fire: numpad cluster + space ---------------------------------------
key Space button 0x40 # Main trigger
key NumPad0 button 0x40
key NumPad1 button 0x45 # Pinky
key NumPad3 button 0x47 # Upper (missiles)
key Decimal button 0x46 # Middle (PPCs)
# ---- Joystick hat on the arrows -----------------------------------------
key Up button 0x42 # Hat Up
key Down button 0x41 # Hat Back
key Left button 0x44 # Hat Left
key Right button 0x43 # Hat Right
# ---- Systems ------------------------------------------------------------
key G action ConfigHold
key Enter action ModeCycle
key N action DisplayCycle # secondary schematic: Damage -> Critical -> Heat
key V action ViewToggle
key B action LookBehind
key F5 action Generator1
key F6 action Generator2
key F7 action Generator3
key F8 action Generator4
key F9 action Reconnect
key F10 action Valve
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
# ---- Upper MFD banks: number row = the top aux row, QWERTY row = the row
# ---- under it, left to right across the Left / Center / Right panels.
# ---- (These buttons drive the preset/eng-data selection; the letters
# ---- lose their 1995 typed-hotkey meaning once bound here.)
key D1 button 0x2F
key D2 button 0x2E
key D3 button 0x2D
key D4 button 0x2C
key D5 button 0x27
key D6 button 0x26
key D7 button 0x25
key D8 button 0x24
key D9 button 0x37 # hotbox (target select)
key D0 button 0x36 # hotbox
key OemMinus button 0x35 # hotbox
key Oemplus button 0x34 # hotbox
key Q button 0x2B
key W button 0x2A
key E button 0x29
key R button 0x28
key T button 0x23
key Y button 0x22
key U button 0x21
key I button 0x20
key O button 0x33 # hotbox
key P button 0x32 # hotbox
key OemOpenBrackets button 0x31 # hotbox
key OemCloseBrackets button 0x30 # hotbox
# ---- Xbox controller (same as the default profile) ----------------------
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
pad LeftTrigger button 0x47
pad RightShoulder button 0x46
pad LeftShoulder button 0x45
pad DPadUp button 0x42
pad DPadDown button 0x41
pad DPadLeft button 0x44
pad DPadRight button 0x43
pad B action AllStop
pad Y action ViewToggle
pad X action LookBehind
pad Start action ModeCycle
pad RightThumb action DisplayCycle
pad Back action Valve