From 0eab705ed3677b948e6d5958cad6986220f4d5c1 Mon Sep 17 00:00:00 2001 From: MeatSlicer Developer Date: Thu, 30 Jul 2026 22:18:44 +1000 Subject: [PATCH] Add locked gore death and enemy health pips --- assets/player_death_sheet.png | Bin 0 -> 74597 bytes js/enemies.js | 27 +++++++++---- js/main.js | 16 ++++++-- js/particles.js | 21 ++++++++-- js/player.js | 3 +- js/sprites.js | 16 +++++++- js/state.js | 2 + test/smoke.js | 18 +++++++++ tools/draw_sprites.py | 70 +++++++++++++++++++++++++++++++++- 9 files changed, 153 insertions(+), 20 deletions(-) create mode 100644 assets/player_death_sheet.png diff --git a/assets/player_death_sheet.png b/assets/player_death_sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..f1afcaefadffa726f6cd8b829432a448171fbf67 GIT binary patch literal 74597 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 0) { e.plateDmg = (e.plateDmg || 0) + dmg; @@ -342,6 +344,7 @@ function updateEnemies(dt) { if (e.hp <= 0) { G.enemies.splice(i, 1); continue; } e.spawnT = Math.min((e.spawnT || 0) + dt, 1); e.animT = (e.animT || 0) + dt; + if (e.hpBarT > 0) e.hpBarT = Math.max(0, e.hpBarT - dt); if (e.attackT > 0) { e.attackT -= dt; e.actionT += dt; } // materializing spawns are frozen and harmless until the telegraph ends @@ -356,12 +359,14 @@ function updateEnemies(dt) { if (e.orbT > 0) e.orbT -= dt; if (e.burnT > 0) { e.burnT -= dt; + e.hpBarT = HP_BAR_SHOW; tickEnemyDamage(e, e.burnDps * dt); if (chance(0.2)) addParticle({ type: 'flame', x: e.x + rand(-6, 6), y: e.y + rand(-6, 6), vx: 0, vy: -40, life: 0.3, t: 0, r: 3 }); if (e.hp <= 0) { G.enemies.splice(i, 1); continue; } } if (e.bleedT > 0) { e.bleedT -= dt; + e.hpBarT = HP_BAR_SHOW; tickEnemyDamage(e, e.bleedDps * dt); if (e.hp <= 0) { G.enemies.splice(i, 1); continue; } } @@ -497,13 +502,19 @@ function drawEnemies(ctx) { ctx.beginPath(); ctx.arc(e.x, e.y, e.r + 3, 0, TAU); ctx.stroke(); ctx.globalAlpha = 1; } - // boss & elite hp pip - if (e.boss || e.elite) { - const w = e.boss ? 60 : 26; - ctx.fillStyle = '#400a10'; - ctx.fillRect(e.x - w / 2, e.y - e.r - 10, w, 4); - ctx.fillStyle = '#d92038'; - ctx.fillRect(e.x - w / 2, e.y - e.r - 10, w * clamp(e.hp / e.maxHp, 0, 1), 4); + // Damaged normal monsters show a compact timed pip; elites/bosses stay visible. + if (!e.phased && (e.boss || e.elite || (e.hpBarT > 0 && e.hp < e.maxHp))) { + const w = e.boss ? 60 : (e.elite ? 26 : (e.type === 'mini' ? 14 : 18)); + const h = e.boss || e.elite ? 4 : 3; + const alpha = e.boss || e.elite ? 1 : clamp(e.hpBarT / 0.5, 0, 1); + ctx.save(); ctx.globalAlpha = alpha; + ctx.fillStyle = '#24070b'; + ctx.fillRect(e.x - w / 2 - 1, e.y - e.r - 11, w + 2, h + 2); + ctx.fillStyle = '#5a0d18'; + ctx.fillRect(e.x - w / 2, e.y - e.r - 10, w, h); + ctx.fillStyle = '#e22b46'; + ctx.fillRect(e.x - w / 2, e.y - e.r - 10, w * clamp(e.hp / e.maxHp, 0, 1), h); + ctx.restore(); } } } diff --git a/js/main.js b/js/main.js index 4362f09..6068715 100644 --- a/js/main.js +++ b/js/main.js @@ -142,6 +142,8 @@ function confirmAction(name, action) { function gameOver() { G.mode = 'gameover'; + G.deathLockT = DEATH_LOCK; + spawnPlayerGore(G.player.x, G.player.y); Sfx.playerDeath(); if (G.score > (G.best || 0)) { G.best = G.score; @@ -161,6 +163,7 @@ function loop(now) { function update(dt) { Music.update(dt); + if (G.deathLockT > 0) G.deathLockT = Math.max(0, G.deathLockT - dt); if (G.confirmT > 0) { G.confirmT = Math.max(0, G.confirmT - dt); if (G.confirmT <= 0) G.confirmAction = null; @@ -254,7 +257,7 @@ function update(dt) { } case 'gameover': updateParticles(dt); - if (keyPressed('r', 'enter', ' ') || Input.mpressed) startRun(); + if (G.deathLockT <= 0 && (keyPressed('r', 'enter', ' ') || Input.mpressed)) startRun(); break; } @@ -503,6 +506,9 @@ function drawPause(ctx) { } function drawGameOver(ctx) { + const reveal = clamp((DEATH_LOCK - G.deathLockT) / 0.9, 0, 1); + ctx.save(); + ctx.globalAlpha = reveal; ctx.fillStyle = 'rgba(4,1,3,0.86)'; ctx.fillRect(0, 0, W, H); drawPixelPanel(ctx, W / 2 - 230, 142, 460, 350, { accent: '#e02945', border: '#772638', fill: 'rgba(12,4,7,0.97)', @@ -529,10 +535,12 @@ function drawGameOver(ctx) { drawPixelTag(ctx, 'NEW BEST CUT', W / 2 - 68, 367, { width: 136, height: 26, color: '#f1cb53', accent: '#b38b2e' }); } drawPixelPanel(ctx, W / 2 - 140, 414, 280, 50, { - cut: 5, shadow: false, accent: '#cf2942', border: '#8c293c', fill: '#1a080e', + cut: 5, shadow: false, accent: G.deathLockT > 0 ? '#77552a' : '#cf2942', + border: G.deathLockT > 0 ? '#604727' : '#8c293c', fill: '#1a080e', }); - ctx.fillStyle = '#f1e4d5'; ctx.font = 'bold 12px monospace'; - ctx.fillText('[ R / ENTER ] CUT AGAIN', W / 2, 444); + ctx.fillStyle = G.deathLockT > 0 ? '#d4ad3d' : '#f1e4d5'; ctx.font = 'bold 12px monospace'; + ctx.fillText(G.deathLockT > 0 ? '[ INPUT LOCKED ยท ' + G.deathLockT.toFixed(1) + ' ]' : '[ R / ENTER ] CUT AGAIN', W / 2, 444); + ctx.restore(); } window.addEventListener('load', init); diff --git a/js/particles.js b/js/particles.js index 08e578c..51c88c6 100644 --- a/js/particles.js +++ b/js/particles.js @@ -48,7 +48,7 @@ function onGore(x, y) { return false; } -function spawnGibs(x, y, n, big) { +function spawnGibs(x, y, n, big, important) { for (let i = 0; i < n; i++) { const a = rand(0, TAU), sp = rand(60, big ? 290 : 220); const bone = chance(big ? 0.3 : 0.18); @@ -59,7 +59,7 @@ function spawnGibs(x, y, n, big) { life: rand(0.5, big ? 1.35 : 1.1), t: 0, r, w: r * rand(1.3, 2.6), h: r * rand(0.65, 1.25), bone, shade: i % 3, rot: rand(0, TAU), vr: rand(-10, 10), - }); + }, important); } } @@ -97,11 +97,11 @@ function spawnSmoke(x, y, ang, n, color) { } } -function spawnShockwave(x, y, radius, color, alpha) { +function spawnShockwave(x, y, radius, color, alpha, important) { addParticle({ type: 'shockwave', x, y, vx: 0, vy: 0, life: 0.42, t: 0, r: 5, maxR: radius, color: color || '#ffb06a', alpha: alpha === undefined ? 0.8 : alpha, - }); + }, important); } function spawnMuzzleFx(x, y, ang, behavior) { @@ -144,6 +144,19 @@ function spawnExplosionFx(x, y, r) { addShake(6); } +function spawnPlayerGore(x, y) { + spawnExplosionFx(x, y, 110); + spawnShockwave(x, y, 138, '#ff2947', 0.95, true); + for (let i = 0; i < 4; i++) spawnBlood(x, y, i * TAU / 4, 10, true); + spawnGibs(x, y, 26, true, true); + for (let i = 0; i < 18; i++) { + const a = rand(0, TAU), sp = rand(90, 350); + addParticle({ type: 'flame', x, y, vx: Math.cos(a) * sp, vy: Math.sin(a) * sp, + life: rand(0.22, 0.68), t: 0, r: rand(4, 10) }, true); + } + addShake(16); +} + function spawnCorpse(e) { G.corpses.push({ sprite: e.sprite, x: e.x, y: e.y, diff --git a/js/player.js b/js/player.js index 6dd72a6..6d51b31 100644 --- a/js/player.js +++ b/js/player.js @@ -411,8 +411,7 @@ function drawPlayer(ctx) { const kick = p.recoil * 3; Sprites.shadow(ctx, p.x, p.y + 17, 27 + p.moveBlend * 2, 9, 0.46); if (p.hp <= 0) { - // Preserve the authored full-body fall while the live character stays layered. - Sprites.actor(ctx, 'player', p.x, p.y, p.bodyFacing, 'death', p.deathT || 0, 96); + Sprites.strip(ctx, 'player_death_sheet', p.x, p.y, p.deathT || 0, 12, 14, 128, 144, true); } else { Sprites.legs(ctx, p.x, p.y + 4, p.bodyFacing, p.step, 124); const torsoOffset = (w.torsoFwd || 18) - kick; diff --git a/js/sprites.js b/js/sprites.js index 3e8e1fb..16891b5 100644 --- a/js/sprites.js +++ b/js/sprites.js @@ -48,7 +48,7 @@ const SPRITE_MANIFEST = [ 'a_bonenova', 'a_offalbomb', 'a_bloodtransfusion', 'a_cleaverstorm', 'a_butchersbell', 'a_marrowdraught', 'a_slaughtertime', 'a_panicroom', 'a_skinnerscoin', 'a_gutreroll', // full 64px/128px eight-direction action atlases - 'player_sheet', 'player_legs_sheet', + 'player_sheet', 'player_legs_sheet', 'player_death_sheet', 'enemy_shambler_sheet', 'enemy_runner_sheet', 'enemy_spitter_sheet', 'enemy_splitter_sheet', 'enemy_mini_sheet', 'enemy_exploder_sheet', 'boss_bonesaw_sheet', 'boss_gorecrown_sheet', 'boss_knifecrawl_sheet', @@ -111,6 +111,20 @@ const Sprites = { ctx.restore(); }, + // Non-directional one-row effects such as the player's authored gore burst. + strip(ctx, name, x, y, time, frames, fps, frameSize, targetW, hold) { + const sheet = this.imgs[name]; + if (!sheet) { + this.actor(ctx, 'player', x, y, 0, 'death', time, targetW || frameSize); + return; + } + const raw = Math.floor(Math.max(0, time) * fps); + const frame = hold ? Math.min(frames - 1, raw) : raw % frames; + const tw = targetW || frameSize; + ctx.drawImage(sheet, frame * frameSize, 0, frameSize, frameSize, + x - tw / 2, y - tw / 2, tw, tw); + }, + actor(ctx, name, x, y, facing, action, time, targetW, alpha, scaleX, scaleY) { const sheet = this.imgs[name + '_sheet']; const def = ACTOR_ANIMS[action] || ACTOR_ANIMS.idle; diff --git a/js/state.js b/js/state.js index ab54ab1..8270498 100644 --- a/js/state.js +++ b/js/state.js @@ -33,6 +33,7 @@ const G = { recentHits: [], confirmAction: null, confirmT: 0, + deathLockT: 0, transition: 0, // room transition fade muted: false, pauseHelp: false, @@ -53,6 +54,7 @@ const PRESSURE_MIN = 0.75, PRESSURE_MAX = 1.60; const PRESSURE_UNIT = 0.01; // one "point" on the dial scale const PRESSURE_GAIN = PRESSURE_UNIT; // retained: dial 0 == 1 point const PRESSURE_DROP_BASE = 3; // dial 0 == 0.03 relief base +const DEATH_LOCK = 3; const PRESSURE_DIAL_MIN = -5, PRESSURE_DIAL_MAX = 5; // -5 -> 0 units, 0 -> 1 unit, +5 -> 5 units (piecewise linear) diff --git a/test/smoke.js b/test/smoke.js index 20f60f2..0dfc30e 100644 --- a/test/smoke.js +++ b/test/smoke.js @@ -953,6 +953,19 @@ console.log('== bigger gore-red minis =='); check('mini sprite grew', ctx.ENEMY_TYPES.mini.drawSize === 48); } +console.log('== damaged monster health pips =='); +{ + const target = ctx.makeEnemy('shambler', 160, 160, 1, false); + target.warmT = 0; + check('undamaged normal monster starts without a timed health pip', target.hpBarT === 0); + ctx.damageEnemy(target, 1, 0, false, { noProc: true, noCrit: true }); + check('damaging a normal monster reveals its health pip', target.hpBarT === 2.5 && target.hp < target.maxHp); + ctx.G.enemies = [target]; + ctx.updateEnemies(2.6); + check('normal monster health pip expires after the tracking window', target.hpBarT === 0); + ctx.G.enemies = []; +} + console.log('== 500ms wave spawn telegraph =='); { ctx.startRun(); step(3, 16); @@ -1426,10 +1439,15 @@ console.log('== performance and duplicate-hit regressions =='); console.log('== death and restart =='); ctx.G.player.invT = 0; ctx.hurtPlayer(9999, 0); +check('death starts a three-second input lock', ctx.G.deathLockT === 3); +check('player death creates a layered gore burst', ctx.G.parts.some(p => p.type === 'gib') && ctx.G.parts.some(p => p.type === 'shockwave')); step(5, 16); check('game over', ctx.G.mode === 'gameover'); check('death animation advances once per game-over frame', Math.abs(ctx.G.player.deathT - 0.08) < 0.001); tap('r'); +check('restart input is ignored during death lock', ctx.G.mode === 'gameover'); +step(190, 16); +tap('r'); step(5, 16); check('restart works', ctx.G.mode === 'play' && ctx.G.floor === 1); diff --git a/tools/draw_sprites.py b/tools/draw_sprites.py index 2e4d497..c807539 100644 --- a/tools/draw_sprites.py +++ b/tools/draw_sprites.py @@ -1456,6 +1456,71 @@ def render_legs_sheet(): return sheet +def render_player_death_sheet(): + """Derive a gore burst from the shipped AI player still without redrawing it.""" + source_path = OUT / "player.png" + if not source_path.exists(): + raise FileNotFoundError("assets/player.png is required for the derived death sheet") + source = _fit_actor(Image.open(source_path).convert("RGBA"), "player", 128) + frame_size, frame_count = 128, 12 + sheet = Image.new("RGBA", (frame_size * frame_count, frame_size), (0, 0, 0, 0)) + rng = random.Random(0x5A17CE) + fragments = [] + cols = rows = 4 + for gy in range(rows): + y0 = round(gy * source.height / rows) + y1 = round((gy + 1) * source.height / rows) + for gx in range(cols): + x0 = round(gx * source.width / cols) + x1 = round((gx + 1) * source.width / cols) + piece = source.crop((x0, y0, x1, y1)) + if not piece.getbbox(): + continue + relx = (x0 + x1) / 2 - source.width / 2 + rely = (y0 + y1) / 2 - source.height / 2 + a = math.atan2(rely, relx) + rng.uniform(-0.7, 0.7) + fragments.append((piece, relx, rely, a, rng.uniform(30, 68), rng.uniform(-105, 105))) + + for index in range(frame_count): + p = index / max(1, frame_count - 1) + burst = p * p * (3 - 2 * p) + frame = Image.new("RGBA", (frame_size, frame_size), (0, 0, 0, 0)) + d = ImageDraw.Draw(frame) + if index in (1, 2, 3): + flash = (1 - abs(index - 2) / 2) * 0.9 + rr = 8 + index * 9 + d.ellipse([64 - rr, 64 - rr, 64 + rr, 64 + rr], fill=(255, 223, 164, round(255 * flash))) + for dot in range(20): + da = (dot * 2.399963 + 0.37) % math.tau + dr = burst * (18 + (dot * 17) % 47) + rr = max(1, round((3 + dot % 4) * (1 - p * 0.55))) + dx = round(64 + math.cos(da) * dr) + dy = round(64 + math.sin(da) * dr) + alpha = round(230 * max(0, 1 - p * 0.75)) + color = (174, 15 + (dot % 3) * 8, 38, alpha) + d.ellipse([dx - rr, dy - rr, dx + rr, dy + rr], fill=color) + + origin_x = (frame_size - source.width) / 2 + origin_y = (frame_size - source.height) / 2 + for piece, relx, rely, ang, speed, spin in fragments: + work = piece.copy() + fade = 1 if p < 0.62 else max(0, 1 - (p - 0.62) / 0.38) + if fade < 1: + work.putalpha(work.getchannel("A").point(lambda alpha: round(alpha * fade))) + rotation = spin * burst + if rotation: + work = work.rotate(rotation, Image.Resampling.NEAREST, expand=True) + cx = origin_x + source.width / 2 + relx + cy = origin_y + source.height / 2 + rely + travel = speed * burst + cx += math.cos(ang) * travel + relx * burst * 0.45 + cy += math.sin(ang) * travel + rely * burst * 0.45 + frame.alpha_composite(work, (round(cx - work.width / 2), round(cy - work.height / 2))) + sheet.alpha_composite(frame, (index * frame_size, 0)) + sheet.save(OUT / "player_death_sheet.png", optimize=True) + return sheet + + def main(): filters = [a for a in sys.argv[1:] if not a.startswith("--")] OUT.mkdir(exist_ok=True) @@ -1468,9 +1533,12 @@ def main(): for name in actor_names: sheet = render_actor_sheet(name) print(f"drew assets/{name}_sheet.png ({sheet.width}x{sheet.height})") - if not filters or any("player_legs" in f or "player" in f for f in filters): + if not filters or any("player_legs" in f or f == "player" for f in filters): sheet = render_legs_sheet() print(f"drew assets/player_legs_sheet.png ({sheet.width}x{sheet.height})") + if any("player_death" in f for f in filters): + sheet = render_player_death_sheet() + print(f"drew assets/player_death_sheet.png ({sheet.width}x{sheet.height})") print(f"\n{len(names)} sprites and {len(actor_names)} animation sheets rendered.")