Mutant Monster Vengeance is a survival-horror skin — Resident Evil and Silent Hill texture, body-horror-forward, slightly realistic and sickly — laid over a deliberately light d20 engine. The design bet: the horror should live in the fiction and the imagery, while the math stays small enough to run mid-fight without breaking the mood. One die, one stat, one target number. Everything else is progression.
Where the Rules Live
Rules are split by reader:
- World GM Instructions (the world's GM Instructions tab) hold everything the Game Master runs: the premise and tone, the core roll, the Escalation tracker, kill spoils, the level-up procedure, mutation stamina, destruction, civilians and forces, random encounters, random features, death, and the endgame. Edit there, not here — the files are reference material, never rulings.
- Reference files hold data the GM looks up when a moment calls for it: the mutation catalog, the enemy bestiary, the ten levels. The GM Instructions point at them (e.g. "see the /Mutations/ files") rather than copying them.
The split test: if a rule tells the GM what to do, it belongs in the GM Instructions. If it tells the GM what something is, it belongs in a file.
The File Types
| Type | Purpose | Notable plumbing |
|---|
| Character | The player's mutant sheet: stats, XP, biomass, appearance, mutations | Stats run 3 (human normal) → 50 (hard cap). Defense is armor: every hit deals Defense ÷ 5 less (round down, min 0). maxHp is computed: 10 + 2×level + (Endurance − 3). Never stored. The creation wizard runs before play, in two passes: name + former look and life (optional, "if you remember") → what you look like now (free description), then on that same final pass the first mutation and a stat allocation (stats base 3, 5 points at 1 point = +1, a stat may be dropped to 1 to reclaim its points). The wizard's mutation pick is a scalar: it stores the chosen file in the firstMutation reference field, and the GM registers it as a rank-1 mutations[] entry at game start — a choice screen cannot write the array field directly. The eyes/mouth/nose feature menus are NOT player options — they are random-generation tables the GM rolls for other mutants and civilians that keep human features. |
| Mutation | One mutation: category, cost, effect, growth tiers, optional elemental resistance, prerequisites | Character sheets reference these by slug in mutations[] with a rank (1–5). Mutations are a player-only system — enemies never use them. |
| Enemy | One stat block: category, size, stage, HP, defense (armor stat), damage, attacks, behavior | Symmetric with the player: Strength, Power, Agility, Endurance and Armor are computed from stage and size (bosses +2; Defense stays stored at 8 + stage as the armor stat; Armor = floor(Defense ÷ 5)). xp and biomass are computed from size × stage. Never store computed values. Combat rolls the same for both sides: d20 + Agility vs the target's Agility. The Enemy type carries no character designation — it never appears in character pickers. |
| Level | One of the ten game levels: zone, summary, exactly five stages, hazards, destructibles | boss and miniBoss are references to enemy file slugs |
| Location | The physical world, nested: house → suburbs → city; Spire → vault | Ways between places are set as links/exits, not prose |
| Game Start | The lobby card plus the play configuration: opening beats, starting location, the pregen mutant | The prelude plays in the lobby first — and its very first screen asks the game type: Normal (sparse narration, grid combat with environment, full d20), D20 Narrative (stats and d20, cinematic, no map), or Pure Narrative (no dice, no numbers); the player options echo that pick (plus Difficulty), and each feeds the GM its own rules. The prelude's answers seed the opening: the infection (batch SAVEALL-7 — a SaveAll-brand frozen dinner, a SaveAll-brand protein bar handed out at the grocery store, or company food because the player worked there) and the first sign. |
The principle throughout: reference, don't duplicate. A character sheet does not copy a mutation's cost — it points at the mutation file and carries only the rank. A level does not restate its boss's stats — it names the enemy. When you change a source file, every reference follows automatically.
The Core Loop in Numbers
Kill → spoils (enemy's XP + biomass, scaled ±10% per level gap, bonus capped at +100%) → spend XP to level (2 stat points + 1 mutation choice per level, threshold 100 × current level; 1 point = +1 to a stat; stat cap 50, level cap 120 — all five stats at 50 lands at level 116) and biomass to mutate (new mutation at listed cost, rank-up at cost × new rank, removal refunds half). Combat is one roll for everyone: d20 + Agility against the target's Agility, damage adds Strength (physical) or Power (special), and Defense soaks Defense ÷ 5 as armor on both sides. The city answers through the Escalation clock. That's the whole engine; the ten levels are the pressure that keeps it turning.