Guide

Contributing a game system

For contributors: the system format (sheet, formulas, rolls, lists), permitted content and submission to the catalogue.

In Striped Dice, a game system is a JSON file: it describes the character sheet, its formulas, its rolls and its reference lists. The 21 catalogue systems are written this way; the no-code editor and the rulebook import produce the same format.

Permitted content

The rule is strict: names and mechanical values only. A skill and its base, a weapon and its damage, a spell and its level: yes. A paragraph of description, an illustration, a scenario, an excerpt: never. Every system carries a notice saying so ("Compatible with X. X is a trademark of Y; rulebook texts are not reproduced.").

Free licences (CC-BY, ORC, Cypher Open) allow more; we keep the same line anyway, out of caution and simplicity.

The structure

{
  "slug": "my-game", "nom": "My game", "version": "1.0.0",
  "famille": "d20", "licence": { "type": "compatible", "libelle": "…" }, "mention": "…",
  "token": { "nom": "nom", "pv": "pv", "pv_max": "pv_max" },
  "onglets": [ { "id": "perso", "titre": "Character" } ],
  "sections": [
    { "id": "caracs", "titre": "Abilities", "onglet": "perso", "colonnes": 3, "champs": [
      { "id": "for", "type": "nombre", "libelle": "Strength", "defaut": 10 },
      { "id": "for_mod", "type": "formule", "libelle": "Str mod", "formule": "floor((for - 10) / 2)", "signe": true,
        "jet": { "libelle": "Strength check", "mecanique": "d20", "bonus": "for_mod" } }
    ] }
  ],
  "jets": [ { "id": "initiative", "libelle": "Initiative", "mecanique": "d20", "bonus": "dex_mod" } ]
}
  • Fields: texte, texte_long, nombre, jauge (value and maximum), case, liste (with options, or source = a reference list, multiple for several picks), de, tableau (typed columns, rows added by the player), formule, titre.
  • Formulas: arithmetic, floor, ceil, round, min, max, abs, somme, conditions (si(x > 10, 1, 0)), shortcuts mod5(x) (D&D modifier) and moitie(x), and the ids of other fields. They recompute live, in the right order.
  • Rolls: a mechanic (d20, d100_sous, pool_seuil, pool_d10, d6_system, d100_ouvert, expression, cypher, fate, ironsworn) with its parameters (bonus, cible, seuil, dd…). The roll option bar (advantage, DC, difficulty, bonus dice) follows from the famille.
  • Reference lists: resources/systemes/<slug>/donnees/<list>.json, entries such as { "nom": "Longsword", "degats": "1d8" }. A liste field with source offers them; remplit copies values into other fields; prerempli on a table creates all rows in advance (RuneQuest's 55 skills).
  • Initiative, defences, Roll20 import: optional blocks that plug the turn tracker, damage resistances and Roll20 sheet import.
  • Versions: version in semver and, when the sheet changes, migrations (rename, default, remove, formula, to table) applied to existing sheets on read.
  • English: a <slug>.en.json file translates labels by id, <slug>.en.donnees.json the lists by French name. Never a value compared in a formula.

The full schema is resources/systemes/schema.json; the "rules covered" page of every catalogue system shows the result.

Writing without code

In Systems, "Derive this sheet" copies an existing system into your space; the editor lets you add sections, fields, formulas and rolls with a live preview. A personal system is only visible to you, in your campaigns, until an administrator publishes it.

Proposing a system for the catalogue

Write to us on Discord (game systems channel) with: the game's name, its publisher, the licence or the reason compatible mechanics are enough, and your sheet (exported from the editor, or the JSON). An administrator reviews, tests (FicheTest validates every file against the schema), adds the legal notice and publishes. Games of French origin are especially welcome.

The Game systems page: the catalogue, your sheets and the “Propose a game” form. The Game systems page: the catalogue, your sheets and the “Propose a game” form.