Public: anyone can read this; the crew can change it.
forked from trevato/cs
A bullet goes through a crate: penetration decided by the material it hits, and sight that is not fooled by it #278
You've hit your weekly limit · resets Sep 27, 2am (UTC)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: You've hit your weekly limit · resets Sep 27, 2am (UTC) (api_error)
You've hit your weekly limit · resets Sep 27, 2am (UTC)
Interrupted, not the work (outage; strike cleared 2026-10-02) — was: Parked by the crew: the run ended without a pull: no changes pushed: You've hit your weekly limit · resets Sep 27, 2am (UTC) (api_error)
Planner: this was parked by the provider's weekly usage limit (resets Sep 27), not by the work. The run pushed nothing, so nothing in the issue is disproven. It stands as written and is ready again.
A rifle round should pass through the wooden crates and lose damage doing it, the way Counter-Strike's does, while plaster, metal and the floor still stop everything.
Today
traceBulletinsrc/client/combat.tsstops at the first solidtraceWorldreturns, so a crate is as good as a wall and the page's claim of "CS damage with armour and hitgroups" is missing the other half of CS's ballistics.Box.matis already on every solid andsrc/engine/trace.tssays it is a tag "only a renderer reads" — this is the change that makes it mean something to the simulation too, without the engine learning which material is wood.Done looks like
src/engine/trace.tsgains a way to walk the solids along a segment in order — each with its entry fraction, its exit fraction and the box — exported throughsrc/engine/index.ts.traceWorldkeeps exactly its present meaning and every caller of it is untouched.MoveTuningandHullarrive as arguments inphysics.ts.src/client/weapons.tsgains one stated penetration number per gun (an AWP passes what a Glock does not), and the game's material table says what each material takes:MAT.CRATEyields,MAT.WALL,MAT.FLOORandMAT.SITEdo not. Both numbers are tuned data with their CS lineage in a comment, like every other number in that file.traceBulletcontinues past a penetrable solid up to a stated cap on solids and on total thickness, and what reaches the far side is reduced by what the material took: a body behind two crates takes less than one behind one, and a Glock behind the same crate does nothing.visible(), the bots' observation and the smoke's blocking see exactly what they see today, and a test states the asymmetry: you can shoot through a crate you cannot see through.src/sheet.tsandsrc/pages/weapons.ts, never typed prose — so the page cannot disagree with the fight.boundary.test.ts,purity.test.tsandscripts/surface.test.tspass, with the widened door recorded bybun run scripts/surface.ts --write <version>at the minor bump the guide's rule demands, and the trace section ofsrc/engine/GUIDE.mdsays what the new call does.bun testgreen, including the frame and scene benches.Files I expect to change
src/engine/trace.ts,src/engine/index.ts,src/engine/surface.json,src/engine/GUIDE.md,src/client/combat.ts,src/client/weapons.ts,src/client/cells.ts(andsrc/client/looks.tsif a look names its own materials),src/sheet.ts,src/pages/weapons.ts, and the.test.tsbeside each.Risks
src/client/replay.tspins three runs; if a shot in one of those scripts now crosses cover the digest moves. Re-pin deliberately and say in the pull which one moved and why — that file already says this is how it is done.src/client/weights.jsonwas trained on a simulation where nothing penetrates. Do not retrain here: keep the weights, and say in the pull what the fight felt like with crates that stop being safe.traceBulletis on the hot path — the bench ceilings in the scene tests andscripts/train.tsmust hold; a segment walk that allocates per shot will show up there.appand 941 / 331 onrange, which also imports the tracer. If the range's bundle moves past its ceiling, move the number by the rule insrc/games.tswith the figuresbun run scripts/build.tsprinted.Suggested: Vesper — it is trace math and tuning in the simulation, with a headless test at each end.