// Mode dispatch -- the console's ExitCodeID vocabulary -> how the emulator // launches it. // // KEY (see ../CAMERA-REVIEW-NOTES.md): cockpit, Live-Cam, and LIVE mission-review // are the SAME networked boot -- the console assigns the role per-IP via the // egg's hostType= (0 pod / 1 camera / 2 review), so they are NOT separate launch // modes. `bt` and `rp` cover all three. The only genuinely distinct launches are // review PLAYBACK (replays last.spl through the non-networked playback app) and // the DOS diagnostics; their launch mechanics aren't in the archive, so they're // recognized here but marked unsupported (fail clean, don't guess). using System; using System.Text; namespace VwePod { internal sealed class Mode { public string Name; public string ConfBase; // rendered conf basename (no ext); null if not a conf-launch public bool Supported; public string Note; } internal static class Modes { private static readonly Mode[] All = { new Mode { Name = "bt", ConfBase = "net_loop", Supported = true, Note = "BattleTech, networked cockpit. Also serves the camera ship and LIVE mission-review -- the console sets the role per-IP via the egg hostType, so no separate mode is needed." }, new Mode { Name = "rp", ConfBase = "net_rp", Supported = true, Note = "Red Planet, networked cockpit (also camera / live mission-review via egg hostType)." }, // Distinct launches, mechanics not yet wired on the emulator: new Mode { Name = "review", ConfBase = null, Supported = false, Note = "Mission-review PLAYBACK: replays last.spl through the non-networked playback app (BTL4PlaybackApplication). The DOS launch arg for playback mode is not in the archive -- confirm before wiring." }, new Mode { Name = "test-plasma", ConfBase = null, Supported = false, Note = "TestPlasmaDisplay diagnostic -- DOS launch mechanic not yet wired." }, new Mode { Name = "reset-rio", ConfBase = null, Supported = false, Note = "ResetRIO diagnostic -- not yet wired." }, new Mode { Name = "audio-test", ConfBase = null, Supported = false, Note = "RunAudioTest diagnostic -- not yet wired." }, }; public static Mode Find(string name) { if (name == null) return null; foreach (var m in All) if (string.Equals(m.Name, name, StringComparison.OrdinalIgnoreCase)) return m; return null; } public static string Names() { var sb = new StringBuilder(); foreach (var m in All) { if (sb.Length > 0) sb.Append(", "); sb.Append(m.Name); if (!m.Supported) sb.Append("(unsupported)"); } return sb.ToString(); } } }