Skip to content

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

Closed

Description

@QuinnsCode

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

Carries the climb on from #3674 (round 3, PR #3676), #3670 (round 2) and #3663 (round 1, both in PR #3669, merged); their score comments have the judges' tables.
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. QuinnsCode commented on Nov 5, 2026

    @QuinnsCode
    OwnerAuthor

    Score: 3.5/10 (target 8)

    Round 4, PR #3676 (second and third commits). A fresh judge gave 7.0/10, halved to 3.5:

    Point Judge Why
    Walk together 1.5/2 5 Hz decimetre deltas, interpolation, lead beast and followers at 60 fps. But no dead reckoning, and the two-page journey opens ?room= directly, so the party-code join is untested.
    One world 1/2 The clock, flocks, food, busy dens and hunts are shared. But the region's mythic and its keepers aren't, and the fight check trusts the den the page claims instead of the seeded world.
    Cheap by design 1.75/2 All the building blocks, and the rates check out. One room per party honours the intent: never per player, and cheaper for a split party. Gaps: Worker CPU isn't priced, scripts/stress.ts is still to come (Widget's lane), and any token-holder with the code can join (nothing checks party membership).
    Honest offline 1.5/2 Solo is unchanged, and the clock carries through a drop. But no test drops the server and reconnects, and a late joiner doesn't learn which dens are busy or which food is picked.
    Tested the way people play 1.25/2 test/together.test.ts: two real pages see each other walk, the same hour, leave and come back. No shared hunt and no party-code join in it.

    It also found a latent bug: the world clock went into float32 shader time, so the sway would have stepped within weeks. That's fixed in the third commit: the clock wraps every five game days.

    • Price (judge's 20 s runs): $0.00163 per player-hour together, $0.00104 split up. My 60 s runs: $0.00125 together, $0.00035 split up.
    • Bytes per second per player: about 88 up and 1,160 down together. Two real pages: 87 B/s up while walking, 16.5 ms a frame with a friend drawn.
    • CI: the two-page journey times out on the runner, which draws the world in software, so it's skipped on CI and runs on every dev machine.

    Next: share the region's mythic and keepers, and check fight reports against the seeded world (the den must exist near where the player stands, with that creature and level). Tell a late joiner the busy dens and the picked food. Add a shared hunt and a real drop-and-reconnect to the two-page journey.

  2. QuinnsCode commented on Nov 5, 2026

    @QuinnsCode
    OwnerAuthor

    Moved up to #3684

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions