Front end: local mission-egg builder + front-end mode (Workstream B foundation)

The core 'single-player without the operator console' capability: a
zero-argument launch now builds its own mission and plays.

- game/reconstructed/btl4fe.{hpp,cpp}: the BattleTech catalog (8 maps,
  8 mechs + variants, colors) and BTFeMission_WriteEgg -- emits the exact
  console egg format (verified against content/MP.EGG): [mission],
  [ordinals] + the 4 static rank-place plasma bitmaps, [pilots],
  per-pilot loadout sections, and [largebitmap]/[smallbitmap] with
  GDI-rendered 128x32 / 64x16 pilot-name plasma bitmaps.
- L4APP.H: SetEggNotationFileName / SetNetworkCommonFlatAddress setters
  (from RP412) so the front end feeds the standard -egg load path.
- btl4main.cpp WinMain: front-end mode -- no -egg and no -net builds
  frontend.egg locally (BTFrontEnd_Run) and boots it. -egg/-net runs
  are untouched.

Verified: no-args launch -> '[frontend] built frontend.egg' -> mission
loads and runs; the generated egg is structurally identical to MP.EGG
(32x32/16x16 name bitmaps with real glyph pixels, all sections present).

Remaining in Phase 5 (deferred): the interactive on-screen catalog menu,
the in-process LocalConsole marshal (mission clock + StopMission at
expiry + single-binary loop), and the score-intake/results screen (new
for BT -- no mission-end flow exists yet). (Phase 5 of the roadmap)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-14 08:44:37 -05:00
co-authored by Claude Fable 5
parent 5ebb9a5906
commit 0faf6a0072
7 changed files with 483 additions and 1 deletions
+6
View File
@@ -81,6 +81,12 @@ public:
static bool GetFullscreen() { return mFullscreen; }
static Logical GetSeeSolids() { return seeSolids; }
static unsigned long GetNetworkCommonFlatAddress() { return networkCommonFlatAddress; }
// BT412: the in-game front end (btl4fe) builds a mission egg locally and
// feeds it through the standard -egg load path; a lobby member points the
// engine at its listen port. These setters replace the command-line-only
// path the arcade console used.
static void SetNetworkCommonFlatAddress(unsigned long address) { networkCommonFlatAddress = address; }
static void SetEggNotationFileName(const char *name) { eggNotationFileName = name; }
static CString GetEggNotationFileName() { return eggNotationFileName; }
static CString GetSpoolFileName() { return spoolFileName; }
static CString GetRIOPlaybackFileName() { return rioPlaybackFileName; }