← Back to the Lab

Combat Variants — Grounding + Constraint Charter

Version: 1.0 Date: 2026-07-31 Owner: Design / Combat Status: Binding on every prototype in prototypes/combat-variants/.

[!important] This document designs nothing. It records (a) what the combat core factually is today, (b) why elements currently fail, and (c) the hard constraints every prototype must satisfy. Any prototype that violates a numbered constraint in §3 is rejected without evaluation.

Sources read

[!warning] The docs disagree with each other by design. combat-rework-spec.md and the combat sections of base-game-rules-canon.md both carry STALE banners pointing at the Empty-Slot proposal. The wiki concept pages (dice.md, slot.md) are older still — dice.md states a 1/3/5 escalating reroll curve and a free first roll, which no live doc supports. Where they conflict, §1 below states the live rule and names the stale variant.


1. The current core, precisely

1.1 Dice — exactly two, both d6 with blanks

Die Faces Notes
Number die 1, 2, 3, 4, blank, blank Faces 1–4 each target the slot of the same index. Blanks target nothing.
Element die A, A, B, B, blank, blank A and B are the run's chosen element pair. Blanks match nothing.

1.2 Slots — four, number-linked, one card each

1.3 Proc / match rule — both-match, deferred, non-latching

1.4 Energy model — board-as-battery (empty-slot snapshot)

1.5 Reroll cost curve — 1 then 3, flat thereafter

1.6 Element roster — five, one gated

Element Theme Signature status effects it currently leans on
Agni (fire) aggression, conversion Strength scaling, Ritual ramp, block-to-damage, burn
Jal (water) control Weak, Frail, debuff stacking
Vayu (wind) speed, manipulation Energy, hand cycling, Venom, Dosha removal
Prithvi (earth) defense Thorns, Block, Barricade / PlatedArmor / Dexterity
Akasha (ether) rare, conditional Home of every Dosha; gated

1.7 Card flow — sticky hand, no cycling, clog is the pressure

1.8 Turn structure — strict phases, placement locks on first roll

  1. Turn start / energy snapshot — count empty slots → that is this turn's energy.
  2. Draw — 1 free; optional paid draws from discard.
  3. Place — place cards from hand into empty slots.
  4. Roll — first roll costs 1. Once you start rolling you can no longer place. Each consecutive reroll costs 3. Every roll re-derives all locks from the current dice.
  5. Resolve — at turn end, cards locked against the final dice state fire their effect and leave to discard. Everything else clogs.
  6. Clog reset — full board + zero procs → exhaust all four at start of next turn, 4 energy.

Sim-measured this-turn proc odds from a clean 4-energy start (2 rolls): 1 card down 11.6–12.1%, 2 → 23.3%, 3 → 34.0–34.5%, 4 → 43.8%. Commit strictly dominates turtling.

1.9 Damage pipeline (unchanged by any rework — wiki/concepts/combat-math.md)

Outgoing: clamp0 → +Strength → ×Weak (floor) → ×Vulnerable (ceil) → Boot chip floor → clamp0. Incoming: Intangible caps to 1 → Block absorbs → remainder to Health. Block gain: (base + Dexterity) × Frail, floored. Thorns fires per hit, only on isAttack=true, and bypasses the attacker's Block. Venom decays Intensity, not Duration, and skips Block. Prototypes must not silently change this pipeline — it is shared with relics, enemies, and every status effect.


2. What is WEAK about elements today

This is the central design problem. Today an element is a colour-match key and nothing more at the level of the core loop. Concretely:

  1. The element die contributes exactly one bit to resolution: match / no match. Under the live both-match rule the element lane is a pure AND-gate. It has no magnitude, no direction, no ordering, no board effect. Swapping every Agni face for Jal changes which cards fire, never what firing does.
  2. All five elements are mechanically interchangeable in the core. There is no rule anywhere in the resolution path that reads "if the element is Agni, then…". Elements are symmetric tokens; the engine treats them as equal-probability colours.
  3. Element identity lives entirely in card text, one layer below the core. Agni means Strength/Ritual, Prithvi means Block/Thorns — but only because designers wrote those effects onto cards tagged with that element. Retag the cards and nothing in the system objects. The element is a label on the payload, not a behaviour of the board.
  4. The four elements share one identical proc probability. 2/6 element faces for both members of the pair. There is no element-differentiated frequency, cost, or timing, so there is no reason to prefer one element's mechanics over another's — only its card list.
  5. Elements do not interact with each other. No reaction, no combo, no counter, no suppression, no conversion. Agni next to Jal does nothing. A four-element board is just four independent 1/16 lottery tickets. There is no elemental state on the board at all.
  6. Elements do not touch slots, energy, dice, or turn order — the four other core nouns. The element lane is orthogonal to every economy in the game.
  7. Akasha's only distinctive mechanic is access, not behaviour. element.md says it outright: "Mechanically it lives where the other four live… What makes Akasha distinct is access." Its one true mechanical differentiator, NumberProc (fire on number alone), is defined in code, authored on zero cards, and unauthorable from the inspector. The single element with a real verb has that verb switched off.
  8. The strongest element-shaped signal in the system is a balance bug, not a design. The sim's finding that Akasha number-proc cards fire ~3.6× more often (43.8% vs 12.1%) is a probability asymmetry — the game's biggest element differentiator is "this colour procs more", which is still not a verb.
  9. The player's element choice is therefore a deck-list choice, not a play choice. Picking Agni+Jal at run start selects 12 cards and 4 die faces. Once combat begins, no turn-to-turn decision is ever framed as "what does fire do here?" — only "does the die show my colour?"

Charter position: an element that only functions as a colour-match key is a violation (see §3.7). Every prototype must give each element something that changes what happens on the board, not whether something happens.


3. The Constraint Charter (hard — violation = rejection)

Each constraint is stated, then expanded into a check a QA auditor could verify by reading the prototype's code and data.

C1 — EXACTLY 2 DICE, ALWAYS

Base 2, max 2. The player never gains a third die and never loses one. No die-splitting, no temporary extra dice, no phantom dice. Both dice exist from turn 1 to the end of combat.

Testable checks

C2 — ONE DIE IS A D4 (the other is the element die)

It has 4 value faces (1,2,3,4). Blank faces may replace values, but the die is never larger than a d4 in value range. The second die is the element die.

Testable checks

C3 — SLOTS EXIST AND NEVER EXCEED 4

Fewer than 4 is allowed. What a slot means may be redefined. The count must never go above 4 under any circumstance, upgrade, or effect.

Testable checks

C4 — CARDS EXIST as the played resource

There is a deck, a hand, and cards go into slots.

Testable checks

C5 — ENERGY EXISTS as a visible spendable resource

With a stated income and stated sinks.

Testable checks

C6 — REROLLS EXIST and cost something

The player can choose to reroll.

Testable checks

C7 — ELEMENTS ARE MORE THAN SUITS

Each of Agni, Jal, Vayu, Prithvi (and gated Akasha) must have a distinct mechanical verb or behaviour that changes what happens on the board. An element that only functions as a colour-match key is a charter violation.

Testable checks

C8 — EXTREMELY INTUITIVE

The core must be graspable in under 30 seconds by a new player, expressible in one teaching sentence.

Testable checks


4. Explicitly FREE to vary

These are open. A prototype may change any of them without justification, and should say which it changed.

5. Not free to vary (outside the charter but still binding)


Changelog