Game picker and save browser: menu window shell, background warm-up

The main menu warms every ready game's mods up into the assembly cache in the
background (last played first), so picking a game only loads cached assemblies.
Game picker and save browser are scenes on the shared MenuWindowShell (also used by
the settings): caps title, close on the right, footer hint; the picker footer shows
the warm-up state, cards get framed covers with a letter placeholder and Continue as
the main action; the save browser shows 3x2 large cards with the game selector in
the header. new_game waits for the warm-up; menu_flow takes --shots.
This commit is contained in:
cthangover committed 2026-10-21 20:15:32 +02:00
1 parent 9bd0483af9
commit f04a2a3661
13 files changed
+500 -210

No files matched your search

@@ -17,7 +17,8 @@ namespace Mods.NewGameTest
/// Plays the games the way a player does, in ONE process: no restart
/// happens anywhere, every game switch replaces the mod set in place.
/// <list type="number">
/// <item>Front-end menu → Play → the <c>cthangover</c> card → New game: the
/// <item>The front-end menu warms every game's mods up in the background;
/// once done, Play → the <c>cthangover</c> card → New game: the
/// process switches to the game, enters <c>prolog_alley</c> and the opening
/// dialog about the hungover Marao is clicked through.</item>
/// <item>Hot reload inside the game (forced reload of <c>cthangover_party</c>):
@@ -105,8 +106,13 @@ namespace Mods.NewGameTest
switch (step)
{
case 0:
if (!Boot.IsReady || !PressMenuPlay())
// The menu compiles the games' mods in the background; the switch
// below must then only load them from the cache (see the log).
if (!Boot.IsReady || GetTree().CurrentScene is not Cthangover.BaseMenu.MainMenu || GameSession.IsWarmingUp)
return;
if (!PressMenuPlay())
return;
Check("the menu warmed the games up in the background", true);
Check("front-end menu offers Play", ActiveGame.IsFrontendOnly);
break;