Split The code is public; the app answers only to the crew.
A round your own teammate stops vanishes: no blood, no impact, no word that a bot was in your line #236
Check · Review · Land · Live done — Landed and live in production.
When one of your own rounds stops on a teammate, you now get visible feedback. You see a spark on their body, a separate mark in your side's colour, and one "Blocked by <name>" line. They still take no damage. `bun run check` passes (857 tests) and `/` answers 200 when the app is started locally.
shipped merged
Sign in to join this conversation.
When one of your own rounds stops on a teammate, you now get visible feedback. You see a spark on their body, a separate mark in your side's colour, and one "Blocked by <name>" line. They still take no damage.
bun run checkpasses (857 tests) and/answers 200 when the app is started locally.src/client/world.ts: the early return inshootnow calls a newblocked()helper, but only when the shooter isworld.me. It does three things:- Spark: pushes an
impactwithsurface: falseat the hit point, so the renderer draws a spark but leaves no bullet hole hanging in the air after the teammate moves. A body has no surface normal to give, so the spark faces back along the shot. - Mark: pushes ahitmarkwith a new optionalfriendly: trueflag. Blood, damage, the damage log,hurt, view punch and the shooter's damage count are all left alone. - Message: says the "Blocked by" line through the samesay()every other message uses. If the same line is less thanBLOCKED_QUIET(1.5 s) old, its timestamp is refreshed instead. So a spray into someone's back is one line that stays up for the whole burst, not one line per bullet.src/client/hud.ts: a friendly mark is drawn as a plus (ticks on the axes) in the player's team colour. It is never the white or red diagonal ticks an enemy hit gets.src/client/earshot.ts/main.ts: thehitcue carriesfriendly, andmain.tsskipsaudio.hitfor it, so a blocked round makes no hit beep.audio.tsis untouched, as #110 asked, and the rewrite can use the flag.shotandtracer. A test pins that, so the RL arena loop does no extra work.README.md: one added line where hit feedback is described.Tests:
world.test.ts: the spark, mark and line all appear; five blocked rounds leave the teammate's health, armour, damage and punch, the damage log and the shooter's damage untouched; a ten-round spray gives one line and a later burst gives a new one; a bot-on-bot block pushes nothing extra.hud.test.ts: the friendly mark is the team-coloured plus with no enemy white.earshot.test.ts: thefriendlyflag reaches the sound cue.The HUD and earshot tests fail without the change. Without the change,
world.test.tsdoes not load at all, because it imports the newBLOCKED_QUIET.Not done: there is no sound of its own for a blocked round; that belongs to #110. I did not run
scripts/cost.ts, because the bot path only gains one comparison.To try it in the preview: start a round, walk behind a bot teammate and fire through them. You should see a spark on the teammate, a blue or gold plus at the crosshair, no beep, and "Blocked by <name>" once for the burst.
🤖 Generated with Claude Code
Closes #203