The latest development updates for the indie strategy game *Shogun Exodus* introduce a fully moddable loading screen system alongside a newly implemented in-HUD soft pause feature. Update #137 adds a dynamic scene transition overlay that pulls randomized, mod-compatible background images and gameplay hints during loading and travel states. Accompanying this system is a new soft pause button in the user interface, which freezes the active game-time simulation while still allowing players to pan the camera, inspect units, and navigate menus without pausing the entire engine.
Additionally, Update #138 expands character customization by introducing 30 new paired front and back hair styles, backed by an overhaul of the visual rendering pipeline. Under this new system, front and back hair layers scale dynamically with each character’s skull structure to ensure seamless movement and mod compatibility. This update also refines portrait framing, anchoring the camera to the skull region so that character portraits display consistently regardless of the selected hair style.
Raw Patch Notes
UPDATE 2026-06-18 #137 - Loading Screen System + In-HUD Pause - Added a moddable loading-screen system that covers all scene transitions (new game, load, and travel) with a full-screen background image + a gameplay hint, and holds the game frozen until the player clicks (left mouse) or presses Space/Enter/Esc to begin. - New `LoadingScreen` autoload owns a CanvasLayer overlay (layer 1000, PROCESS_MODE_ALWAYS). It discovers background images at runtime from `Art/LoadingScreens/` (base game + each active folder mod) and hint text from `Data/LoadingScreenText.json` (base + mod merge, override/append by hint `id`). Nothing is hardcoded to a specific image set. - Bottom hint box is a 50%-opacity black panel with white title + body text. A random image+hint is shown per cover; if the screen stays up it crossfades (1s) to another random image+hint every 20s. Only the current (+ next during crossfade) texture is held in memory. - The loading screen uses the engine hard pause (`tree.paused`) only while covering a transition; it releases it on the player's click and clears any lingering soft pause so the game starts running. `SaveGame`, `WorldState`, and `PauseController` no longer force-unpause mid-load/travel while the loading screen is active, and `PauseController` ignores the pause action while the loading screen is up. - Added an in-HUD Pause button (soft pause) next to the speed buttons. Soft pause freezes the simulation without pausing the SceneTree, so the player can still open menus, right-click, inspect, and pan the camera. Picking a speed resumes play. - Soft pause is owned by `TimeSystem` (reason-keyed set: `is_paused`, `add/remove_pause_reason`, `set_paused`, `toggle_pause`, `get_effective_time_scale`, `pause_changed`). Game-time stops while paused, so everything keyed off game-time (jobs, build progress, social sessions) freezes automatically. `TickClock` suppresses tick emission while paused (freezing needs decay, smoke, and social ticks); `BasicWanderAI` and `Player` use the effective (0) scale to freeze movement. This is intentionally separate from the modal menu pause (`tree.paused`, owned by `PauseController`); a future ref-counted pause arbiter could unify them if multiple simultaneous pause sources ever appear. - Files: `Autoload/LoadingScreen.gd` (new), `Data/LoadingScreenText.json` (new), `project.godot`, `Autoload/TimeSystem.gd`, `Autoload/TickClock.gd`, `Autoload/WorldState.gd`, `Autoload/SaveGame.gd`, `Autoload/PauseController.gd`, `Scripts/BasicWanderAI.gd`, `Scripts/Player.gd`, `Scripts/TimeHUD.gd`, `Scripts/UI/StartScreenMenu.gd`, `Scripts/PlayButton.gd`, `AGENTS.md`, `current-game-setup.txt`, `mod-guide.txt`, `update-log.txt` UPDATE 2026-06-16 #138 - Paired Front/Back Hair (World + Portraits) - Created new graphics for 30 new Hair Styles, with Front and Back sections. - Added a gender-neutral `hair` slot with 30 styles (`human.hair.1..30`) from `Art/Actors/Human/Hair_Styles/` (682x1113). Each hair part carries its front texture (primary, into the head group above skull/face) plus a paired back texture via `extra_render_layers` targeting a new `hair_back` render group. Tying both halves to one part guarantees `N_Front`/`N_Back` never mismatch and lets styles be added/removed (and modded) freely. - New generic engine pieces in CharacterAppearanceService: parts may declare `extra_render_layers` (one selected part contributing layers to other groups); render groups may carry their own `actor_attachment`; a `reference_part_offset` attachment anchors a group to a fixed offset from a reference group's attachment part (the skull), inheriting its scale; and an optional render-group `build_order` decouples build/dependency order from draw order so back hair can draw behind the body yet still anchor to the later-built head. Group layers now composite strictly by `layer_order` across both sources. - Hair anchors to the skull's bottom-left (169px left, 365px below) and scales with each body's skull_scale, so front and back stay attached on thin/regular pawns. Draw order is now hair_back -> body -> skull+face+front-hair -> (front hair on top), via tree order only (no z_index), with back hair following body motion. - Portraits now frame on the skull region (exposed as each group's attachment rect) instead of the head's full alpha bounds, so front hair shows in portraits and can change the face read, but the face stays the same size and excess hair is masked out. The head's animation pivot is likewise anchored to the skull so hair does not drag the rotation center. - Forward-looking: hair color (hue/saturation/tint, like materials) can later hook onto the hair part's layers; because one part owns both front and back, a single tint will apply to the whole style. - Files: `Data/Characters/appearance_parts.json`, `Data/Characters/appearance_slots.json`, `Data/Characters/appearance_generation.json`, `Autoload/CharacterAppearanceService.gd`, `Scripts/Characters/CharacterVisual.gd`, `Scripts/UI/BuildingPortraitSlot.gd`, `current-game-setup.txt`, `mod-guide.txt`, `update-log.txt`
*This is an automated post, using Python and LLMs to summarize game updates. Mistakes, while rare, may happen.

Reply