UI Camera Weather Enhanced – Shogun Exodus Devlog #38

A traditional Japanese ink wash painting depicts a samurai in armor and a conical hat standing with his back to the viewer, looking toward a walled castle and mountain range under a stormy sky.
Recent development updates for Shogun Exodus introduce improvements to user interface handling, camera zoom rendering, and the core environmental weather systems. Save and load menus now feature accurate ink-button label synchronization alongside a dedicated overwrite confirmation prompt. Additionally, major refactoring to the background camera pipeline stabilizes middleground artwork scaling between standard and overview views, eliminating single-frame render flashes and scale reversals during discrete zoom adjustments.

The dynamic weather framework has also been rebalanced around biome terrain data for wind and precipitation, complemented by a fully implemented temperature condition covering ranges from minus thirty-nine to forty-nine degrees Celsius. Temperature now displays directly within the weather HUD and drives modular visual effects, including screen curve color grading and edge overlays for extreme heat and frost conditions.


Raw Patch Notes

UPDATE 2026-08-23 #193 - Save Menu Labels and Overwrite Confirmation
- Save/Load mode now reapplies its title, primary-button text, and placeholder after the slot list refresh, ensuring the Save panel shows `Save` rather than retaining Load-mode text.
- Saving through the primary button or Enter now detects an existing selected/name-matched slot and opens the pause menu's existing styled confirmation panel. `Confirm` overwrites the slot and returns to the Save panel; `Cancel` returns without writing. New slot names still save directly.
- Follow-up corrected the visible custom ink-button captions rather than only their hidden native Button text. `UIElementStyler.set_action_button_text()` now synchronizes the styled `InkActionText` child explicitly because changing between same-minimum-width captions does not reliably emit `minimum_size_changed`. Save mode visibly shows `Save`, Load mode shows `Load`, and the shared overwrite/exit panel visibly switches between `Confirm`/`Cancel` and `Yes`/`No`.
- Files: `Scripts/UI/PauseMenu.gd`, `Scripts/UI/UIElementStyler.gd`, `DeveloperFiles/update-log.txt`.

UPDATE 2026-08-23 #194 - Earlier Middleground Overview Fit Tests
- The first pass used the temporary half-size 7,375x2,120 `Flatlands_Middleground_1_LowRestTest.png` and reached full viewport-width fit at zoom 0.10. Its behavior tested correctly, but the normal view remained too large and the mountains appeared one notch too late.
- The second active pass uses the quarter-size 3,688x1,060 `Flatlands_Middleground_1_LowRestTest2.png` under the same stable middleground asset ID and moves `middleground.overview_fit_zoom` to 0.20. The image remains natural scale at zoom 1.0, smoothly reaches full viewport-width fit one additional mouse-wheel notch earlier, then stays exactly viewport-wide through 0.06 so finite edges cannot appear.
- Corrected the transition after the second test exposed a size reversal: interpolating world scale and then applying camera zoom caused the middleground to overshoot to about 3,986 screen pixels at zoom 0.60, then shrink while zooming inward toward 0.90. The transition now interpolates apparent screen width first and derives world scale afterward, producing monotonic growth from 1,920px at zoom 0.20 to the asset's natural 3,688px width at zoom 1.0.
- The screen-width correction alone was insufficient because it ignored vertical framing: with the sprite bottom fixed to the surface, its top moved from roughly 146px at zoom 1.0 to 92px at 0.8 (hiding mountains), then reversed toward 453px by 0.06 as CameraController's Castle overview bottom lock shifted the rendered center. Replaced that transition with top-edge-driven uniform scaling. CameraController now exposes its unconstrained focus and calculated bottom-lock start zoom as a strict read-only framing contract; the middleground uses that boundary as its effective continuous fit point, keeps its bottom surface-aligned, and guarantees viewport-width coverage. In the current 1920x1080 Base framing, the top now progresses monotonically at approximately 146/148/152/157/163/169/173/175/277/403/453px across zoom 1.0->0.06. The previous screen-width-only implementation is superseded.
- Screenshot testing showed the first larger-image pass had only concealed the underlying flaw, and the top-edge correction still tracked a texture bound rather than all visible landmarks. Root cause: continuously changing a sprite's uniform scale while reattaching its bottom to a world datum physically moves every other artwork pixel in world space, while the independently constrained camera adds a competing vertical movement. Replaced the hybrid transform entirely. The normal 1.0 composition and former 0.06 maximum-overview composition are now two complete screen-space endpoints; position and uniform scale interpolate together, reach the overview endpoint at 0.20, and remain fixed through 0.06. Every pixel is therefore an interpolation of its own two endpoint positions and cannot reverse. The screen result is converted through the live rendered camera only for drawing. The preceding width-only and top-edge implementations are both superseded.
- Removed the single-frame rectangular flash during wheel zooms. CameraController finalizes and force-updates its new framing before emitting `zoom_changed`; MountainLayer and MiddleGroundLayer now consume that signal immediately and rebuild their inverse/screen-space transforms in the same call rather than waiting for their next process poll. This prevents the finite Middleground canvas and the Mountain plane from rendering once at the preceding zoom, while retaining their cached per-frame updates as backup.
- Completed the zoom synchronization across the underlying screen-sized background planes after a remaining zoom-in-only grey strip identified the exact-viewport sky fill as another one-frame holdout. SkyLayer now rebuilds its day fill, twilight polygons, and paper texture on the finalized zoom signal, while CelestialLayer synchronizes the night sky, Sun, and Moon through the same contract. Their normal cached process paths remain as fallback.
- The synchronous logical updates alone did not remove the transient edge because global 2D physics interpolation was still blending the background nodes' old and new local transforms across a physics tick. Disabled inherited physics interpolation only on the manually screen-composed `WorldBackground` subtree and reset CameraController's interpolation state after each discrete wheel zoom/framing jump. Global interpolation remains enabled for player/Servant motion; the change removes redundant background interpolation rather than adding per-frame work.
- Both earlier images remain on disk pending visual approval.
- Files: `Scripts/CameraController.gd`, `Scripts/WorldBackgroundMiddlegroundLayer.gd`, `Data/world_background_profiles.json`, `DeveloperFiles/World_Background_Explainer.txt`, `DeveloperFiles/mod-guide.txt`, `DeveloperFiles/current-game-setup.txt`, `DeveloperFiles/temporary-data-fix-later.txt`, `DeveloperFiles/update-log.txt`.

UPDATE 2026-08-23 #195 - Finalized First-Pass Weather/Biome Balance
- Rebalanced Clouds and Wind around the biome Terrain characteristic, removing Clouds' old direct Rainfall weighting while preserving all existing visuals, environment tinting, fades, Wind scalar brackets/transitions, and Wind response behavior.
- Applied the finalized Rainfall weights and dwell ranges to Precipitation, including the deliberate Heavy Rain Normal multiplier of 3.0, without changing its Cloud preconditions or Rain visual presets.
- Added the always-present generic scalar Temperature Condition: nine enabled Celsius states cover -39°C through 49°C, use biome Temperature weighting, exact per-location persistence, and adjacent/one-state-skip graph transitions. Temperature has no visual, HUD, damage, or gameplay effect in this pass.
- Completed disabled Fog-state balance and authored exact Wind plus Temperature entry/persistence requirements. These data references now derive the `fog+temperature+wind` cluster automatically; Fog remains independent of Clouds and Precipitation, while `clouds+precipitation` remains derived as before.
- Files: `Data/Weather_Systems/conditions.json`, `DeveloperFiles/Weather_System_Explainer.txt`, `DeveloperFiles/current-game-setup.txt`, `DeveloperFiles/mod-guide.txt`, `DeveloperFiles/update-log.txt`.

UPDATE 2026-08-23 #196 - Temperature HUD and Screen Effects
- Completed Temperature as the existing always-present generic scalar Condition. All nine destinations now take one game hour, retain the authored -39°C..49°C ranges/weights/graph, and use stable cold-to-hot display ordering.
- Added Temperature as the rightmost persistent Weather HUD label (`[Sky][Wind][Temperature]`). The generic HUD-only `hud_display_name` field supplies `Freezing` and `Hot` aliases while underlying state names remain unchanged. MixedFontLabel now routes digits, colon, slash, hyphen-minus, and degree sign through Mistral.
- Added the reusable `UnderUIWorldEffects.tscn` component: CanvasLayer 50 exposes ordered `under_ui_post_process` and `under_ui_overlay` semantic hosts over the complete world. Base gameplay UI is explicitly layer 100.
- Extended declarative Weather inputs with backward-compatible `mode: raw` scalar descriptors. Existing Wind response-strength consumers are unchanged; reusable effects can now interpolate exact raw scalar endpoints and apply their own data-authored thresholds.
- Added one reusable `ScreenCurveGrade` renderer and one shared `ScreenBorderOverlay` renderer. Temperature registers a single-pass Hot/Cold curve grade plus separate Frost/Hot border effect ids. Curves use smooth monotonic three-point remaps with fixed black/white endpoints; exact Temperature linearly blends completed treatments and border opacity. Neutral temperatures instantiate no Temperature screen effect.
- Tuned both Temperature curve treatments to retain their 1% onset but cap at a data-authored 50% blend. Moved only the curve grade to a reusable `background_post_process` host after the complete background and before the Castle/world actors; Frost/Hot borders remain full-world overlays below UI. `ScreenCurveGrade` now supports reusable camera-fitted world-canvas geometry while preserving its CanvasLayer mode.
- Extended Weather profiling to disjoint `weather_fx/` CPU leaves for Clouds, Rain, grades, and borders. Reports also list active effect ids, semantic hosts, and fade-out state while keeping GPU conclusions tied to aggregate render/frame diagnostics.
- Updated generic Weather-plan scalar formatting, Dev Tools data ordering/ranges, architecture/modding docs, and the player Temperature loading hint. No Temperature-specific controller or Dev Tools branch, pawn scan, room simulation, SubViewport, CanvasGroup, runtime image processing, timer, or tick channel was added.
- Files: `Data/Weather_Systems/conditions.json`, `Data/Weather_Systems/Effects/frost_border_effects.json`, `Data/Weather_Systems/Effects/hot_border_effects.json`, `Data/Weather_Systems/Effects/temperature_curve_grade_effects.json`, `Data/assets.json`, `Data/ui_config.json`, `Data/LoadingScreenText.json`, `Autoload/WeatherSystem.gd`, `Autoload/TickProfiler.gd`, `Scripts/WorldBackground.gd`, `Scripts/UnderUIWorldEffects.gd`, `Scripts/Weather_Systems/WeatherEffectBase.gd`, `Scripts/Weather_Systems/WeatherEffectsBinder.gd`, `Scripts/Weather_Systems/WeatherEffectTestHarness.gd`, `Scripts/Weather_Systems/WeatherHUDLabels.gd`, `Scripts/Weather_Systems/WeatherPlanDebugOverlay.gd`, `Scripts/Weather_Systems/CloudSheet.gd`, `Scripts/Weather_Systems/RainSheet.gd`, `Scripts/Weather_Systems/ScreenBorderOverlay.gd`, `Scripts/Weather_Systems/ScreenCurveGrade.gd`, `Scripts/Weather_Systems/ScreenCurveGrade.gdshader`, `Scenes/Base.tscn`, `Scenes/UI/TimeHUD.tscn`, `Scenes/Enviroment/WorldBackgrounds/WorldBackground.tscn`, `Scenes/Enviroment/WorldBackgrounds/UnderUIWorldEffects.tscn`, `Scenes/Enviroment/Weather_Systems/ScreenBorderOverlay.tscn`, `Scenes/Enviroment/Weather_Systems/ScreenCurveGrade.tscn`, `DeveloperFiles/Weather_System_Explainer.txt`, `DeveloperFiles/World_Background_Explainer.txt`, `DeveloperFiles/current-game-setup.txt`, `DeveloperFiles/mod-guide.txt`, `DeveloperFiles/update-log.txt`.

*This is an automated post, using Python and LLMs to summarize game updates. Mistakes, while rare, may happen.


Leave a Reply

Your email address will not be published. Required fields are marked *