Skip to content

Create Spell Item Schema #12

@akrigline

Description

@akrigline

Playtest Packet 2 describes "Spell"s which would be best implemented as an Item type. I'm going to bring some knowledge from the 5e system and make note of what shortcomings were felt by people who wanted to extend the spellcasting system

Compiling as much knowledge up front as I can about this topic because it will be a doozy.

Descriptive Text

description: HTML;
spellCircle: 'arcane' | 'divine' | 'primal' | 'wyrd'; // this selection should be extensible by modules
spellRing: number; (0 can represent cantrips, max of 9 should not be assumed, often this is expanded beyond 9)
spellSchool: 'one of the options'; // this should be extensible by modules

Origin

Something we were lacking in 5e was a way to mark where the spell came from.
E.g. a Cleric/Druid might prepare different spells for each class, but there should be a way to differentiate them.
Similarly, some items might have spells embedded in them, and ideally the system supports annotating this.

Components

5e ended up making these extensible by modules and turning them into checkboxes in the item sheet.

Target -- common item concept

A little convoluted and probably generalizable with other combat items.

Spells can affect specifically some kinds of things (all creatures, allies, enemies; sometimes also objects sometimes not objects, sometimes 'magical effects', only the caster, n creatures/allies/etcetcetc)

Then, they can affect a kind of area (within a cone/sphere/box/line, a specific selection of creatures within range)

And lastly, they have a range for when the origin of that kind of area begins (self, n ft)

target: {
  creatures: {
    number: number;
    type: 'allies' | 'any' | 'enemies' | 'self';
    alsoAffectsObjects: boolean;
  },
  area: {
    type: 'target' | 'cone' | 'sphere' | etc
  },
  range: {
    value: number;
    unit: 'ft' | 'mile' | etc; // remember metric is probably a thing
  }
}

Attacks or Saves -- common item concept

Complicated, there's probably different 'kinds' of attack rolls (weapon attack, spell attack at minimum), saves can target specific attributes, saves can be based on a specific ability score for the character.

Damage -- common item concept

Complicated, but worth building in the idea of damage types and damage groups early

Duration -- common item concept

duration: {
  type: 'instantaneous' | 'time' | 'other'

  // if time is the type
  timeValue?: number;
  timeUnit?: 'minutes' | 'hours' | 'days'; // etc.

  // if 'other' is the type
  // stuff like "until the start of your next turn" or "until the end of their next turn", etc...
  // unsure how to represent this, an enum?
}

Casting Time -- aka "Usage Time", common concept

For spells this is pretty clearly one of:

  • Action
  • Bonus Action
  • Reaction
  • Ritual
    But some features or items take 'minutes'/'hours'/etc, so we could generalize this as "usage time"
usageTime: {
  type: 'ritual' | 'action' | 'bonus action' | 'reaction' | 'special' | 'time'

  // if time is the type
  timeValue?: number;
  timeUnit?: 'minutes' | 'hours' | 'days'; // etc.
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions