diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d14cd41..c485653 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [0.9.0] — 2026-08-12 + +### Added +- **Dash (Shift)** — a burst movement in the movement direction, instant displacement D = 0.45 × v × 0.6 then 0.6 s of 50% slow after (net 95% of walking distance); no dash while slowed (DASH_SLOW_T doubles as cooldown) +- **Decode-ahead asset cache** — sprites are fully decoded into memory during the title screen via `img.decode()`, eliminating first-draw jitter on weak systems + +### Changed +- **Ammo pressure scaling** — generic ammo refills now scale with the live pressure dial at 80% of the HP multiplier (`ammoPressureMul() = 1 + (G.pressure − 1) × 0.8` in `js/state.js`) +- **Chroma-key pipeline reworked** — `flood_key_magenta` in `tools/gen_assets.py` now has four stages: border flood (unchanged), strict interior-pocket key (r>200, g<80, b>200), 3-pass is_magenta fringe erosion, and despill (excess=min(r,b)−g, cut round(excess×0.6) when >50); both SD and HD tiers regenerated with no magenta pockets +- **Muzzle alignment** — flame origin shifted right-hand 26px before `spawnMuzzleFx` so pellets and FX share one origin (cone/bile unchanged); beam starts at the muzzle (x0,y0) instead of the pivot; saw rendered flash suppressed (blade sparks are the effect); applied across all 16 weapons + +### Fixed +- **Debug ammo on a holstered spent weapon** — `debugRefillAmmo()` and INF AMMO upkeep now top up both `p.weapon` and `p.holstered`; the live ammo row edits the finite slot when the active weapon has infinite ammo +- **Hearts at full HP** — hearts stay on the floor instead of converting to score; the magnet won't drag them + +### Removed +- **Retired development-guide row from the docs index** — the `| Development Guide |` table row in `docs/README.md` is removed (the guide was retired in 0.7.0) + +--- + ## [0.8.0] — 2026-08-12 ### Added @@ -201,4 +221,4 @@ The initial series of commits that built the game from scratch. Grouped by featu --- -*Generated from the git log. Last commit: v0.8.0* +*Generated from the git log. Last commit: v0.9.0* diff --git a/docs/README.md b/docs/README.md index 434a8aa..de11f10 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,7 +15,6 @@ MeatSlicer is an endless top-down arena roguelite. You are the Butcher, descendi | [Enemies](enemies.md) | All 11 enemy types, elites, drops, wave and scaling formulas | | [Bosses](bosses.md) | All 9 bosses: rotation, scaling, full attack patterns, counters | | [Debug Console](dev-debug.md) | In-game cheat/inspection toolset (backtick `` ` `` key, `--dev` flag): all 8 tabs, run tainting, stat-rebuild internals | -| Development Guide | Architecture, build/test workflow, Electron packaging, asset and audio pipelines, versioning, releases, and Git practices — maintained in Serena memory (`.serena/memories/meatslicer-development.md`), not this repo | | [Changelog](CHANGELOG.md) | Release history by version | ### Quick numbers diff --git a/docs/gameplay.md b/docs/gameplay.md index 5715b3d..d1934a2 100644 --- a/docs/gameplay.md +++ b/docs/gameplay.md @@ -32,7 +32,6 @@ Score is display-only (it buys nothing) and determines your saved best: | Combat room cleared | +50 | | Descending to next floor | +250 | | XP gained | +1 per XP (rounded) | -| Heart picked up at full HP | +25 | | Ammo picked up with nothing to refill | +15 (+2 per wasted unit otherwise) | | Duplicate item at tier cap (IX) | +150 | @@ -55,6 +54,7 @@ Your best score is saved in `localStorage` as `meatslicer_best` and shown on the | **T** | Toggle Auto-Draft (auto-pick random perk on level-up) | | **M** | Mute / unmute | | **N** | Next music track | +| **Shift** | Dash in the movement direction; 0.6s of 50% slow after (net 95% of walking distance) | ### Perk draft screen (level-up) @@ -89,7 +89,7 @@ The desktop app title screen has **[X] Exit to Desktop**. Pause has **[Q] Main M The first matching press arms a 3-second confirmation; press it again to confirm. `P` or `Escape` resumes. In a web browser, desktop-exit controls are greyed out and non-interactive. -Right-click is disabled (context menu suppressed). There is **no dash, no interact key** — pickups are collected by walking over them. +Right-click is disabled (context menu suppressed). There is **no interact key** — pickups are collected by walking over them. --- @@ -119,7 +119,7 @@ Right-click is disabled (context menu suppressed). There is **no dash, no intera ### Healing - Hearts restore 2 HP (1 heart) each. -- Healing past max HP normally goes to waste (converted to +25 score for heart pickups) — unless you have the **Second Stomach** item, which converts overflow healing into shield HP. +- Healing past max HP normally goes to waste — unless you have the **Second Stomach** item, which converts overflow healing into shield HP. Hearts are not consumed at full HP (they stay on the floor for later, and the magnet won't drag them). - Other healing sources: Vampire Dentures (kill procs), Hemophage (hit procs), Worm Gut / Bone Knit (post-combat heals). --- @@ -185,8 +185,8 @@ Clearing a combat room drops: | Pickup | Effect | |---|---| | **XP Gem** (small, value 1 / big, value 5) | Grants XP × your `xpMul`. Fills the level bar; each level-up opens the Mutation Draft. | -| **Heart** | Heals 2 HP. At full HP: +25 score instead. | -| **Ammo** | Refills carried special weapons (current + holstered) by their authored `refill` × `ammoPickupMul`, up to 150% of magazine size. Overflow becomes score. | +| **Heart** | Heals 2 HP. At full HP: stays on the floor for later (the magnet won't drag it). | +| **Ammo** | Refills carried special weapons (current + holstered) by their authored `refill` × `ammoPickupMul` × `ammoPressureMul()` (pressure scaling at 80% of the HP multiplier), up to 150% of magazine size. Overflow becomes score. | | **Weapon** | Equips on walk-over. Your old special weapon drops with its remaining ammo (Bone Popper is never dropped). | | **Item** (on pedestal) | Grants/upgrades a passive item. Hovering near a pedestal shows its name. | | **Stairs Down** | Appears after every boss kill. Walk over to descend. | diff --git a/package.json b/package.json index ef553ac..6e13f3e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "meatslicer", "productName": "MeatSlicer", - "version": "0.8.0", + "version": "0.9.0", "private": true, "description": "A Butcher's Descent - clear, harvest, descend.", "main": "desktop/main.js",