This page shows how to build a class of your own, with all 20 levels, its own features and its own subclass choice, and offer it in the character builder beside RollQuest's classes.

For: Game Masters · Plan: Pro · 12 minutes

A class, such as fighter or wizard, is a character's training: it sets their hit points, what they're good at and whether they cast spells, and it gives them something new at every level from 1 to 20. In RollQuest a class is a ladder of 20 rows, one for each level, and each row says what that level gives: its features, its choices and, on level 1, everything that makes the class what it is. Your pack holds the whole ladder plus the features it hands out. Bind it to a game and add it to the Choose Your Class step, and players take your class like any other, level it up with Level Up and choose its subclass when it comes. The worked example on this page is the Glasswright, an original homebrew class written for this page: a spellcaster who works enchanted glass, with two workshops to choose from at level 3. The same class ships with RollQuest as its own example of a whole new class, and the authoring contract names it.

Plan: writing homebrew is on Pro. Your players don't need Pro to take your class in the character builder or to level it up.

The ladder

A class pack has two kinds of row: a class level row for each level (also called a kit), and a feature row for each feature the levels hand out.

flowchart TD
  CC["Choose Your Class<br/>the pack is routed into this step"] --> L1
  L1["Glasswright level 1<br/>hit die, training, saves, rests,<br/>spellcasting, skills, cantrips, spells"] -->|Level Up| L2["Glasswright level 2<br/>grants Prism Ward, a new spell"]
  L2 -->|Level Up| L3["Glasswright level 3<br/>Choose your Glasswright Workshop"]
  L3 -->|Level Up| L4["Glasswright level 4<br/>Ability Score Improvement, a new spell"]
  L4 -.->|"levels 5 to 19"| L20["Glasswright level 20<br/>grants Heart of Glass"]
  L1 -.->|grants| F1["Lenscraft"]
  L3 -.->|"Stained Glass"| F3["Sunlit Pane at 3<br/>Radiant Leading at 9"]
  L3 -.->|"Mirrorwork"| F4["Mirror Double at 3<br/>Silvered Eyes at 9"]

The class level rows are what make it a class:

  • Every row has meta.kitClass and meta.kitLevel. kitClass is the class's ID, one word with no spaces, such as Glasswright. kitLevel is the level, a whole number from 1 to 20.
  • The ladder is complete. Once a pack has two or more levels of a class, it must have every level from 1 to 20, each once. A gap would be a level whose Level Up does nothing, so the checker refuses it.
  • Features are separate rows without kitClass or kitLevel. Each one names its class in meta.class, Glasswright here. A level row grants them with autoInclude, so they arrive when the character reaches that level.
  • Only level 1 is offered in Choose Your Class. The other levels come one at a time through Level Up.

The ladder at a glance

Level What it gives
1 Hit die d8. Saving throws: Dexterity and Intelligence. Training: simple weapons, light and medium armour, shields, glassblower's tools, jeweller's tools. Spellcasting (Intelligence, half caster). Two skills, two cantrips, two level 1 spells. Lenscraft. Rest recovery, and spending hit point dice on a short rest.
2 Prism Ward (2 uses, back on a long rest). A new spell.
3 Choose your Glasswright Workshop: Stained Glass Workshop (Sunlit Pane at 3, Radiant Leading at 9) or Mirrorwork Workshop (Mirror Double at 3, Silvered Eyes at 9).
4, 8, 12, 16, 19 Ability Score Improvement, or a General feat.
6 Tempered Glass: resistance to fire damage.
7 Clear Sight (uses equal to the Intelligence modifier, back on a long rest).
10 Kaleidoscope (once per long rest), and one more cantrip.
11 Stored Daylight.
14 Unbreakable Pane: +1 AC, and one more cantrip.
18 Living Glass: resistance to force damage.
20 Heart of Glass: +2 to every saving throw.
2, 4, 6 … 20 A new prepared spell at each even level, up to level 5 spells.

Level 1, field by field

Level 1 does the most work: it's the row a player picks in Choose Your Class, and it carries everything that belongs to the class as a whole.

{
  "kind": "inventoryItem",
  "key": "CLASS_GLASSWRIGHT_L1",
  "spec": {
    "subType": "background",
    "name": "Glasswright (L1)",
    "meta": {
      "class": "Glasswright",
      "kitClass": "Glasswright",
      "kitLevel": 1,
      "hitDie": "d8",
      "multiclassPrerequisite": { "printed": "Intelligence", "abilities": ["INT"], "relation": "single" },
      "multiclassEntry": {
        "omitEffects": [
          "GLASSWRIGHT_L1_HIT_DIE_SIZE",
          "GLASSWRIGHT_SAVE_DEX",
          "GLASSWRIGHT_SAVE_INT",
          "GLASSWRIGHT_WP_SIMPLE",
          "LONG_REST_HP",
          "LONG_REST_HP_TEMP"
        ],
        "choicePicks": { "glasswright_skills": 0 }
      },
      "description": "L1 Glasswright: Lenscraft, hit point dice, Spellcasting (2 cantrips, 2 prepared spells).",
      "passive": true,
      "casterType": "half",
      "spellcastingAbility": "INT",
      "preparationStyle": "prepared",
      "preparedSpellsByLevel": [0, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12],
      "armor": "Light, Medium, Shields",
      "weapons": "Simple"
    },
    "effects": [
      { "id": "GLASSWRIGHT_L1_HIT_DIE_SIZE", "target": "HIT_DIE_SIZE", "op": "setTo", "value": 8, "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_L1_SPELL_ABIL_MOD", "target": "SPELL_ABIL_MOD", "op": "setMin", "value": "=INT_MOD", "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_SAVE_DEX", "target": "PROF_DEX", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_SAVE_INT", "target": "PROF_INT", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_WP_SIMPLE", "target": "W_SIMPLE", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_AP_LIGHT", "target": "A_LIGHT", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_AP_MEDIUM", "target": "A_MEDIUM", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_AP_SHIELDS", "target": "A_SHIELDS", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_TOOL_GLASSBLOWER", "target": "T_GLASSBLOWER", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
      { "id": "GLASSWRIGHT_TOOL_JEWELER", "target": "T_JEWELER", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
      { "id": "LONG_REST_HP", "target": "VF(\"HP\")", "op": "setToVF", "value": "HP_MAX", "condition": "", "trigger": "longRest" },
      { "id": "LONG_REST_HP_TEMP", "target": "VF(\"HP_TEMP\")", "op": "reset", "value": "", "condition": "", "trigger": "longRest" },
      { "id": "LONG_REST_HIT_DICE_1", "target": "VF(\"HIT_DICE_SPENT\")", "op": "reset", "value": "", "condition": "", "trigger": "longRest" },
      { "id": "LONG_REST_SPELL_SLOTS", "target": "POOL_GROUP(\"powerSlots\")", "op": "reset", "value": "", "condition": "", "trigger": "longRest" }
    ],
    "choices": [
      {
        "id": "glasswright_skills",
        "kind": "skillProf",
        "prompt": "Choose two skills (Glasswright L1)",
        "from": ["P_ARC", "P_HIS", "P_INS", "P_INV", "P_MED", "P_PERC", "P_SLOH"],
        "pick": 2
      },
      {
        "id": "glasswright_cantrips",
        "kind": "power",
        "prompt": "Choose 2 Glasswright cantrips",
        "packSlug": "5-5e-srd-spells",
        "filter": { "class": "Wizard", "level": 0 },
        "pick": 2
      },
      {
        "id": "glasswright_l1_spells",
        "kind": "power",
        "prompt": "Prepare 2 Glasswright spells (level 1)",
        "packSlug": "5-5e-srd-spells",
        "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 1 },
        "pick": 2
      }
    ],
    "autoInclude": [
      { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_LENSCRAFT" },
      { "packSlug": "5-5e-srd-class-features", "itemKey": "FEATURE_HIT_DICE_D8" }
    ]
  }
}
Field What it does
kind, key An inventoryItem with the key CLASS_GLASSWRIGHT_L1. Name each level CLASS_<YOUR CLASS>_L<level>, so they're easy to find.
spec.subType background, as for every class level and feature: its effects are always on.
spec.name The card's name, Glasswright (L1).
meta.class The class's display name.
meta.kitClass, meta.kitLevel The class's ID and this row's level. These two are what make the row a class level.
meta.hitDie The class's hit die, as the class card shows it. Each level row has it: the hit points rows in the builder and at Level Up read it from the level being added.
meta.multiclassPrerequisite What a character needs to take the class as a second class. abilities lists ability scores, and relation says how they combine: single for one, and for all of them, or for any. In 5e and 5.5e each must be at least 13. printed is the requirement in words. The class card's primary ability line reads abilities too.
meta.multiclassEntry What the class leaves out when it's a character's second class. omitEffects lists effects on this row, by id, that a character who adds the class later doesn't get. choicePicks changes how many picks a choice on this row asks for, and 0 drops the choice.
meta.description The card's text. Say what the level gives.
meta.casterType How fast the class gains spell slots: full (like a wizard), half (like a paladin), third, pact (warlock-style) or none. RollQuest reads the slot table from this alone.
meta.spellcastingAbility The ability its spells use, INT here.
meta.preparationStyle prepared: the character prepares spells, like a cleric. The built-in classes also use known, prepared-swap-one and book.
meta.preparedSpellsByLevel How many spells the character can have prepared at each class level. 21 numbers: the first is for level 0, so the second is level 1.
meta.armor, meta.weapons Text for the class card. The training itself comes from the effects below.

Leave out meta.casterType and the rest for a class that doesn't cast spells. A caster without them gets no spell slots, no cantrip limit and no prepared count, and nothing warns you.

The effects on level 1, top to bottom:

  • HIT_DIE_SIZE set to 8: the sheet's Hit Point Die value, the die the character rolls when they spend hit point dice on a short rest.
  • SPELL_ABIL_MOD at least the Intelligence modifier: the bonus the class's spell attacks and save DC use.
  • PROF_DEX and PROF_INT at least 1: proficiency in those saving throws.
  • W_SIMPLE, A_LIGHT, A_MEDIUM, A_SHIELDS, T_GLASSBLOWER and T_JEWELER at least 1: weapon, armour and tool training.
  • Four effects on the long rest: hit points back to full (VF("HP") set to HP_MAX), temporary hit points cleared, spent hit point dice back (VF("HIT_DICE_SPENT") reset) and every spell slot back (POOL_GROUP("powerSlots") reset).

The rest effects matter more than they look. RollQuest doesn't restore hit points, hit point dice or spell slots on a rest by itself: the built-in classes' level 1 rows carry these same effects. A class without them never gets its slots or hit points back from the Long Rest button. Effects explains each kind.

The choices on level 1 are asked when the player picks the class:

  • glasswright_skills (skillProf): two skills from the list.
  • glasswright_cantrips (power): two cantrips. filter.class is Wizard, so they come from the wizard's list in RollQuest's spells: no built-in spell names your new class in its class list.
  • glasswright_l1_spells (power): two level 1 spells from the same list.

autoInclude grants Lenscraft, and RollQuest's own Hit Point Die (d8) feature from 5-5e-srd-class-features, which gives the character the short rest button that spends hit point dice. The built-in classes grant the one for their die: FEATURE_HIT_DICE_D6, FEATURE_HIT_DICE_D8, FEATURE_HIT_DICE_D10 or FEATURE_HIT_DICE_D12. Choices and grants covers every choice kind.

The two multiclass fields are written the way RollQuest's own wizard is. A character needs Intelligence 13 to add the Glasswright as a second class. They keep their first class's hit die, so the hit die effect is left out, and they get no saving throws, no simple weapon training, no second copy of the long rest hit point effects, and no skill picks. They still get the armour and tool training, spellcasting, the cantrip and spell choices, and the other rest effects. Without multiclassEntry, the class can only be a character's first class. See Take it as a second class, below.

A level with a grant and a spell

Most levels look like level 2: a grant, a choice, or both.

{
  "kind": "inventoryItem",
  "key": "CLASS_GLASSWRIGHT_L2",
  "spec": {
    "subType": "background",
    "name": "Glasswright (L2)",
    "meta": {
      "class": "Glasswright",
      "kitClass": "Glasswright",
      "kitLevel": 2,
      "hitDie": "d8",
      "description": "L2 Glasswright: Prism Ward, and a new spell.",
      "passive": true
    },
    "effects": [],
    "choices": [
      {
        "id": "glasswright_l2_new_spells",
        "kind": "power",
        "prompt": "Prepare 1 new Glasswright spell (level 1)",
        "packSlug": "5-5e-srd-spells",
        "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 1 },
        "pick": 1
      }
    ],
    "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_PRISM_WARD" }]
  }
}

The new spell is a power choice, as the built-in classes have at every level that adds a prepared spell. Put a choice like this on each level where preparedSpellsByLevel goes up, and raise maxLevel as the class reaches higher spell slots.

These choices also tell RollQuest which spell list the class uses. The builder's Edit Spells step and Prepare Spells on the sheet list the spells of the class's own name and of every list its power choices name in filter.class, on the levels the character has. No built-in spell names the Glasswright, so its players see the wizard's spells there.

The subclass choice

The class's subclass is a feature choice on the level it's chosen at, with one option per subclass. The Glasswright chooses a workshop at level 3.

{
  "kind": "inventoryItem",
  "key": "CLASS_GLASSWRIGHT_L3",
  "spec": {
    "subType": "background",
    "name": "Glasswright (L3)",
    "meta": {
      "class": "Glasswright",
      "kitClass": "Glasswright",
      "kitLevel": 3,
      "hitDie": "d8",
      "description": "L3 Glasswright: Choose your Glasswright Workshop.",
      "passive": true
    },
    "effects": [],
    "choices": [
      {
        "id": "glasswright_workshop",
        "kind": "feature",
        "prompt": "Choose your Glasswright Workshop",
        "decisionKind": "subclass",
        "pick": 1,
        "options": [
          {
            "id": "stained_glass",
            "label": "Stained Glass Workshop",
            "description": "Your windows tell stories in coloured light. Sunlit Pane (L3): heal with a burst of warm colour. Radiant Leading (L9): Resistance to Radiant damage.",
            "effects": [],
            "autoInclude": [
              { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_SUNLIT_PANE", "grantAtLevel": 3 },
              { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_RADIANT_LEADING", "grantAtLevel": 9 }
            ]
          },
          {
            "id": "mirrorwork",
            "label": "Mirrorwork Workshop",
            "description": "You silver glass into mirrors that lie. Mirror Double (L3): a reflection that draws attacks. Silvered Eyes (L9): Darkvision 60 feet.",
            "effects": [],
            "autoInclude": [
              { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_MIRROR_DOUBLE", "grantAtLevel": 3 },
              { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_SILVERED_EYES", "grantAtLevel": 9 }
            ]
          }
        ]
      }
    ]
  }
}
  • decisionKind: "subclass" marks it as the class's subclass. The builder then asks it right after the class, and never picks it for a character started at a higher level.
  • Each option's autoInclude grants that subclass's features, each with a grantAtLevel. The workshop's first feature arrives with level 3, and its second at the Level Up to level 9, without the player choosing again. That's how a built-in subclass hands out its features.
  • Other homebrew packs can add more options to your choice the way Subclasses and class features adds Hearth Domain to the cleric, as long as your class pack is bound to the same game.

Ability score improvements

Level 4 shows the ability score improvement, an asiOrFeat choice: the player adds 2 to their scores, or takes a General feat from RollQuest's feats instead. It also adds a spell.

{
  "kind": "inventoryItem",
  "key": "CLASS_GLASSWRIGHT_L4",
  "spec": {
    "subType": "background",
    "name": "Glasswright (L4)",
    "meta": {
      "class": "Glasswright",
      "kitClass": "Glasswright",
      "kitLevel": 4,
      "hitDie": "d8",
      "description": "L4 Glasswright: Ability Score Improvement (or a General feat), and a new spell.",
      "passive": true
    },
    "effects": [],
    "choices": [
      {
        "id": "glasswright_l4_asi",
        "kind": "asiOrFeat",
        "prompt": "Ability Score Improvement: +2 to one score or +1 to two, or take a General feat",
        "from": ["STR", "DEX", "CON", "INT", "WIS", "CHA"],
        "total": 2,
        "perAbilityCap": 2,
        "packSlug": "5-5e-srd-feats",
        "filter": { "category": "General Feat" },
        "pick": 1
      },
      {
        "id": "glasswright_l4_new_spells",
        "kind": "power",
        "prompt": "Prepare 1 new Glasswright spell (level 1)",
        "packSlug": "5-5e-srd-spells",
        "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 1 },
        "pick": 1
      }
    ]
  }
}

A feature that comes back on a rest

Any feature with uses needs an effect that gives them back, or they never refill. Clear Sight sets its number of uses from the Intelligence modifier and refills on a long rest:

{
  "kind": "inventoryItem",
  "key": "FEATURE_CLEAR_SIGHT",
  "spec": {
    "subType": "background",
    "id": "FEATURE_CLEAR_SIGHT",
    "name": "Clear Sight",
    "meta": {
      "class": "Glasswright",
      "passive": false,
      "description": "When a creature you can see within 30 feet of you fails a saving throw against being Blinded or Charmed, you can take a Reaction to let it reroll the save. You can do this a number of times equal to your Intelligence modifier, and regain every use on a Long Rest."
    },
    "effects": [
      { "id": "CLEAR_SIGHT_MAX_LR", "target": "SELF.maxUses", "op": "setToVF", "value": "INT_MOD", "condition": "", "trigger": "longRest" },
      { "id": "CLEAR_SIGHT_LR", "target": "SELF.uses", "op": "reset", "value": "", "condition": "", "trigger": "longRest" }
    ],
    "maxUses": 3,
    "uses": 3,
    "actions": [{ "id": "CLEAR", "label": "Clear the eyes", "formula": "", "damageType": "", "tag": "" }]
  }
}

The first effect sets the most uses to INT_MOD at each long rest, and the second fills them. Keep that order. The printed maxUses and uses are what the feature arrives with, so print the same number in both. The action with an empty formula gives the player a button that spends a use.

Prism Ward at level 2 shows the simpler pattern: two uses and one reset on longRest. Mirror Double has a reset on shortRest and another on longRest, so it comes back after either.

The complete pack

Paste this into Check and create to try the class. It passes the checker with no problems.

{
  "slug": "my-glasswright-class",
  "name": "Glasswright (homebrew class)",
  "system": "5.5e Compatible",
  "derivedFrom": "5-5e-core",
  "category": "addon",
  "version": "1.0.0",
  "license": "USER_HOMEBREW",
  "source": "My table's homebrew.",
  "description": "An original homebrew half-caster class, levels 1 to 20, for 5.5e: a crafter who works enchanted glass.",
  "requiredDecisions": [],
  "items": [
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L1",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L1)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 1,
          "hitDie": "d8",
          "multiclassPrerequisite": { "printed": "Intelligence", "abilities": ["INT"], "relation": "single" },
          "multiclassEntry": {
            "omitEffects": [
              "GLASSWRIGHT_L1_HIT_DIE_SIZE",
              "GLASSWRIGHT_SAVE_DEX",
              "GLASSWRIGHT_SAVE_INT",
              "GLASSWRIGHT_WP_SIMPLE",
              "LONG_REST_HP",
              "LONG_REST_HP_TEMP"
            ],
            "choicePicks": { "glasswright_skills": 0 }
          },
          "description": "L1 Glasswright: Lenscraft, hit point dice, Spellcasting (2 cantrips, 2 prepared spells).",
          "passive": true,
          "casterType": "half",
          "spellcastingAbility": "INT",
          "preparationStyle": "prepared",
          "preparedSpellsByLevel": [0, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12],
          "armor": "Light, Medium, Shields",
          "weapons": "Simple"
        },
        "effects": [
          { "id": "GLASSWRIGHT_L1_HIT_DIE_SIZE", "target": "HIT_DIE_SIZE", "op": "setTo", "value": 8, "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_L1_SPELL_ABIL_MOD", "target": "SPELL_ABIL_MOD", "op": "setMin", "value": "=INT_MOD", "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_SAVE_DEX", "target": "PROF_DEX", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_SAVE_INT", "target": "PROF_INT", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_WP_SIMPLE", "target": "W_SIMPLE", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_AP_LIGHT", "target": "A_LIGHT", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_AP_MEDIUM", "target": "A_MEDIUM", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_AP_SHIELDS", "target": "A_SHIELDS", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_TOOL_GLASSBLOWER", "target": "T_GLASSBLOWER", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
          { "id": "GLASSWRIGHT_TOOL_JEWELER", "target": "T_JEWELER", "op": "setMin", "value": 1, "condition": "", "trigger": "" },
          { "id": "LONG_REST_HP", "target": "VF(\"HP\")", "op": "setToVF", "value": "HP_MAX", "condition": "", "trigger": "longRest" },
          { "id": "LONG_REST_HP_TEMP", "target": "VF(\"HP_TEMP\")", "op": "reset", "value": "", "condition": "", "trigger": "longRest" },
          { "id": "LONG_REST_HIT_DICE_1", "target": "VF(\"HIT_DICE_SPENT\")", "op": "reset", "value": "", "condition": "", "trigger": "longRest" },
          {
            "id": "LONG_REST_SPELL_SLOTS",
            "target": "POOL_GROUP(\"powerSlots\")",
            "op": "reset",
            "value": "",
            "condition": "",
            "trigger": "longRest"
          }
        ],
        "choices": [
          {
            "id": "glasswright_skills",
            "kind": "skillProf",
            "prompt": "Choose two skills (Glasswright L1)",
            "from": ["P_ARC", "P_HIS", "P_INS", "P_INV", "P_MED", "P_PERC", "P_SLOH"],
            "pick": 2
          },
          {
            "id": "glasswright_cantrips",
            "kind": "power",
            "prompt": "Choose 2 Glasswright cantrips",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "level": 0 },
            "pick": 2
          },
          {
            "id": "glasswright_l1_spells",
            "kind": "power",
            "prompt": "Prepare 2 Glasswright spells (level 1)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 1 },
            "pick": 2
          }
        ],
        "autoInclude": [
          { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_LENSCRAFT" },
          { "packSlug": "5-5e-srd-class-features", "itemKey": "FEATURE_HIT_DICE_D8" }
        ]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L2",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L2)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 2,
          "hitDie": "d8",
          "description": "L2 Glasswright: Prism Ward, and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l2_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 1 },
            "pick": 1
          }
        ],
        "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_PRISM_WARD" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L3",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L3)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 3,
          "hitDie": "d8",
          "description": "L3 Glasswright: Choose your Glasswright Workshop.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_workshop",
            "kind": "feature",
            "prompt": "Choose your Glasswright Workshop",
            "decisionKind": "subclass",
            "pick": 1,
            "options": [
              {
                "id": "stained_glass",
                "label": "Stained Glass Workshop",
                "description": "Your windows tell stories in coloured light. Sunlit Pane (L3): heal with a burst of warm colour. Radiant Leading (L9): Resistance to Radiant damage.",
                "effects": [],
                "autoInclude": [
                  { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_SUNLIT_PANE", "grantAtLevel": 3 },
                  { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_RADIANT_LEADING", "grantAtLevel": 9 }
                ]
              },
              {
                "id": "mirrorwork",
                "label": "Mirrorwork Workshop",
                "description": "You silver glass into mirrors that lie. Mirror Double (L3): a reflection that draws attacks. Silvered Eyes (L9): Darkvision 60 feet.",
                "effects": [],
                "autoInclude": [
                  { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_MIRROR_DOUBLE", "grantAtLevel": 3 },
                  { "packSlug": "my-glasswright-class", "itemKey": "FEATURE_SILVERED_EYES", "grantAtLevel": 9 }
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L4",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L4)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 4,
          "hitDie": "d8",
          "description": "L4 Glasswright: Ability Score Improvement (or a General feat), and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l4_asi",
            "kind": "asiOrFeat",
            "prompt": "Ability Score Improvement: +2 to one score or +1 to two, or take a General feat",
            "from": ["STR", "DEX", "CON", "INT", "WIS", "CHA"],
            "total": 2,
            "perAbilityCap": 2,
            "packSlug": "5-5e-srd-feats",
            "filter": { "category": "General Feat" },
            "pick": 1
          },
          {
            "id": "glasswright_l4_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 1 },
            "pick": 1
          }
        ]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L5",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L5)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 5,
          "hitDie": "d8",
          "description": "L5 Glasswright: more spell slots, including level 2.",
          "passive": true
        },
        "effects": []
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L6",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L6)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 6,
          "hitDie": "d8",
          "description": "L6 Glasswright: Tempered Glass, and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l6_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1 to 2)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 2 },
            "pick": 1
          }
        ],
        "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_TEMPERED_GLASS" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L7",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L7)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 7,
          "hitDie": "d8",
          "description": "L7 Glasswright: Clear Sight.",
          "passive": true
        },
        "effects": [],
        "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_CLEAR_SIGHT" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L8",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L8)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 8,
          "hitDie": "d8",
          "description": "L8 Glasswright: Ability Score Improvement (or a General feat), and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l8_asi",
            "kind": "asiOrFeat",
            "prompt": "Ability Score Improvement: +2 to one score or +1 to two, or take a General feat",
            "from": ["STR", "DEX", "CON", "INT", "WIS", "CHA"],
            "total": 2,
            "perAbilityCap": 2,
            "packSlug": "5-5e-srd-feats",
            "filter": { "category": "General Feat" },
            "pick": 1
          },
          {
            "id": "glasswright_l8_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1 to 2)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 2 },
            "pick": 1
          }
        ]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L9",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L9)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 9,
          "hitDie": "d8",
          "description": "L9 Glasswright: level 3 spell slots, and your workshop's second feature.",
          "passive": true
        },
        "effects": []
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L10",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L10)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 10,
          "hitDie": "d8",
          "description": "L10 Glasswright: Kaleidoscope, one more cantrip, and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l10_cantrip",
            "kind": "power",
            "prompt": "Learn 1 more Glasswright cantrip",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "level": 0 },
            "pick": 1
          },
          {
            "id": "glasswright_l10_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1 to 3)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 3 },
            "pick": 1
          }
        ],
        "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_KALEIDOSCOPE" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L11",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L11)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 11,
          "hitDie": "d8",
          "description": "L11 Glasswright: Stored Daylight.",
          "passive": true
        },
        "effects": [],
        "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_STORED_DAYLIGHT" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L12",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L12)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 12,
          "hitDie": "d8",
          "description": "L12 Glasswright: Ability Score Improvement (or a General feat), and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l12_asi",
            "kind": "asiOrFeat",
            "prompt": "Ability Score Improvement: +2 to one score or +1 to two, or take a General feat",
            "from": ["STR", "DEX", "CON", "INT", "WIS", "CHA"],
            "total": 2,
            "perAbilityCap": 2,
            "packSlug": "5-5e-srd-feats",
            "filter": { "category": "General Feat" },
            "pick": 1
          },
          {
            "id": "glasswright_l12_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1 to 3)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 3 },
            "pick": 1
          }
        ]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L13",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L13)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 13,
          "hitDie": "d8",
          "description": "L13 Glasswright: level 4 spell slots.",
          "passive": true
        },
        "effects": []
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L14",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L14)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 14,
          "hitDie": "d8",
          "description": "L14 Glasswright: Unbreakable Pane, one more cantrip, and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l14_cantrip",
            "kind": "power",
            "prompt": "Learn 1 more Glasswright cantrip",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "level": 0 },
            "pick": 1
          },
          {
            "id": "glasswright_l14_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1 to 4)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 4 },
            "pick": 1
          }
        ],
        "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_UNBREAKABLE_PANE" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L15",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L15)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 15,
          "hitDie": "d8",
          "description": "L15 Glasswright: more spell slots.",
          "passive": true
        },
        "effects": []
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L16",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L16)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 16,
          "hitDie": "d8",
          "description": "L16 Glasswright: Ability Score Improvement (or a General feat), and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l16_asi",
            "kind": "asiOrFeat",
            "prompt": "Ability Score Improvement: +2 to one score or +1 to two, or take a General feat",
            "from": ["STR", "DEX", "CON", "INT", "WIS", "CHA"],
            "total": 2,
            "perAbilityCap": 2,
            "packSlug": "5-5e-srd-feats",
            "filter": { "category": "General Feat" },
            "pick": 1
          },
          {
            "id": "glasswright_l16_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1 to 4)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 4 },
            "pick": 1
          }
        ]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L17",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L17)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 17,
          "hitDie": "d8",
          "description": "L17 Glasswright: level 5 spell slots.",
          "passive": true
        },
        "effects": []
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L18",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L18)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 18,
          "hitDie": "d8",
          "description": "L18 Glasswright: Living Glass, and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l18_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1 to 5)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 5 },
            "pick": 1
          }
        ],
        "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_LIVING_GLASS" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L19",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L19)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 19,
          "hitDie": "d8",
          "description": "L19 Glasswright: Ability Score Improvement (or a General feat).",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l19_asi",
            "kind": "asiOrFeat",
            "prompt": "Ability Score Improvement: +2 to one score or +1 to two, or take a General feat",
            "from": ["STR", "DEX", "CON", "INT", "WIS", "CHA"],
            "total": 2,
            "perAbilityCap": 2,
            "packSlug": "5-5e-srd-feats",
            "filter": { "category": "General Feat" },
            "pick": 1
          }
        ]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "CLASS_GLASSWRIGHT_L20",
      "spec": {
        "subType": "background",
        "name": "Glasswright (L20)",
        "meta": {
          "class": "Glasswright",
          "kitClass": "Glasswright",
          "kitLevel": 20,
          "hitDie": "d8",
          "description": "L20 Glasswright: Heart of Glass, and a new spell.",
          "passive": true
        },
        "effects": [],
        "choices": [
          {
            "id": "glasswright_l20_new_spells",
            "kind": "power",
            "prompt": "Prepare 1 new Glasswright spell (level 1 to 5)",
            "packSlug": "5-5e-srd-spells",
            "filter": { "class": "Wizard", "minLevel": 1, "maxLevel": 5 },
            "pick": 1
          }
        ],
        "autoInclude": [{ "packSlug": "my-glasswright-class", "itemKey": "FEATURE_HEART_OF_GLASS" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_LENSCRAFT",
      "spec": {
        "subType": "background",
        "id": "FEATURE_LENSCRAFT",
        "name": "Lenscraft",
        "meta": {
          "class": "Glasswright",
          "passive": true,
          "description": "With an hour and a scrap of clear glass, you grind a lens that lets its holder read faded or tiny writing and see a hidden seam, catch or hinge they are looking at."
        },
        "effects": []
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_PRISM_WARD",
      "spec": {
        "subType": "background",
        "id": "FEATURE_PRISM_WARD",
        "name": "Prism Ward",
        "meta": {
          "class": "Glasswright",
          "passive": false,
          "description": "When a creature you can see within 30 feet of you is hit by an attack, you can take a Reaction to raise a pane of shimmering glass between them: the target gains +2 AC against that attack, which can turn it into a miss. Twice per Long Rest."
        },
        "effects": [{ "id": "PRISM_WARD_LR", "target": "SELF.uses", "op": "reset", "value": "", "condition": "", "trigger": "longRest" }],
        "maxUses": 2,
        "uses": 2,
        "actions": [{ "id": "WARD", "label": "Raise a pane", "formula": "", "damageType": "", "tag": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_TEMPERED_GLASS",
      "spec": {
        "subType": "background",
        "id": "FEATURE_TEMPERED_GLASS",
        "name": "Tempered Glass",
        "meta": { "class": "Glasswright", "passive": true, "description": "Years at the furnace have hardened you to heat. You have Resistance to Fire damage." },
        "effects": [{ "id": "TEMPERED_GLASS_FIRE", "target": "RESIST_FIRE", "op": "setMin", "value": 1, "condition": "", "trigger": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_CLEAR_SIGHT",
      "spec": {
        "subType": "background",
        "id": "FEATURE_CLEAR_SIGHT",
        "name": "Clear Sight",
        "meta": {
          "class": "Glasswright",
          "passive": false,
          "description": "When a creature you can see within 30 feet of you fails a saving throw against being Blinded or Charmed, you can take a Reaction to let it reroll the save. You can do this a number of times equal to your Intelligence modifier, and regain every use on a Long Rest."
        },
        "effects": [
          { "id": "CLEAR_SIGHT_MAX_LR", "target": "SELF.maxUses", "op": "setToVF", "value": "INT_MOD", "condition": "", "trigger": "longRest" },
          { "id": "CLEAR_SIGHT_LR", "target": "SELF.uses", "op": "reset", "value": "", "condition": "", "trigger": "longRest" }
        ],
        "maxUses": 3,
        "uses": 3,
        "actions": [{ "id": "CLEAR", "label": "Clear the eyes", "formula": "", "damageType": "", "tag": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_KALEIDOSCOPE",
      "spec": {
        "subType": "background",
        "id": "FEATURE_KALEIDOSCOPE",
        "name": "Kaleidoscope",
        "meta": {
          "class": "Glasswright",
          "passive": false,
          "description": "As a Magic action, you scatter light in a 15-foot cone. Each creature in it makes a Wisdom saving throw against your spell save DC or has Disadvantage on attack rolls until the end of your next turn. Once per Long Rest."
        },
        "effects": [{ "id": "KALEIDOSCOPE_LR", "target": "SELF.uses", "op": "reset", "value": "", "condition": "", "trigger": "longRest" }],
        "maxUses": 1,
        "uses": 1,
        "actions": [{ "id": "SCATTER", "label": "Scatter light", "formula": "", "damageType": "", "tag": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_STORED_DAYLIGHT",
      "spec": {
        "subType": "background",
        "id": "FEATURE_STORED_DAYLIGHT",
        "name": "Stored Daylight",
        "meta": {
          "class": "Glasswright",
          "passive": true,
          "description": "When you finish a Long Rest you can seal a glass vial of daylight. Unstoppered, it sheds Bright Light in a 20-foot radius and Dim Light for 20 feet beyond that for 1 hour, and that light counts as sunlight."
        },
        "effects": []
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_UNBREAKABLE_PANE",
      "spec": {
        "subType": "background",
        "id": "FEATURE_UNBREAKABLE_PANE",
        "name": "Unbreakable Pane",
        "meta": { "class": "Glasswright", "passive": true, "description": "Thin panes of glass hidden in your clothes turn aside blows. You gain a +1 bonus to AC." },
        "effects": [{ "id": "UNBREAKABLE_PANE_AC", "target": "AC_MISC_BONUS", "op": "add", "value": 1, "condition": "", "trigger": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_LIVING_GLASS",
      "spec": {
        "subType": "background",
        "id": "FEATURE_LIVING_GLASS",
        "name": "Living Glass",
        "meta": { "class": "Glasswright", "passive": true, "description": "Your skin catches the light like polished glass. You have Resistance to Force damage." },
        "effects": [{ "id": "LIVING_GLASS_FORCE", "target": "RESIST_FORCE", "op": "setMin", "value": 1, "condition": "", "trigger": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_HEART_OF_GLASS",
      "spec": {
        "subType": "background",
        "id": "FEATURE_HEART_OF_GLASS",
        "name": "Heart of Glass",
        "meta": { "class": "Glasswright", "passive": true, "description": "Nothing clouds you now. You gain a +2 bonus to all saving throws." },
        "effects": [{ "id": "HEART_OF_GLASS_SAVES", "target": "SAVE_MISC_BONUS", "op": "add", "value": 2, "condition": "", "trigger": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_SUNLIT_PANE",
      "spec": {
        "subType": "background",
        "id": "FEATURE_SUNLIT_PANE",
        "name": "Sunlit Pane",
        "meta": {
          "class": "Glasswright",
          "passive": false,
          "description": "As a Bonus Action, you hold up a pane of stained glass and bathe one creature you can see within 30 feet in warm colour: it regains Hit Points equal to 1d8 plus your Intelligence modifier. Twice per Long Rest."
        },
        "effects": [{ "id": "SUNLIT_PANE_LR", "target": "SELF.uses", "op": "reset", "value": "", "condition": "", "trigger": "longRest" }],
        "maxUses": 2,
        "uses": 2,
        "actions": [{ "id": "HEAL", "label": "Bathe in colour", "formula": "=1d8+INT_MOD", "damageType": "healing", "tag": "HEAL_ROLL" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_RADIANT_LEADING",
      "spec": {
        "subType": "background",
        "id": "FEATURE_RADIANT_LEADING",
        "name": "Radiant Leading",
        "meta": { "class": "Glasswright", "passive": true, "description": "The lead in your windows holds the sun. You have Resistance to Radiant damage." },
        "effects": [{ "id": "RADIANT_LEADING_RESIST", "target": "RESIST_RADIANT", "op": "setMin", "value": 1, "condition": "", "trigger": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_MIRROR_DOUBLE",
      "spec": {
        "subType": "background",
        "id": "FEATURE_MIRROR_DOUBLE",
        "name": "Mirror Double",
        "meta": {
          "class": "Glasswright",
          "passive": false,
          "description": "As a Bonus Action, you set a mirror that shows a second you, standing in your space. Until the start of your next turn, the first attack roll made against you has Disadvantage. Once per Short or Long Rest."
        },
        "effects": [
          { "id": "MIRROR_DOUBLE_SR", "target": "SELF.uses", "op": "reset", "value": "", "condition": "", "trigger": "shortRest" },
          { "id": "MIRROR_DOUBLE_LR", "target": "SELF.uses", "op": "reset", "value": "", "condition": "", "trigger": "longRest" }
        ],
        "maxUses": 1,
        "uses": 1,
        "actions": [{ "id": "DOUBLE", "label": "Set the mirror", "formula": "", "damageType": "", "tag": "" }]
      }
    },
    {
      "kind": "inventoryItem",
      "key": "FEATURE_SILVERED_EYES",
      "spec": {
        "subType": "background",
        "id": "FEATURE_SILVERED_EYES",
        "name": "Silvered Eyes",
        "meta": { "class": "Glasswright", "passive": true, "description": "Your eyes take on a silver sheen. You have Darkvision with a range of 60 feet." },
        "effects": [{ "id": "SILVERED_EYES_DARKVISION", "target": "SENSE_DARKVISION", "op": "setMin", "value": 60, "condition": "", "trigger": "" }]
      }
    }
  ]
}

Check it, create it and bind it

  1. In My Homebrew, click + New homebrew, then check and create the pack as in Your first homebrew pack, step by step.
  2. On the pack's row, click Bind to this table.
  3. Under Where should its items appear?, tick Choose Your Class. Every row in this pack is a class level or a feature that names its class in meta.class, so routing it can't delete anyone's picks, and there's no warning to acknowledge.
  4. Click Bind pack. The message says the class was added, levels 1 to 20, unbroken, with 10 automatic features and 21 decisions, and that it replaces nothing.

The Bind window for Glasswright (homebrew class): under Where should its items appear?, Choose Your Class is ticked with no warning box under it, the other steps are unticked, and Bind pack is at the bottom right.

The message also says 33 items are now offered to its players, which counts every level and feature, and that only the level-1 ones are shown: the builder lists the level 1 row, and Level Up brings the rest.

The features are never listed in + From pack: a class feature arrives only with the level or the choice that grants it, as RollQuest's own class features and the Hearth Domain's do (see Subclasses and class features). RollQuest knows a row is a class feature because its meta.class names its class, so every feature row in the pack carries "class": "Glasswright", the same name as the level rows. Adding one directly to a character with no Glasswright levels is refused, with "Lenscraft" is a Glasswright feature, and this character has no Glasswright levels. It arrives with the class level, subclass or feature choice that grants it.

Leave meta.class off a feature and the checker still accepts the pack, without a warning, but RollQuest treats that feature as an ordinary item:

  • + From pack offers it on its own, to any character, with or without the level.
  • Adding it to a character of another class isn't refused.
  • In the Bind window, Choose Your Class shows Replaces existing picks, and a red box, This routing deletes players' existing picks, asks you to tick I understand this replaces existing picks on sheets at this table before you can bind. The warning is true for that pack: a character who then takes one of its features from + From pack loses the other features of the class already on their sheet.

So give every feature row meta.class, and only the level rows kitClass and kitLevel.

Routing into Choose Your Class is what makes the class available. Bound with no step ticked, nobody can take it: the builder doesn't list it, and Level Up's Add a class… only offers classes a character's sheet already has a pack for. You can only choose the routing when you bind, so tick it then.

When binding is refused

  • Another pack at the game already has the class. The class ID, kitClass, must be unique at a game: two packs that both define Glasswright are refused, with Two owners of one class token means every level lookup, spell-slot table and trigger gate resolves half a character's levels against the wrong ladder. Nothing has been bound. Change one pack's kitClass.
  • The game's system already has a class with that ID. A kitClass of Wizard is refused at a 5.5e game, with "Glasswright (homebrew class)" adds the class "Wizard", and this table's system already has a class with that name (in "5.5e SRD Class Features"). Two classes with one name would mix a character's levels up between them, so nothing has been bound. Give your class a name of its own in meta.kitClass; the name players see (meta.class) can stay the same. Creating the pack doesn't catch this, only binding it does.

The Bind window for a throwaway copy of the Glasswright whose kitClass is Wizard, with Choose Your Class ticked and Bind pack pressed: the refusal reads that the pack adds the class Wizard, which this table's system already has (in 5.5e SRD Class Features), so nothing has been bound, and ends Nothing has been changed., above Cancel and Try again.

Where players meet the class

  • In the character builder. On Choose Your Class, the class has its own card, marked From and your pack's name. Clicking it opens the choices window for its skills, cantrips and spells. A character started above level 1 gets a builder step for each level with a choice, starting with the workshop, such as Level 3 · Glasswright 3. See Create a character.

    Choose Your Class with the Glasswright card beside the built-in classes and its From line naming the pack; click it, pick two cantrips, two level 1 spells from the Wizard list and two skills, Confirm; the class is added and the builder moves on to Choose Your Background.
  • At Level Up. The class row reads Glasswright · Lv 1 → 2, and the Choices step asks each level's questions: a spell at 2, the workshop at 3, an ability score improvement at 4. See Level up.

  • Spell slots and spells. The class gets the half caster slot table, the cantrips and spells its choices pick, and a prepared count from preparedSpellsByLevel. The builder's Edit Spells step and Prepare Spells list the wizard's spells for it, the list its choices name.

  • The Progression tab shows the whole ladder, including levels the character hasn't reached. Only features whose key starts FEATURE_ are listed, so name them that way.

Take it as a second class

A character who already has a class can add the Glasswright as a second one, because its level 1 row carries meta.multiclassPrerequisite and meta.multiclassEntry (see Level 1, field by field). As in Level up, only the Game Master (GM) adds a class:

  1. On the character's sheet, click Level Up, then Add a class….
  2. Pick Glasswright. A character needs Intelligence 13, and also 13 in the key ability of each class they already have. Below that, Allow anyway adds it regardless.
  3. Answer its level 1 choices: the cantrips and spells, but no skills, because choicePicks drops that choice. The hit die, saving throws and other effects named in omitEffects don't arrive.

Add a class… only lists the Glasswright for a character whose sheet already has the pack: one who has taken something from it, or one you've run Apply to N sheets for (see Put your pack on a table). A class whose level 1 row lacks either field is never offered there.

Mistakes to avoid

Mistake What happens Fix
A level missing or repeated Refused: CLASS_LADDER_INVALID. Give every level from 1 to 20 exactly one row.
kitClass with a space, such as Glass Wright Refused: KIT_CLASS_WHITESPACE. Use one word, such as Glasswright, and put the display name in meta.class.
kitClass or kitLevel on a feature The feature counts as a class level. Only the 20 level rows carry them.
A feature without meta.class Accepted, but + From pack offers it to any character on its own, and binding the pack into Choose Your Class warns that it deletes picks. Give every feature meta.class, the same name as the level rows.
kitClass the same as one of RollQuest's classes, such as Wizard Accepted when you create the pack, but binding it is refused. Give your class an ID of its own. meta.class can still read Wizard.
No meta.multiclassPrerequisite or meta.multiclassEntry on level 1 The class works as a character's first class, but Add a class… never offers it. Add both fields, as the Glasswright's level 1 does.
No rest effects on level 1 Accepted, but the class never gets hit points, hit point dice or spell slots back on a rest. Copy the four long rest effects above.
No hit point die feature The character has no button to spend hit point dice on a short rest. Grant FEATURE_HIT_DICE_D8, or the one for your class's die, from level 1.
A feature with uses and no rest effect Accepted, but its uses never come back. Add a SELF.uses reset effect on longRest or shortRest.
uses missing or lower than maxUses Refused: USE_BUDGET_INCOHERENT. Print the same number in both.
Species or gear in the class pack Because the pack has class level rows, a builder step it's routed into shows only its level 1 class row, so the species or gear never appears there. Keep other homebrew in its own pack.
A feature key without FEATURE_ It works, but the Progression tab doesn't list it. Start feature keys with FEATURE_.

Subclasses and class features · Choices and grants · Effects · Put your pack on a table · Spells