Systems, loops & balance
Games are loops, not arcs: model → action → rules → feedback, nested at every timescale. Fun is acquiring skills before old ones burn out; balance is mostly figuring out what numbers to use. What the player can't perceive doesn't exist — surface the math.
Core loop construction
- Write the loop sentence first: "player does A, system responds B, player gets C, which lets them do A better/differently." Can't write it = no game yet.
- Nest 3 timescales: moment loop (~1s: dodge/shoot), session loop (2–5 min: a run/wave/level), meta loop (across sessions: upgrades, unlocks, best score). Each loop's output feeds the next one up.
- Close every skill atom: each verb needs action + rule + feedback (<100ms) + perceived reward. A reward with no feedback is invisible.
- Full loop cycle in the first 10–30s. Lore and intros come after the hook, or never. Cut content that neither repeats nor teaches the loop.
- Schedule against burnout: list skill atoms, estimate when each is mastered, introduce a new one (mechanic, enemy, modifier) before the old one dies — every 30–60s in a 5-minute game.
Economy: sources & sinks (Machinations vocabulary)
- Table every resource × (sources, sinks, converters, caps). Sources with no sink → inflation; sinks with no source → soft-lock; a converter strictly better than another in all states → dead option.
- Decisions live at converters (gold→tower, scrap→upgrade), not at raw sources. Want more decisions? Add competing conversions, not more income.
- Cap or decay hoardables when hoarding is degenerate (ammo, energy).
- Faucet-of-last-resort: every spendable resource needs an income path from zero (trickle, sell-back, free reroll) — fix soft-locks structurally, not with warnings.
- Purchase is a deliberate, separate key. A fused unlock+play — a confirm key that spends currency as a side effect — turns mashing restart into a spend.
Cost & power curves
- Transitive balance rule (Schreiber): sum(costs) = sum(benefits) on one resource scale. Pick a numéraire (gold, DPS-seconds) and price everything in it. Conditional/limited benefits get a discount, never a refund — a limitation is never worth more than the benefit it limits.
- Price choice at its best option: an ability offering a choice costs as much as its strongest branch.
- Derive unknowns pairwise: find two items differing in exactly one attribute, solve for it; bootstrap the curve from 3–4 hand-tuned anchors.
- Err weak: a too-weak option is ignored; a too-strong one deletes every other option from the game.
- Upgrade price curve:
cost(n) = base × growth^n. Real-world growth constants: 1.07 (AdVenture Capitalist, gentle) to ~1.15 (Cookie Clicker, steep). Production stays linear inownedwith milestone multipliers (×2 at 25/50/100) — exponential cost vs polynomial income guarantees the slow-down wall that makes progression feel earned. - XP curves: increasing cost-to-next-level — fast early levels (hook), but time-per-level never exceeds one session without a payoff.
- Perceived difficulty = (skill + power demanded) − (skill + power held) (Schreiber). Player skill rises on its own across sessions — a fixed challenge curve drifts easier.
- Upgrades should change decisions, not just numbers: ≤3 pure stat bumps between mechanic-changing purchases. Want build variety? Make tradeoffs intransitive (rock-paper-scissors), which no single cost curve can solve.
- Show cost, current effect, next effect on every upgrade.
Reward scheduling & loot
- Default to variable-ratio for drops/crits/bonuses (Hopson): steadiest engagement, no post-reward pause. Rewards must feel earned.
- Weight tables, not percentages (Cook): integer weights per item
including a
nullentry; roll against the sum. Compose hierarchically — a parent table whose entries are sub-tables lets you cap a sub-pool without touching the rest. - Sample without replacement to control streaks (the Tetris bag): remove/decrement on drop, refill when empty.
- Pity timers: each miss, shrink non-target weights by
100 / max_rolls_before_guaranteepercent — certain by roll N, still feels random. Add one when the max dry streak exceeds ~2× the expected. - Never silently nerf an established reward rate — extinction produces persistence, then frustration, then quitting (Hopson). Replace, don't reduce.
Feedback loops & prestige
- Mark every loop + or −. Positive (kills → power → kills) snowballs and ends runs — give it a brake (caps, exponential costs, difficulty scaling) or make the snowball the point. Negative (rubber-banding) stabilizes — dampen the leader, never erase them; catch-up that cancels skill reads unfair. Don't use catch-up mechanics to mask a broken cost curve.
- Public-arena levelling: keep the veteran↔newcomer power gap narrow — a bounded cap of 3–5 big visible steps, modest per-level deltas, scale regen not max HP, lose XP on death so leaders regress, and scale elite HP with the room's max level so TTK stays level-invariant.
- Prestige = reset for a permanent multiplier. Production formulas:
Cookie Clicker
∛(lifetime/10¹²), AdVenture Capitalist150·√(lifetime/10¹⁵), Egg Inc(run/10⁶)^0.14. Lifetime-based pushes longer runs each cycle; run-based encourages frequent resets — for minutes-long browser games, run-based usually fits. First prestige should arrive in the first session or two; place milestone bumps just past the natural wall so reset always has a visible goal.
Balance audit (scriptable — simulate the economy headlessly)
- Inventory: resource table per above; flag inflation/soft-lock/dead options.
- Soft-lock sweep: for each spendable, simulate worst-case spending to zero — is there an income path back?
- Dominant strategy check: benefit/cost for every option at early/mid/ late states. Anything >15–20% above the curve will be the only choice; anything nobody would buy gets buffed or cut.
- Difficulty-vs-power race: plot challenge (enemy HP/DPS/speed per minute) against attainable player power. No unwinnable wall, no long boredom plateau, trivial only for the first ~30s.
- Reward cadence: simulate a session; want feedback every few seconds, a meaningful choice every 30–90s, a session payoff at the end. Check max dry streaks on rares.
- Loop polarity review: every + loop has a brake, every − loop dampens rather than erases.
- Prestige math (if any): second run measurably faster; the wall arrives at ≈ intended session length.
- Watch one real first-timer (or cold playtest): your numbers were calibrated by someone who's played 1,000 times.
Related skills: design-lenses (Meaningful Choices/Reward lenses find what
this fixes), level-design (wave scaling), onboarding (difficulty feel),
game-playbook (build order).