← Back to the Lab

Combat Variants — Depth Audit & Rigging Direction

Version: 1.0 Date: 2026-08-01 Owner: Design / Combat Status: Analysis + proposal. Governed by 00-CHARTER.md. Supersedes nothing; recommends amendments to the charter (§6) and a prune of the slate (§5).

[!important] One-line finding The 25 prototypes vary what the dice mean. None of them let the player change what the dice are. Rigging — the stated centre of the game — is absent from the search.


1. The evidence

Measured directly against the 25 built prototypes, not against the design docs.

Check Result
Prototypes that boot and play cleanly 25 / 25 (headless, 45 clicks each, zero JS errors)
Prototypes with persistent die-face state 2 / 25 — V09, V10
Prototypes where the player writes a die face 1 / 25 — V10
Prototypes using the word "rig" in any form 0 / 25
Player-facing dice verbs available anywhere in the slate roll, reroll

V09's single face-write is faces[blankAt] = "Akasha" — an access gate fired by the engine at 50% enemy HP, not a player action. V10 "The Written Die" is the only rigging-native prototype in the set, and it is the correct seed for everything in §4.

The two engine tiers also differ in fidelity: V01–V13 are bespoke; V14–V25 share one engine whose damage pipeline is pipeline(raw, weak) — Weak only, no Strength, no Vulnerable. Only 7 of 25 files reference Vulnerable at all. Throughput numbers from V14–V25 are therefore not comparable to the charter's tuning targets.


2. Why this reads shallower than Slay the Spire / Inscryption

Depth in the two reference games comes from three properties. The slate has none of them.

(a) Choices compound. In StS every card added or removed permanently changes the engine; by act 3 your deck is an argument you have been making for an hour. In all 25 prototypes the dice reset to the same 12 faces every turn of every fight. Nothing accumulates. The only persistent state is board paint (V04) or a meter (V07), and both are wiped at combat end.

(b) Effects combine multiplicatively. Inscryption's sigils graft onto cards and stack, so two mediocre pieces make one absurd one. The slate's element verbs are selected, never combined — the element die picks exactly one of four behaviours per roll. The branching factor is 4, fixed at design time, and the player never authors an entry.

(c) The randomness is planned around, not merely absorbed. StS shows you enemy intent, so the dice-equivalent uncertainty is resolved before you commit. Most of the slate rolls first and asks you to react. V09 is the one variant that inverts this correctly, and it is the most interesting non-rigging design in the set for exactly that reason.

The structural diagnosis: these 25 are decoder rings, not engines. Each supplies a lookup table from die face → meaning. Depth is bounded by the size of that table, and the table is authored by us, not by the player. That ceiling is why the slate plateaus around "read the roll, place a card, maybe reroll" — roughly two decisions per turn with a branching factor of four.

The second diagnosis: reroll is the wrong verb. It is the only dice-facing action in the entire slate, and it is the least interesting possible interaction with a randomiser — it resamples the distribution instead of changing it. Agency over luck should mean editing the odds, not spinning again.


3. What the reference designs teach

From the board-game lineage the brief pointed at (BGG categories 1002 Card Game + 1017 Dice), plus the digital dice-builders in the Slay the Spire lineage.

Sources: Dice Forge review — The Thoughtful Gamer, Dale Yu: Review of Dice Forge, Components: Dice With Swappable Faces (BGG family), Astrea: Six-Sided Oracles, PC Gamer on dicebuilders, Modal Dice.


4. Proposed direction — the die is the deck

One principle: rigging is deckbuilding applied to the randomiser. Twelve faces across two dice are the player's build — finite, physical, and entirely visible on screen. That is a smaller and more legible build surface than a 30-card deck, which is how this stays easy to comprehend while going deeper.

The proposals below are ordered by confidence. R1 and R2 together are the recommended core; the rest are modular additions that can be tested independently.

R1 — ETCH (the core proposal)

Teaching sentence: "Play a card to use it now, or etch it onto a blank die face to keep it forever."

Why it creates depth. Every card in hand now carries the same question Slay the Spire asks at a card reward — is this worth a permanent slot? — except it fires several times per turn instead of once per run. Etch too eagerly and you have nothing to play this turn; etch too little and your dice stay weak. That tension is continuous, legible, and entirely player-made.

Why it stays simple. It adds exactly one verb. The board already shows the dice; etched faces are just drawn on them. A new player understands it the first time a face they wrote comes up.

Immediate payoff (the Dice Forge fix): etching a face makes it live on the next roll of that turn — never a delayed investment.

R2 — SCRAPE (the consistency lever)

Teaching sentence: "Grind a face blank to make the die more reliable."

Card removal is the strongest deck-improving action in Slay the Spire, and the dice-builder genre almost always forgets its equivalent. Scraping an etched or base face back to blank costs a resource and narrows the die toward the outcomes you actually want.

This is the direct answer to "I built great dice and still rolled badly." Rigging must be able to buy consistency, not only power. R1 without R2 is a strictly worse design.

R3 — NUDGE replaces (or joins) REROLL

Teaching sentence: "Pay to turn the die one face, instead of rolling it again."

Rerolling resamples. Nudging rotates the die one step to an adjacent face — deterministic, tactical, and it makes the physical arrangement of faces matter. Which face you etch next to which becomes a real decision, and the die acquires a topology the player can learn and exploit.

⚠️ This conflicts with charter C6.1, which mandates a player-invokable reroll. See §6.

R4 — THE KNOWN FACE (information instead of resampling)

Teaching sentence: "You always know one of next turn's two faces."

Show one die's next result a turn early. This is the Slay the Spire intent-telegraph, and it converts luck into planning at almost zero rules cost: the player places cards knowing half the answer. V09 already proves the telegraph is the strongest non-rigging idea in the slate; this generalises it and composes perfectly with R1 (you etch toward what you can see).

R5 — FACE COUNT AS THE BUILD BUDGET

No new rules — a framing decision to adopt explicitly. Twelve faces is the entire build. Every etch spends a scarce, visible, physical slot. Opportunity cost is inherent, so rigging needs no artificial currency to be meaningful, and the player can read their whole build at a glance. Adopt this as the balancing frame rather than inventing an upgrade economy.

R6 — DUPLICATE FACES MATTER (from Modal Dice)

Etching the same effect onto two faces should be a real strategy: it doubles the odds and can carry a small bonus when both dice show it. Cheap to implement, and it gives players an obvious "go wide vs. go tall" axis — the kind of self-authored plan that reads as creativity.

What element identity becomes under this model

C7 (elements must be more than suits) gets easier, not harder. Each element becomes a rigging style — a verb about the dice themselves, which is exactly the "board-state" test C7.4 asks for:

This satisfies C7.1–C7.4 with verbs that touch dice state, and it makes the elements differ in how you build, not merely in what colour matches.


5. Prune list

[!done] Executed 2026-08-01 All 11 variants below were cut from the lab. The live slate is now 14 prototypes. Pruned files moved to prototypes/combat-variants/archive/ and preserved in git (commit daca86d9) — nothing was destroyed, and any cut can be reversed with a git mv back.

Cutting on two rules: (a) it was already rejected once on comprehension grounds and the rebuild confirmed it; (b) it exceeds the C8.2 seven-rule budget.

Cut — rebuilt rejects that confirmed their own rejection

V11 Forge (arithmetic on every roll) · V15 Engraving (a face must show number + colour + level; fails C8.5) · V16 The Churn (cross-turn mental transform) · V17 Declare (slot 1 live almost always, slot 4 almost never) · V18 The Walker (trail fires where attention just left) · V19 Fuse (deliberately empty turns)

Cut — over the complexity budget

Cut the shared mechanic: the elemental wheel

FEEDS / SMOTHERS / CLASH / PURE recurs in V02, V05, V08, V13, V14 and V16 — the most-reused idea in the slate and its single largest complexity generator. It asks the player to memorise a directed graph over four elements plus four relations, then evaluate it every roll.

Recommendation: if any wheel survives, reduce it to two relations — same (strong) and opposite (clash) — and drop feed/smother entirely. Two relations are readable at a glance; four are not.

Keep — a focused shortlist, each teaching exactly one thing

Keep Why
V10 The Written Die The rigging seed. Everything in §4 is a generalisation of it.
V09 Their Dice Best telegraph/information design; becomes R4.
V01 House Rules Cleanest near-core baseline; the control in any playtest.
V07 One Wick Proves a single visible meter can carry a whole economy.

Everything else becomes reference material rather than a live candidate.


The charter is well built, but it has a gap and a conflict, both of which the audit exposed.

Gap — nothing requires the dice to be more than a randomiser. C7 demands that elements be more than suits; there is no equivalent demand on the dice. Propose:

C9 — THE PLAYER MUST BE ABLE TO CHANGE THE DICE. A prototype must offer at least one player-invokable action that alters the dice's face content or distribution and persists beyond the current roll. Rerolling does not satisfy C9 — it resamples the existing distribution rather than changing it. Checks: C9.1 the action is reachable from the normal turn loop, not only via a reward screen. C9.2 its effect survives at least until end of combat. C9.3 the change is visible on the die itself. C9.4 a test can construct the action and observe an altered face.

Conflict — C6.1 mandates the weakest dice verb. It requires a reroll to exist, which blocks R3 (nudge) from ever being tested as a replacement. Propose relaxing C6.1 to: "a player-invokable action that changes the current roll's outcome exists and costs a stated, non-zero amount" — satisfied by reroll or nudge. The cost/boundedness checks C6.2–C6.5 stay exactly as written.

Also worth recording: C8.4 currently flags the live core's own vocabulary collision (EitherMatch meaning both-match). Etching adds etch / scrape / blank — keep those three words fixed and player-facing from the start rather than inheriting a second naming debt.


7. Next build — three prototypes, not twenty-five

[!done] Built 2026-08-01 — V26, V27, V28 Generated from one engine (tools/build_etch_prototypes.py) precisely because they are additive; isolating one variable requires a byte-identical base. Verify with --check.

Sim results — 300 games each, competent scripted policy:

Build Win rate Avg turns Dmg/turn
V26 Etch 59.0% 9.0 6.2
V27 Etch + Known Face 53.3% 9.2 6.0
V28 Etch + Element Styles 59.7% 10.3 5.6

All three land inside the charter's 6–12 turn band and on its ~60% win-rate target.

The load-bearing test. Running the identical policy with etching disabled gives a 0.0% win rate and halves throughput (6.2 → 2.9 dmg/turn). Rigging is not a cosmetic layer over a normal fight — remove it and the game is unwinnable. This is the direct answer to the Dice Forge critique in §3 ("strip the dice-building and it's a familiar euro").

⚠️ V27's number is not yet meaningful. The scripted policy ignores the revealed face, so the sim cannot measure foresight's benefit — its 53.3% reflects a bot playing blind to the one feature under test. V27 needs human playtesting, not more simulation.

Two rules changed from the charter's live core, both inside §4's "free to vary": resolution is now number-die-picks-the-slot with an element match doubling it (both-match at ~1/9 per turn starved the fight — measured, not assumed), and energy is 2 + empty slots. The damage pipeline keeps the charter §5 order and implements Strength, Weak and Vulnerable; Dexterity, Frail, Thorns and Venom are not exercised by these decks.

Original specification

The slate's problem was never volume. Build V26–V28, each isolating one variable:

  1. V26 — Etch. R1 + R2 only. No element verbs beyond the current match rule. The question: is choosing "use now vs. keep forever" fun on its own? This is the make-or-break test.
  2. V27 — Etch + Known Face. Adds R4. The question: does seeing one face ahead turn etching from a gamble into a plan?
  3. V28 — Etch + element rigging styles. Adds the §4 element verbs. The question: do the elements differentiate as build styles without breaking the 30-second read?

Reuse the V10 codebase for all three — it already has per-face state and an engrave/clear UI, so it is the cheapest possible starting point.


Changelog