Manual · Content and homebrew

The `_sheetling` block

Where it goes, its seven keys, one worked entry, the rules about ids and pools, and the same block inside a Fight Club 5 file.

A _sheetling object beside an entry's own text, a sibling of entries. 5eTools ignores keys it does not know, so the file stays valid there.

Where it goes

The keys

KeyLands onWhat you see on the sheet
effectsany entry the block may sit ona tracker, a toggle, a bonus labelled on the number it changes, a rider offered on an attack, a button that rolls or heals
replaceEffectsthe sametrue swaps the format's own effects for yours instead of adding to them
onUseitems onlya button on the item's row: heal rolls once, effects starts a running effect the player dismisses by hand
prerequisitefeats and optional featuresa real gate: minLevel, abilityAtLeast, spellcasting, feature, spell, knownCantrip
featureChoicesthe class, subclass, race or subrace entrya pick in the wizard, or on level-up at the level the group names
spellcastinga caster class or subclassspellListOf: whose spell list a third caster borrows
textany entry except a background and the four entry-level onesreplaces the card's rendered sentence

One entry, four effects

{
  "name": "Ashwing Surge",
  "entries": ["Once between Long Rests, you gain a Fly Speed equal to your Speed while you hold the stance. If the surge would reduce you to 0 Hit Points, you drop to 1 instead. Either spends the charge."],
  "_sheetling": {
    "effects": [
      { "kind": "grants_resource", "id": "show_ashwing_charge", "name": "Ashwing Charge", "max": 1,
        "reset": [{ "on": "long_rest", "amount": "all" }], "display": "counter" },
      { "kind": "grants_toggle", "id": "show_ashwing_on", "name": "Ashwing Surge", "costTrackerId": "show_ashwing_charge" },
      { "kind": "grants_movement", "mode": "fly", "distance": { "equalToWalk": true },
        "condition": { "toggleActive": "show_ashwing_on" } },
      { "kind": "hp_trigger", "id": "show_ashwing_trigger", "name": "Ashwing Surge", "on": "reduced_to_zero",
        "then": { "kind": "stay_at", "hp": 1 }, "uses": { "trackerId": "show_ashwing_charge" } }
    ]
  }
}

A pool, a toggle that spends it, a fly speed gated on the toggle, and a trigger that spends the same pool. Effect kinds lists every kind with its fields.

A pick group

{
  "_sheetling": {
    "featureChoices": [
      { "id": "show_emberkin_ancestry", "level": 1, "name": "Ancestral Line", "count": 1,
        "options": ["Ashborn Line", "Frostborn Line", "Stormborn Line"] }
    ]
  }
}

Each option resolves in order: a same-file class or subclass feature by name, a same-file optional feature, one of this species' own traits, then a shipped id written verbatim (fighter_style_defense). One unresolved option drops the whole group with a row; the entry still imports.

Validation rules

Inside a Fight Club 5 file

The same JSON, as CDATA in a <sheetling> element, last child of the <feature>, <trait>, <feat> or <item>. Let the format say what it can: a flat bonus is a <modifier>, and a pool the file already has is spent with @counter:.

<autolevel level="1">
  <feature>
    <name>Ashwing Surge</name>
    <text>Your wings flare with banked fire. …</text>
    <sheetling><![CDATA[{
      "effects": [
        { "kind": "grants_toggle", "id": "show_ashwing_on", "name": "Ashwing Surge",
          "costTrackerId": "@counter:Ashwing Surge" }
      ]
    }]]></sheetling>
  </feature>
  <counter><name>Ashwing Surge</name><value>1</value><reset>L</reset></counter>
</autolevel>

A counter's formula may use %N tokens: %1 to %6 are the ability modifiers, Strength to Charisma, and %0 the class's own casting modifier.

Download the showcase file: a species, a subclass, two feats, a background, a spell and an item, every key used once, run by the test suite on every release.