You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Mythic Masters: open-world frame budget (95th under 16.7 ms, no hitch, a party of six), hill climb to 8/10, rounds 3+ (from #3686) #3701
Score: 3/10 (target 8, on the owner's scale: agent judges halve their number, per the 2026-11-05 reset)
The owner's brief (2026-11-05): Mythic Masters' open world must be performant, especially once friends walk it together (#3663). The world is a heightfield continent with three ground patches rebuilt as you walk, instanced plants, a sky dome and weather, flocks and wild food (src/world/, docs/WORLD-EXPANSION.md).
From #3664 and #3686 (rounds 1 and 2, PR #3685): the recipe is cd apps/mythic-masters && bun scripts/walk-budget.ts (walkBudget() for a script), and test/budget.test.ts holds it with MM_BUDGET=1. The walk holds fights off (world.peace): round 1's tables measured a fight arena, see #3686's Score comment. Patch rebuilds and the grass are laid over frames. Last table: p95 16.8 ms at both sizes; frames over 50 ms 3 (desktop) and 2 (phone), against main's 15 and 19; desktop max 67 ms; phone max 700 ms, one shader compile at about 100 m; 4.31 M triangles; load 1.3 to 1.4 s, 6.4 MB.
Next: remove the last frames over 50 ms. They come every 384 m (233, 617, 1002 m), the mid patch's snap: its far-forest replant (scatterFar) or its build. Also the phone's one shader compile at about 100 m. Then tighten the test toward p95 16.7 and no frame over 50 ms. Gizmo (office/gizmo-2fa8) has the quality tier and plant culling in its own PR, then adds quality and party options to walkBudget(). The party-of-six row waits on #3663.
Goalpost: 8/10 from the owner
Scored on numbers, not taste, so each round prints the same table from the same recipe (bun run probe mythic-masters --js with the mythicMasters handle; a fixed walk of 90 seconds across a region border at a fixed hour, with a party of one and of six shown):
Frame time. 95th percentile under 16.7 ms on this Mac's headless Chrome through the whole walk, and no single frame over 50 ms (the patch hitch gone: builds split over frames or moved to a worker).
Draw calls and memory. Draw calls per frame and JS heap printed and flat across the walk; a party of six adds at most 12 draw calls and 60 MB.
Load. Time to first walkable frame under 3 s on a cold cache locally, and the bytes it took, printed.
Phones. The same walk at a phone viewport with the quality knob (@rustybuns/util/quality) on low stays under 16.7 ms at the 95th; no feature only works at high.
A budget that holds. The numbers live in one test (test/budget.test.ts) that fails when a round regresses them, so the next climb can't spend them.
The loop
Each round is one PR against main that says "Part of #N" with the before/after table in the body. 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". Keep effect out of the per-frame code. At the target, a MANUAL RUN: for the owner's own walk on their phone.
Score: 3/10 (target 8). Round 3, PR #3685 (head 6ef5bed). A fresh judge scored 6/10 and that is halved.
Far forest over frames: the replant (scatterFar, out to 1.4 km) is laid a few ms a frame and copied into the cards at once. That was the hitch every 384 m.
Beast shaders warmed: a wild one's beast compiles its shaders before it swaps in for its capsule, for the composer's target on desktop and the screen on phones. That was the phone's stall at about 100 m (Gizmo traced it).
Test at the goal:test/budget.test.ts now holds no frame over 50 ms and none over 50 ms at worst, at both sizes.
BEFORE (main, fair walk)
view
p95
max
frames > 50 ms
draw calls
programs
heap MB
load
desktop
16.8
83
15
99-138
51 -> 51
113 -> 116
1.50 s, 6.4 MB
phone
16.8
100
19
67-100
40 -> 41
118 -> 95
1.16 s, 6.4 MB
NOW
view
p95
max
frames > 50 ms
draw calls
triangles
programs
heap MB
load
desktop
16.8
33.5
0
100-138
4.31 M
52 -> 52
122 -> 111
1.57 s, 6.4 MB
phone
16.8
33.4
0
67-100
4.31 M
40 -> 41 (off the frame)
117 -> 148
1.14 s, 6.4 MB
p95 16.8 is a 60 Hz frame (16.7) plus timer jitter.
Judge, per point: frame time 1/2 and draw calls and memory 1/2 (both capped by the missing party-of-six row), load 2/2, phones 1/2 (no low quality tier yet), budget test 1/2 (GPU-only, so CI skips it; no party row).
Next: the party-of-six row, which caps points 1 and 2. Gizmo plans to add party and quality options to walkBudget() once #3685 merges (the low tier is in #3682 and #3689). Then the phone heap creeping up (117 -> 148 MB). The frames themselves are held now.
Activity
Mythic Masters: frame budget round 3, no frame over 50 ms (#3701)
Mythic Masters: the budget test holds the goal, no frame over 50 ms (#…
QuinnsCode commentedon Nov 5, 2026
Score: 3/10 (target 8). Round 3, PR #3685 (head 6ef5bed). A fresh judge scored 6/10 and that is halved.
scatterFar, out to 1.4 km) is laid a few ms a frame and copied into the cards at once. That was the hitch every 384 m.test/budget.test.tsnow holds no frame over 50 ms and none over 50 ms at worst, at both sizes.BEFORE (main, fair walk)
NOW
p95 16.8 is a 60 Hz frame (16.7) plus timer jitter.
Judge, per point: frame time 1/2 and draw calls and memory 1/2 (both capped by the missing party-of-six row), load 2/2, phones 1/2 (no low quality tier yet), budget test 1/2 (GPU-only, so CI skips it; no party row).
Next: the party-of-six row, which caps points 1 and 2. Gizmo plans to add
partyandqualityoptions towalkBudget()once #3685 merges (the low tier is in #3682 and #3689). Then the phone heap creeping up (117 -> 148 MB). The frames themselves are held now.QuinnsCode commentedon Nov 5, 2026
Moved up to #3705
Mythic Masters: the world's frame budget, rounds 1 to 4 (#3664, #3686, …