Workstream A prototype: play without the cockpit

Splits the control surface the game consumes from the RIO board into
RIOBase (8 virtuals + the five analog scalars); the serial RIO is now one
implementation of it. Adds two new ones:

- PadRIO (L4CONTROLS=PAD): in-process RIO speaking the full surface from
  an XInput controller + PC keyboard using vRIO's default profile (left
  stick/WASD = stick, triggers/Q,E = pedals, right stick Y/PgUp,PgDn =
  rate throttle that holds position, A/Space = trigger, B/R = reverse,
  dpad/arrows = hat, Start,Back/F1,F2 = config). Samples in GetNextEvent
  so button latency does not depend on the 15 s menu-time analog cadence;
  hot-plugs pads; L4PADFLIP=XY inverts stick axes; lamp commands land in
  lampState[] for the planned on-screen cockpit panel. The stock
  VTVRIOMapper/lamp/button path runs unchanged.

- PlasmaScreen (L4PLASMA=SCREEN): the 128x32 plasma glass as a desktop
  window in plasma orange (L4PLASMASCALE, default x4), rendering the same
  Video8BitBuffered surface the gauge system always drew; no COM port.

Verified in the sandbox with vRIO off and no serial devices: boots to a
running mission, controller hot-detected, plasma window drawing live game
content (score readout). BUILD.md 4 documents the desktop environ.ini and
bindings; roadmap updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-12 13:13:37 -05:00
co-authored by Claude Fable 5
parent e4afc5ca19
commit de5a97d37d
12 changed files with 937 additions and 41 deletions
+14 -10
View File
@@ -40,16 +40,20 @@ geometry reference — it is already the faithful software copy of the physical
panel. On-screen buttons light with the same lamp states the game commands,
so press-feedback works like the real button field.
- Replace the RIO serial path in the L4 layer with a native input layer
(keyboard / mouse / XInput, later Steam Input). Port vRIO's binding model —
its axis-travel semantics (throttle ratchet, spring-back pedals, ±80 stick)
are exactly what the game expects. **[investigate]** where the L4 layer reads
RIO input, and whether an abstraction seam already exists.
- Render the plasma display in-game (HUD overlay) instead of streaming
`ESC P` graphics to COM2 — `L4PLASMA.CPP` already composes the frame into a
local 1bpp buffer before serializing, so the seam is likely right there.
- Lamp feedback (button lighting) maps to on-screen highlight / controller
rumble / RGB later; low priority.
- **Prototype landed (2026-07-12).** The seam existed: the controls manager
consumes a small RIO surface (8 methods + 5 analog scalars), now split out
as `RIOBase`. **PadRIO** (`L4CONTROLS=PAD`) implements it from XInput + the
PC keyboard with vRIO's default profile — the stock `VTVRIOMapper`, lamps,
and button field run unchanged, no serial, hot-plug supported. Verified:
boots and plays with vRIO off and no COM ports.
- ✅ Plasma display: **PlasmaScreen** (`L4PLASMA=SCREEN`) renders the same
`Video8BitBuffered` surface into a desktop "Plasma Display" window in
plasma orange — verified drawing live game content (score readout).
See BUILD.md §4 for bindings and the desktop `environ.ini`.
- Next in A: on-screen RIO panel fed by `PadRIO::lampState[]` (the
cockpit-feel layout — vRIO button clusters around the displays); port the
full vRIO bindings-file model (deflect/rate/deadzone per axis, rebinding);
pilot keypad (numpad → KeyEvent); Steam Input once C starts.
- vRIO itself stays useful as a dev harness against unmodified builds.
## Workstream B — In-game sessions (from TeslaConsole)