Seven commits since 4.12.5, all about where things sit on screen. RP412MFDLAYOUT remembers window placement across the menu-race-menu loop, in mfd_layout.cfg beside bindings.txt: the game window, the exploded view's display panes, and the plasma glass. Append ,noframe to a line to take that window's title bar and border off - a cockpit filling a monitor edge to edge at a rect you chose, where -fit could only do it by taking the whole screen. That needed a way out of a window with no title bar, so the setup screen carries an EXIT GAME button, bottom left and diagonally opposite LAUNCH. The Steam host/join buttons dim and say STEAM NOT RUNNING rather than disappearing - two buttons quietly missing reads as a broken build. And the Winners Circle camera is framed off the award stand rather than off whoever is standing on it. It had been averaging the filled spots, which moved the shot with the head count: eight finishers put the eye 24 units closer to the stand and aimed it at the middle of the tiers instead of at the winner. The framing constants are untouched, so the shot everybody gets now is the one that was dialled in. Version strings bumped in RPL4.CPP, pack-dist.ps1 and the controls page that ships in the zip. Built clean, packed, and smoke-tested from the dist: boots to the console screen reporting 4.12.6, virtual RIO up, Steam transport up, nothing alarming in the log. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
123 lines
7.8 KiB
Markdown
123 lines
7.8 KiB
Markdown
# Red Planet 4.12 — the Steamification
|
||
|
||
**Red Planet** is VWE's pod-racing game: eight-player VTV contests on Mars
|
||
— **Martian Death Race** and **Martian Football** — originally played from
|
||
inside VWE Tesla cockpit pods. This repo is the third life of that code:
|
||
|
||
| Generation | What it was |
|
||
|------------|-------------|
|
||
| **Red Planet 4.10** | The original game, running on the **Tesla 1** pod platform (DOS-era MUNGA engine, serial RIO cockpit hardware, operator console, batch-file relaunch between missions) |
|
||
| **Red Planet 4.11** | The **Win32 port** of 4.10 ([RP411](https://gitea.mysticmachines.com/VWE/RP411.git)) — DirectX 9, WinSock TCP, TeslaConsole/TeslaLauncher session control; still runs in pods, still a LAN |
|
||
| **Red Planet 4.12** | **This repo: the Steamification of 4.11** — the same engine, the same wire protocol, the same missions, made distributable on Steam and playable over the internet with no cockpit hardware |
|
||
|
||
The architecture is deliberately conservative: the VWE's design survives
|
||
intact, with each pod-era dependency replaced by a consumer equivalent
|
||
behind the engine's existing seams.
|
||
|
||
| Arcade (4.10/4.11) | 4.12 replacement |
|
||
|--------------------|------------------|
|
||
| RIO cockpit board (serial) | **PadRIO** — virtual RIO from XInput pad + keyboard, fully rebindable (`bindings.txt`, vRIO profile format) |
|
||
| Seven physical displays | **Single-window cockpit** — all displays composed on a locked 1920×1080 canvas around the viewscreen, with the real button banks lamp-lit and clickable |
|
||
| Pod button lamps | On-screen lamps, plus an **RGB keyboard mirror** (Windows Dynamic Lighting) |
|
||
| TeslaConsole operator | **In-game front end** — race setup menu builds the mission egg locally; an in-process console marshals every race (missions still only end on a console stop, exactly as designed in 1994) |
|
||
| TeslaLauncher relaunch-per-mission | **Single binary** — menu → race → results → menu in one process |
|
||
| WinSock TCP LAN mesh | **NetTransport seam** — the deterministic pod mesh unchanged, running over plain TCP (LAN/dev) or **Steam Networking Sockets** (FakeIP + Steam Datagram Relay) |
|
||
| Site network / fixed IPs | **Steam lobbies** — lobby owner is the console; members exchange FakeIPs and loadouts as lobby data |
|
||
|
||
**Status: it works.**
|
||
[v4.12.2](https://gitea.mysticmachines.com/VWE/RP412/releases/tag/v4.12.2)
|
||
carried the first verified end-to-end internet build: three machines, three
|
||
Steam accounts, lobby → mesh → marshaled five-minute race → deaths and
|
||
respawns → timed stop → results on every machine → rematch from the same
|
||
lobby.
|
||
|
||
[v4.12.3](https://gitea.mysticmachines.com/VWE/RP412/releases/tag/v4.12.3)
|
||
is about the screen. The cockpit now scales up as well as down and re-fits
|
||
whenever the window changes, keeping 16:9 so a wide panel letterboxes
|
||
instead of stretching; `-fit` runs it borderless over the whole monitor and
|
||
picks the render size to land on the viewscreen 1:1. The displays are the
|
||
player's to arrange — each of the six can be scaled on its own and the
|
||
radar moved out of the middle of the road (`environ.ini`). Each display's
|
||
button bank now reaches under its glass, so the picture itself is the press
|
||
target rather than a sliver at the edge.
|
||
|
||
[v4.12.4](https://gitea.mysticmachines.com/VWE/RP412/releases/tag/v4.12.4)
|
||
is about the lobby. Both rooms now show the host's mission setup — the track,
|
||
then time of day, weather and game length — since everyone flies the owner's
|
||
picks and it was the one thing in the room nobody could see for themselves.
|
||
The football team sheet names each player's VTV beside their team colours and
|
||
position. And a lobby holds **eight** players rather than four, a full grid as
|
||
the pod hall ran it, with the room sizing its roster to whatever space the
|
||
window gives it.
|
||
|
||
[v4.12.5](https://gitea.mysticmachines.com/VWE/RP412/releases/tag/v4.12.5)
|
||
restores the **Winners Circle**. The pod hall stood the finishers on a
|
||
numbered award platform when the race ended, and all of it was still in this
|
||
repo — the stand, eight ranked spots in every map, and the code to put racers
|
||
on them — wired only into the mission-review build and so never once run by a
|
||
pod. The race now fades out and fades back in on the platform: finishers in
|
||
finishing order, each pilot's callsign on the plate beside their spot, the
|
||
cockpit glass cleared away, held for a few seconds before the results screen.
|
||
Three pieces of it had been stubbed out in the D3D9 port and are working
|
||
again.
|
||
|
||
[v4.12.6](https://gitea.mysticmachines.com/VWE/RP412/releases/tag/v4.12.6)
|
||
is about the windows. Where you put them now survives the
|
||
menu-race-menu loop: `RP412MFDLAYOUT` remembers the game window, the
|
||
exploded view's display panes and the plasma glass in `mfd_layout.cfg`
|
||
beside `bindings.txt`. Append `,noframe` to a line to take that
|
||
window's title bar and border off — a cockpit filling the monitor edge
|
||
to edge at a rect you chose, rather than `-fit` taking the whole
|
||
screen — and the setup screen carries its own **EXIT GAME** button,
|
||
since a window with no title bar needs a way out. The Steam buttons
|
||
now dim and say *STEAM NOT RUNNING* instead of disappearing. And the
|
||
Winners Circle camera is framed off the award stand itself rather than
|
||
off whoever is standing on it, so the shot is the same one for every
|
||
player at every head count.
|
||
|
||
## Playing
|
||
|
||
Grab the release zip (or run `pack-dist.ps1` on a build). Single player:
|
||
run `start-windowed.bat` — the game boots into the setup menu, where the
|
||
SCENARIO group picks Death Race or Football (Football swaps in the
|
||
team/position columns and its own track list). Steam multiplayer: see
|
||
[docs/STEAM-3-MACHINE-TEST.md](docs/STEAM-3-MACHINE-TEST.md) (until RP412
|
||
has its own AppID it runs under Spacewar, 480).
|
||
|
||
The two config files beside the exe are self-documenting: **environ.ini**
|
||
(every engine option, commented) and **bindings.txt** (every key, pad
|
||
button, and axis; written with the full default layout on first run).
|
||
Default controls: numpad flies (8/2/4/6 stick, 7/9 pedals, 0 trigger),
|
||
Shift/Ctrl throttle, Alt reverse, arrows look, Space fires, letter rows
|
||
are the MFD button banks as printed on the panel. **Alt+Q** aborts a
|
||
mission. Full map with pad and keyboard diagrams:
|
||
[docs/CONTROLS.md](docs/CONTROLS.md).
|
||
|
||
## Building
|
||
|
||
**VS 2022 (v143)** + DirectX SDK June 2010 + the vendored Steamworks SDK
|
||
(`extern/steamworks_sdk_164`) — see [BUILD.md](BUILD.md). Solution
|
||
`WinTesla.sln`, configuration `Release|Win32`, output
|
||
`Release\rpl4opt.exe`.
|
||
|
||
## Documentation
|
||
|
||
| Doc | Contents |
|
||
|-----|----------|
|
||
| [docs/CONTROLS.md](docs/CONTROLS.md) | Controls map — pad and keyboard diagrams, the panel button banks, rebinding |
|
||
| [docs/RP412-ROADMAP.md](docs/RP412-ROADMAP.md) | The original plan and workstreams |
|
||
| [docs/RP412-FRONTEND-DESIGN.md](docs/RP412-FRONTEND-DESIGN.md) | TeslaConsole analysis, the egg format, the console protocol, and the Steam mapping — with status notes as each layer landed |
|
||
| [docs/STEAM-3-MACHINE-TEST.md](docs/STEAM-3-MACHINE-TEST.md) | Multiplayer test procedure, Steam Input notes, the abort key |
|
||
| [BUILD.md](BUILD.md) | Toolchain and build steps |
|
||
|
||
Dev tooling: `tools/two-pod-test.ps1` races two pods on loopback,
|
||
marshaled by a console feeder speaking the arcade Munga protocol.
|
||
|
||
## Related repositories
|
||
|
||
| Repo | Role |
|
||
|------|------|
|
||
| [RP411](https://gitea.mysticmachines.com/VWE/RP411.git) | Upstream: the Win32 arcade port this repo Steamifies (full history preserved; remote `rp411` for cross-pulling fixes) |
|
||
| [VRIO](https://gitea.mysticmachines.com/VWE/VRIO.git) | Virtual RIO panel + vPLASMA — source of the bindings format, the cockpit layout, and the keyboard lamp mirror |
|
||
| [TeslaSuite](https://gitea.mysticmachines.com/VWE/TeslaSuite.git) | TeslaConsole / Launcher / vPOD — the arcade session-control stack 4.12 absorbed (and the reference implementation of the Munga control protocol, TCP 1501) |
|