BT412: fork from BT411 -- Steam + internet-multiplayer line
Identity pass (README/CLAUDE.md/CMake project bt412), the steamification roadmap (docs/BT412-ROADMAP.md), and the living context topic (context/steamification.md). Forked at BT411 4e72f0c; origin is VWE/BT412.git only -- this repo never touches the BT411 remote. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
---
|
||||
id: steamification
|
||||
title: "BT412 Steamification — status, seams, and merge notes"
|
||||
status: living
|
||||
source_sections: "docs/BT412-ROADMAP.md; RP412 repo (C:\\vwe\\RP412) git history + docs"
|
||||
related_topics: [pod-hardware, multiplayer, gauges-hud, build-and-run, wintesla-port]
|
||||
key_terms: [egg, RIO, console]
|
||||
open_questions:
|
||||
- "BT cockpit button-bank geometry source (no vRIO CockpitLayout exists for BT): l4gauge.cfg / pod photos / Nick"
|
||||
- "Does BT's rebuilt L4D3D still have RP's NULL-texture AddRef crash pattern?"
|
||||
- "Does L4CONTROLS=PAD set primaryControlType=PrimaryRIO so MechRIOMapper engages unchanged?"
|
||||
---
|
||||
# BT412 Steamification — status, seams, and merge notes
|
||||
|
||||
BT412 = BT411 made distributable on Steam and playable over the internet with no pod
|
||||
hardware, following the recipe RP412 proved end-to-end (RP411 → RP412). The full plan
|
||||
and phase order: `docs/BT412-ROADMAP.md`. RP412 (`C:\vwe\RP412`) is the reference
|
||||
implementation — its git history from commit `467934c` onward is the steamification,
|
||||
grouped roughly: toolchain → PadRIO input → MFD-split cockpit → front end/LocalConsole
|
||||
→ NetTransport/Steam sockets → lobby → bindings/KeyLight → packaging.
|
||||
|
||||
**Repo rule [T0]:** `origin` = `VWE/BT412.git` only. This repo must never touch the
|
||||
BT411 remote (no cross-pull remote — deliberate difference from RP412's `rp411`
|
||||
pattern). Forked at BT411 `4e72f0c` (2026-07-14).
|
||||
|
||||
## Status ledger
|
||||
|
||||
- **Phase 0 bootstrap — DONE 2026-07-14.** Tree copied (working tree + full history,
|
||||
`build/` excluded), origin re-pointed, fast-forwarded to `4e72f0c`, dev-state
|
||||
`run/run.cmd` working-tree edit discarded (committed version is the documented solo
|
||||
launcher), identity pass (README/CLAUDE.md/CMake `project(bt412)`), this topic +
|
||||
roadmap authored.
|
||||
- Phase 1 (VS2022 v143): not started.
|
||||
- Phases 2–7: not started — see the roadmap.
|
||||
|
||||
## The seams (what plugs in where) [T0 unless noted]
|
||||
|
||||
- **Input**: `LBE4ControlsManager` PUSH model; `L4CTRL.cpp` parses `L4CONTROLS` tokens;
|
||||
RP412 adds token `PAD` → `new PadRIO()` (a `RIOBase` implementation from
|
||||
XInput+keyboard), and the stock RIO mapper runs against it unchanged. BT's mapper
|
||||
selection: `btl4app.cpp MakeViewpointEntity` switch on
|
||||
`controls->primaryControlType` (+0xc98) → `MechRIOMapper` for PrimaryRIO(4).
|
||||
- **Plasma**: BT's plasma is identical hardware to RP's (128×32, `L4PLASMA.h`);
|
||||
RP412's `PlasmaScreen` renders the same `Video8BitBuffered` surface into a desktop
|
||||
window, selected in `L4GREND.cpp` on `L4PLASMA=SCREEN`.
|
||||
- **Displays**: BT pod = main 800×600 3D view + 640×480 radar + five mono MFDs on one
|
||||
spanned 1280×480 surface (+ plasma). All cockpit surfaces are bit-plane masks over
|
||||
one shared `SVGA16` pixelBuffer (see [[gauges-hud]], [[pod-hardware]]). RP412's
|
||||
`MFDSplitView` (`L4MFDVIEW.*` + `L4VB16.cpp` split mode, `L4MFDSPLIT=1`) composes
|
||||
child panes on a fixed 1920×1080 canvas; 3D presents into the viewscreen pane via
|
||||
`Present(hDestWindowOverride)`.
|
||||
- **Networking**: arcade stack unchanged (see [[multiplayer]]); RP412 moved the wire
|
||||
behind `NetTransport` (`L4NETTRANSPORT.*`), default `WinsockNetTransport`, Steam
|
||||
implementation `L4STEAMTRANSPORT.*` (`ISteamNetworkingSockets`, FakeIP + SDR,
|
||||
degrade-to-TCP on any failure). Addresses stay SOCKADDR_IN-shaped so the egg
|
||||
`[pilots] ip[:port]` roster works over both wires.
|
||||
- **Session**: console protocol (egg msgID 3, 1040-byte chunks + ACK; RunMission
|
||||
msgID 5 ×2; console must stay connected) — `tools/btconsole.py` is the working
|
||||
feeder and the spec for the in-process LocalConsole marshal (Phase 5).
|
||||
|
||||
## Known merge risks (from the 3-way BT411 / RP411-baseline / RP412 comparison)
|
||||
|
||||
- **`L4VB16.cpp` — HIGH.** RP412 rebuilt ~3846–4046 (splitViews/canvas/present); BT
|
||||
rebuilt the same window-management region for dev-gauge docking (`BT_DEV_GAUGES`,
|
||||
`BT_DEV_GAUGES_WINDOW`, `BT_DEV_GAUGES_DOCK`, `BT_GAUGE_SCALE`, `BT_GAUGE_SEC_ROT`,
|
||||
`BT_ALL` — 15 sites). Hand-merge; write the 3-way diff notes HERE before editing.
|
||||
- **`L4NET.CPP` — MEDIUM.** RP412 rerouted all ~22–26 Winsock call sites through
|
||||
`NetTransport_Get()`; BT's 5 `BT_NET_TRACE` diagnostic blocks sit exactly on those
|
||||
send/receive sites and must be re-sited onto the seam calls.
|
||||
- **`L4RIO.*`, `L4CTRL.cpp`, `L4GREND.cpp` — LOW.** BT never customized these
|
||||
(verified: zero BT_ hits); take RP412's versions after the 3-way check.
|
||||
- **CMake**: engine sources are explicit per-file lines (no globs) — every ported
|
||||
`.cpp` needs its own `add_library` line or it silently doesn't compile. New deps:
|
||||
`xinput9_1_0.lib` (PadRIO), C++/WinRT (KeyLight, per-file C++17), Steamworks SDK +
|
||||
`steam_api.lib` behind `option(BT412_STEAM)`.
|
||||
- **No `/Zp1` in BT's build** (RP's engine builds `/Zp1`): RP412's packing-mismatch
|
||||
workarounds (`WINDOWS_IGNORE_PACKING_MISMATCH`, KeyLight default-packing carve-out,
|
||||
`pack(push,8)` around Steam headers) are no-ops here — keep them for verbatim-ness,
|
||||
but eyeball any copied code for /Zp1-layout assumptions.
|
||||
|
||||
## Key Relationships
|
||||
- Uses: [[pod-hardware]] · [[multiplayer]] · [[gauges-hud]] · [[build-and-run]]
|
||||
- Feeds: [[open-questions]] (steamification investigate items)
|
||||
Reference in New Issue
Block a user