Back to Devlog
    v0.2.0
    UIDecember 28, 2025Release notes

    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

    text
    Components: Pill, PillProgress, PillGroup, Button, Accordion
    Update loop: 100ms, with dirty checking
    Themes: default, dark
    Persistence: collapsed state, hidden elements

    Declarative 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.