2 Commits
Author SHA1 Message Date
CydandClaude Fable 5 0cf5a23d2e Release 4.12.2: version bump
Carries the worldwide lobby-search filter for cross-region internet
testing (the only change since 4.12.1 besides the README rewrite).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 11:30:36 -05:00
CydandClaude Fable 5 13424cce50 README: the Steamification story; lobby search goes worldwide
README.md rewritten around the lineage: Red Planet 4.10 on the
Tesla 1 pod platform, 4.11 the Win32 port, 4.12 the Steamification
of 4.11 - with the arcade-to-consumer replacement table, current
status (v4.12.1 verified on three machines), playing/building/docs
sections brought up to date.

And ahead of internet-wide beta testing: lobby search now applies the
worldwide distance filter - Steam defaults to roughly same-region
results, which would have hidden lobbies from cross-region testers
even though joining them works fine.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 11:27:45 -05:00
4 changed files with 71 additions and 29 deletions
+62 -24
View File
@@ -1,37 +1,75 @@
# Red Planet 4.12
# Red Planet 4.12 — the Steamification
**Red Planet** is the VWE pod-racing game built on the in-house **MUNGA** engine
(Win32 / DirectX 9, `MUNGA_L4` platform layer). The **4.12** line is the
consumer port: a version of Red Planet that can be **sold on Steam** and played
over **internet multiplayer**, without cockpit-pod hardware.
**Red Planet** is VWE's pod-racing game: eight-player VTV races on Mars,
originally played from inside full-motion cockpit pods. This repo is the
third life of that code:
Forked from [RP411](https://gitea.mysticmachines.com/VWE/RP411.git)
(the arcade/cockpit 4.11 line) with full history preserved.
| 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 arcade 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 sellable on Steam and playable over the internet with no cockpit hardware |
## Goals
The architecture is deliberately conservative: the arcade's design survives
intact, with each pod-era dependency replaced by a consumer equivalent
behind the engine's existing seams.
1. **Steam distribution** — Steamworks integration, SteamPipe builds, store-ready packaging.
2. **Internet multiplayer** — take the engine's LAN-era WinSock networking online
(NAT traversal, matchmaking, latency tolerance).
3. **No cockpit required** — keyboard / mouse / gamepad input and on-screen
replacements for the pod's RIO panel and plasma display, drawing on
[vRIO](https://gitea.mysticmachines.com/VWE/VRIO.git).
4. **Self-hosted sessions** — in-game race setup/join replacing the operator-driven
[TeslaConsole](https://gitea.mysticmachines.com/VWE/TeslaSuite.git) flow.
| 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 1995) |
| 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 |
See [docs/RP412-ROADMAP.md](docs/RP412-ROADMAP.md) for the plan and the
Steam-multiplayer logistics.
**Status: it works.** Release
[v4.12.1](https://gitea.mysticmachines.com/VWE/RP412/releases/tag/v4.12.1)
carries 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.
## Playing
Grab the release zip (or run `pack-dist.ps1` on a build). Single player:
run `start-windowed.bat` — the game boots into the race setup menu. 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.
## Building
Unchanged from 4.11 for now — see [BUILD.md](BUILD.md)
(VS 2005/2008 + DirectX SDK June 2010, `Release|Win32`, output `Release\rpl4opt.exe`).
Toolchain modernization is a roadmap item.
**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/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 arcade source (this repo's base) |
| [VRIO](https://gitea.mysticmachines.com/VWE/VRIO.git) | Virtual RIO panel + vPLASMA display — input bindings and display emulation to fold in |
| [TeslaSuite](https://gitea.mysticmachines.com/VWE/TeslaSuite.git) | TeslaConsole / Launcher / vPOD — the arcade session-control stack 4.12 replaces (and a reference for the Munga control protocol, TCP 1501) |
| [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) |
+1 -1
View File
@@ -177,7 +177,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
fclose(file);
}
DEBUG_STREAM << "Red Planet 4.12.1" << std::endl << std::flush;
DEBUG_STREAM << "Red Planet 4.12.2" << std::endl << std::flush;
DEBUG_STREAM << "L4CONTROLS=" << getenv("L4CONTROLS") << std::endl << std::flush;
#ifdef RP412_STEAM
+4
View File
@@ -665,6 +665,10 @@ int
gCallDone = False;
SteamMatchmaking()->AddRequestLobbyListStringFilter(
kLobbyTagKey, "1", k_ELobbyComparisonEqual);
// the default lobby search is distance-filtered (roughly same
// region) - RP412 races are worldwide
SteamMatchmaking()->AddRequestLobbyListDistanceFilter(
k_ELobbyDistanceFilterWorldwide);
SteamAPICall_t call = SteamMatchmaking()->RequestLobbyList();
gCalls.listResult.Set(call, &gCalls, &LobbyCalls::OnList);
if (!WaitForCall(15000))
+4 -4
View File
@@ -1,11 +1,11 @@
# ============================================================================
# pack-dist.ps1 assemble a runnable Red Planet 4.12 package into dist\
# pack-dist.ps1 - assemble a runnable Red Planet 4.12 package into dist\
# ============================================================================
#
# Collects everything the game needs at run time:
# - Release\rpl4opt.exe (+ .pdb for crash debugging)
# - game data from assets\RP411 (AUDIO, GAUGE, VIDEO, INIs, RPL4.RES,
# TEST.EGG) but not the arcade launch scripts or the old 4.10 exe
# TEST.EGG) - but not the arcade launch scripts or the old 4.10 exe
# - libsndfile-1.dll beside the exe; OpenAL32.dll copied from the system
# when installed, with oalinst.exe included as the fallback installer
# - a desktop environ.ini (PAD;KEYBOARD controls, on-screen plasma)
@@ -179,7 +179,7 @@ start rpl4opt.exe -windowed -res 1920 1080
"@
Set-Content -Path "$dist\README.txt" -Encoding ascii -Value @"
Red Planet 4.12.1
Red Planet 4.12.2
=================
Run start-windowed.bat (or: rpl4opt.exe -windowed -res 800 600 -egg TEST.EGG).
@@ -223,7 +223,7 @@ $size = (Get-ChildItem $dist -Recurse | Measure-Object Length -Sum).Sum
Write-Host ("dist ready: {0:N1} MB" -f ($size / 1MB))
if ($Zip) {
$zipPath = Join-Path $root 'RedPlanet-4.12.1.zip'
$zipPath = Join-Path $root 'RedPlanet-4.12.2.zip'
Write-Host "zipping to $zipPath..."
Compress-Archive -Path "$dist\*" -DestinationPath $zipPath -Force
}