Shaft Sentries

Release Notes

The 0.2 release line currently ships as 0.2.4, with earlier 0.2.x notes preserved below.

0.2.4

UI/UX

  • Options menu is now properly centered on all platforms, including HTML5 builds.
  • Options menu panel no longer exceeds the game window; content area is capped and scrollable.
  • Added vertical scrolling to the Options menu so all settings remain accessible on small screens.
  • Debug HUD is now off by default; can be enabled via Options or the F7 hotkey.
  • Fixed debug HUD toggle (Options and F7) not working after performance overlay refactor.
  • PERFORMANCE_OVERLAY_ENABLED is now defaulted to disabled.
  • Consolidated monster and FPS counter settings under the main performance overlay toggle.
  • Monster and FPS counters are now enabled and disabled by PERFORMANCE_OVERLAY_ENABLED and individual PERFORMANCE_OVERLAY_SHOW_* flags for consistency.
  • Renamed internal counter constants for consistency with the performance overlay naming scheme.

0.2.3

UI/UX

  • Added an Options menu to the main menu and pause menu.
  • Added an FPS cap slider in Options with three choices: 30, 60, and 120 FPS.
  • FPS cap now defaults to 60 FPS and is saved between sessions.
  • Added visual polish to the Options panel, including refined styling and a dedicated options icon.
  • Added an optional FPS display in the HUD next to the monster counter (toggle via Settings HUD flags).
  • Added an optional performance overlay in the HUD (entity counts, frame time, and path/cache hit stats), with per-section enable/disable flags in Settings.
  • Added a Debug HUD toggle in the Options menu to turn runtime debug counters and overlay on or off.
  • Added an in-game hotkey (F7) to cycle debug HUD states (Minimal, Standard, Full, Off).
  • Added Performance Assist options in the Options menu for automatic render-load handling.
  • Added a runtime toggle to hide unit health bars and an automatic mode that hides monster and dwarf bars when counts are high.

Performance

  • The game now enforces the selected FPS cap at runtime.
  • Improved FPS cap reliability by ensuring the selected cap is the active frame limiter.
  • Refactored runtime FPS logic into a dedicated runtime settings singleton, keeping Settings constants-only.
  • Optimized dwarf bolt hit detection to use physics-space sweep checks instead of per-frame global target scans.
  • Added time-sliced heavy monster AI updates to smooth frame-time spikes at larger enemy counts.
  • Added event-driven navigation invalidation and cache resets when world topology changes.
  • Added wall-target score caching to reduce repeated expensive wall-path scoring.
  • Added spatial partitioning queries for monsters, dwarves, and spawners to reduce broad group scans.
  • Added a house flow-field routing layer so monsters can follow shared gradient paths instead of repeated full path recomputation.
  • Added a centralized runtime performance telemetry singleton with rolling-window metrics for cache rates, path pressure and failure, AI workload, LOS and collision query load, spatial query efficiency, frame-time split, and spike tracking.
  • Expanded the HUD performance overlay with per-category toggles for all advanced telemetry sections.
  • Added automatic unit visual scaling under high load (reduced animation speed and reduced damage flash effects).
  • Added camera-distance render culling under render-load mode to hide off-screen monsters, dwarves, spawners, and bolts while keeping gameplay simulation active.

Bugfixes

  • Fixed a spatial query crash caused by stale freed entity references in world spatial buckets.
  • Restored sharpshooter reliability for targeting active monster spawners when spatial index results are temporarily empty.
  • Sharpshooters now prioritize active monster spawners when in range with clear line-of-sight.
  • Sharpshooter line-of-sight now treats placed stone walls as blockers, preventing shots through walls.
  • Sharpshooters now prioritize the weakest in-range monster (lowest HP), with distance as a tie-breaker.
  • Fixed dwarf bolt impact handling so assigned spawner targets take damage reliably even when they are not physics bodies.

0.2.2

  • Archer monsters now spawn visible bolt projectiles when attacking.
  • Improved monster AI performance by caching house-path blockage checks and reducing spawn-time scene loading overhead.

0.2.1

  • Fixed monster wall targeting so monsters refocus the house when a walkable route to the house exists.
  • Changed default difficulty to normal.
  • Reduced both melee and archer monster base damage by 25% (rounded down).

0.2.0

Gameplay

  • Added difficulty presets that scale monster health, monster damage, and monster spawn timing.
  • Added stone as a new resource.
  • Mining any breakable block now grants +1 stone.
  • Added placeable stone walls that cost 2 stone and have 60 HP.
  • Stone walls now block monster pathing until destroyed.
  • Stone walls now show damage sprite states at 75%, 50%, and 25% health.
  • Monsters can now target and attack stone walls when walls block their route.
  • Monster wall targeting now prioritizes thinner breach points closer to the house.
  • Guard posts now convert into towers when connected to at least two adjacent stone walls.
  • Two adjacent guard posts each touching a wall both upgrade to towers automatically.
  • Dwarves stationed in towers now receive doubled maximum health.
  • Dwarves stationed in towers now gain 50% increased shooting range.
  • Houses now upgrade to a keep when surrounded by 8 walls and 4 towers.
  • Keep upgrades double house maximum and current health.
  • Guard posts can now be placed directly on stone walls.
  • Placing a guard post on a wall removes that wall and refunds 1 stone.
  • Monsters can now attack dwarves if dwarves are in their path to the house.
  • If a dwarf dies, their assigned outpost is destroyed.
  • Outpost destruction now includes a brief burn effect.
  • Dwarf deaths now leave a bloodstain effect for 5 seconds.
  • Dwarves can now target and damage revealed and active monster spawners.
  • Dwarves can no longer shoot through unmined stones.
  • Added a dwarf class system with three hireable roles:
  • Sharpshooter dwarves defend guard posts.
  • Engineer dwarves repair damaged walls and outposts.
  • Melee dwarves roam caves and hunt monsters.
  • Updated dwarf hire pricing to be class-specific, with independent scaling for sharpshooter, engineer, and fighter hires.

UI/UX

  • Added a new game difficulty slider in the main menu with a live difficulty name label.
  • Added an in-game pause menu with Resume, Restart Level, and Main Menu actions.
  • Pause can be toggled with Space or Escape.
  • Health bars are now color-coded: green above 50%, yellow at or below 50%, and red below 25%.
  • Added a new title screen that displays title art on startup and waits for any key or mouse click before opening the main menu.
  • Updated HUD hiring controls with separate class-specific dwarf hire buttons.
  • Added new class sprite assets for engineer and melee movement, repair, and attack states.
  • Added top-right speed controls with 1x, 2x, and 3x buttons to adjust game speed.