Adds pod-lifecycle controls to the vPOD window: - Power Off / Power On: Power Off closes the TCP listener so the console can no longer connect, mimicking a pod with no game client running; Power On reopens it. The listener close/open is the faithful signal a console sees. - End-mission graceful-exit + watchdog restart: on the end-mission command (StopMission) the game exits gracefully (listener closes, connection drops) and a watchdog relaunches it about 1.5 s later, coming back up in WaitingForEgg - the real pod's per-game cycle. A "Restart game after mission ends (watchdog)" checkbox (default on) toggles it; unchecked, the pod just returns to WaitingForEgg without exiting. - Egg viewer: the last egg is kept across missions/restarts (no auto-clear) so it can be copied for dev use; a Clear button empties it on demand. - Log pane defaults to half the window (egg lines are rarely wide); the split is set at load once the control has its real width. Verified over real TCP: driving egg -> run -> end-mission makes the listener drop then reopen with the pod back in WaitingForEgg (confirmed in vPOD's own log: "Game exited gracefully" then "Watchdog restarted the game"). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.5 KiB
vPOD — virtual pod / game-client stand-in
A test tool that impersonates a Tesla game client (Red Planet's rpl4opt.exe
or BattleTech's btl4.exe) so the operator consoles can be exercised without
real cockpit hardware. It speaks the Munga command/control protocol as a
server on TCP 1501 — the console connects to it exactly as it would a real pod —
emulates the pod ApplicationState machine, reassembles the streamed egg, and
shows everything on a live display.
What it does
- Listens on TCP 1501 (configurable) and answers the console's
StateQuerywith aStateResponse, reporting the game (ApplicationID) and the currentApplicationState. - Walks the mission lifecycle the console drives it through:
WaitingForEgg → LoadingMission → WaitingForLaunch → LaunchingMission → RunningMission → …, reacting to the egg stream and to Run / Stop / Abort / Suspend / Resume messages, and acknowledging the egg. - End-mission graceful exit + watchdog restart — on the console's end-mission
command the "game exe" exits (the listener closes, the console's connection
drops), then a watchdog relaunches it a moment later and it comes back up in
WaitingForEgg. This is the real pod's per-game cycle (autoRestart); the Restart game after mission ends (watchdog) checkbox (on by default) toggles it — unchecked, the pod just returns toWaitingForEggwithout exiting. - Power On / Power Off — Power Off closes the TCP listener so the console
cannot connect, mimicking a pod with no game client running; Power On reopens
it. Reset returns a live pod to
WaitingForEgg. - Reassembles and shows the egg the console streams (the
EggFileMessagechunks), one field per line, with a summary line (adventure / map / scenario / pilot count). The last egg is kept across missions/restarts (so it can be copied for dev use) until the Clear button empties the viewer. - Game toggle — a Red Planet ⇄ BattleTech switch on the window changes which
ApplicationIDthe pod reports, live, so one vPOD can stand in for either game. (-app rp|btsets the initial choice.) - A newest-first protocol log of the traffic.
Running it
vPOD.exe [-net <port>] [-app rp|bt] [-lc|-mr] [-host <id>] [-res W H]
-net <port>Munga control port (default 1501).-app rp|btwhich game to report initially (also switchable in the UI).-lc/-mrlive-camera / mission-review role (cosmetic; the state model is identical to a game machine).-host <id>responding host id reported in state responses (default 1).-res W Haccepted and ignored (real clients take it; kept for drop-in launch compatibility).
Deploying from the console (Manage Site → Install Product)
vPOD is a catalog product (RedPlanet\Apps.xml, id 0041C870-…) with Game
Client / Live Camera / Mission Review entries, so it appears in Manage Site →
Install Product like any game. Build the deployable package first:
pwsh -File pack.ps1 # produces dist\vPOD.zip
The zip lays out vPOD\vPOD.exe (+ Munga Net.dll) so the launcher extracts it
to C:\Games\vPOD and the catalog entry launches C:\Games\vPOD\vPOD.exe.
Testing locally against the console
The default site ships a local pod at 127.0.0.1. Run vPOD on the console
machine, open a game window (e.g. Games → Red Planet: Death Race), and enable
the local pod — the console connects to 127.0.0.1:1501 (vPOD), and you can
drive Load → Run → Stop and watch vPOD's state and egg viewer follow along.