Repository navigation
Description
Score: 2.5/10 (target 8, on the owner's scale: agent judges halve their number, per the 2026-11-05 reset)
Carries the climb on from #3663 (round 1: PR #3669, the spine; its score comment has the judge's table).
The owner's brief (2026-11-05): make Mythic Masters' open world multiplayer, and make it awesome, performant and cheap. Today the whole game runs in the page on an assets-only Worker (apps/mythic-masters/rustybuns.config.ts); nothing online but eqosys sign-in (src/account.ts). The 77 × 51 km continent, its regions, trails, dens and hunts are in src/world/ and docs/WORLD-EXPANSION.md. The sibling climb for frame time is #3664.
What awesome means here
You see your friends walking the same land with their bound beasts beside them, you meet them at a den, a mythic you both chase is the same mythic, the Book heckles the party as one, and joining takes one code. Not an MMO: a party of up to six on one region at a time, like a hunting trip.
Goalpost: 8/10 from the owner
- Walk together. Through an eqosys party code (
partyin@rustybuns/util/eqosys, Qollab is the connecting layer, eqosys the account) friends land in the same region and see each other move, with their lead beast beside them, at a smooth 60 fps: interpolation and dead reckoning on the page, a low send rate (5 Hz or less, deltas, quantised positions), never a per-frame message. - One world. Dens, wild food, flocks and the region's mythic are the same for everyone there: seeded by the room, not by each page, so a hunt one player starts the others can join; a fight is still the page's own sim, its result reported and checked for plausibility.
- Cheap by design, priced before it ships. One Durable Object per occupied region (never per player) using
Socketsfrom@rustybuns/util/roomwith WebSocket hibernation, token-checked joins (@rustybuns/util/token),TokenBucket,RoomMintGateandoriginAllowedfrom@rustybuns/util/limits, no storage writes per tick (the room keeps state in memory, a save is the player's own page). A cost model in the repo (apps/mythic-masters/scripts/cost.ts) that runs the stress script, counts messages, wake time and storage ops, and prints a price per player-hour from Cloudflare's published Durable Object rates. Target: under $0.005 per player-hour at a full party, printed in every round's comment. No deploy by a worker: the owner runsbun run deployafter a plan (DEPLOYS=1 AGENTS=1 CHECKS=1). - Honest offline. Alone, nothing changes: no socket, no cost, the save stays local. A dropped connection degrades to solo play and rejoins without losing the trip.
- Tested the way people play. One journey test through the running app (
local()fromtest/app-kit.ts) with two pages in one room: both see each other, one leaves and rejoins, a hunt stays shared. A stress script (scripts/stress.ts) that runs six bots walking a region for a minute and prints messages per second and the price.
The loop
Each round is one PR against main that says "Part of #N". Shots and numbers: bun run probe mythic-masters with the mythicMasters handle, two headless pages in one room, frame time and bytes per second per player in the comment. A fresh judge scores the five points, halves it, and the comment starts Score: x/10 (target 8) and ends Next: ...; then open "rounds N+ (from #N)", close this one with "Moved up to #new". At the target, a MANUAL RUN: for the owner's own play with a friend. No Vectorize, no third-party realtime service, no new paid binding without an issue for the owner first.
Activity
Mythic Masters walking together, round 2: one clock, quiet dens, a pa…
QuinnsCode commentedon Nov 5, 2026
Lanes for this climb (Widget is on the measuring lane, per the issues queue).
The climb's PR is #3669 (green, mergeable). It carries round 1 and round 2 as two commits. These files are mine, and I'll keep editing them:
apps/mythic-masters/src/edge/(worker.ts,region.ts,eqosys.ts)apps/mythic-masters/src/net/(party.ts,online.ts,lobby.ts)src/world/view.ts, and the?room=/?party=wiring insrc/main.tsindex.htmlandsrc/styles.css(the.togetherand.lobbychips), plussrc/icons.ts(wifi-off)scripts/party.ts(the local edge: the real Worker and Region on Bun's sockets, with a meter on every room)test/online.test.ts, and the app README's "Walk the world together" lineWidget, the measuring lane is yours:
scripts/stress.ts(new) andscripts/cost.ts. From here on I won't editcost.ts. It exists only on #3669's branch until that merges, so base onmainonce #3669 is in (never on its branch). Itsstress(players, seconds, seed, spread)drivesOnlinethroughserveParty(), androom.mholds joins, inbound and outbound counts, bytes andawakeMs. Today's numbers: $0.00125 per player-hour for six together and $0.00195 split one per region (--spread). Upload is about 88 B/s per player and download about 1,165 B/s, mostly the 16-char ids in each fanned-outp. If you want a smaller wire for the download number, say so here and I'll make the change inparty.ts.Round 2 is in #3669's second commit:
?room=and the status chipJudging it next.
Mythic Masters: walk the world together, one Region Durable Object pe…
QuinnsCode commentedon Nov 5, 2026
Score: 2.75/10 (target 8)
Round 2, PR #3669's second commit (green, mergeable, rebased on main). A fresh judge gave 5.5/10, halved to 2.75:
?room=, 5 Hz deltas, a 250 ms blend, and the lead beast with two followers all work. But Start doesn't land the party in one region, there's no dead reckoning, and nothing measures 60 fps.--spreadrun prints $0.0058, because one-off join and idle cost is spread over a short run. Hibernation is a Bun fake, and Worker CPU isn't priced.local()journey, no shared-hunt test, and noscripts/stress.ts(Widget's lane).--spread, 60 s).Next: one world clock for every room, so a new region or a rejoin never snaps the sun back. Hunts shared in the room, so a friend can follow your signs to the lair. Fight results reported and checked for plausibility. Land the party in the host's region. Tell "room full", "sign in again" and "offline" apart.
QuinnsCode commentedon Nov 5, 2026
Moved up to #3674