A HUD That Described Itself
Cross-platform UI scaling from a 1920x1080 reference, a declarative HUD with a 100ms dirty-checked update loop, and a procedural map generator.
Scaling From a Reference Resolution
A real answer to the Android problem from v0.1.3, and the release where the engine stopped hardcoding pixels:
- CSS variables, scaled from a 1920x1080 reference.
- Four scale modes: fit, fill, width, height.
- Safe area insets for notches.
- 44px minimum touch target, enforced.
All engine CSS was migrated onto those variables in this release, not deferred to a later one.
The HUD Is Data
Components: Pill, PillProgress, PillGroup, Button, Accordion
Update loop: 100ms, with dirty checking
Themes: default, dark
Persistence: collapsed state, hidden elementsDeclarative and JSON-configured, with a HUDManager component factory. Commands to drive it from the console: ui scale, ui mode, ui debug, ui info, hud info, hud interval, hud show|hide|toggle, hud theme, hud collapse|expand.
A 100ms dirty-checked loop is the kind of decision that looks like nothing and then determines whether a browser engine is viable at all. GameHUDSetup.ts bridges the generic HUD to whatever the game happens to be — in December 2025, that meant plant water levels.
The Part That Should Not Be There
This release also shipped a procedural map generator with biome support: Perlin-noise terrain elevation, pond generation with shorelines, a static sprite system via misc_sprite, a WindSystem, and a DebrisEffect with info_debris_zone entities.
And a settings export system for NetRadiant.
Write that down next to the game's current state — 38 shipping Quake and Warsaw maps, lightmaps, PVS, fog volumes — and the shape of the next eight months stops being a mystery. The engine already spoke the map author's language. It just did not have any maps yet.
Also in this one: command history on ArrowUp/ArrowDown, a semicolon separator for batch console commands, menu music and texture tiling fixes, and tests for ActionSystem, SeededRandom, Noise, ConsoleCommandRegistry, EngineSettings and MapParser.