From 50826d568de8946407f7f4bfa20ccc6b585b33a3 Mon Sep 17 00:00:00 2001 From: Quintine Date: Tue, 11 Aug 2026 19:31:28 +1000 Subject: [PATCH] docs: sync gameplay/items/perks/weapons with 0.7.0 QoL batch; release: bump to 0.7.2 --- docs/CHANGELOG.md | 9 ++++++++- docs/gameplay.md | 4 ++-- docs/items.md | 2 +- docs/perks.md | 2 +- docs/weapons.md | 9 +++++---- index.html | 44 ++++++++++++++++++++++---------------------- js/sfxbank.js | 2 +- js/sprites.js | 2 +- package.json | 2 +- 9 files changed, 42 insertions(+), 34 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 3419506..436fa3f 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --- +## [0.7.2] — 2026-08-11 + +### Fixed +- **Documentation kept in sync with the 0.7.0 QoL batch** — everything that changed in 0.7.0 is now documented: the armor stat is described as a literal 0–75% dodge chance (Tanned Hide +8%, Thick Hide +4% — no more diminishing curve) in the gameplay, items, and perks guides; Red Right Hand's right-hand full-blade hitbox (reach 58 / offset 36 / radius 38) and the Cauterizer's right-hand projectile origin are now in the weapons guide; and the firing movement slow (×0.95 Bone Popper / ×0.85 otherwise) is in the player stats. + +--- + ## [0.7.0] — 2026-08-11 ### Added @@ -189,4 +196,4 @@ The initial series of commits that built the game from scratch. Grouped by featu --- -*Generated from the git log. Last commit: v0.7.0* +*Generated from the git log. Last commit: v0.7.2* diff --git a/docs/gameplay.md b/docs/gameplay.md index 09b3a61..744dfac 100644 --- a/docs/gameplay.md +++ b/docs/gameplay.md @@ -100,7 +100,7 @@ Right-click is disabled (context menu suppressed). There is **no dash, no intera |---|---| | Max HP | 6 (shown as 3 hearts, 2 HP per heart) | | Hitbox radius | 20 px | -| Move speed | 178 px/s | +| Move speed | 178 px/s (×0.95 while firing the Bone Popper, ×0.85 while firing any other weapon) | | Crit chance | 5% | | Crit damage | ×2.0 | | Post-hit invulnerability | 0.9 s | @@ -111,7 +111,7 @@ Right-click is disabled (context menu suppressed). There is **no dash, no intera ### Damage, armor, and shields - Every hit taken deals a **minimum of 1 damage** (`max(1, round(dmg))`). -- **Armor** gives a chance to completely ignore a hit: block chance = `armor / (1 + armor)`, capped at 75%. A blocked hit shows "BLOCKED" and grants only 0.2 s of invulnerability. +- **Armor** gives a chance to completely ignore a hit. Each source of armor adds its listed chance directly (e.g. Tanned Hide +8%, Thick Hide +4%) — the block chance is simply `armor`, capped at 75%. A blocked hit shows "BLOCKED" and grants only 0.2 s of invulnerability. - **Shield hearts** (cyan) absorb damage before real HP. They come from the Bone Plate item and Shield Heart perk, and are refilled to full at the start of each floor. Losing your last shield triggers a "SHIELD DOWN" warning. On the HUD they render at half-heart granularity — **2 shield HP = one full cyan heart**, matching red hearts (2 HP = 1 heart). - Getting hit knocks you back 14 px, shakes the screen, and flashes a red vignette. diff --git a/docs/items.md b/docs/items.md index 0dbd7f6..c7d8571 100644 --- a/docs/items.md +++ b/docs/items.md @@ -115,7 +115,7 @@ All of these trigger from your weapon hits (orbital knives proc at half chance). | **Gristle Cord** | +0.12s hurt immunity, +4% armor | `invBonus +0.12`, `armor +0.04` | | **Bone Plate** | +½ shield heart each floor | `shieldPerk +1`, `shieldHp +1` — shields refill every floor (1 shield HP = ½ heart, renders as half a cyan pip) | | **Second Stomach** | +½ heart and excess healing shields | `maxHp +1`, heal 1, `overShield +1` — overflow healing becomes shield HP | -| **Tanned Hide** | +8% chance to ignore damage | `armor +0.087` — block chance `armor / (1 + armor)`, cap 75% | +| **Tanned Hide** | +8% chance to ignore damage | `armor +0.08` — literal dodge chance, cap 75% | | **Dead Man's Clock** | +0.25s hurt immunity | `invBonus +0.25` — post-hit invulnerability 0.9 s → 1.15 s at tier I | | **Worm Gut** | Heal ½ heart after combat rooms | `roomHeal +1` — guaranteed 1 HP heal after each combat room clear | | **Spine Cage** | Contact attackers take damage | `thorns +8` — melee attackers take `8 × dmgMul` when they hurt you | diff --git a/docs/perks.md b/docs/perks.md index 3250fb1..3683a60 100644 --- a/docs/perks.md +++ b/docs/perks.md @@ -55,7 +55,7 @@ XP comes from gems dropped by kills, room clears, and bosses, scaled by your `xp |---|---|---| | **Big Heart** | +½ max heart, heal ½ heart | `maxHp +1`, heal 1 | | **Shield Heart** | +½ shield heart at the start of each floor | `shieldPerk +1`, `shieldHp +1` — refills every floor transition | -| **Thick Hide** | +4% chance to ignore damage | `armor +1/24 (≈0.0417)` — block chance `armor / (1 + armor)`, cap 75% | +| **Thick Hide** | +4% chance to ignore damage | `armor +0.04` — literal dodge chance, cap 75% | | **Second Wind** | +0.15s hurt immunity | `invBonus +0.15` — post-hit invulnerability 0.9 s → 1.05 s | | **Spite Flesh** | Contact attackers take damage | `thorns +4` — melee attackers take `4 × dmgMul` | | **Bone Knit** | 3% chance to heal ½ heart after combat rooms | `roomHealChance +0.03` (cap 90%) | diff --git a/docs/weapons.md b/docs/weapons.md index 1d95a95..a22726b 100644 --- a/docs/weapons.md +++ b/docs/weapons.md @@ -244,12 +244,13 @@ Area denial. Traps persist on the floor and snap shut on up to **three** victims |---|---| | Damage | 7 per tick (ticks scale with fire rate) | | Damage interval | 0.10 s | -| Reach | 30 × rangeMul × √shotSpeedMul from player | -| Arc radius | 34 × √sizeMul | +| Reach | 58 × rangeMul × √shotSpeedMul from player | +| Right-hand offset | 36 × √sizeMul to the right of aim | +| Arc radius | 38 × √sizeMul | | Ammo | 150 (refill 72 per pickup; drains 18/sec while held, ÷ ammoEff) | | Recoil | 0.38 | -Continuous melee chainsaw — hold LMB and walk into things. Damage scales with `dmgMul × rateMul`, plus the same +6%-per-pierce/bounce/homing inert bonus as the Tenderizer. Sparks fly, ammo drains. +Continuous melee chainsaw — hold LMB and walk into things. The hitbox sits on the character's right hand (`aim + π/2`) at full blade reach/radius, so swings connect on the right side of the body. Damage scales with `dmgMul × rateMul`, plus the same +6%-per-pierce/bounce/homing inert bonus as the Tenderizer. Sparks fly, ammo drains. --- @@ -271,7 +272,7 @@ Continuous melee chainsaw — hold LMB and walk into things. Damage scales with | Ammo | 110 (refill 21 per pickup), **drains 12/sec while held** | | Recoil | 0.32 | -Flamethrower. Hits **ignite for 1.5 s** with burn DPS = bullet damage × 0.8 (3.6 DPS base). Melt hordes that get close; useless at range. Ammo is time-denominated: a full tank is ~9 seconds of flame. +Flamethrower — projectiles originate **26 px to the right of the body** (right-hand hold). Hits **ignite for 1.5 s** with burn DPS = bullet damage × 0.8 (3.6 DPS base). Melt hordes that get close; useless at range. Ammo is time-denominated: a full tank is ~9 seconds of flame. ### The Tenderizer diff --git a/index.html b/index.html index d78079a..31d4673 100644 --- a/index.html +++ b/index.html @@ -6,32 +6,32 @@ MEATSLICER - +
- - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + diff --git a/js/sfxbank.js b/js/sfxbank.js index 34b2991..3be6df8 100644 --- a/js/sfxbank.js +++ b/js/sfxbank.js @@ -111,7 +111,7 @@ const SfxBank = { if (this.buffers.has(name) || this.pending.has(name) || this.failed.has(name)) return; const file = this.FILES[name]; if (!file || !this.ctx || typeof fetch !== 'function') return; - const job = fetch('/assets/sfx/' + encodeURIComponent(file) + '?v=53') + const job = fetch('/assets/sfx/' + encodeURIComponent(file) + '?v=54') .then(r => { if (!r.ok) throw new Error('HTTP ' + r.status); return r.arrayBuffer(); }) .then(bytes => this.ctx.decodeAudioData(bytes)) .then(buffer => this.buffers.set(name, this.trim(buffer))) diff --git a/js/sprites.js b/js/sprites.js index 4639aef..a3f071b 100644 --- a/js/sprites.js +++ b/js/sprites.js @@ -86,7 +86,7 @@ const Sprites = { const img = new Image(); img.onload = () => { this.imgs[name] = img; if (--pending === 0) G.imagesLoaded = true; }; img.onerror = () => { if (--pending === 0) G.imagesLoaded = true; }; - img.src = 'assets/' + name + '.png?v=53'; + img.src = 'assets/' + name + '.png?v=54'; } }, diff --git a/package.json b/package.json index f9d7a30..060de99 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "meatslicer", "productName": "MeatSlicer", - "version": "0.7.0", + "version": "0.7.2", "private": true, "description": "A Butcher's Descent - clear, harvest, descend.", "main": "desktop/main.js",