Files
nissefolk/CHANGELOG.md

6.8 KiB
Raw Permalink Blame History

Changelog

All notable changes to this project will be documented here. Format follows Keep a Changelog.


[Unreleased]

Fixed

  • Y-based depth sorting (Issue #31): trees, rocks, seedlings and buildings now use tileY + 5 as depth instead of fixed values — objects lower on screen always render in front of objects above them, regardless of spawn order; build ghost moved to depth 1000
  • Nisse always visible (Issue #33): Nisse sprites fixed at depth 900, always rendered above world objects

Added

  • Försterkreislauf (Issue #25):
    • Setzlinge beim Fällen: Jeder gefällte Baum gibt 12 tree_seed in den Stockpile
    • Försterhaus (forester_hut): Neues Gebäude im Build-Menü (Kosten: 50 wood); Log-Hütten-Grafik mit Baum-Symbol; Klick auf das Haus öffnet ein Info-Panel
    • Zonenmarkierung: Im Info-Panel öffnet „Edit Zone" den Zonen-Editor; innerhalb eines Radius von 5 Tiles können Tiles per Klick zur Pflanzzone hinzugefügt oder entfernt werden; markierte Tiles werden als halbtransparente grüne Fläche im Spiel angezeigt; Zone wird im Save gespeichert
    • Förster-Job (forester): Nisse mit forester-Priorität > 0 pflanzen automatisch tree_seed auf leeren Zonen-Tiles; erfordert tree_seed im Stockpile
    • Chop-Priorisierung: Beim Fällen werden Bäume innerhalb von Förster-Zonen bevorzugt; natürliche Bäume werden erst gefällt wenn keine Zonen-Bäume mehr vorhanden sind
    • Nisse-Info-Panel und Nisse-Panel (V) zeigen jetzt auch die forester-Priorität als Schaltfläche

Fixed

  • Nisse idle loop (Issue #22): Nisse no longer retry unreachable trees/rocks in an infinite 1.5 s loop — pickJob now skips resources with no adjacent passable tile via hasAdjacentPassable(); pathfind-fail cooldown raised to 4 s
  • Resource-based passability (Issue #22): FOREST and ROCK terrain tiles are only impassable when a tree/rock resource occupies them — empty forest floor and rocky ground are now walkable; WorldSystem maintains an O(1) resourceTiles index kept in sync at runtime
  • Terrain canvas not updating (Issue #22): CHANGE_TILE now calls refreshTerrainTile() centrally via the adapter handler, fixing the visual glitch where chopped trees left a dark FOREST-coloured pixel instead of DARK_GRASS
  • Stockpile panel (Issue #20): panel background now uses uiOpacity and updates live when Settings opacity changes; panel height increased so the Nisse count row no longer overlaps the carrot row
  • ESC menu (Issue #20): internal bottom padding corrected — last button now has 16px gap to panel edge instead of 0px

Added

  • Overlay Opacity Setting (Issue #16): all UI overlay backgrounds (build menu, villager panel, context menu, ESC menu, confirm dialog, Nisse info panel, debug panel) now use a central uiOpacity value instead of hardcoded alphas
  • Settings Screen: ESC menu → Settings now opens a real overlay with an overlay-opacity row ( / value% / + step buttons, range 40 %100 %, default 80 %); setting persisted in localStorage under tg_ui_settings, separate from game save so New Game does not wipe it

Added

  • Unified Tile System (Issue #14):
    • Tree seedlings: player plants tree_seed on grass/dark-grass via the F-key farming tool; seedling grows through two stages (sprout → sapling → young tree, ~1 min each); on maturity it becomes a FOREST tile with a harvestable tree resource
    • Tile recovery: when a Nisse chops a tree, the resulting DARK_GRASS tile starts a 5-minute recovery timer and reverts to GRASS automatically, with the terrain canvas updated in real time
    • Three new procedural seedling textures (seedling_0/1/2) generated in BootScene
    • tree_seed added to stockpile display (default 5 at game start) and to the farming tool cycle
    • WorldSystem.refreshTerrainTile() updates the terrain canvas for a single tile without regenerating the full background
    • New TreeSeedlingSystem manages seedling sprites, growth ticking, and maturation

Added

  • Nisse Info Panel (Issue #9): clicking a Nisse opens a top-left panel with name, AI status, energy bar, active job, job priority buttons, and a live work log (last 10 of 20 runtime entries); closes with ESC, ✕ button, or by clicking another Nisse
  • Work log tracks: walking to job, hauling to stockpile, going to sleep, waking up, chopped/mined/farmed results, deposited at stockpile
  • ESC Menu (Issue #7): pressing ESC when no overlay is open shows a pause menu with Save Game, Load Game, Settings (placeholder), and New Game; New Game requires confirmation before wiping the save
  • ESC key now follows a priority stack: confirmation dialog → context menu → build menu → villager panel → Nisse info panel → ESC menu → (build/farm mode handled by their systems) → open ESC menu

Added

  • F3 Debug View: toggleable overlay showing FPS, tile type and contents under the cursor, Nisse count by AI state, active jobs by type, and pathfinding visualization (cyan lines in world space)

Fixed

  • Nisse now clear the FOREST/ROCK tile after harvesting, opening paths to deeper resources
  • Nisse no longer get stuck idle after depositing items at the stockpile
  • Working Nisse now reset to idle on game load (like walking ones), preventing stale AI state
  • Stale jobs with empty carry are now cleared after work completes, avoiding a false "haul to stockpile" loop
  • UI elements (stockpile panel, controls hint) now reposition correctly after window resize
  • Centered overlay panels (build menu, villager panel) close on resize so they reopen at the correct position
  • Mouse world coordinates now use ptr.worldX/ptr.worldY in BuildingSystem and FarmingSystem, fixing misalignment after resize or zoom

Changed

  • Villagers are now called Nisse throughout the UI (panel, controls hint, stockpile display, context menu, spawn message)

Added

  • Scroll wheel zooms toward the mouse cursor position (zoom-to-mouse), correctly accounting for Phaser's center-based zoom model
  • Middle mouse button held: pan the camera by dragging
  • Test environment at /test.html with ZoomTestScene (Phaser default) and ZoomMouseScene (zoom-to-mouse) for camera behaviour analysis; file-logging via Vite middleware to game-test.log

Fixed

  • getCenterWorld() in CameraSystem returned wrong world coordinates at zoom ≠ 1; corrected from scrollX + width/(2·zoom) to scrollX + width/2
  • Right-click context menu: suppresses browser default, shows Build and Nisse actions in the game world
  • Initial project setup: Phaser 3 + TypeScript + Vite
  • Core scenes: BootScene, GameScene, UIScene
  • Systems: BuildingSystem, CameraSystem, FarmingSystem, PlayerSystem, ResourceSystem, VillagerSystem, WorldSystem
  • Utilities: simplex-noise wrapper, pathfinding
  • StateManager for central game state
  • NetworkAdapter for multiplayer/sync layer