Skip to content

feat(barbara): ship the co-op night search as BARBARA (unlisted) - #447

Merged
kitlangton merged 107 commits into
mainfrom
barbara
Oct 23, 2026
Merged

kitlangton merged 107 commits into
mainfrom
barbara

Conversation

@kitlangton

@kitlangton kitlangton commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

What it does. Ships the co-op night-forest game as BARBARA at https://anoma.ly/arcade/barbara/. It's unlisted: anyone with the link can play solo or in a room of up to 6, but there's no landing panel, the page is noindex, and it's listed in the README's prototypes. It goes out with realistic friends, the creature, the catalogue night sky and the shared game shell.

How it works.

  1. The woods branch (forest look, flagging tape, held map and compass, camera looks, the Barbara opening and voices, the creature, highlight fixes) is merged with main once, instead of rebasing 99 commits. packages/kit/people is taken from main as-is, along with main's browser-budget proof scripts.
  2. Realistic people: friends hold their torches with the kit's torchCarry. They're on by default; the blocky friends are one setting away (Lab › Friends › Realistic people, or ?people=blocky).
  3. Defaults: the creature on (rooms too), the catalogue night sky on (skyMode: "physical", Today one setting away), the highlight shoulder on, camera looks off.
  4. Game shell: the old Woods menus are replaced by createGameShell and createShellQuality over FOREST_QUALITY.
    • Quality starts at High and steps down on frame time only.
    • M mutes, Escape opens the menu. Shell volumes and mute are copied into the sound bank, and Subtitles is a Settings row.
    • A room is its own ?room= page, and Leave room loads the solo page.
    • While the Lab panel is open, the shell's cards stay hidden so you can play with it up.
    • The Lab's volume, mute, quality and reduce-motion rows are gone.
  5. Rename: games/woods → games/barbara.
    • Worker arcade-barbara with routes /arcade/barbara and /arcade/barbara/*, outDir dist/arcade/barbara, prefix stripped in the Worker.
    • The workflow, workspaces, WORKSPACE_GAMES, smoke and docs are updated.
    • Internal names stay "woods" (window.woods, WoodsRoom, @arcade/kit/forest).
    • It was never public, so there's no redirect.
  6. docs/agent-state.md lists woods as a retired branch.

Risk.

  • A new game makes every game's workflow check and redeploy.
  • Barbara is a new Worker with new Durable Objects (WoodsRoom, Lobby); no other game's routes change.
  • The software-GPU smoke keeps the old sky and blocky friends, so CI doesn't exercise those two paths. They were exercised in the Metal shell proof.
  • scripts/smooth-proof.ts still targets the old menu element ids (proof script only, not run in CI).

Proof.

All checks ran on HiveMind:

  • bun test --max-concurrency 4 for the kit's shell, architecture-map, forest, sky, people, gpu and audio tests: 276 pass
  • Barbara: tsc (app and server), bun test --max-concurrency 4 (50 pass), vite build, scripts/smoke.mjs (Metal), wrangler deploy --dry-run: all pass
  • scripts/ws-smoke.ts against a local wrangler dev: two clients see each other, a tape is shared, a drop and rejoin reclaims the seat; 3.2 KB/s per client
  • scripts/prove-game-shell.ts barbara: the title fits at 1280×720 and 1920×1080 with no scrolling. The run logged one 404 whose URL wasn't captured.
  • bun run verify:release: ok, 79 steps. This was before merging main's Carrier-only carrier: Hornet engine → Jet Wash (procedural jet noise, no tones) #446.

…spawn, flashlights in mist, flagging tape, paper map and compass, survey markers, bots; world as plain data behind a world-view seam
…hanged, string-light posts; start overlay follows the Lab panel; account_id
…: seats and reconnects, bots fill to 4, shared tapes/finds/map swap, seeded distant-sound schedule, compact snapshots
… sessions, own-motion prediction and reconciliation, interpolated friends, roster HUD, invite link, rename; ws smoke against the Worker
…wap, drop/rejoin, KB/s), self-hosted wrangler mode; AGENTS.md for rooms and the sound hook
…ost input mid-hold can't undo the tape just tied
…tter buffer skips (up to 0.3 s), so a held tie isn't restarted; ragged-input test
… then events; bot tape cap and bare-trunk rule; known tapes pruned and sent as deltas; copied paths sent as appended points, dropped with their owner, paths coarsen past 500 samples; no held-key replay after reconnect; no blend across a reused id; long-room and reconnect tests, simulated-hour bandwidth
Wind in the canopy that gusts across the trees (louder on ridges, quieter in hollows), trunk creaks and branch
knocks, leaves, room tone, crickets that thin out away from camp, lake lapping, dock creaks, string-light buzz and
muffled interiors; ten sparse distant sounds placed in 3D with travel delay, distance filtering and forest reverb,
scheduled from plain seeded data the sim can share. 46 ElevenLabs files (1.26 MB Opus) with provenance, Lab knobs,
one limiter, offline proof renders.
… steps shared/distant.ts at the tick, holds it while anyone signals, rooms broadcast DistantEvents and send DistantState on join; shared/sounds.ts removed; audio only plays events, after the tick; nothing fetched or started before Begin (SoundBank unlockOnGesture: false); quiet and suspended when hidden or not playing, scheduled one-shots stopped; per-file load with res.ok, skip and retry; mix outs start silent; distant voices reaching you during a signal fade out
The woods toy now draws with @arcade/kit/forest: scanned CC0 pine, spruce and birch bark with stable-alpha needle
cards, ferns, rocks, roots, logs and litter, a terrain-following mist bank with pools and pockets, physical beam
scattering with a near field, torch spot shadows, auto exposure and quality tiers. world-view.ts keeps its entry
points (setWorld, lights, occluders, draw) and adds tapes with swaying tails, survey markers and the ridge mast.
Forest assets move to packages/kit/forest/assets, served per host by scripts/forest-assets.ts.
…rry no isotropic leak and stay out of the glow map, the mist bank dims beams on both legs (bankExtinction), auto exposure meters the drawn frame (LuminanceMeter); woods capture light-count probe
…hare is a fog setting (phaseFloor, default 0.15 unchanged), forest 0.03, so the beam seen from behind is a thin haze; capture yields for GPU readbacks and finds players by id
…ile over each leg's height (closed form) instead of averaging end points, so beams that climb out of the mist keep their light; one bankLocal per sample
…own 1 m grid (meshHeight: sampled once, same triangles), 4.0 M game height calls -> 0.28 M; woods ?smoke boot 29-68 s -> 11 s; woods:assets/build/world/frame boot marks
…ions from a headless ?smoke load (BOOT_DIST to compare builds)
…e forest's opt-ins (torches, bankLocal/bankExtinction; pinned WGSL hashes), forest motes in the TAA reactive mask, no model/field leaks on regeneration; perf(kit/forest): build on a worker over the main thread's height grid (byte-identical, models moved there and back), boot marks for grid/models/worker/textures
* feat(kit/people): realistic people: MakeHuman CC0 cast built by script, GPU skinning pass, kit rig to game_engine skeleton retarget with mesh IK, terrain feet, torch hand

* fix(kit/people): rebuild hiker-a with 1024 normal maps and beanie UVs

* fix(kit/people): normal maps really exported at 1024, knit normal map no longer blank (804 KB)

* fix(kit/people): people are actors (the games' dark-readable fill and rim), softer sheen

* fix(kit/people): a torch beam does not light its holder behind the lens; calmer nylon and sheen

* scripts/people: mesh-side metrics (slip, sink, clearance, torch, pose cost)

* docs: people.md (realistic people pipeline, runtime, measurements, licences); rig and animation notes

* fix(kit/people): LOD from the pelvis, not the bind-pose root; zero-weight vertices go to their first joint; guard zero normals in skinning
…looks (backpacks, headlamps, fleece), per-look manifests; weight-shift idle; boots rest on log edges (sole tangent, mesh footprint, swing heel)
…mber of the woods cast, torch shadows from them, proof script
…omises: JsRpcPromise.then rejects a missing success callback, so then(undefined, onError) threw on every report (Archers, Blackout, Brawl, Carrier, Getaway); settle() adopts the call with Promise.resolve and catches sync and async failures; test with a strict thenable
…cker limbs, Trigger now stages a beam, proof options
…ms aimed back at you, camp lights from outside camp), scored from rendered frames
…esolve, main-thread fallback, one print in flight plus the latest wish, stopped when idle, on world change and pagehide), spot shadow slot re-renders on a near change, pencil follows removed and reordered friends' paths, worn leather gloves, softer corner droop
…y; walk-past people proof (from woods-people-real)
…ture and the catalogue night sky on by default
…/arcade/barbara); unlisted prototype in the README
…as pixels (SwiftShader can't copy from an OffscreenCanvas) and give the forest's GPU wait 140 s
@kitlangton
kitlangton merged commit d8f4202 into main Oct 23, 2026
13 checks passed
@kitlangton
kitlangton deleted the barbara branch October 23, 2026 01:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant