# Page 58 · THE KILL LIBRARY: the current brief
Rewritten 24 Oct 2026 after the user's full design Q&A. It replaces the old brief, which is archived in `_archive/` at the pages root; never use that file.

**Read before working:**
1. this brief;
2. `58k_PLAN.md` (what to build now, in dependency order);
3. `58k_ELEMENTS.md` (map element kinds);
4. `58k_TRAPS.md` (ideas already owned);
5. `58k_DEATHS.md` (overused / preferred deaths);
6. `58k_REALMS.md` (taken death realms);
7. `58k_KITS.md` (kit APIs; each kit's header is the full API);
8. the ledger `58k_LEDGER.md`, every line.

If anything older contradicts this brief, this brief wins.

## 0 · QUALITY NEVER GOES DOWN (the user, 24 Oct)
> "never compromise quality of animations, maximize token usage ... never compromise on quality, u can increase quality, but never decrease"

- No change, conversion, gore fallback, map adaptation, performance fix or deadline may lower an animation's quality, detail, length, gore at EXTREME, or craft. You may only raise it.
- Spend whatever tokens and time it takes.
- When something must adapt (another map, a lower gore level, a mirrored side), the adapted version must be as well crafted as the original.

## 1 · The user's standing rules
- **Absolute uniqueness.**
  - "never make any one of the kill across 750 or whatever the same". The same movement with a different gun counts as a duplicate.
  - No two kills share a core idea, a hook, an arc, a motion + death combination, or a final image.
  - Kits are raw material, customised on every use.
- **Every kill has a concept**, at the bar of the SMG realms (BELOW / NAME ON THE STONE / NOWHERE):
  - a one-line high concept;
  - a hook;
  - an arc;
  - a signature final image.
- **Gore** is brutal, wet and heavy at EXTREME, which is the default. Every kill still tells its story at every lower level (section 6).
- **The player is FARIS BASHA.**
  - His GOLD plate is always visible: never covered, clipped or dimmed, and never "YOU".
  - Pages show him as the killer. In the game, when he's the victim, the gold name is on the victim.
- **Style:** comic art style, cinematic. Movie references are welcome but never named.
- **Gold set pieces** appear only via `s.castInk` from a visible caster's HAND: the killer, or the victim for a defensive prop. Never from the gun. Hand props arrive in-story via `s.pullOut`.
- **Death realms** (the user: "death realm concepts are good"):
  - unique HORROR, dread, never fun;
  - 2-3 per 25-kill weapon, 1-2 per 15-kill weapon;
  - `s.deathCrack`, then their own crossing and return;
  - logged in `58k_REALMS.md`;
  - round-ending only.
- **Victim roles** are an occasional ingredient (~2-3 in 10), never a template.
- **Sound:** every kill has designed sound, with `s.snd` cues and beds. KIT-SOUND (A / B / C + the engine) and SOUND-2 (D-I) polish it.
- **Game-feasible:**
  - each weapon's REAL move set (melee is not guns);
  - the 2D 13-joint rig;
  - no page-only tricks.
  - Ask TF-KILLS (adc5a7c8610d6bef9) when unsure.
- **Deterministic:** scrub = play = fresh load. Seeded `s.rng` only, state on objects, never write sim state while drawing.
- **Rarity spread:** 4·6·7·5·3 / 2·4·4·3·2. Skins: CLASSIC common, TAPED rare, CAMO + CARTOON epic, ICE + NEON legendary, GOLD mythic.
- **Spectacle scales with rarity.** Targets per 25 / 15-kill page:
  - realms 2-3 / 1-2;
  - victim roles 5-6 / 3-4;
  - cast set pieces ≤10 / ≤6;
  - atmosphere 4-6 / 3-4;
  - rewind / replay 1-2 / 1;
  - death materials 2-3;
  - organ moments 3-5 / 2-3;
  - a breakable element as the star 2-4 / 1-2.

## 2 · THE LIBRARY: two kinds of kill animation
**A · BIG FILMS: round-ending only.** Every weapon page has:
- **NEW KILLS:** 25 per main weapon; 15 for energy / odd / melee / magic; fists 25.
- **SKIN KILLS:** 7 (none for fists).
- **Bonus kills** are welcome. Builders also remake the BEST of the game's old finisher kills for their weapon as new page kills, checked for uniqueness. The old library is shown on `38_finishers.html`; the data is in `38_fin_kills*.js`.
- **Multi-victim films:** only **1-2 per weapon**. A page that already has more keeps its best 1-2 and replaces the rest with single-victim kills.
- **Underwater:** at least **2 per weapon** made for The Deep (section 3).

**B · MID-ROUND SMALL KILLS: 5 per weapon** (fists too), in a MID-ROUND section on each page.
- Short and simple, **≤ 3 s**, but held to the same uniqueness, concept, gore and craft bar. Simple doesn't mean weak.
- No realms, no casts that change the map, no multi-victim.
- In the game they play inside a black-magic zone (section 4).

The whole library is ~1,100 kills: 933 big films plus 175 small kills, plus the remade finisher kills.

## 3 · MAPS: no kill depends on one map; kills use the map that's playing
The game has **18 playable arenas**:

| group | arenas |
|---|---|
| classic (SMALL maps) | Backyard, Spike Castle, Dusty Saloon, Monsoon Rooftops, Crate Canyon, The Cage |
| medium / big | Atrium, Military Base, Desert Forts, Sunken Lab, Temple Steps, Tower Block |
| event maps | Clock Tower, Kitchen Counter, Pinball Arcade, Pirate Ship, Retro Desktop, The Deep |

The hidden maps are ignored: Factory Line, Frost Peak, Laser Lab, Magma Works, Train Roof, Haunted Mansion, Deep Mine, Space Station, Traversal Lab, and the Bash Ring's rule map.

- **Kills are written against ELEMENT KINDS** (`58k_ELEMENTS.md`). In the game a kill uses the real element of that kind nearest the fight on whatever map is playing. For example, "the nearest heavy hanging thing" is the saloon chandelier, the castle spike ball, or a lamp or hook elsewhere.
- **If the map lacks a kind:** the kill's own prop cast from the hand where the story allows; otherwise the kill is skipped and OWED (it comes back later); otherwise the game's normal death. There is no cinematic stage. A gold copy of another map's architecture is never allowed.
- **Every kill def declares:**
  - `needs` (kinds + space);
  - `range` (`pointBlank` / `close` / `mid` / `far`: the real distances it works at). The bands are measured in FIGHTER HEIGHTS (FH), so pages and game agree: 1 FH = the fighter's standing height (`Fighter.H` = 0.74 game units; on a page, the rig's height at that plate's scale; the map export uses 88.49 page u per game m, so 1 FH = 65.5 u there). pointBlank ≤ 0.8 FH (≤ 1.5 m) · close 0.8-2.2 FH (1.5-4 m) · mid 2.2-5.5 FH (4-10 m) · far > 5.5 FH (> 10 m);
  - `hazard` where it applies, from the fixed set `fall` (DROP / GAP) / `liquid` (LIQUID) / `spikes` (SHARP) / `fire` (HOT) / `electric` (ELECTRIC) / `blast` (EXPLOSIVE) / `crush` (HANGING_HEAVY, MOVING, a falling heavy breakable) / `creature` (CREATURE). A new tag is added to this list first, then used;
  - `air` (true if it can start with someone airborne);
  - `victims` (1 / 2 / 3).
- **Either facing:** the engine mirrors the kill. Text, numbers and the gold name never mirror. The camera re-frames for the real element positions and the screen shape (iPad 4:3, tall phones).
- **Moving maps keep moving** during films (Clock Tower hands, Pirate Ship deck, Retro Desktop windows, Pinball flippers). The kill takes the elements as they are at the start.
- **The Deep (underwater all match):** kills that don't need ground or drops auto-adapt (floating bodies, slow drift, blood clouds). Kills that need ground or falls are skipped there. Plus at least 2 underwater kills per weapon.
- **Kitchen Counter:** tiny fighters in a giant kitchen. Its big props are elements too.
- **Each weapon keeps enough "works anywhere" kills** that feature-poor maps never make the rotation repetitive.
- **Pages get a MAP SWITCHER.** Every kill plays on all 18 arenas, from map data exported from the game (`58k_maps.json`). A page isn't done until every kill reads well, at full quality, on every arena it doesn't skip.

- **Plate crops: never draw the plate's original image yourself (A, 28 Oct, the pirate GPU stall).** The export plates are up to 8159 x 4088 (33 MP). Drawing a crop of `K.img(arena.img)` decodes, uploads and mip-builds the whole original mid-film (one crop cost 67-300 ms on GPU Chrome). For any piece of the plate (a cover patch, a clone, a cut slab, a see-through hole, an inset renderer), call **`K58.drawPlateRect(ctx, arena, wx, wy, ww, wh, dx, dy, dw, dh)`** (world rect -> dest rect). It draws from the plate pyramid (half / quarter images, 1024 px tiles: `img/maps/pyr/`, listed in `58k_pyr58.js`) and picks the level by the zoom. A global guard in 58k_cine.js already answers stray `drawImage(K.img(arena.img), ...)` calls from the pyramid, but write the call properly. After you change any plate in `img/maps/`, run `python3 _tools/plate_pyr.py`. Switch: `K58.PYR58 = false` restores the old path.

- **FACELESS (A, 28 Oct; the No.1 send-back reason): nothing may read as a face, a mask or a visor on a head. The motionQA gate FAILS it (STRICT since 28 Oct ~23:00).** A `face` FAIL: a solid world-space draw right across a standing body's head (a band entering and leaving it, >= 22 % of the head), anything covering over 40 % of a head, a limb-wide stroke (a severed arm, a pole) across or well into the head, a solid shape over the chin / lower face (>= 22 % of the chin zone: a plate, a bundle, a barrel pressed to the face), or its own front arm across the middle of its head while standing, for more than 2 frames; an object the body HOLDS (a gun at the cheek) only after 0.25 s and over 40 %. WARN only: 1-2 frame debris, small overlaps, marks drawn on the face, blood starting inside a head. Not counted: the body's own draw (hat, crown, name plate, its held gun), guns drawn by E40.drawWeapon (contact shots), translucent / glowing / blurred fx, grades and post overlays, multicam inserts, full-frame washes, a cloud bigger than the head (concealment), a popped head. Fix the staging, never the threshold. Run `bash _tools/render_slot.sh node _tools/motionqa.cjs <key>`; `--pre 'K58.REAL.QA.faceStrict=false'` shows the face items as warns.
- **No on-screen text during the action (house rule):** the shared lead's random word card (ZZAP / BANG ...) is OFF (`K58.WORDS58 = true` brings it back; a kill's own `def.lead.word` still shows).
- **Dropped weapons land flat:** any `type: 'custom'` fx with `collide` whose draw is a gun / hand prop (or `flat58: 1`) settles lying flat (`K58.FLAT58 = false` = the old spin-to-rest).

## 4 · HOW KILLS PLAY IN THE GAME
(This is the game design. Kill code goes into the game only after ALL pages are done AND the user approves them.)

**Big films** use the existing FINISHER's rules:
- **When:** only the round-ending KO. That's every round in 1v1, in free-for-all when two are left, in teams the last enemy, and in Deathmatch the match-winning kill.
- **Edge cases, online event, bots, teammates:** as the finisher already handles them. Teammates freeze in a cheer and fade back.
- **The finisher's kneel and auto-reach are retired.** Each film owns its opening from the real positions. `range` picks a film that fits the real distance; `air` films only if someone is airborne.
- **Special cases:**
  - a double KO is a draw, with no film;
  - an ability or spell kill plays the held weapon's film;
  - a hazard death plays a hazard-tagged film, otherwise the normal death;
  - off-map or no-body deaths get the normal death;
  - if no owned film fits, the normal death.
- **No text during the action.** After the film fully completes, the recap card (the kill's card and the victim line) pops beside the winner while his picked gloat plays (gloat = the edge column), then ROUND OVER.
- **A small SKIP button** sits top-right from the start, clear of the gold name and the top HUD band. Each watcher skips their own view, and the match moves on when the film ends on the host or every watcher has skipped. There are no replays.
- **Selection:** the rotation plays most epic first, then the next, repeating, over owned kills. The KILLS tab lets players switch individual kills off (all on by default).
- **Multi-victim films** play only on real multi-kills. There are 4 triggers, each with a switch:
  1. the 1.5 s chain window: the film waits only when another enemy is close and already hurt or under fire;
  2. weapon multi-hits;
  3. a multi-kill jumps the rotation queue;
  4. finish the wounded: ≤15% HP within reach.

  Each victim counts, plus a DOUBLE / TRIPLE KILL callout and a small coin / XP bonus. With 4+ victims, the 3-victim film plays and the rest die in the background. Teammates are never victims.

**Mid-round small kills:**
- **Randomly** 1 in 4 qualifying kills, at most 1 per player per round.
- **Only when nobody** (enemy or teammate) is near the pair, and **never on SMALL maps**.
- **A BLACK-MAGIC ZONE** surrounds the pair for the kill's ≤3 s. Everyone else sees only the magic, not the kill. Players who run at it bounce off, and bullets reflect away harmlessly. The user picks the look from 3 designs on a local page.
- A map event that would reach them counts as a threat. If the zone is switched off, a threat breaks the kill.
- A mid-round double kill plays normal deaths plus the callout.
- Shared-screen local play always skips the takeover.
- The killer can't act during the small kill and is safe in the zone. Afterwards he's wherever the kill left him, snapped to safe ground.

**Old content retires once replaced:**
- the 76 old finisher kills (the best remade);
- the old short skin kill effects, once that weapon's 7 page skin films are in.

## 5 · DESTRUCTION: map elements break, in play and in kills
- **Tiered:**
  - bullets break light things (glass, crates, planks, signs, bottles);
  - explosions and heavy melee break heavy things (pillars, doors, statues);
  - barrels set off chains.
  - Platforms only take tiny cosmetic damage that never affects play.
- **Debris is cosmetic** (no collision) and fades.
- **A fallen hazard stays dangerous** for the rest of the round (the dropped spike ball, a sparking lamp).
- **Between rounds** everything reassembles with a quick rewind (~0.6 s), and anyone in the way is nudged out.
- Kills break things with the same shared destruction states as normal play.

## 6 · GORE + BLOOD: one global setting, 6 levels, default EXTREME
| level | what shows |
|---|---|
| **EXTREME** (default) | everything: full blood, organs, brain, bones, dismemberment, pools that stay, screen splatter |
| VERY HIGH | all anatomy and dismemberment, ~80% blood, stains fade after a while, no screen splatter |
| HIGH | dismemberment stays; organs / brain become dark wounds; bones only in x-ray; ~60% blood |
| MEDIUM | no limbs come off (cuts are dark gashes); no organs or bones; ~40% blood; pools fade fast |
| LOW | small dark puffs only; no wounds; deaths read like knockouts |
| VERY LOW | no blood (sparks, dust, stars); bodies fade out in a puff |

- Every kill reads at every level. Each gore beat has a crafted non-gore version, as well made as the original (section 0).
- Death realms keep their horror atmosphere at every level; only their blood and body damage follow the slider.
- Online, the host's level (set when creating the room) applies to everyone, and the room card shows it as a GORE chip.
- Every page has a GORE switch to preview any level.

## 7 · SWITCHES
- One KILL SYSTEM panel in the game, saved between sessions. In multiplayer the switches are room settings chosen by the host.
- **The switches:**
  - the 4 multi-kill triggers;
  - mid-round small kills on / off;
  - the black-magic zone on / off (off means threats break the kill);
  - destruction on / off;
  - gore level;
  - reduce flashing (tones down strobe / blacklight / flash kills);
  - reduced motion.
- Pages mirror them.

## 8 · PROCESS
- **Build order:** dependency-first. The least-dependent work goes first, in parallel. Each builder works on one page at a time and finishes it fully crafted before the next. See `58k_PLAN.md`.
- **Ownership:**
  - Each builder writes only its own lane files.
  - Shared files are changed only by their owners, via working copy → `node --check` → atomic swap.
  - Probe after every edit: `node _tools/ix_probe.mjs 58k_<w>.html <w>`.
- **No git.** The coordinator commits.
- **The user views everything locally** from `file:///Users/basha/StickBrawl-v3/v4/feedback/36_index.html`. Every page, sheet and design page is linked from there.
- **Before reporting a page:**
  - 0 console errors, every kill plays to the end;
  - no overflow at 390 / 768 / 1440;
  - the gold plate is visible;
  - automated checks pass for every kill × every arena it doesn't skip × every gore level;
  - a contact sheet: trigger / poster / final kill image. Frames are crisp; title cards stay off bodies, the plate and the top HUD band.
- **The ledger:** one line per kill. Check core, hook, arc, motion and death against every line plus `58k_TRAPS.md`, `58k_DEATHS.md` and `58k_REALMS.md` before building. When two kills clash, the first built keeps the idea; the coordinator decides.
- **Disk:**
  - Scratch goes in `/Volumes/Workspace/Scratch/<lane>/`.
  - One headless Chrome at a time (`--headless=new`, private profile, deleted after). Never `open`.
  - Never pkill / killall.
- **Reporting:** report to the coordinator per batch, with names, one-line concepts, the probe result and the contact-sheet path.

## 9 · Rulings log (coordinator; read with the rest)
- (14:25) ALL AFTER means the KILL-CAM UI text (the KILL CAM stamp, the kill's title / name card, the victim line, rarity / caption cards) leaves the action and moves into the recap card. A kill's own story text STAYS where it's integral: dialogue / speech bubbles, comic sfx words, in-world text (signs, posters, headstones), and the concept overlay the kill is built on (a race HUD, counters, a weather TV, anatomy labels, the replay bug). Diegetic rewrites are welcome only when they're better.
- (14:25) One petrify per page at most. Cutscene beats (per-part scale, scripted blood) are fine on the 2D rig. A line of holes the body separates along belongs to smg.tear-along-the-dotted-line.
- (14:40) DESTRUCTION in films: round-ending films may break anything, platforms included (the round is over; the rewind restores everything before the next round). Mid-round small kills may break only light / heavy breakables, never platforms.
- (14:40) RESTING exemptions where the death IS the concept are allowed (e.g. THE BARBER's towel death mask, SHOTGUN WEDDING's heart in the bouquet). Each must look unlike every earlier use. Remakes of old finisher kills keep their idea but re-craft the death.
- (15:05) Hit words and comic sfx words (THUNDER!, CATCH!, CLANG!, KRUNCH, BONK) are story text and STAY, as the 14:25 ruling says. So do speech bubbles / dialogue the joke rests on, in-world text and the concept overlay (a scoreboard, a weather TV). Only the kill-cam UI cards move to the recap card. A mime / pictogram rewrite stays only where it is clearly BETTER than the original line; otherwise the original comes back.
- (15:05) Hazard tags are a fixed set (§3: fall / liquid / spikes / fire / electric / blast / crush / creature), mirroring the element kinds that kill. Range bands are fixed in fighter heights (§3).
- (15:05) "One petrify per page" counts the whole page, the MID-ROUND section included. Stone shells (a geode, a statue, sand) count as petrify. Two compressions on one page (implode to a point, crushed to a ball) must read unlike each other at a glance.
- (15:00) MID-ROUND kills are LEDGERED like big films: one line each, id `<w>.mid-<id>`, under a "MID-ROUND" sub-heading in the weapon's ledger section, with CORE / MOTION / CAMERA / DEATH and the length. Check every one against the whole ledger, 58k_TRAPS, 58k_DEATHS and 58k_REALMS BEFORE building, as for films; uniqueness covers all ~1,100 kills. Their deaths count in 58k_DEATHS.md.
- (15:35) MID-ROUND kills are SINGLE-victim only. A mid-round multi-kill plays normal deaths plus the DOUBLE / TRIPLE callout (KILL_SYSTEM §3), never a 2-victim small film.
- (15:45) REAL MAGAZINES (v4 WeaponDefs): a film may use at most ONE PICKUP of ammo (magazine + reserve as the pickup gives it). Each magazine change is a crafted reload beat inside the film (never cut, never a cheat count). Melee / magic / infinite-ammo weapons are unaffected. Sheets that still say "30 rounds" are corrected to the real numbers.
- (15:45) P2.1a RELEASED (needs no maps): builders may apply the non-map parts of their approved sheets now: real-gun reload beats, renames, death-family swaps, text restores. The map / element / Deep parts wait for P1.1.
- (17:30) THE USER: "testing and QA can be done later, focus on completing pages, with immense quality". From now on builders keep only: the page loads with 0 errors after edits, plus their own visual check of every kill (and a contact sheet for coordinator review). Determinism sweeps, perf runs, cross-arena QA sweeps and full gore-montage renders are PARKED until the pages are done; that time goes into crafting. Gore ladders are still CRAFTED for every kill (that's content, not testing). QA v2 / P1.2 are parked; KIT-REPLAY builds pages.
- (19:15) ZONE (the user): the killer + victim see the INSIDE view (the kill exactly as built, with a thin frame); others see only the OUTSIDE. The VEIL is the signature; other looks join after the user approves them, random per kill. The killer performs a proper crafted CASTING animation before the zone rises. Weapon pages show the INSIDE view = what the pair sees.
- (19:30) MID-ROUND × 10 (the user: "we should have more mid round in fists, smg, ar etc, just about 10 ... very well scripted and brutalistic ... u decide which weapons and how much"). The five most-used weapons, FISTS, PISTOL, SMG, AR and PUMP, get 10 mid-round kills each (5 more each, +25; the library is now 200 mid-round). Every other weapon stays at 5. The new ones are the best of the set: each fully SCRIPTED (beat-by-beat timing, camera, a distinct hook and a final image), BRUTAL at EXTREME, crafted at every gore level, ≤ 3 s, single victim, ledgered first, unique across all ~1,125 kills.
- (19:40) MID-ROUND COUNTS, FINAL (the user: "just add for all ... in the same ratio we have 25 to 15 of kill animation"). It replaces the 19:30 five-weapon rule. Mid-round per weapon follows the big-film ratio 25 : 15 = 10 : 6:
  - every 25-film weapon gets 10 mid-round kills: pistol, revolver, hand cannon, SMG, golden, AR, burst, sniper, bouncer, pump, sawed-off, minigun, flamer, fists, RPG, GL, cluster;
  - every 15-film weapon gets 6: laser, beam, shrink, gravflip, ice, glue, portal gun, sabre, knife, hammer, spear, pan, wing blade, thunder hammer, scythe, TK glove, TP dagger, time watch.
  - Total 17 × 10 + 18 × 6 = 278. The new ones meet the same bar: fully scripted, brutal at EXTREME, crafted at every gore level, ≤ 3 s, single victim, ledgered first, unique.
- (20:40) EXPORT HOMES (A's shell): a kill may be written with any of the 18 real arenas as its home (def.arena = the export id, e.g. 'pirate', 'tower'; coords: 'export'). New kills should prefer a real export home over the 4 old plates. Element-relation staging: def.spot58(X, mapId) (see 58k_KITS.md).
- (21:15) STAGE HOOK (A's shell): def.stage58(mapId, X, info) → { ok, missing, spot, note } lets a kill stage itself on any arena, or skip with the REAL missing kind on the OWED card (NO WALL, NO DROP...). Use it when porting element-bound kills (see 58k_KITS.md, next to spot58).
- (23:58) QUALITY BAR RAISED, NOTHING UNBUILT SHIPS BELOW IT (the user: "i am noticing quality of script and animation is dropping, its ok for what we build so far, but please make sure the upcoming non-built ones are not like this. Maximize token usage for best cinematic scripts and animations, maximum make use of available things, also very brutalistic, don't compromise on quality ... make use of every thing, also don't forget to build death realm animation in each weapon, also make use of map elements in some of them too"). For every kill NOT YET BUILT (films, skins and mid-round):
  - **Script first, in full**: a beat sheet with timed beats, staging, camera per beat (angle, lens feel, cuts, speed ramps), the hook, the arc and the final image, written before any code. No thin 3-beat scripts. A film is a short film, not a hit + a death.
  - **Use EVERYTHING available**: the kits (58k_KITS.md: body / world / fx / sound / water / cast / replay), map elements via spot58 / stage58, destruction tiers, atmosphere, weather, lighting changes, crowd / background life, the real move set. Pick what serves the concept, never a template; the weapon's own feel first.
  - **Brutal**: at EXTREME the death is the most violent, anatomically specific version of the concept (see the 23:58 GORE ruling).
  - **Death realms on EVERY weapon page**: 2-3 per 25-film weapon, 1-2 per 15-film weapon, each a full crafted horror sequence (crossing, the realm, the return). A page short of its count is not done.
  - **Map elements in SOME kills on every page** (about 3-6 per 25-film page, 2-4 per 15-film page), staged with stage58 so they play on every arena that has the kind (others OWED with the real missing kind).
  - The coordinator rejects any plan or film below this bar.
- (23:58) GORE, EVERY LEVEL CRAFTED PER KILL (the user: "i have seen some animation in extreme gore, but still it's like low gore. You should customize and implement every animation for every gore level"). Applies to EVERY kill, built ones included:
  - each kill's EXTREME must be unmistakably extreme: specific anatomy from the concept (organs, bone, brain, dismemberment where it fits), heavy arterial and pooled blood that stays, wet impacts, screen splatter, a lingering gore close-up on the final image. If XT could pass for HIGH, it fails.
  - each of the 6 levels is a deliberately crafted version of that kill (per §6), not a generic slider on the same frames; VH / H / M / L / VL each get their own beat substitutions.
  - KIT-BODY audits every built kill at EXTREME (and spot-checks VH / M / VL), with a list per page of kills whose XT reads low. Owners rework their own pages from that list in parallel with new work: one gore-fix batch alongside each new batch, so nothing stalls.
- (00:26) GORE CAM (A's shell): s.goreCam(t, at, {min, w | ws per level, dur, hold, dx, dy}) pushes into and holds a tracked wound point at gore >= min (lower levels keep the kill's own camera). It is the standard fix for the audit's "the death plays wide" finding; each kill picks its own wound, framing and timing (see 58k_KITS.md).
- (01:23) GORE CAM ON THE LAST FRAME: the XT close must be what the film ENDS on. A goreCam that expires or is overridden before the end (a close mid-film, then a pull-back) fails. Pattern: s.goreCam(t, at, { hold: len + 3 - t, ... }) placed AFTER every later camera call; skip any XT / VH pull-back. Check the last 1.6 s of every film before reporting.
- (01:41) DRAW-PASS STATE BUG (found by A on UH-OH): a camera / iris / effect that reads a body's position from the previous draw pass renders wrong on any frame drawn out of order (sheets, scrubbing). Positions used by camera and effects must be pure functions of time (or read from sim state), never from the last draw (the existing 'never write sim state while drawing' rule). Check your own kills when you touch them.
- (02:01) GORE CAM WIDTH: a held goreCam at w 175-240 still reads wide on a small body. XT finals hold at about w 110-150 on the gore itself, locked through the exit, and builders log the camera (target, w) on the final frame to prove it (B's camprobe). Concept images that ARE the frame (a billboard, a board) may stay wider.
- (02:59) ENGINE BUG FIXED (C found it; KIT-BODY fixed it at the source 05:20 in 58k_anatomy.js): s.cut on a LIVE (standing) body used to do nothing; it now cuts limbs on live bodies at HIGH and up (raw stump, flying limb, bone at VH / XT). The sweep across 545 kills found only AR WHITE FLAG affected (now fixed). A.liveCut(sc, b, cut, imp, o) is exposed for direct use.
- (06:15) LEDGER / SHARED FILE WRITES (an edit was lost: another writer saved a stale copy over it). In shared files (_tools/58k_LEDGER.md, 58k_TRAPS.md, 58k_REALMS.md, 58k_DEATHS.md, 58k_KITS.md, conv sheets others touch): change ONLY your own lines with exact in-place replacements (the Edit tool, or a script that re-reads the file immediately before writing and replaces one exact line). NEVER hold a copy and write the whole file back later; never regenerate the file from a stale copy. After writing, re-read your line to confirm it stuck.
- (06:31) LADDER CHECK: on every sheet I review, the bottom gore-level row must show six DIFFERENT endings. Identical frames that only dim across XT → VL are a slider ladder and fail (the user's 23:58 rule). Builders: render the six-level row and look at it before reporting.
- (06:33) RECOVERY: the ledger as it was before the 06:14 overwrite is saved at /Volumes/Workspace/Scratch/coord/LEDGER_0606_pre_overwrite.md (and 05:54 at LEDGER_0554.md). Compare your own lines against it and re-apply anything that reverted, in place.
- (06:56) HEADLESS CHROME HYGIENE (coordinator): the Mac's load hit 110-150 on 8 cores and long renders were timing out. Seven headless Chromes had been ORPHANED for 1-10 h (their node driver killed by a timeout, Chrome left rendering a page at 60 fps). Every render/probe script you own must take its Chrome down when it is killed: trap SIGTERM/SIGINT/SIGHUP + process.on('exit') -> chrome.kill() (as _tools/ix_film.mjs / ix_probe.mjs now do). Before you start a batch, check for your OWN leftovers (pgrep -fl 'user-data-dir=<your profile dir>') and kill only those PIDs. Never pkill/killall. One Chrome per builder at a time.
- (07:07) GORECAM min GATE (A's finding): s.goreCam(..., {min:4, final:true}) gives NO lock below VH, so the exit's camTo pulls the frame wide at H / M / L / VL. For a crafted ending at every level, use min:1 with a wider ws per level (A's revolver films). Contact sheets for review: a full strip (~12 frames) + the six-level final row, not just trigger / poster / final.
- (07:33) PROBE WATCHDOGS (coordinator): _tools/ix_probe.mjs now gives up after 180 s and ix_film.mjs after 600 s (a CDP call that never answered after a renderer crash held one gate open for 1 h 47 min). Builder render scripts should carry the same hard cap.
- (07:48) CHROME SENTRY (coordinator): signal handlers can't catch a SIGKILL of your node script, and orphans keep appearing (a tfclean-profile Chrome at 07:41). After spawning Chrome, also start a detached sentry: spawn('/bin/sh', ['-c', `while kill -0 ${process.pid} 2>/dev/null; do sleep 3; done; kill -9 ${chrome.pid} 2>/dev/null`], { detached: true, stdio: 'ignore' }).unref(); (as _tools/ix_film.mjs / ix_probe.mjs now do; tested: a SIGKILLed probe leaves no Chrome).
- (08:12) XT FACES ARE REAL (coordinator): at XT and VH the dead face is never the cartoon X / XX glyph (seen on gravflip HARDER THEY FALL, CAPSIZE and cluster THE MIME): an open glazed bloodshot eye, a burst eye, an empty socket, a split skull. The X glyph belongs to M / L / VL only. Lower levels: every level ends on its own close (goreCam min:1 + per-level ws); a wide shot with a few-pixel difference fails the ladder check.
- (08:13) LEAD-IN SWEEP (A's tool): layers run during the lead-in (scene t from -2.4 to 0) and JS % keeps the sign, so any (t*k) % 1 in a radius can go negative and throw (revolver CHAMBERS). Use a positive modulo. Sweep your page from film 0 through the lead-in at all six levels: node /Volumes/Workspace/Scratch/A/tools/playall.cjs 58k_<w>.html '<w>.*'.
- (11:11) USER RULING: TIME WATCH IS REMOVED FROM THE ENTIRE GAME (the user, 25 Oct ~11:10: 'Do not build time watch, we dont want that weapon, u should remove it from the entire game, since we already have spell like that'). No timewatch page, no timewatch kills, no timewatch skins or mids. The library is now 34 weapons (mids 272, not 278). Its plan is archived in _archive/timewatch_removed/. The game-side removal (weapon defs, roster, magic, finisher / skin-kill entries, labs, trailers, UI) is a cleanup drop.
- (11:25) ZONE (user 25 Oct): the veil's INSIDE view on the mid-round kills is now 'very very tiny' (a thin edge trace; 58k_zone.js drawInside bw 0.035, dim .08). Every zone look's inside view stays that tiny. New page-60 looks (THE GROVE, THE MANDALA, 3 horror) are being built by ZONE-LOOKS; only the user's picks join K58.ZONE_APPROVED.
- (12:25) ZONE INSIDE VIEW, NEW MODEL (user 25 Oct ~12:10, replaces the edge-trace inside band): the killer casts the shield fully and the killer and victim see it from OUTSIDE like everyone else; then the camera smoothly pushes THROUGH the shield's surface (each look's own crossing wipe), and INSIDE there is NOTHING (no band, no edge content); at the end the camera eases back out as it dissolves. Everyone else keeps the outside view. Implemented by ZONE-LOOKS (58k_zone.js + the zone section of 58k_cine.js).
- (12:52) USER PICKED THE ZONE LOOKS (25 Oct ~12:55): THE VEIL, THE OBSIDIAN SHELL, THE GROVE, THE MANDALA, THE HIDE, THE BONE CAGE. K58.ZONE_APPROVED = ['veil','shell','grove','mandala','hide','bonecage'], one per kill (rotated / seeded). Mid-round flow: cast + dome seen from outside, eased push through the surface (each look's cross()), clean inside, push back out.
- (15:14) NO PERMISSION PROMPTS (the user, 25 Oct: 'avoid operations that cause prompts, because I can't say yes if I'm outside; do things autonomously'). A prompt blocks you until the user is back. NEVER: rm -rf with a glob, a variable or a relative path ('rm -rf prof/*', 'rm -rf "$X"/*'), 'cd X && rm ...' compound deletes, sudo, writes outside the workspace / Scratch / your tmp, killall/pkill, git push to origin, or anything that edits settings. INSTEAD delete with python and literal absolute paths inside your own scratch dir: python3 -c "import shutil,glob; [shutil.rmtree(p, ignore_errors=True) for p in glob.glob('/Volumes/Workspace/Scratch/<you>/prof/*')]" (files: os.remove). Keep compound shell commands simple; if a command might need approval, find another way.
- (16:10) LADDER STANDARD, made explicit (coordinator, 25 Oct; enforced on L, C, N, K, B since 15:40): the six finals are six DIFFERENT pictures. Neighbouring levels must differ by more than blood amount and camera width: a different pose, prop state, framing subject or story beat. "Same pose + same framing + less blood" FAILS, and so does a width step (w120 → w152) on one composition. XT: unmistakably extreme, the close ON the last frame, a real face where the body is in shot (concept finals with no face must still read as extreme gore). VH: its own picture, never XT dimmed. H / M: each its own close (M: X glyph allowed, no gore). L / VL: bespoke non-lethal endings. A generic tail wrap that re-frames the same close per level is a floor, not a ladder. Built kills get crafted ladders in batches alongside each new batch (P2.6).
- (18:07) SIX NEW KIT DEATHS LIVE (KIT-BODY, 58k_bodyx.js; coordinator-approved), each a new OPEN family in 58k_DEATHS.md: s.magnetise(b, t, { at, dur }) MAGNETISED (iron drawn out through the skin) · s.mummify(b, t, { from, dur }) MUMMIFIED (linen + resin, never a hollow husk) · s.ink(b, t, { dur, stand }) INK (bleeds into a drawing) · s.fur(b, t, { hair, dur }) HAIR / FUR · s.chalk(b, t, { dur }) CHALK OUTLINE (fades into his own outline) · s.brine(b, t, { dur }) BRINE (pickled and shrivelled, never a salt statue). Each draws six different pictures by itself (LADDER STANDARD), takes o.pose: 'keep', and is on 58k_kit_body.html (section 04 + the ladder in 05). Cues matter.mag/mummy/ink/fur/chalk/brine.*. Also folded into the count: A's ten minigun families. NOTE (coordinator): MAGNETISED, INK and HAIR / FUR end on an empty frame at VERY LOW (the shell's VL fade); every kill using them gives VL its own crafted beat.
- (16:21) ZONE TOOLS (ZONE-LOOKS): K58.finalT(def) = the film time of a kill's last frame before its exit (for mids: the last frame before the zone push-out). Every sheet, ladder row, playall final and audit samples mid finals at K58.finalT(def), NEVER the film end (that is now the dome / dissolve). K58.MID_HOLD = 0.6: the push-out starts at max(kill end, final close reached + 0.6 s). Push flow: K58.ZONE_PUSH 0.36; rotation per weapon over K58.ZONE_APPROVED (veil, shell, grove, mandala, hide, bonecage).
- (16:31) MID LENGTH: mids stay <= 3 s scene length. Do NOT stretch a mid to protect its close from the zone exit: K58.MID_HOLD (0.6 s) already starts the push-out after the final close has held; sample with K58.finalT(def).
- (16:53) DEATH FAMILIES SATURATING (KIT-BODY 16:51): RESTING now INFLATE, HOLLOW, TENDONS, PETRIFY, FROSTBITE, CRYSTALS, CORRODE; only ROT, JIGSAW, SHRINK-WRAP, GOLD, WAX, STUFFING, GLITCH, IMPLODE are OPEN and near the line. New kills: check 58k_DEATHS.md first; a RESTING family needs a concept exemption. Six NEW kit deaths coming in 58k_bodyx.js (MAGNETISED, MUMMIFIED, INK, HAIR/FUR, CHALK OUTLINE, BRINE); prefer them once live.
- (17:36) WING BLADE REMOVED (the user, inbox 25 Oct 17:19: 'We dont need that wing blade weapon, u can remove that from the game too. Its very boring and not good'): no page, no kills; conv/wingblade.md + 58k_snd_wingblade.js archived to _archive/wingblade_removed/; out of ix_status.py, 36_index and the library; the game removal is cleanup drop CU08 (TF-RETIRE). The library is now 33 weapons (mids total 266).
- (18:01) GATE K4.0 LIFTED (the user, inbox 25 Oct 17:51): 'u have my approval to build thing on code as u want ... it should be exactly or even better, from the animations u build in pages, also think of all edge cases'. The port plan is the game repo's Docs/plan/v4/tf/KILL_PORT.md: P0 engine parity + the PARITY HARNESS (page stills vs game stills, six levels) by TF-PORT-ENGINE (tf-kills), P1 the kill system by TF-PORT-SYSTEM (tf-killsys), P2 the kills weapon by weapon from the pages (SMG first) once the harness passes. PAGE BUILDERS: nothing changes for you. Keep finishing pages at full quality; your lane files are the port's source code, so keep them clean and deterministic (seeded, no Date.now, no unbounded loops).
- (18:24) MID-ROUND ON SMALL MAPS + EVERYTHING HAS A SWITCH (the user, inbox 25 Oct): mids also play on the six SMALL maps (default ON, own switch); every kill-system feature gets its own switch (KILL_SYSTEM.md §1 + §8). Page builders: a mid may now be homed on a small map too.
- (20:23) s.ladderEnd, SIX LOCKED FINALS (ZONE-LOOKS, in the shell 58k_cine.js; F.ladderEnd stays as its alias): s.ladderEnd(t, { 5: e, 4: e, 3: e, 2: e, 1: e, 0: e }, o), e = { at: point | fn, w, t?, dur?, rot?, dx?, dy? } (or fn(g) -> e): the level playing locks ITS OWN final close (goreCam min 0, final: true) from e.t (default t) through the end and the exit; a level left out keeps the film's own camera; works with K58.finalT(def, { gore }) and K58.MID_HOLD (now 0.62). The lock is half the job: each level still needs its own crafted picture (§9 16:10).
      s.ladderEnd(5.2, {
        5: { at: () => V.at('neck'), w: 110 },                                    // XT: the open throat, tight
        4: { at: () => V.at('mid'), w: 130, rot: -0.03 },                         // VH: the chest wound
        3: { at: () => V.at('head'), w: 150, t: 5.4 },                            // H: the face as he drops
        2: { at: () => A.at('hF'), w: 170 }, 1: { at: () => V.at('hip'), w: 190 },  // M: the blade · L: the fall
        0: { at: () => [A.x + 30, FL - 50], w: 220 } });                          // VL: his shrug over the body
- (20:41) SHELL TOOLS (ZONE-LOOKS): K58.finalT(def, o) and K58.measure(def, o) now honour o.gore / o.sw / o.seed; K58.finalTCheck(def, levels) self-checks per level; s.ladderEnd(t, {5..0: {at, w, t?, dur?, rot?, dx?, dy?}}, o) locks each level's own final close (F.ladderEnd is an alias); K58.MID_HOLD is now 0.62. Sample every final at K58.finalT(def, {gore}). OUTSIDE view (outsiders) now drops all kill camera calls, screen overlays and lens/world blood (clipped to the shield).
- (22:40) PLATES ARE NO LONGER BITMAPS (A, the handcannon crash, coordinator-accepted): export / arena plates draw from their fully decoded <img> (ImageBitmaps in GPU canvases crashed Chrome's GPU process after ~25 thumbnails); they decode one at a time on demand (K58.plateReady(src) / K58.plateFor(def) / K58.mapReady(id); the page's thumbnail pump awaits the card's plate); s.arena.bmp58 / mips58 are now normally null, so always keep the K.img(A.img) fallback; K58.PLATE_BMP = true brings the old bitmap+mip path back under a 48 MP LRU budget. Still views pool their canvas (K58.offRelease), scratch canvases are shared by size, finished panel / insert sub-canvases are freed: never hold canvases per still in your kill code (key any offscreen by SIZE, not by canvas).
- (22:35) THE HORROR + BRUTALITY BAR (the user, inbox 25 Oct 22:31: "Quality of some of the latest build animations are very low. U r forgetting about our quality rule. Especially i seen the mini gun animation all are jst an average. No quality there, No brutuality there, No horroffic scripts there. Please dont be lazy on animations"). This is now a hard gate on EVERY kill, new and in progress:
  1. A HORRIFIC SCRIPT. Every film is a short horror piece, not a sketch: dread first (a build-up the victim can see coming, suspense, a wrongness in the room), escalation, and a payoff that makes the viewer flinch. A joke may season it (a line from Faris, one ironic beat), never carry it. A kill whose core is a gag (a sneeze, a cake, a phone on hold, a party game) FAILS unless the gag turns into something truly horrible.
  2. REAL BRUTALITY at EXTREME, specific to THIS weapon's power. Not "he falls over with some blood": the weapon's signature damage, shown. A minigun at twenty rounds a second takes a body apart: bisection at the waist held upright by the stream, limbs sawn off in sequence, the torso hollowed and the wall behind painted through him, the face stripped to the skull while the eyes still move. Every XT final is a held close on a horrific, specific image with a REAL dead face (never X), readable in one second.
  3. EVERY FRAME READS. No dark or empty finals, no payoff hidden behind props or slats, no tiny far-away body. If the horror happens off screen or in the dark, it FAILS.
  4. SCRIPT FIRST, CODE SECOND. Before coding any new kill, send the coordinator its script (hook, dread, escalation, the XT payoff image, the six-level ladder). It is approved or sent back BEFORE any code. Finished kills come back as the full strip + the six-level row, judged against this bar and the 16:10 ladder.
  5. Slates written before this ruling are re-checked against it: gag-cores get re-thought or replaced (uniqueness still applies; log replacements in the LEDGER + TRAPS).
- (22:50) SATURATED XT IMAGES (coordinator, from the first horror-bar scripts): two gore images are now so common they can no longer carry an XT final. (a) THE SEE-THROUGH HOLE (seeing the wall / floor / moon / another person through a hole in him) is already on smg.skin-classic, smg.peephole (tunnel through the head), the smg mids, pistol LAST ROUND (palm), pump COLANDER and sawedoff SAWN-OFF (lattice), pump HIS HEART. It may still appear as a passing gore detail, but no new XT may be built on "X seen through him". The only new owners are sawedoff TWINS (his brother seen through his chest: the seeing IS the concept). (b) THE BACK-FOLD (spine snapped backwards, folded over an edge / fence / slat) is on smg.xray-chain, pump.tripwire, fists.hook-hall, laser.skin-neon. Its one new owner is rpg TILT (folded heels-to-head in the pinball drain, bones out, the score over her). Everyone else: find your own image.
- (23:10) FACES PER LEVEL (coordinator, from F's fix): XT / VH a REAL dead face (d58W family: plain, frost, char, drowned...), never the X; H a real dead face or a dark one; M the X glyph allowed at most; L / VL are SURVIVAL endings, so the face reads ALIVE AND DAZED (K.FACES.dazed58: a turning spiral eye, a wobbling mouth, with the stars), never the X. A (shell owner) makes dazed58 the shell's default face at gore L / VL for every builder (F's per-builder wrapper retires once it lands); a kill that needs its own survival face sets it explicitly in its ladder. The game port reads this as data (the face per level), never as a runtime wrapper.
- (23:12) MESSAGING RULE (the user's 12-agent cap): agents SendMessage ONLY the coordinator ("main"). Never message another builder or kit agent directly: a message to a stopped agent restarts it and breaks the user's limit of 12 running agents. To route work to someone, write it to their file (e.g. _tools/ladder_lists/<owner>.md, TRAPS, the ledger) and tell the coordinator; the coordinator relays to running agents and records the rest in _tools/coord/AGENT_SLOTS.md for when they resume.
- (00:58) DAZED58 IS THE SHELL DEFAULT AT L / VL + THE WOUND HOOK (A, shell owner; per §9 23:10): K.FACES.dazed58 now lives in the shared face kit (58k_anatomy.js, next to the d58W family) and the engine's faceNow accessor returns it at gore LOW / VERY LOW wherever a kill left the engine face ('xx', or no face on a dead body). The per-level table, as data: K58.FACE_LEVELS = { 5: d58W, 4: d58W, 3: d58D, 2: xx, 1: dazed58, 0: dazed58 }. An explicit face a kill sets ('shock', 'pain', 'none', its own KO face) is never overridden: if a victim should read dazed at L / VL, do not leave a hit face ('shock' / 'pain') on the corpse; set nothing, 'xx' or 'dazed58'. F's by:'F' wrapper in 58k_slice.js is retired (F.dazeLow is a no-op). Verified: playall at L + VL on every page, 935 kills, 0 errors (kit_sound / kit_world are not library pages); 10 pages checked at K58.finalT: no X or real dead face left at L / VL. Also: the K58.woundStyle hook is in the shell's wound wrapper (58k_cine.js): when KIT-BODY's calibre style says takes(b, lv) the body draws without b.wounds and the style draws the holes; off until KIT-BODY turns its flag on.
- (01:18) PAGES FIRST, CODING PAUSED (the user, inbox #17, 26 Oct 01:16: "Also when building animation in code strict rule every kill should tested on every map arena. Also make sure every kill animation are triggarable at a point.. we dont want orphan animations. Any way first u complete the animation pages … pause coding part now. Focus on completing all animations"). (1) The game port (TF-PORT-ENGINE, TF-PORT-SYSTEM) is PAUSED; their slots go to page builders. (2) NO ORPHAN KILLS: every page kill must be reachable by the kill system's rules: its def's tags (range, hazard, air, victims, mid, deep, needs.kinds, skin) must be satisfiable in real play on at least one of the 18 arenas (map-element kills: the element exists on a real arena, or the stage58 cast stands in; multi-victim films: a real multi-kill trigger; realms / skins / mids: their own slots). A kill nobody can ever trigger is a bug. (3) EVERY KILL ON EVERY ARENA: each kill must play correctly on all 18 arenas (its own home, the stage58 staging, or a clean OWED fallback); the port will test every kill on every arena, so pages must not depend on one map.
- (01:40) DAZED58 OPTION A (coordinator): at gore LOW / VERY LOW a hit face ('shock' or 'pain') left on a DOWNED body (alive false) now also reads as dazed58 (the faceNow accessor in 58k_anatomy.js); 'none' and every custom face stay exactly as the kill set them, and a standing, alive victim keeps its face. 'none' at L / VL is checked per kill by eye (KIT-BODY lists it as 'faceless survival ending'; some are face down on purpose). Verified: playall at L + VL on every library page, 936 kills, 1 exception, and it is not from the faces: gravflip.skin-cartoon at LOW draws an ellipse with a negative radius at scene t 0.6 (58k_w_gravflip_5.js:325 headLike, the bump's inner ellipse r - 2.4 when the bump is small; G's file). 10 pages at K58.finalT: no X or real dead face at L / VL, and no 'shock' / 'pain' left on a downed victim. Also new in the shell: K58.scratchFor(ctx, slot) returns a full-size scratch canvas shared BY SIZE (slots 8+ are the kills'), for a kill's own offscreen pass instead of a WeakMap of canvases per view canvas.
- (02:00) BRUTCHECK IS MANDATORY + THE HORROR FLOOR IS LIVE (KIT-BODY, coordinator-approved kit lift; full spec in 58k_KITS.md HORROR FLOOR KIT LIFT). Before you send ANY sheet, run `K58.brutCheck(def)` on every XT you changed (or `K58.brutCheckPage()` in the page console) and fix every flag. TINY / FARIS / OFFFRAME mean push the camera in on the victim. DARK means light him. LIVEFACE means kill him on screen (die()) or paint a dead face. NOFACE means get his head in frame. UNMEASURED means check by eye and say so on the sheet. A sheet with an unexplained flag goes back. Also live: XT dead-face variants (eye forced out, jaw off, flayed skull, frost / burn / drown; about 1 kill in 4, never over a crafted face), calibre wounds by weapon (craters, exit blowouts, a hero wound with a broken rib or bone face inside, runs that stop at the floor), readable ink at small sizes, and gravity blood (ledge pours, hanging drips). Kit page demos: HORROR FLOOR · XT DEAD FACES / CALIBRE WOUNDS.
- (01:50) CODING RESTARTS IN PARALLEL (the user, inbox #19, 26 Oct 01:38): "start building it in code now ... start with smg ... 4-5 agents for this, 4-5 agents for pages". The port goes ONE WEAPON AT A TIME (SMG first) with that weapon's kills ported in PARALLEL; every port is "even better never lesser", pixel perfect, always brutal, passes its edge cases, works on EVERY MAP it can play on, and is TRIGGERABLE. FIRST a KILL TEST MODE in the game (practice mode or its own mode): the user picks a weapon and one of its kill animations, and the game sets up a clear scenario where exactly that kill triggers, so the user can test each kill as it lands. Pages keep going in parallel: page builders' SMG work is now on the port's critical path (B's SMG films, E's 10 SMG mids + 4 films, C's smg_c): finish those first. Slots: 4 code, 8 page-side.
- (02:58) ZONE HUD (A, shell; coordinator-approved, located by ZONE-LOOKS): in a mid-round kill the killer's and victim's views now drop the gameplay HUD to nothing over the 0.36 s push-in (it was only dimmed to 38 %, so the FIRE button sat on the wounds) and bring it back over the push-out; an OUTSIDE view keeps its HUD exactly as before. Two lines in 58k_cine.js: K58.film stores sc.film58.zPush, and hudA58()'s mid branch multiplies in the push (every HUD consumer goes through hudA58: the game HUD, the YOU ring / gold stamp, the plate's chevron). The gold FARIS BASHA plate itself still never dims. Verified: hudA58 through smg.mid-pew-pew inside 1.00 > 0.38 > 0 at the kill and the final > back up on the exit; outside stays 0.38; reduced motion the same as inside; playall on the smg and pistol mids at all six levels 0 errors; PEW PEW and REBOUND XT finals have no HUD.

- (26 Oct 03:00, coordinator) HAZARD-DEATH RULING: option (a) for every hazard film whose death never happens where it stages (sniper.the-guide-line, sniper.sling, spear.the-narrow-way): re-stage it as a needs.kinds film. Drop the hazard tag, put the element into needs.kinds, and let the film cause the death itself, so it plays on a normal K.O. on every arena that has the element. No kill waits for a game hazard that does not exist.

- (26 Oct 03:11, coordinator) LENGTH CAP 15 s, HOW TO TRIM: a kill over 15 s gets under the cap by CUTTING redundant beats (a duplicate wide, an over-long hold, a repeated walk), never by a global time-scale squeeze. A speed-up makes the walks and holds look hurried and kills the dread. Over-cap kills on 26 Oct: handcannon.trophy-room 16.6, handcannon.proving-ground 15.4, speedsabre.skin-gold 16.2, portalgun.crash-test 15.1, revolver.skin-gold 16.7.
- (03:40) THE LOST-VICTIM GUARD (A, shell; trigger audit Part 2): on an AWAY arena (map58 set, not the kill's home) at gore XT / VH / H, in the last second before the exit, if fewer than 30 % of the victims' points are on screen (or under 60 % while the home arena holds 40 points more) AND the same kill at the same level on its home arena does hold him (a cached home probe: a final that is away from the body by design at home stays), AND he has settled (a body still falling off the map is never chased) AND aiming at his chest really brings him into view after the camera clamp, the final camera eases (0.45 s, no snap, the level's zoom kept) onto his settled chest. Never: the home arena, L / VL, a victim hidden or b.gone58. Opt-outs for designed away-from-victim finals: s.ladderEnd's e.free = true (per level), def.free58 = true | { lv: true }, s.free58 = 1 in a build, or K58.REAIM58.free[key] (data in the shell, for kills whose files the shell owner should not touch). Switch: K58.REAIM58 = { on, min }. Verified on the 57 review pairs (guard off vs on, pixel compare at the XT final): 4 REAL pairs now hold the victim (hammer.skimming-stone@kitchen 0 > 1, pistol.firing-squad@pinball 0 > 0.69, sawedoff.floorboard@canyon 0 > 1, tpdagger.look-out@temple 0.54 > 0.92); every OK pair and all 3 DESIGN? frames are byte-identical (shrink.skin-camo@canyon differs by 33 px with the guard idle: the kill's own frame-to-frame noise); a home sample of 15 finals is byte-identical. The other REAL pairs are not away-arena losses: their HOME final already loses the victim the same way (pump.cuffed, pump.banana-peel x2, scythe.carousel x2, glue.glue-trap, revolver.mid-holster-to-holster, cluster.mid-drop-the-beat's zone camera, fists.the-plan / the-brink falling off the map, spear.fended-off sunk, beam.portal through the portal, ar.muzzle-climb a black void with a build error): those are per-kill fixes for their owners.

- (26 Oct 03:42, coordinator) TIMESTAMPS: every time written into the brief, traps, ledger or tracker comes from `date '+%H:%M'` at the moment of writing, never from memory or an estimate (future-dated lines were found and corrected).

- (26 Oct 03:52, coordinator) VISORS, MASKS, HELMETS AT XT: a victim whose headgear covers the face (visor, mask, full helmet, blindfold) loses it in the kill, so the real dead face reads at XT and VH. Let it land nearby as a prop. A covered face fails the FACES rule. Seen today on smg.moonlight and spear.the-narrow-way.

- (26 Oct 04:08, coordinator) XT VARIETY PER WEAPON: across one weapon's set, at most TWO XT finals may rest on a lone severed head, and at most TWO may use the same framing (e.g. "close at Faris's boot"). Read a weapon's XT list side by side before building; vary the composition, not just the wound.

- (26 Oct 04:16, GUN-SFX) PAGE-61 WEAPON SOUNDS IN THE KILL LIBRARY (the user's #23): the fire / shot ids of the 21 picked weapons now play the user's page-61 sounds. Same ids, same file names, same variant count; only the clip changed. Each new file is mastered the page way (44.1 kHz mono mp3 96k) at the max-momentary loudness of the file it replaced (within ±0.2 dB), so no film's mix moved. Loops keep their exact length. The base64 banks, manifest.json / .js, lib_<name>.json / .js lens and the D.HIT table in 58k_snd_def.js are updated to match. Ids: gun.pistol, pistol.shot, gun.revolver, revolver.shot, gun.handcannon, handcannon.shot, golden.shot, gun.smg, gun.rifle, ar.shot, ar.auto, gun.sniper, sniper.shot, gun.minigun, minigun.fire, gun.flamer, flamer.roar, flamer.ignite, flamer.stop, gun.gl, gl.thunk, cluster.lob, gun.rpg, rpg.ignite, rpg.blast (the RPG's IMPACT), gun.ice, gun.glue, gun.shrink, fist.hit + fists.jab (the punch), knife.blink, sabre.dash, sabre.schwing, spear.pierce (the javelin stab), pan.bong (the pan's head bonk).
  - Stay as they are: gun.rocket (the rocket's flight loop, not the launch); minigun.spin / minigun.down (the films' own spin takes; the idle cue loops inside the long take; gun.minigun_up / _down already are the game's spin clips); shrink.zap (the shrink effect); world.pan and hammer.slam (shared with other weapons).
  - The 12 kept weapons keep their sound. The burst rifle's shot was ar.shot at 1.07x, so it now plays today's take under its own id, burst.arshot (fragment sfx/lib_gun61_kept). 58k_snd_burst.js points its cue at it. Pistol / punch ids heard on other weapons' pages (a victim's pistol, a fist landing) are those sounds, so they are new.
  - Rebuilding one of these libs from its recipe (killpages_sfx.py --lib) brings the old takes back. Re-run /Volumes/Workspace/Scratch/gunsfx/tools/page_banks.py --apply after any rebuild. Backups of every touched file: /Volumes/Workspace/Scratch/gunsfx/page_backup/.
  - The game's films play the same clips from one source (Weapons/GunSfx.cs + Core/KillCineGunSfx.cs, tf-gunsfx; Docs/plan/v4/AUDIO_SFX61.md).
  - Probed (headless): 22 weapon pages plus 58k_kit_sound, 0 console errors; every re-pointed id decodes at its manifest length. 58k_gl.html was not on disk at probe time; its ids decode on the cluster and kit pages.

- (26 Oct 04:22, coordinator) WHO IS IN THE FINAL: the victim is the subject of every final from XT down to M (X eyes allowed at M). Faris is never the subject: at most an edge, a boot or a shadow. L shows the victim out cold. VL may be an alive gag ending but keeps the victim in frame. An empty-prop final (a lone visor, cap or pit) is allowed only at VL, and only when it tells the alive ending.

- (26 Oct 04:59, coordinator) NO CHILDREN, NO SUICIDE IMAGERY: no child figures anywhere in a kill (no ghost children, small hands or child victims); use a mascot, a doll or nothing. No self-inflicted gun-to-head or under-the-chin shots framed as suicide. A victim hurt by his own weapon must read as an accident or the killer's trick (a burst barrel, a ricochet), never as a man ending himself.

- (26 Oct 07:29, coordinator) CAMERA POSITION, NOT ZOOM: the six finals come from different camera positions (above, low at the face, from the feet, behind the head, three-quarter high, side). A zoom, tilt or exposure change of the same side view is NOT a new picture. If two neighbouring levels are side views of the body lying the same way, change one. Check this before sending any ladder.

- (26 Oct 07:31, coordinator) CAMERA POSITION, CLARIFIED (the engine is a flat 2D side view: the final lock can pan, zoom and roll only): a different picture per level is made with TWO OR MORE of these, never zoom alone: (1) re-stage the body into a different final pose (back vs front, curled, propped, slumped, head left vs right); (2) a distinct roll (dutch up to about 15 degrees); (3) a different frame placement and foreground (feet cut big at the near edge for "from the feet", the back of the head huge in a corner for "behind the head"); (4) a hand-drawn insert in the page style for a true top-down or other impossible angle.
- (26 Oct 08:26, coordinator) MIDS AND THE CAMERA RULE: mid-round kills play on the gameplay camera, so they are exempt from the 07:29 different-picture rule for XT, VH and H. The FACES rule (real dead face at XT and VH, headgear off) and the WHO IS IN THE FINAL rule still apply in full, and each level needs its own pose.
- (11:29) coordinator: H FORMULA CAP: 'the knocked-off headgear (visor / cap / beanie / headband / blindfold) as the near foreground prop, the victim's face beyond' counts as ONE framing; max 2 per weapon like any framing (§9 04:08). Pistol hit 4 (FIRING SQUAD, CROWD CONTROL, THE JAM, VOODOO POSTER): VOODOO + CROWD CONTROL re-stage. Headgear can lie IN the frame as a prop; it just can't be the same composition every time.
- (26 Oct 11:49, coordinator) PERFORMANCE IN GAME (the user, 26 Oct: "also dont forget to optimize performance too when creating animations ... in game"): every ported kill passes a PERF gate beside visual parity: 0 B GC per frame in steady state, film CPU and draw calls inside ENGINE's calibrated budgets on -perfslow, no hitch at film start (pre-warm), assets loaded for the kill and released after, and the match outside the zone keeps its frame rate. Optimize the implementation (pooling, batching, caching, pre-warm); NEVER cut or simplify what the page shows. PAGE BUILDERS: keep live particle / shape counts portable (reuse pools, no thousands of live particles for one beat) so the port never has to choose between look and speed.
- (26 Oct 12:14, coordinator) OFFICE-HOURS LOAD (09:00-18:00, the user works on this Mac): run every heavy local job at low priority: playall / render / sheet scripts / headless Chrome under `nice -n 15`, Unity via locked.sh with `nice -n 10` (already the lab pattern). At most ONE whole-library playall at a time (announce it in your report). Prefer the VM for long lab runs.
- (26 Oct 12:20, coordinator) FILM COLOUR (DARK VIVID) RULING from ENGINE's measured runs: films keep the game's DARK VIVID grade on the ARENA (the page plates are painted to look graded: post-on arena sat 0.58 vs page 0.60), while the film's own colours (bodies, blood, fx, faces, props, live fighters) are pre-compensated through the inverse world LUT so they land on the page's colours (BODY 0.3 -> ~0.65+). Cross-faded over the trigger / exit; behind a KillCine flag, default ON after the parity re-run.
- (26 Oct 13:54, coordinator) UNDERWATER LENS: 58k_anatomy.js xtLift / xtBeat no longer throw XT lens drops when the scene is underwater (uw58: s.underwater or arena.underwater58); blood there is clouds. Kit-level, so every deep kill is covered (A's per-call xt:false stays harmless). playall beam/laser deep + land kills clean.
- (26 Oct 14:46, coordinator) FILM BLEND + INK RULINGS (ENGINE): (1) the film pen blends translucent / additive paint like the page (sRGB-equivalent via the maps team's alpha compensation), behind blend=srgb|linear, default srgb after the same-frame A/B proves it closer; (2) film bodies draw with the page's INK black, cross-faded from the map theme's ink over the trigger's 0.25 s (with the grade comp) and back over the exit's 0.45 s; gameplay keeps theme ink.
- (26 Oct 15:13, coordinator) NO HANGING BY THE NECK (extends 04:59): no noose, cord, net, rope or bar holding a body up by the neck, and no gallows staging, at any level. It reads as suicide imagery. Ankle snares, hooks through the jaw and limbs pinned are fine. Applied today: fists SLAM DUNK (rim crushes the ribcage), shrink snap H (bar pins the throat on the floor), gravflip mid-rigged (ankle snare + swing).
- (26 Oct 15:52, coordinator) PERFORMANCE OVER PARITY (the user, playing the merged build: "optimize every animations, its feels so laggy" + "dont put anything that consume resources too much"). In-game performance is now the TOP priority and OVERRIDES the 'never cut the look' clause of the 11:55 perf rule. Hard film budgets: p95 <= 16.7 ms, max <= 33 ms, begin <= 16.7 ms, 0 B GC. A FILM QUALITY switch (default balanced) caps particles / decals / ribbons and simplifies the heaviest effects to hold budget. PAGE BUILDERS: keep new kills cheap from the start: no thousand-particle beats, no many-ribbon/many-layer effects where a few strong shapes read the same; prefer one bold image over dense detail. Renders on this Mac: nice -n 20, one headless Chrome at a time, while the user plays.
- (26 Oct 15:56, coordinator) ALL DEVICES SMOOTH (the user: "our game is for all low,medium,high end devices, so remember that, evryone should play smoothly, so that much optimization we need"). Kill films scale with the game's existing Perf.Tier (LOW/MED/HIGH from Settings.Quality / DefaultQuality) and the adaptive Governor (Perf.Down): FILM QUALITY = AUTO by default; LOW minimal (baked blood, no runtime anatomy re-cut, small caps, simplified sprays/ribbons), MED balanced, HIGH = full page look. Targets: smooth 60 fps MED/HIGH, never below a stable 30 on LOW, no hitches; measured with -perfslow. Page builders: every kill must still READ on LOW (the story beats and the dead face carry it, not particle density).
- (16:07, coordinator) VH/H NOT A TEMPLATE: 'rolled, low past X up to the dead face' has become the default VH. Max 2 rolled-low VHs per batch of 6 (and per weapon's dead set, max 2 alike, as in XT VARIETY). Give the rest their own idea: overhead/insert, reflection, through-object, silhouette, floor POV, profile close. The same goes for H ('on his side, d58D, lit' repeating). Mids are exempt from the different-picture rule, not from variety.
- (18:39, USER) PORT GATE: 'when porting animation, u should test it very very well, well optmize, also check it on every arena, check for any unrealism or glitch or looking like bug thing, if everyon of these pass then only it get passed, so dont be hurry to start next weapone, optimize what u build'. Full checklist: _tools/PORT_GATE.md (parity 6 levels, perf per tier on the Mac player, all 18 arenas + zone, the look frame by frame for anything bug-like, edge cases, coordinator's look). One red = not passed; no next weapon until every kill of the current weapon has passed.
- (18:56, coordinator) NO GROIN WOUNDS: no wound, hit or entry point placed at the groin on any victim (it can read as sexual violence). Hips, thighs and belly are fine. HEADPHONES count as headgear: off at XT/VH like visors and hats, clear of the eyes elsewhere.
- (19:02, coordinator) RENDER SLOTS: every headless-Chrome render on the Mac runs through _tools/render_slot.sh (3 shared slots, nice 20); one Chrome per agent at most. Mac load hit 60-76 with 8 page agents + a Unity build (mostly SSD/exFAT IO).
- (19:04, coordinator) LENGTH CAP, MEASURED: the 15.0 s cap is on the FILM THE PLAYER SEES, from the film's first frame (the kill cam takes over, SKIP appears) to the exit (end of the dissolve or the zone push-out). The page's gameplay lead-in before the trigger does NOT count. Each owner checks their own accepted films with this measure and trims (by cutting beats, never by speed) any still over 15.0; note 'film N.N s (trigger->exit)' in the ledger line.

- (26 Oct 19:09, GUN-SFX) THE USER'S SPLIT (26 Oct ~18:38): ELEVEN weapons are back on their old sounds in the kill library too. Their ids' original files, lens, base64 bank entries and D.HIT entries are restored from /Volumes/Workspace/Scratch/gunsfx/page_backup/ (tool: Scratch/gunsfx/tools/page_restore.py). The weapons: pistol, revolver, hand cannon, SMG, minigun, flamethrower, grenade launcher, cluster, fists, spear, frying pan. The ids (35 files): gun.pistol, pistol.shot, gun.revolver, revolver.shot, gun.handcannon, handcannon.shot, gun.smg, gun.minigun, minigun.fire, gun.flamer, flamer.roar, flamer.ignite, flamer.stop, gun.gl, gl.thunk, cluster.lob, fist.hit, fists.jab, spear.pierce, pan.bong.
  - The TEN kept weapons stay on page 61 (25 files): golden.shot, gun.rifle, ar.shot, ar.auto, gun.sniper, sniper.shot, gun.rpg, rpg.ignite, rpg.blast, gun.ice, gun.glue, gun.shrink, knife.blink, sabre.dash, sabre.schwing. burst.arshot (lib_gun61_kept) stays.
  - page_banks.py --apply would re-bank all 21 again. After a library rebuild, run it and then page_restore.py --apply.
  - Checked (headless, render slots): the pistol, revolver, hand cannon, SMG, minigun, flamer, cluster, fists and spear pages each decode every id at its manifest length and render their first two kills through SND.render (no NaN, peaks 0.81-0.84), 0 console errors. The kit page decodes all 36 ids. There are no 58k_gl / 58k_pan pages; their ids decode on the kit page.
- (19:15, coordinator) RENDER PAUSE: a perf lab may pause every page render for a clean measurement by writing its PID to /Volumes/Workspace/Scratch/coord/render_slots/PAUSE (render_slot.sh waits while that PID lives). Perf passes only, removed right after.
- (19:30, coordinator) PAGE PERF TOOLS (MINIGUN): /Volumes/Workspace/Scratch/minigun/tools/perf.cjs (particles per frame + render ms per film), fxsrc.cjs (which code spawns a particle type), layerprof.cjs (ms per layer), cpuprof.cjs (Chrome CPU profile). Page builders: put peak/mean live particles from perf.cjs on every new kill's sheet; aim for mean <= ~20 and peak <= ~100 unless a deliberate set piece. Known shell gotcha: smoke 0 on a muzzle means 3 puffs, so pass an explicit cadence. Run all of it through render_slot.sh.
- (19:59, coordinator) RENDER SLOTS now 2 by default (load 60-79 at 19:58, mostly SSD IO).
- (20:10, coordinator) ZSH GOTCHA (bit 3 agents today): in zsh, "$var:a…", "$var:u…", "$var:s…", "$var:r…", "$h:refs" apply PATH MODIFIERS (:a absolute, :u upper, :r root, :s subst...). Always write ${var} before a colon in shell strings (scenario ids, refspecs, paths).
- (20:20, coordinator) FILM QUALITY ONLINE RULING: every device plays its OWN film quality (no lowest-level drag in mixed lobbies). Cosmetic gore-detail drift between clients is accepted. Deaths, timeline, cuts, ladder level, final pose and every end-of-film world state that persists (corpses, debris, decals, pickups) must be identical; they never come from trimmable draws. Room switch 'same film quality for everyone' (default OFF) via KillCineQuality.RoomLevel.
- (20:31, coordinator) LENGTH CAP, REFINED (supersedes the 19:04 measure): the 15.0 s cap runs from the trigger (the kill cam takes over, SKIP appears; the 0.85 s trigger freeze counts) to the scene's last held final (ladderEnd + the 0.6 s hold). The kill system's round-end UI after that (the recap card + ROUND OVER, K58.EXIT ~3.9 s) is NOT counted: it's the same for every film and belongs to the round-end flow. For mids the zone push-out isn't counted either. Ledger: 'film N.N s (trigger->final)'. Films already trimmed under the older measure stay as they are.
- (20:51, coordinator) NO LOOK-ALIKES (store release): no kill, skin, prop or realm may look like a known film, game, cartoon or toy character or brand (costume + colour combos included, e.g. a yellow-plaid cowboy pull-string doll). Generic ideas (a pull-string doll, a gorgon, Midas) are fine in an ORIGINAL design.
- (22:14, coordinator) DEAD BODIES ARE STILL: no organ, chest or limb keeps moving after death (e.g. open-cavity lungs breathing forever). Breath/beat decay to 0 within ~0.8 s of death (a last exhale), then still. It reads as a bug and costs frames. Opt-out only where the concept needs it.
- (22:50, coordinator) PROBES TOO: lib_probe.mjs / probe / brutCheck / playall runs launch headless Chrome as well; run them through _tools/render_slot.sh like renders (the Mac hit load 141 at 22:47 with several un-slotted probes at once).
- COSMETICS IN FILMS (coordinator 26 Oct 23:24): in a ported film the fighters wear their real gameplay cosmetics, drawn with the SAME art as in the match, so nothing pops at the trigger or the hand-off. Page-vs-game headgear differences are masked in the parity harness (reported as 'cosmetic (masked)'), never fixed toward the page's cast drawings; a check compares the fighter's cosmetic draw just before the trigger and just after hand-off. FILM LOOK (speed lines, backdrop plates, HUD pills) follows the page; SMG-2 owns that lane, ENGINE merges it. SCENE TIME is a double (or exact ticks), never a float sum, so span edges match the page.
- ARENA ART IN FILMS (coordinator 27 Oct 00:01): a ported film keeps the REAL arena art (no pop at the cut or hand-off) and matches only the page's grade on top (darkening, blue grade, blur, vignette). Where a page's arena plate is different ART from the game's arena, the PAGE is fixed to follow the game's real arena art; the parity harness masks arena-art regions like cosmetics. Film HUD (SKIP pill, gold plate underline, captions, word pills) follows the page; each file's owner edits it (SKIP: SYSTEM; HudGoldName: SMG-2 since POLISH is inactive).
- PARITY GATE + FILM GRADE (coordinator 27 Oct 00:45): see PORT_GATE §1b/§1c. Parity passes on exact poses (≤2 u), exact rng and blood counts, FILM-region SSIM ≥ 0.50 and my look (cosmetics and arena reported, not gated). Page arena plates are re-exported from the current v4 arenas; page and game share ONE film grade (darken + cool tint, eased in over the freeze and out over the hand-off).
- SELF-CHECK BEFORE SENDING A SHEET (coordinator 27 Oct 00:46, the faults that keep coming back): (1) H shows a visible wound (an H with no wound reads as asleep); (2) no flat see-through discs or sheets for welts, soaks, bruises or stains: real shapes with a dark core, an irregular edge and a highlight, clipped to the body or cloth; (3) no floating head: a close-up keeps a neck/shoulder line, the ground or the hair as a cue; (4) wounds never read as a mouth with teeth or a cog: ribs are curved snapped arcs, holes are ragged, and nothing sits right under the chin where a mouth would be; (5) the six finals are six different PICTURES (not one pose at three distances; L and VL never the same seated shot); (6) the face reads at XT and VH (no silhouette, no face-less VH); (7) no thin rectangle or KO border in mids; (8) text and labels never mirrored.
- THE 8+ PROGRAM (the user, 27 Oct 01:50): every kill to 8 or above on BRUTALITY, CINEMATIC, SCRIPT and ANIMATION DETAIL. Full text: _tools/8PLUS_PROGRAM.md. Extreme gore at XT scaled down by level, detailed ballistic hit FX (never a plain circle hole), detailed anatomy and faces, pure-cinema camera (split screens / PiP / speed ramps as INGREDIENTS at about 1-3 in 10 kills, never everywhere), scripts with a hook and a payoff. Shared kits: A = gore and wound detail v2 + ballistic hit FX v2; E = CINEMA KIT v2. Upgrade scripts go to the coordinator in batches of 6 before building. Scoring for page 62 has stopped.
- (27 Oct 05:20, GUN-SFX) FLESH-IMPACT SOUNDS IN THE KILL LIBRARY (for KILLPAGES-A's hit FX, contract agreed by message): a new library fragment `sfx/lib_hitfx` (.js + .json + lib_hitfx/*.mp3, listed in sfx/libs.js, a D.HIT entry per file) with 13 ids, one per family, the variants inside it: hit.flesh.s / .m / .h (pistol-SMG / rifle / .50-hand cannon; A plays them at 0.75 / 1.0 / 1.3), hit.bone.snap, hit.bone.break, hit.tear (exit, ~30 ms after a rifle entry), hit.pellets (one file = the whole spread, 125-170 ms), hit.snipe.entry + hit.snipe.exit (+40 ms), hit.shred (0.7 s stream) + hit.shred.loop (seamless 1.5 s, loop flag), hit.thud, hit.gib. 37 files, real Freesound CC0 recordings only (credits: sfx/CREDITS.md §4, _tools/gunsfx_licenses.md), the library hit level (flesh.med ~ -15 LUFS M), each file starting on its transient. 58k_hitfx.js loads the fragment (K58.snd.lib('hitfx')) and falls back to the old ids if it is missing. Probe: all 33 weapon pages + kit_sound + 62x_hitfx_demo load it, 13/13 ids decode at their manifest length, 0 errors. A library rebuild keeps the fragment (libs.js is rescanned); tool Scratch/gunsfx/tools/hitfx_build.py --apply.
- (27 Oct, GUN-SFX) AR SINGLE SHOT IN THE KILL LIBRARY (the user's inbox #42: "New AR SOUND ... playing burst or auto sound for even single fire"): the v2 AR shot was a full-auto string, so gun.rifle and ar.shot (re-banked from it on 26 Oct) played a burst for one round too. The game clip gun62_ar is now one round of the same M4 recording (tf-gunsfx6 8cc16d35), and the library was re-banked in the documented order (page_banks --apply, page_restore --apply, --v2 --apply, --v3 --apply): gun.rifle (2 files) and ar.shot (4 files) are single rounds at their original files' loudness. ar.auto stays the burst. The pump's reload ids (pump.shells, pump.load) were never re-banked and stay the old ones; pump.rack (the rack after a shot) stays v2, as in the game.
