Taping the show
The skill mini-game: stages, grading, combos, and turning accuracy into tape quality.
Taping is the show's skill challenge: a staged "lock the needle in the zone" mini-game whose output is a tape quality number. It runs tape -> mini -> result.
Setup and the loop
startTaping(spot) builds S.mini from a per-spot config (crowd / section / board): a list of stages, each with a target center, a half-width half (the green zone), and optional danger. Better spots get tighter zones and a faster needle; stealth paint (bustGuard) widens the danger zones. A blank tape is required. In the browser, startMiniLoop() bounces the needle via requestAnimationFrame; headless tests just call lockMini() directly.
Grading a lock
1811 function lockMini() { 1812 var m = S.mini; if (!m) return; 1813 if (m.raf) cancelAnimationFrame(m.raf); 1814 var st = m.stages[m.idx]; 1815 var dist = Math.abs(m.pos - st.center); 1816 var inZone = dist <= st.half; 1817 var ratio = dist / st.half; // 0 = dead-center, 1 = edge of the sweet spot 1818 // Grade each lock: nailing the center is a PERFECT, and stringing perfects/greats 1819 // together builds a combo that pays off in the final tape quality. 1820 var rating = !inZone ? "miss" : (ratio <= 0.22 ? "perfect" : (ratio <= 0.6 ? "great" : "good")); 1821 var acc = inZone ? Math.round(100 - ratio * 25) 1822 : Math.max(0, Math.round(55 - (dist - st.half) * 1.3)); 1823 if (rating === "perfect" || rating === "great") m.combo += 1; 1824 else if (rating === "miss") m.combo = 0; 1825 if (m.combo > m.bestCombo) m.bestCombo = m.combo; 1826 m.lastRating = rating; 1827 m.results.push({ inZone: inZone, acc: acc, danger: !!st.danger, rating: rating, combo: m.combo }); 1828 Sound.lock(acc, inZone); 1829 if (st.danger && !inZone) m.busted = true; 1830 m.idx++; 1831 // The needle picks up speed as the recording goes on -- later stages bite harder. 1832 m.speed = Math.min(m.speed * 1.12, m.baseSpeed * 2.2 + 0.6);
Two things to notice. First, accuracy is continuous (100 - ratio*25 in-zone, a falloff out-of-zone) but the rating is bucketed — the buckets drive combos and sound, the raw accuracy drives quality. Second, all randomness (rnd, chance) goes through the seedable helpers, so a seeded test plays the identical mini-game every time.
Turning accuracy into quality
1838 function finishMini() { 1839 var m = S.mini; 1840 var accs = m.results.map(function (r) { return r.acc; }); 1841 var avg = accs.reduce(function (a, b) { return a + b; }, 0) / accs.length; 1842 var q; 1843 if (m.spot === "crowd") q = avg * 0.55; 1844 else if (m.spot === "section") q = avg * 0.82 + S.taper / 3 + S.cred / 8; 1845 else q = avg * 0.95 + 5 + S.taper / 2 + S.cred / 6; 1846 // Gear and perks: better deck, golden ears, the disputed sweet spot, a blessing. 1847 q += (S.buff.tapeQuality || 0) + (S.flags.goldenEars ? 8 : 0) + (S.flags.goodSpot ? 6 : 0) + (crewHas(S, "rita") ? 6 : 0); 1848 if (S.flags.goodSpot) S.flags.goodSpot = false; 1849 // Combo payoff: each link past the first adds quality and gets called out. 1850 var comboBonus = m.bestCombo >= 2 ? (m.bestCombo - 1) * 5 : 0; 1851 q += comboBonus; 1852 var extra = comboBonus ? [m.bestCombo + "-lock combo -- steady hands paid off. +" + comboBonus + " tape quality."] : [];
The spot weighting is the whole risk/reward: crowd is avg * 0.55, section adds your taping skill and cred, board adds the most but is the hardest to nail. On top come the tapeQuality buff (better deck), Golden Ears (+8), the disputed sweet spot (+6, one-shot), Rita (+6), and a combo bonus of (bestCombo-1)*5.
Outcome
applyTapeOutcome(spot, quality, busted, extra) consumes the blank and resolves the result: a bust means a fine plus Vibes/cred hits; otherwise +1 tape with tiered flavor. A legendary tape requires a legendary stop, a board/section spot, and quality ≥ 60 (+1 legendaryTapes, +12 cred). Every show — taped or just attended via attendOnly() — grants a Vibe boost (bigger at legendary stops, plus show-Vibes gear and Bird). Taping or attending the finale ends the game as a win.
- Continuous accuracy drives quality; bucketed ratings drive combos and feedback.
- Spot choice is the risk/reward dial; gear and perks are additive bonuses on top.
- Legendary tapes need a legendary stop + board/section + quality ≥ 60; the finale ends the run.