Domain correction from playtest: hand-fed eggs are a developer shortcut - a mission only ends on a console command, so the clock hits 00:00 and counts up forever. Even single-player games need a console marshal. RPL4CONSOLE is that console. Like the real one it lives on its own thread: it owns the mission clock and raises the stop request at the selected length; the app-manager per-frame hook (new gPerFrameHook seam in APPMGR, called while the application global is live - the loop condition NULLs it on exit, which ate the first attempt) executes the engine-safe part, dispatching the same StopMissionMessage TeslaConsole sent. Final scores flow in through a new RP-layer sink (gConsoleScoreSink in RPCNSL): RPPlayer feeds it the same score it sends a real console at mission end. It also inherits the launcher role: the application tears down after a stop (arcade pods were relaunched per mission by TeslaLauncher), so WinMain respawns the process when the console ended the mission, landing back on the race-setup screen. L4NetworkManager grows FeedLocalEgg (the single-user egg-inject path, callable mid-session) for the future in-process loop. Verified end to end: menu -> 3:00 race -> stop dispatched exactly on time -> final score collected (host 1 = 4113) -> process respawned with the front end up. -egg runs stay unmarshaled (the dev shortcut). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
29 lines
1.2 KiB
C
29 lines
1.2 KiB
C
#pragma once
|
|
|
|
#include "..\munga\style.h"
|
|
|
|
//########################################################################
|
|
//########################## RPL4 Local Console ##########################
|
|
//########################################################################
|
|
//
|
|
// The single-player marshal. Hand-fed eggs are a developer shortcut: a
|
|
// mission only ends on a console command, so without one the timer hits
|
|
// 00:00 and just counts up forever. This is the in-process console for
|
|
// front-end-launched games - it watches the mission, dispatches the
|
|
// same StopMissionMessage TeslaConsole sent when the selected length
|
|
// expires, and when the pod returns to WaitingForEgg it brings the race
|
|
// setup back up and feeds the next egg (or quits if the player closes
|
|
// the menu).
|
|
//
|
|
// Installs itself as the application manager's per-frame hook.
|
|
//
|
|
void
|
|
RPL4LocalConsole_Install(int mission_seconds);
|
|
|
|
// True when the last mission ended under the console's control (timer
|
|
// stop or pilot exit). WinMain then plays the launcher role - the
|
|
// arcade launcher restarted the pod after every mission - and respawns
|
|
// the process, landing back on the race setup screen.
|
|
Logical
|
|
RPL4LocalConsole_ShouldRelaunch();
|