Skip to content

Mythic Masters: friends walk the open world together, cheap by design, hill climb to 8/10, rounds 14+ (from #3722) #3764

Closed

Description

@QuinnsCode

Score: 4.375/10 (target 8, on the owner's scale: agent judges halve their number, per the 2026-11-05 reset)

Carries the climb on from #3722 (round 13, PR #3761: the room checks a den's creature and level against the world seed), #3707 (round 12, PR #3716: the room runs under workerd), #3703 (round 11) and rounds 3 to 10 (#3699, #3698, #3696, #3695, #3690, #3684, #3679, #3674), all in PR #3676, and rounds 1 and 2 (#3670, #3663, PR #3669, merged); their score comments have the judges' tables. Open: MANUAL RUN #3697, #3760 (pose speed check), #3763 (stones and arenas by distance), #3706 (the lobby path with a local eqosys), #3704 (full-party frame time), #3700 (closes when #3761 merges).
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

  1. Walk together. Through an eqosys party code (party in @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.
  2. 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.
  3. Cheap by design, priced before it ships. One Durable Object per occupied region (never per player) using Sockets from @rustybuns/util/room with WebSocket hibernation, token-checked joins (@rustybuns/util/token), TokenBucket, RoomMintGate and originAllowed from @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 runs bun run deploy after a plan (DEPLOYS=1 AGENTS=1 CHECKS=1).
  4. 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.
  5. Tested the way people play. One journey test through the running app (local() from test/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

  1. self-assigned this
    on Nov 6, 2026
  2. QuinnsCode commented on Nov 6, 2026

    @QuinnsCode
    OwnerAuthor

    Score: 4.375/10 (target 8)

    Round 14: PR #3776 (merged: a pose speed check, and stones and arenas by distance), with fixes in PR #3778 (merged) and PR #3782 (open). The first judge read #3776 alone and gave 7.5/10, finding three bugs that refused honest play; all three are fixed in #3778. A second, fresh judge read #3776 and #3778 together and gave 8.75/10, the same as round 13. So the score stays at 4.375 (the last score plus half the judge's gain, which is zero).

    Point Judge Why
    Walk together 1.5/2 Unchanged: a full party still draws at 26 to 32 ms a frame (#3704), and the path from eqosys party to lobby to ?room= has never run end to end (#3706).
    One world 1.75/2 Stones, arenas, trail dens and lairs are now checked by distance, and a jump is believed only where the game sends you. But the 40 m slack is spent again on every message, so a page can hop many small steps about 640 m at once (#3784). And one trail den was never believed (fixed in #3782).
    Cheap by design 2/2 The price is unchanged. A lone page sends one pose per jump, the trust flag rides on the socket's attachment, and the landing-spot loop runs only on a jump.
    Honest offline 2/2 Every honest jump traced lands on a known spot: travel, sent home and then back to the trail, fast travel, landing beside a friend, reset. A rejoin starts fresh, as the owner decided.
    Tested the way people play 1.5/2 The room test covers a jump and recovery at a campfire, trailheads, and a lone fast travel. The Chrome journey lands at a campfire before its contract. Still skipped on CI, and still skips the lobby.
    • Fixed after the first judge:
      • travel and losing a fight landed at a trailhead the room didn't know (79 of 88 cases), so honest players became untrusted;
      • landing beside an untrusted friend cleared your own flag;
      • a fast travel made alone in the room was never told.
    • Fixed after the second (Mythic Masters walk together: a trail den is believed wherever it circles, at any hour #3782): trail dens move with the clock; trail:7:10:0 was never believed, and six others drifted 62 to 74 m.
    • Price: $0.00125 per player-hour with six together (bun scripts/cost.ts 6 60). Target: under $0.005.
    • Bytes per second per player: 92 up and 1,210 down with six together; 136 to 140 up walking with two real pages.
    • Frame time: 16.5 ms with one friend drawn; 26 to 32 ms with a full party (noise between runs).
    • Edge bundle: 27.1 KB gzipped with Mythic Masters walk together: a trail den is believed wherever it circles, at any hour #3782 (the table is 10.4 KB).

    Leftovers, each its own issue:

    Process note: #3776 merged while its fixes were being written, and one push recreated its deleted branch mythic-together-r14. That branch holds only the commit that went into #3778, so it can be deleted.

    Next: #3784, a trusted anchor for the speed check, so the slack is spent once, then a second tab that keeps the flag. That should close One world. Then the lobby end to end (#3706) and the full-party frame (#3704).

  3. QuinnsCode commented on Nov 6, 2026

    @QuinnsCode
    OwnerAuthor

    Moved up to #3785

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions