Builder's Manual · Chapter 1

Building a Splat Module

A splat module is a self-contained rule package you layer onto the core framework to make a new kind of supernatural character: vampire, mage, werewolf, demon, mummy, or your own homebrew. The core book gives you mortals and the dice engine; a splat decides what a character of that type can do, what it costs, what goes wrong, and what they can never escape. Splat files override the core rules where they differ — everything else stays core.

The example files in the project show the two ends of the job. "Sarah Chen" is a complete mortal with "splat": "mortal" and an empty powers list. "Sharpened Senses" is a complete vampire power (family Auspex, level 1) that models the exact Power file format. Clone both as templates. When you are ready to write the module itself, start from the "Splat Module Template" in the Splat Modules folder — it has a placeholder for every part below.

Anatomy of a splat

Every splat is six parts. Each part has a job; don't bolt on parts that don't earn their complexity.

PartWhat it isDesign intent
Power meterA tracked resource (Hunger, Rage, Mana, Faith, Ember) with explicit rise and spend mechanicsPowers need a real cost or they become free buttons. The meter is the pressure valve: it rises from what the splat is about (feeding, anger, paradox), and spending it is the only way to use powers. Design the rise rules so the meter climbs during play, not just at creation.
Power families & levelsNamed schools (Auspex, Celerity…) each with powers at levels 1–5Levels are the splat's progression ladder. Level 1 powers should be usable from the start; level 5 should be setting-altering. A family's level-1 power states the family's identity — build it first.
Activation rollConventionally the power's rating + a fitting Attribute or Skill, paid for from the meterThe dice pool comes from the framework, so players never learn a second resolution system. You choose the fitting Attribute or Skill per power and say so in the Power file's roll field.
Failure escalationA rule that turns failed power rolls showing 1s into a signature consequence (messy criticals, frenzy, paradox)This is what makes a splat feel dangerous rather than merely powerful. The failure rule is the GM's license to make the supernatural misfire in genre-appropriate ways. It should scale with how badly the roll failed.
BaneA weakness (sunlight, silver, fire, running water)Every splat pays for its powers with a vulnerability. Keep it to one or two concrete triggers — something that creates scenes, not bookkeeping.
Humanity-like scale (optional)A moral/sanity track the splat's extremes erodeOnly include it if sustained power use should corrupt the character. If you include it, say what raises it and what spending it buys.

The strongest splats make all six parts rhyme: the meter rises from the same things the bane punishes, and the failure escalation feeds the corruption scale.

Authoring Power files

Every power is a Power file with exactly these fields. Match the constraints — they exist so sheets and pickers can rely on the shape.

FieldTypeConstraintMeaning
namestring≥1 charDisplay name.
splatstring≤40 chars, lowercaseThe splat slug this power belongs to.
familystring≤60 charsThe power family, capitalized (Auspex, Cinders).
levelnumber1–5Family rank.
coststring≤120 charsWhat the meter pays, and any side effects (e.g. "Spend 1 Ember — on a failure, Ember rises by 1").
rollstring≤120 charsThe activation pool and what happens if you skip it ("No roll — the power simply takes hold" is valid).
durationstring≤60 chars"One scene", "One turn", "Until sunrise".
effectstring≤1200 charsWhat the power does, including concrete dice bonuses.
descriptionstring—Optional creator note; put flavor here, not in effect.

The character sheet's powers field is a reference to Power files, and its schema filter does the linking for you: it only offers powers whose splat equals the character's splat. That filter compares the two splat strings by identity — so the same canonical slug must appear in every Power file and in every character's splat field. A mismatch saves with a warning and the power stays out of that character's picker. There is no other linkage: no IDs, no family registry. The discipline of one exact lowercase slug is what makes the whole system cohere.

Naming conventions: name files Name.power.json in /Powers/; the file slug derives from the name, so "Sharpened Senses" → sharpened-senses. Family names are capitalized; levels are spelled "level 1", not "level one". Keep the splat string identical everywhere — decide the slug once, at the top of the splat's design, and quote it in every Power file and every example character.

Where the splat's rules live

A splat is not a pile of Power files. The Power files describe individual effects; everything else — the meter and how it rises, the activation convention, the failure escalation, the bane, the humanity scale — is a splat module: write it as a Splat Module file (the template shows the shape), as GM-side instructions, or both. Do not duplicate core rules into it ("a roll is Attribute + Skill" is core; say it once, never in your module). Your module only states what the splat changes and what it adds. When a splat rule must override the core, state the override explicitly and cite what it replaces. This keeps the framework composable: drop the module in or out and the core book still reads correctly.

Worked example: the Emberkin

Say you are cloning the project to add a homebrew splat, the Emberkin — humans who swallowed a dying star's spark. Splat slug: emberkin. Meter: Ember (0–10), rising 1 point each time the character feels genuine wonder or despair, and never dropping below 1 while they hoard warmth from others. Bane: running water — crossing it costs all Ember and inflicts bashing damage. Failure escalation: on a failed power roll that shows at least one 1, the Ember surges — the power misfires at full force against the user's intent (the GM adjudicates a signature consequence).

Start with one level-1 power in the family Cinders:

{
  "name": "Warm Gaze",
  "splat": "emberkin",
  "family": "Cinders",
  "level": 1,
  "cost": "Spend 1 Ember",
  "roll": "Charisma + Cinders (rating 1)",
  "duration": "One scene",
  "effect": "Your gaze carries the star's warmth: add 3 dice to any roll made to persuade, comfort, or calm one person you can hold eye contact with. At the GM's call, a person who fails a Resolve + Composure contest against your roll forgets, for the scene, why they were afraid of you."
}

The failure consequence for this power, written into the module's escalation rule: "If Warm Gaze fails and the roll showed a 1, the warmth lands on everyone in the room — they feel the surge as a threat. Add 2 dice to any hostile or suspicious action taken against you for the rest of the scene, and the GM may introduce one minor complication per 1 rolled."

Then ship an example character: clone Sarah Chen, set splat to emberkin, give her Ember rules in her notes, and add "powers": ["warm-gaze"] — the picker accepts it only because both files carry the same slug.

Shipping checklist

  • One canonical splat slug, lowercase, ≤40 chars, decided once and used verbatim in every Power file and every character.
  • All eight Power fields populated within their length constraints; effect holds mechanics, description holds flavor.
  • Splat module written from the template (a Splat Module file, GM-side instructions, or both) — meter rise/spend, activation convention, failure escalation, bane, and any humanity scale, each stated as additions or explicit overrides, never re-stating core rules.
  • At least one complete example power at level 1, with a concrete failure consequence in the module.
  • At least one complete example character with splat set and a populated powers list referencing your example power.
  • The example power and example character actually load together — if the reference saves with a splat mismatch warning, your slug is inconsistent somewhere.
Manual updated Nov 3, 2026.