Public: anyone can read this; the crew can change it.

forked from trevato/cs

Take updates from trevato/cs #324

Merged opened this in answer to

Check · Review · Land · Live done — Landed and live in production.

Merged

`refs/following/main` (0644e74) is merged into this branch, and the resolution is the same one line for almost every file: **this side won, because the parent's side of each conflict is the game before the engine was pulled out of it.** The merge commit's tree is byte-identical to the branch's previous tree, deliberately; the second commit is the one thing in the parent's five new commits that thi…

shipped production is serving it deploy ae07c2d

opened this

refs/following/main (0644e74) is merged into this branch, and the resolution is the same one line for almost every file: this side won, because the parent's side of each conflict is the game before the engine was pulled out of it. The merge commit's tree is byte-identical to the branch's previous tree, deliberately; the second commit is the one thing in the parent's five new commits that this repository had genuinely missed.

The 64 conflicted files — ours. README.md, forge.json, package.json, tsconfig.json, bun.lock, scripts/{build,cost,train}.ts, all of src/client/, src/{compress,db,limit,result,server,tree,tty,who}.ts and their tests, src/pages/game.ts, src/rl/arena.ts, src/engine/math.test.ts. Every one is a file this tree rewrote for the extraction. The four modify/delete conflicts stay deleted: src/client/{input,physics,renderer,trace}.ts are src/engine/{controls,physics,renderer,trace}.ts here and two other games import them from there. AGENTS.md and src/engine/{learn,math,net}.ts were auto-merged through git's rename detection and put back by hand — that was similarity, not intent, and src/engine/surface.json is a contract that the door holds nothing unused.

The 66 files the parent added — dropped, not lost. Each is a concept already held here under this repository's name (radar.ts is client/minimap.ts, press.ts/loop.ts/fullscreen.ts are the engine's, bundle.ts is bundles.ts, tabs.ts is terminal/screen.ts, rounds.ts is client/{economy,bomb}.ts), or is written against the pre-extraction client. Two of the parent's five new commits land nowhere for the same reason: 62fc119 teaches its arena a second map, and src/rl/maps.ts here already trains on a hundred generated maps and grades on held-out ones; ccb8ba6/0644e74 are resume-a-match, which is already filed here as #291 and wants this tree's own boundary-validated snapshot rather than the parent's file.

What was taken: 53ce30c, the knife's back. fromBehind in src/client/weapons.ts is the one geometric test the rule rests on — the victim's yaw against the bearing to whoever is stabbing them, flat on the ground plane, 61.65° of arc from straight behind — and computeDamage swaps the base damage for backstabDamage and changes nothing else, so armour divides it by the same armorPenetration a bullet gets. applyHit takes the shooter's position last and defaults it to null: a hit with no direction is never a back. /weapons and the terminal's weapons tab both print the sentence, computed by backSaid in src/sheet.ts from the same two functions the fight uses, and a table whose knife has no backstabDamage prints no line at all. Twelve new tests (1290 → 1305 with the page and terminal ones); bun run test is green, /, /weapons and /range answer in 21 ms, 0.8 ms and 7 ms locally.

The parent's bot callouts (75febb4) are the one idea worth building and not worth copying, so they are filed as #323, waiting on the radio in #290 rather than growing a second message channel beside it.

To try it in the preview: open /weapons and read the line under the damage table, then start a match, take the knife and walk up behind a bot — one stab through kevlar and a helmet, and three of them if they turn round first.

Closes #313

🤖 Generated with Claude Code

Closes #313

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs