Make the shot that ends someone read differently from the one that only hurt them, and give your own grenade the hit confirmation a bullet already gets.
Today shoot pushes { kind: "hitmark", headshot } for world.me only (src/client/world.ts:845) and hud.ts:362-365 draws it white, or red for a headshot. Nothing says killed: four bullets into an enemy and the fifth that drops them draw the same mark, and the only confirmation is a kill-feed line arriving in the corner a moment later. detonate (world.ts:1018) is worse — it applies blast damage, records it, calls hurt for the victim and onKill, and pushes no hitmark at all, so an HE you threw onto two people looks the same as one thrown into a wall.
Done looks like:
[ ] Effecthitmark carries killed: boolean; shoot sets it from result.killed.
[ ] detonate pushes one hitmark per enemy it damages, but only when the thrower is world.me — the same guard shoot uses, so the RL arena's hot loop pushes nothing new and scripts/cost.ts stays under its budget.
[ ] A hitmark for a kill draws distinctly (a heavier, longer-lived mark with a fourth stroke or an X through the centre — the shape is the builder's call, one that reads at 360px) and a headshot kill still reads as a headshot.
[ ] earshot.ts:54 carries killed through on the hit cue. Nothing in audio.ts changes in this issue: audio.hit(headshot) keeps its signature, and the kill tone waits for the audio.ts rewrite in flight under #110 — the flag is put on the cue so that work has it ready.
[ ] Tests that fail without the change: world.test.ts for killed on a fatal bullet and for exactly one hitmark per enemy a player's own blast damages (and none for a bot's grenade); hud.test.ts against the recording context for the kill mark differing from the plain one; earshot.test.ts for the cue's new field.
[ ] bun run check green.
Files I expect to change: src/client/world.ts, src/client/hud.ts, src/client/earshot.ts, and the three test files beside them.
Risks: pushing effects inside detonate is inside the tick the arena steps — keep it behind === world.me, and quote the before/after from scripts/cost.ts in the pull. Drawing more strokes in the middle of the screen is HUD call budget (#120): keep the extra calls to a handful.
Brief that fits: vesper — feel and the simulation.
Make the shot that ends someone read differently from the one that only hurt them, and give your own grenade the hit confirmation a bullet already gets.
Today
shootpushes{ kind: "hitmark", headshot }forworld.meonly (src/client/world.ts:845) andhud.ts:362-365draws it white, or red for a headshot. Nothing says killed: four bullets into an enemy and the fifth that drops them draw the same mark, and the only confirmation is a kill-feed line arriving in the corner a moment later.detonate(world.ts:1018) is worse — it applies blast damage, records it, callshurtfor the victim andonKill, and pushes nohitmarkat all, so an HE you threw onto two people looks the same as one thrown into a wall.Done looks like:
Effecthitmarkcarrieskilled: boolean;shootsets it fromresult.killed.detonatepushes onehitmarkper enemy it damages, but only when the thrower isworld.me— the same guardshootuses, so the RL arena's hot loop pushes nothing new andscripts/cost.tsstays under its budget.earshot.ts:54carrieskilledthrough on thehitcue. Nothing inaudio.tschanges in this issue:audio.hit(headshot)keeps its signature, and the kill tone waits for theaudio.tsrewrite in flight under #110 — the flag is put on the cue so that work has it ready.world.test.tsforkilledon a fatal bullet and for exactly one hitmark per enemy a player's own blast damages (and none for a bot's grenade);hud.test.tsagainst the recording context for the kill mark differing from the plain one;earshot.test.tsfor the cue's new field.bun run checkgreen.Files I expect to change:
src/client/world.ts,src/client/hud.ts,src/client/earshot.ts, and the three test files beside them.Risks: pushing effects inside
detonateis inside the tick the arena steps — keep it behind=== world.me, and quote the before/after fromscripts/cost.tsin the pull. Drawing more strokes in the middle of the screen is HUD call budget (#120): keep the extra calls to a handful.Brief that fits: vesper — feel and the simulation.