A stolen-base mechanic built around one continuously-held risk rather than a single timed press: the lead you’re holding when you break for second is the same lead a pickoff throw can catch you out on. Small lead, safe from a pickoff throw, but the catcher’s throw to second beats you there almost every time. Push the lead out and the sprint gets fast enough to steal — right up until the pitcher snaps a throw over to first with no warning and you’re caught leaning too far out to scramble back. There’s no tell to read; the only thing controlling your odds is how much lead you were willing to hold.
Timed to the Little League World Series, underway in South Williamsport through August 30.
Reuse
The mechanic lives in src/stolen-base.js as a framework-free ES module:
createSteal(opts)— returns a state object; callupdate(dt)each frame,begin()to take your lead off first,setLead(x)continuously while leading (0..1, normalized), andbreak()to commit to stealing second.opts:catcherSkill(0..1, tightens the noise on the catcher’s pop-and-throw time),pickoffSharpness(0..1, how fast pickoff odds climb once your lead is past the margin you can always scramble back from).state.phasedrives everything:'ready' → 'leading' → 'pickoff' | 'running' → 'result' → 'ready'. A pickoff throw that’s survived returns to'leading'rather than ending the attempt — the pitcher can check you as many times as it takes.state.lastOutcomeis'safe','caught-stealing', or'picked-off';state.scoretracks attempts/stolen/caught/pickedOff plus a streak.
The demo (demo/index.html) maps a held pointer’s horizontal position near
first base to lead distance, and release to the break — the same
lead-then-commit choreography as Marshmallow Roast,
repurposed from chasing a flame to holding a nerve.