Repository navigation
Description
Carries the climb on from #4046 (round 5), which carried it from #3688 (round 4), #3511 (round 3), #3493 (round 2) and #3465 (round 1). Part of #2945 (orbit-and-commit combat, weighty attacks). The attacks redesign in #3268 (shapes, tempos, field kits, then telegraphs and effects) is the main thing this climb judges, so rounds follow its steps rather than racing them.
The goalpost
Target 7/10 for how a fight feels to watch and to play: weighty, committed melee where the fighters circle but never stand and trade, hits you can see land (squat, stagger, camera shove, shockwave), and wind-ups you can read and punish.
Agent judges run about 2 points high on visual climbs (#2943: judges 5, owner 3), so the owner's score at the target decides it, through one MANUAL RUN.
Rounds so far
| Round | PR | Change | Judge BEFORE to NOW |
|---|---|---|---|
| 1 | #3492 | heavies circle a ring 0.8 m outside their reach, step in only to swing, back out after; balance.json re-fit |
4 to 5 (main alone: 4.5) |
| 2 | #3510 | heavy swings lock (stop tracking) halfway through the wind-up; a reach wedge on the ground whose rim flares at the lock; the coil holds from 40% of the wind-up; bots sometimes dash out of a locked sweep; balance.json re-fit (44-56%) |
4.5 to 5.5 |
| 3 | #3687 | bots dash out of a locked sweep most ticks (sim: 21% to 39% of locked swings dodged) and punish the whiff's recovery (2% to 15%); sim-rs and sim.wasm match; balance.json re-fit (44-57%); a dodge burst in --combat |
4 to 4.5 |
| 4 | #3856, #4044 | the dodge burst waits for a locked swing on a free fighter and stops at the fight's end (#3856, tooling); a heavy that sees the other step in and face it holds its swing half the time and backs out past the sweep with its punish armed, so same-tick trades fall from 1,670 to 525 of the locked swings and dash-outs rise from 36% to 49%; balance.json re-fit (44-57%) |
4 to 4.5 |
| 5 | #4147 | the dodge burst is shot up to four times and kept from the first try whose defender dashes out, and no burst shoots a finished fight (tooling); a blow sits the struck body into its legs for the whole stun, the stagger eases over about 0.4 s instead of 0.25 s, and a big hit's coloured glow is smaller and shorter. Render only: sim and balance.json untouched |
4.5 to 5.5 |
Scores are on the owner's halved scale since 2026-11-05: each round adds half the judge's gain. Now at 3.75/10.
One round
One worker, from main:
- BEFORE:
cd apps/mythic-masters && bun scripts/burst-shots.ts docs/shots-<date>-combat before --combat(one fight per archetype, a wind-up burst, a dodge burst cued on a locked swing, and a hit burst, side camera). - The change the newest
Next:line names. - NOW: the same command with
now. Then a fresh judge agent scores BEFORE vs NOW out of 10 without the worker's reasoning. Keep the change only if the score went up. - Balance must hold:
bun scripts/tune.ts --each 6 --rustbefore and after, every creature within 40-60% (mainsits at 44-57%). If the change shifts it,bun scripts/tune.ts --fit 6 3 --rustre-fitssrc/balance.json. Then checkbun test test/journey.test.ts, because its Jersey Devil wall is sensitive to that creature's edge.
Carried over (each has its own issue)
- Owner feel on a controller: MANUAL RUN MANUAL RUN: feel of weighty hits on a controller (Mythic Masters, PR #2946) #2947 (weighty hits) and MANUAL RUN: Mythic Masters orbit feel check on a controller (about 5 min) #2964 (orbit). Ask for them again once this climb reaches its target, not before.
- Animation rounds: Mythic Masters: animation hill climb, rounds 5+ (a real meet, billowing membranes, lag) #3219. Graphics: Mythic Masters: animation and graphics hill climb to 9/10, rounds 13+ (from #3441) #3455. Both are their own climbs; this one is the fight's feel only.
Ending a round
Comment here, first line Score: x/10 (target 7), then the shots, then Next: <the judge's top gap>. The PR says "Part of #", never a closing word. Then hop forward (the baton text is in scripts/climbs.ts).
Learned in round 5
- A render or tooling change can't move the sim, so it skips the tune and the wasm rebuild. Say so in the PR.
- The
dodgeburst now retries up to four times for a dash (window.__dashed, watched from the lock for the burst's 1.2 s). Three of four fights caught one on the first or second try; the skirmisher fight is short, so it often ends first. - The judge's view of NOW: hits read harder, dodges and the punish after show (now-bruiser-dodge-b1 dash, b5 punish). Still: the struck body stands up a frame later (now-tank-dodge-b1..b3), and fighters stand square-on one body-length apart in several bursts.
Learned in round 4
- Most locked swings that landed on a busy defender were not a defender choosing to swing into a wedge: both bots pressed on the same tick, because two committing heavies cross the striking distance together. A gate in
pressthat refuses a swing the incoming heavy would beat changed nothing for that reason; splitting the scratch tally by who pressed first (o.tagainstf.tat the lock) found it. - A defender that holds its swing has to leave the other's heavy sweep too: the ring (
RING, 0.8 m past reach) sits inside it, so waiting on the ring just eats the blow (tanks fell to 29-46% until it backed out). maindrifts: other rounds left five tanks at 36-39% before this one. Take the BEFORE tune on today'smain, not the number in this issue.
Learned in round 3
- The fight plays on the wasm sim (Mythic Masters: the page plays its fights on the wasm sim (sim-rs) #3668). A bot or sim change goes in
src/bot.ts/src/sim.tsandsim-rs/src/, statement for statement with everyrnd()in the same place. Thenbun scripts/sim-rust.tsrebuildssrc/sim.wasmand checks 24 fights hash for hash. Run it again after abalance.jsonre-fit, since the data is written from the TS. - The shot counts and the sim's counts can disagree. Measure what changed in the sim (a scratch loop over
newMatch/stepwith both bots) before blaming the change, and fix the cue so the shots catch it. - A burst after the fight ends shoots the result page (now-skirmisher in round 3).
Learned in round 2
- In the sim a walking sidestep can't leave a heavy body's sweep inside the locked beat (lock 0.35-0.5 and sweep cos 0.5-0.8 all tried); a dash gets out at any frame. Making a walk-out possible would mean a faster sideways step while a swing is locked on you, or a longer locked beat.
mythicMasters.state().fighters[n].swingistracking,lockedor null: cue a shot on a locked swing with it.- The BEFORE shots must come from
mainwith no edits in the tree:burst-shots.tsserves the working tree through Vite, so a mid-run edit leaks into BEFORE.
Activity
QuinnsCode commentedon Nov 9, 2026
Score: 3.75/10 (target 7)
Round 5, PR #4147. A fresh judge scored BEFORE (
main) 4.5/10 and NOW 5.5/10, so on the halved scale the climb goes from 3.25 to 3.75.The change: the
dodgeburst retries until the defender dashes out of the locked swing (three of four fights caught one), and no burst shoots a finished fight. A blow sits the struck body into its legs for the whole stun, the stagger lasts about 0.4 s, and a big hit's glow is smaller and shorter. Only drawing and tooling changed, so the sim andbalance.jsonare untouched.In the judge's words, NOW shows "defenders leaving": Rougarou dashes out with a dust ring in now-bruiser-dodge-b1, and the punish lands in b5. Hits read harder (now-tank-hit-b0, now-bruiser-hit-b3).
Shots:
apps/mythic-masters/docs/shots-2026-11-09-combat-r5/(before-*,now-*) on the PR branch.The judge's next gaps, in order:
Next: the orbit. Fighters waiting between swings should circle sideways on the ring instead of standing square. This is a bot change in
src/bot.tsandsim-rs, followed by a re-fit.Carried over from #4046.