Skip to content

Changelog

Release notes are also available on the GitHub Releases page.

  • Stockpile zones: draw storage areas in Overseer mode with filters, priorities, and labels
  • Containers: chest, barrel, and crate inventories with a dedicated sorting UI
  • Automatic hauling: units move items through pickup and delivery task stages
  • Robust task lifecycle: deleting a destination or changing its filter cancels affected haul commands
  • Save/load support: stockpiles, containers, and haul state persist with the world
  • Zone editing: partial deletion splits disconnected zone components correctly
  • Unified interaction intents: keyboard, mouse, and CLI actions use one resolver
  • Facing direction: the last movement direction determines keyboard interaction targets
  • Interactable entities: shared foundation for containers and crafting stations
  • kinswardctl interaction: external tools can issue the same interaction command as the player
  • Module reorganization: flat source files reorganized into four new modules
    • src/core/ — game_phase, schedule, input_registry, diagnostics
    • src/inventory/ — items, block_item, inventory UI, hotbar
    • src/interaction/ — block mining/placing, pickup_drop, world_item
    • src/movement/ — player, rules, barriers, proximity, physics
  • Nameplate visibility: nameplates hidden by default, shown only when the unit is selected or the cursor hovers within 1 tile
  • Layout flicker fix: nameplates use Visibility::Hidden until layout computes their size, preventing a single-frame pop
  • Dead code cleanup: removed unused variables, imports, and function parameters across the codebase
  • Rendering & FOV optimizations: further performance improvements to shadowcasting, lighting propagation, and tile rendering
  • WASM web support: canvas fills the browser viewport (fit_canvas_to_parent), asset meta check disabled for web builds (AssetMetaCheck::Never)
  • Web-ready index.html: <canvas id="bevy"> with 100% viewport CSS
  • Sprite icons in UI: toolbar, unit list, companion panel, nameplate, unit detail, and inventory equipment slots now display sprite icons from texture atlases instead of text labels
  • New data: updated sprite coordinates in blocks.ron/items.ron, new items and Grass block
  • 2D Bloom: bloom effect added to the camera (intensity 0.2)
  • Overlay tile fix: overlay tiles (lanterns, stairs) no longer disappear when the player moves — OverlayTile now tracks position and despawns only the affected tile instead of all overlays
  • Chat fixes: scroll works correctly, Pickable toggle on open/close, proper z-ordering via UiSlot::BOTTOM_LEFT_OPEN
  • Tooltip & drag icon: GlobalZIndex(200) — always renders on top of all UI
  • Unit list & companion panel: incremental rebuild eliminates per-frame flickering
  • Scrollbar fixes: guard against division by zero, ratio clamped to 1.0
  • Admin menu: ON/OFF button states correct on first open
  • Colony join message: format changed to “Name (Race) Level N joined the colony”
  • Hotbar: Pickable::IGNORE on outer container to prevent click interception
  • FocusPolicy::Block removed: legacy focus policy removed from 11 files
  • Diagnostics system: SystemTimings resource + QueryPerf TCP command + kinswardctl perf
  • Rendered State Matrix: fingerprint-based diffing skips ~98% of unchanged tiles
  • Incremental FOV merge: refcounted visibility replaces full clear-and-rebuild per frame
  • Entity pooling: tile entities recycled instead of spawned/despawned each frame
  • FOV viewport culling: shadowcast skipped for observers outside the viewport
  • Lighting viewport culling: XY culling for emitters in propagate_lighting
  • FOV→Lighting decoupled: lighting_dirty no longer set from compute_fov
  • Debug guard: F3 (debug picking toggle), F11 (hover debug info), and physics gizmos now require --debug flag — disabled in normal gameplay
  • Physics gizmos sync: sync_physics_gizmos_to_debug ensures physics gizmos match debug UI visibility on startup
  • GamePhase state machine: 4 states — MainMenu → WorldGen / Loading → Playing; UI systems spawn only on OnEnter(Playing)
  • CLI subcommands: new [--seed N] creates a new world, load <name> loads a save; replaces old --seed / --save flags
  • Main menu screen: stub screen with “KINSWARD” title; auto-transitions to WorldGen (or Loading if load subcommand used)
  • Loading screen: displayed on load <name>, blocks interaction with FocusPolicy::Block + ZIndex(300), transitions to Playing on success
  • UI deferred to Playing: 12+ UI systems (chat, companions, crafting, hotbar, inventory, FPS, tooltip, admin menu, control hints, creative catalog, HUD, save menu) moved from Startup to OnEnter(GamePhase::Playing)
  • 14 new GameCommand variants: SwitchMode, SetToolMode, CameraMove, CameraZoom, SelectUnit, DeselectAll, QuerySelection, SetActiveZ, SetFloorCover, RemoveFloorCover, QueryLight, QueryInventory, QueryPerf
  • Command stubs connected: SaveWorld/LoadWorld wired to SaveIntent/LoadIntent; QueryRecipes/Craft/QueryNearbyStation wired to CraftingRegistry
  • SystemParam bundles: SpawnCmd and ExtCmd bundles to work around Bevy’s 16-param limit
  • CameraCmdQueue: dedicated queue + apply_camera_commands system for camera commands from TCP
  • kinswardctl: 12 new subcommands with human-readable formatting (switch-mode, set-tool-mode, camera-move, camera-zoom, select, deselect-all, selection, set-active-z, set-floor-cover, remove-floor-cover, light, perf)
  • UI picking migration: UiHovered resource (centralized hover check from HoverMap filtered by Node) replaces 6 Query<&PickingInteraction> guard patterns
  • Observer clicks: all UI clicks use On<Pointer<Click>> observers instead of Interaction polling
  • Inventory refactor: handle_inventory_interaction replaced with observer on_inventory_slot_click + handle_inventory_q_drop
  • Hover via CardBaseColor: inventory slots and cards use CardBaseColor + Hovered component instead of manual PickingInteraction polling
  • PickingInteraction removed: completely eliminated from the codebase
  • UiSlotManager: centralized panel management system
  • DebugPickingPlugin: behind cfg(debug), toggle with F3; F11 prints HoverMap to stderr
  • bevy_dev_tools: added under debug feature flag
  • UI scroll: mouse-wheel scrolling on all scrollable panels via vendored bevy_scrollbar
    • Unit list, companions, creative catalog, crafting, build menu, chat — all scroll with visible scrollbar thumbs
    • Chat: scrollbar visible only when panel open (T key), auto-scroll to bottom on new messages
  • UI picking fix: removed 5 fullscreen positioning overlays (HotbarUiRoot, BuildMenuOverlay, ToolbarRoot, SettlementBarRoot, OverseerUiRoot) that blocked bevy_picking for all UI
  • Hover effects: CardBaseColor component + Hovered (CSS-like, includes descendants) for card hover feedback across all panels
  • Build menu redesign: inventory-style 64×64 grid cards, replaces toolbar when open, 40vh height, grid layout
  • Camera FPS fix: removed unnecessary fov_dirty/lighting_dirty flags from overseer camera pan — fixes 180→25 FPS drop during camera movement
  • Sprite/mesh picking disabled: require_markers: true on SpritePickingSettings/MeshPickingSettings to prevent picking overhead on game world entities
  • Theme constants: SCROLLBAR_WIDTH, SCROLLBAR_THUMB, BORDER_WIDTH added to UiTheme
  • Creative catalog: proper scroll (only grid scrolls, title fixed), GlobalZIndex(25), width 220px
  • Crafting panel: scrollbar, GlobalZIndex(25), recipe rebuild cache to prevent per-frame respawn
  • Sprite system: texture atlases, palette, item/unit icons, JetBrains Mono font
  • UI redesign: complete dark theme with floating semi-transparent panels replacing the old embedded UI
  • HUD: top-left floating overlay with level badge, HP bar, EP bar (no background)
  • InputRegistry: centralized input binding system with 21 keybindings across 5 contexts (Global, Adventure, Overseer, Inventory, Map View)
  • Control hints: dynamic context-aware keybinding hints in the bottom-right corner
  • Settlement Bar: top-center bar showing settlement name, population count, day, and season
  • Overseer Toolbar: 5-button toolbar (Dig, Build, Pickup, Cancel, Auto) with live task count badges
  • Build Menu: 8 categories (Walls, Stairs, Stations, Light, Plants, Resources, Water, Terrain) in card layout with inventory counts
  • Unit List panel: N key toggle, scrollable Colony unit cards with name, race, status, level, HP/EP bars; double-click to possess
  • Unit Detail panel: right-side inspector with name, level bars, race/trait pills, current task, command queue preview
  • Inventory redesign: 4x10 grid (40 slots), equipment slot placeholders (Head, Weapon, Body, Shield, Legs, Accessory), stat display (STR, DEX, CON, INT, WIS, CHA), trait pills
  • Craft panel: station indicator header, ingredient have/need display
  • Admin Menu: debug-only (~) panel with Teleport Home, Spawn Colonist/Enemy, Debug UI toggle, Day/Night, Creative mode, Reveal Map
  • Creative Catalog: debug+creative mode item browser for spawning items into inventory
  • Pause Menu: redesigned ESC menu with Continue, Save World, Load (browse saves), Quit
  • Map View: dedicated map mode (M key) with layer switching (Tab), zoom (Scroll), and pan (WASD)
  • QuickPeek: hold B for 0.3s+ in Adventure mode to temporarily view Overseer mode with zoom overlay
  • Unit stats: Health, Energy, and UnitLevel components with per-race base values
  • Panel animations: slide-in/fade transitions for all floating panels (UiAnimator system)
  • Race system: UnitKind replaced with data-driven Race enum (Dwarf, Goblin, Skeleton, Human, Deer, Wolf) + RaceRegistry from assets/races.ron
  • Trait system: 8 innate traits (Hardy, Keen, Clumsy, etc.) randomly assigned at spawn, managed via kinswardctl
  • Name generation: compound names from racial syllable tables (assets/names.ron) — dwarven, goblin, and human cultures
  • World name: procedurally generated from World culture table, used as default save name
  • New commands: QueryTraits, UnitAddTrait, UnitRemoveTrait; race and traits in QueryUnits/QueryUnitInfo
  • SpawnUnit: accepts race + mandatory faction instead of kind
  • Async save: no frame drops during save — data extracted on main thread, I/O on background thread
  • Entity save/load: units, player, world items, inventories, and companion state fully persist
  • Quick Save/Load: F5 to save, F9 to load
  • Save menu: Escape opens menu with Save World and Load (sub-menu listing all saves with dates)
  • Autosave rotation: 5 slots (autosave_1 through autosave_5), every 5 minutes
  • Load list fix: save list now displays correctly on every open
  • Crafting UI fix: “No recipes available” no longer duplicates every frame
  • Save/Load system: serialization of WorldMap (bincode+zstd per z-level), RegionMap, TaskQueue, entity snapshots
  • Atomic saves: write to temp dir, rename on completion
  • Crafting system: 12 recipes, 4 crafting stations (Workbench, Furnace, Sawmill, Crusher)
  • Crafting UI: C key toggles recipe panel, filtered by inventory and nearby station
  • NearbyStation: proximity-based station detection (2-tile radius)
  • New items: ores (Iron, Copper, Gold, Coal, Clay), processed resources (Plank, Stick, Ingots, Brick, Rope, Glass)
  • kinswardctl: save, load, saves, delete-save, recipes, craft, nearby-station commands
  • Autosave: every 5 minutes
  • Dual game modes: Adventure (direct control) and Overseer (RTS-style)
  • Procedural world generation: 16-step climate pipeline with 22 biomes
  • Z-level world: multiple vertical levels with stairs navigation
  • Block system: 20+ block types with mining and placement
  • Unit management: command queues, A* pathfinding, task system
  • Companion system: follow and station behaviors
  • Visibility: shadowcasting FOV and dynamic lighting
  • Debug tools: kinswardctl CLI with 40+ commands, TCP protocol
  • Data-driven: block and item definitions in RON files
  • Cross-platform: Linux and Windows builds

Detailed per-version changelogs will be added as tagged releases are published.