{
  "description": "Root object for *Ironsworn: Starforged* game data.",
  "type": "object",
  "properties": {
    "Encounters": {
      "type": "array",
      "items": { "$ref": "#/definitions/IEncounterStarforged" },
      "title": "Encounters"
    },
    "Setting Truths": {
      "type": "array",
      "items": { "$ref": "#/definitions/ISettingTruth" },
      "title": "Setting Truths"
    },
    "$schema": { "type": "string", "title": "$schema" },
    "Asset Types": {
      "type": "array",
      "items": { "$ref": "#/definitions/IAssetType" },
      "title": "Asset Types"
    },
    "Move Categories": {
      "type": "array",
      "items": { "$ref": "#/definitions/IMoveCategory" },
      "title": "Move Categories"
    },
    "Oracle Categories": {
      "type": "array",
      "items": { "$ref": "#/definitions/IOracleCategory" },
      "title": "Oracle Categories"
    }
  },
  "defaultProperties": [],
  "additionalProperties": false,
  "required": [
    "Asset Types",
    "Encounters",
    "Move Categories",
    "Oracle Categories",
    "Setting Truths"
  ],
  "definitions": {
    "IEncounterStarforged": {
      "description": "Represents an *Ironsworn: Starforged* Encounter entry.",
      "title": "IEncounterStarforged",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^Starforged/Encounters/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Nature": {
          "$ref": "#/definitions/EncounterNatureStarforged",
          "title": "Nature"
        },
        "Summary": {
          "description": "A user-facing markdown summary of the item. `Summary` is shorter than{@linkIHasDescription| Description}.",
          "type": "string",
          "title": "Summary"
        },
        "Variants": {
          "type": "array",
          "items": { "$ref": "#/definitions/IEncounterVariant" },
          "title": "Variants"
        },
        "Features": {
          "type": "array",
          "items": { "type": "string" },
          "title": "Features"
        },
        "Drives": {
          "type": "array",
          "items": { "type": "string" },
          "title": "Drives"
        },
        "Tactics": {
          "type": "array",
          "items": { "type": "string" },
          "title": "Tactics"
        },
        "Quest Starter": {
          "description": "A markdown string describing the quest starter associated with this item.",
          "type": "string",
          "title": "Quest Starter"
        },
        "Your Truth": {
          "description": "A markdown string representing the text of the \"Your Truth\" callout box included with some *Ironsworn* encounters.",
          "type": "string",
          "title": "Your Truth"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Tags": {
          "description": "Arbitrary strings tags that describe optional metadata that doesn't fit in other properties.",
          "type": "array",
          "items": { "type": "string", "enum": ["vehicle"] },
          "title": "Tags"
        },
        "Rank": { "$ref": "#/definitions/ChallengeRank", "title": "Rank" },
        "Description": {
          "description": "A user-facing markdown description of the item, consisting of one or more paragraphs.",
          "type": "string",
          "title": "Description"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Description",
        "Display",
        "Drives",
        "Features",
        "Name",
        "Nature",
        "Quest Starter",
        "Rank",
        "Source",
        "Summary",
        "Tactics",
        "Variants"
      ]
    },
    "EncounterNatureStarforged": {
      "title": "EncounterNatureStarforged",
      "enum": ["Creature", "Horror", "Human", "Machine", "Monster"],
      "type": "string"
    },
    "IEncounterVariant": {
      "description": "Represents a variant encounter 'stubs' included with a parent encounter in *Ironsworn: Starforged*.",
      "title": "IEncounterVariant",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^Starforged/Encounters/[A-z_-]+/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Variant of": { "type": "string", "title": "Variant of" },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        },
        "Tags": {
          "description": "Arbitrary strings tags that describe optional metadata that doesn't fit in other properties.",
          "type": "array",
          "items": { "type": "string", "enum": ["vehicle"] },
          "title": "Tags"
        },
        "Nature": {
          "$ref": "#/definitions/EncounterNatureStarforged",
          "title": "Nature"
        },
        "Rank": { "$ref": "#/definitions/ChallengeRank", "title": "Rank" },
        "Description": {
          "description": "A user-facing markdown description of the item, consisting of one or more paragraphs.",
          "type": "string",
          "title": "Description"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Description",
        "Display",
        "Name",
        "Nature",
        "Rank",
        "Source",
        "Variant of"
      ]
    },
    "IDisplayWithTitle": {
      "title": "IDisplayWithTitle",
      "type": "object",
      "properties": {
        "Title": {
          "description": "The title of this item as it appears printed in the rulebook. Intended for use as the item's header, label, etc.",
          "type": "string",
          "title": "Title"
        },
        "Icon": {
          "description": "A URL pointing to a single SVG icon.",
          "pattern": "^\\.\\./\\.\\./img/vector/[A-z-_0-9/]+\\.svg$",
          "type": "string",
          "title": "Icon"
        },
        "Images": {
          "description": "An array of URLs pointing to one or more WEBP images.",
          "pattern": "^\\.\\./\\.\\./img/raster/[A-z-_0-9/]+\\.webp$",
          "type": "array",
          "items": { "type": "string" },
          "title": "Images"
        },
        "Color": {
          "description": "A hex color associated with this item, for use as e.g. an accent color in its display.",
          "pattern": "^#[A-f0-9][A-f0-9][A-f0-9][A-f0-9][A-f0-9][A-f0-9]$",
          "type": "string",
          "title": "Color"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Title"]
    },
    "ISource": {
      "description": "Interface representing data on this item's source. For 'canonical' content, this is usually a book with numbered pages, but it might also be a link to a web site.",
      "title": "ISource",
      "type": "object",
      "properties": {
        "Title": {
          "description": "The title of the source.\n\nFor 'canonical' content, use one of the enumerated `SourceTitle` strings.\n\nFor 3rd-party content (including homebrew) that's been released as part of a titled document, use the title of that document (e.g. \"Steelforged\", \"Ironsmith\").\n\nIf the source has no particular title (for instance, it's a single custom element in a VTT implementation), use \"Custom\".",
          "type": "string",
          "title": "Title"
        },
        "Authors": {
          "description": "The author(s) of this item. For 'canonical' content, this one's usually pretty obvious 😉 However, it's included so that homebrew content can use the same interface/schema.",
          "default": ["Shawn Tomkin"],
          "type": "array",
          "items": { "type": "string" },
          "title": "Authors"
        },
        "Date": {
          "description": "The 6-number date string formatted as `MMDDYY`. Relevant only during Starforged development; it will be deprecated once the game is released.",
          "pattern": "^(0[1-9]|1[0-2])([0-2][1-9]|3[0-1])([0-9][0-9])$",
          "type": "string",
          "title": "Date"
        },
        "Page": {
          "description": "The page on which the item appears most prominently in the source material (if it's in a format that uses page numbers).",
          "type": "integer",
          "title": "Page"
        },
        "Url": {
          "description": "The URL where the source material is available.",
          "pattern": "^https?://.*$",
          "type": "string",
          "title": "Url"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Authors", "Title"]
    },
    "ChallengeRank": {
      "description": "Enumerates challenge ranks.",
      "title": "ChallengeRank",
      "enum": [1, 2, 3, 4, 5],
      "type": "number"
    },
    "ISettingTruth": {
      "description": "Interface for Setting Truth categories such as \"Exodus\" and \"Cataclysm\". See page XX of Starforged for further information.",
      "title": "ISettingTruth",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Setting_Truths/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        },
        "Table": {
          "description": "The 'canonical' options for this setting truth category.",
          "type": "array",
          "items": { "$ref": "#/definitions/ISettingTruthOption" },
          "title": "Table"
        },
        "Character": {
          "description": "A Markdown version of the text that appears at the end of each Truth entry; it offers suggestions on the character's assets and background.",
          "type": "string",
          "title": "Character"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        },
        "Suggestions": {
          "$ref": "#/definitions/ISuggestions",
          "description": "\"Non-canonical\" suggestions of related items. They might be convenient to present to the user, but in most implementations rolling them automatically is not recommended.",
          "title": "Suggestions"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Character", "Display", "Name", "Source", "Table"]
    },
    "ISettingTruthOption": {
      "description": "Interface for 'canonical' options within a SettingTruth category.",
      "title": "ISettingTruthOption",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The ID of this row.",
          "pattern": "^(Starforged|Ironsworn)/Setting_Truths/[A-z_-]+/(1-33|34-67|68-100|[1-3])$",
          "type": "string",
          "title": "$id"
        },
        "Roll template": {
          "description": "Describes the string values of this item that should be replaced with template strings and filled with the results of one or more oracle rolls.",
          "$ref": "#/definitions/IRollTemplate",
          "title": "Roll template"
        },
        "Subtable": {
          "description": "A table to be rolled when this row is selected. If this row references an external oracle, the `Oracles` property is used instead.",
          "type": "array",
          "items": { "$ref": "#/definitions/IRow" },
          "title": "Subtable"
        },
        "Floor": {
          "anyOf": [
            {
              "description": "The low end of the dice range for this row.",
              "minimum": 1,
              "maximum": 100,
              "type": ["null", "integer"]
            },
            { "type": "null" }
          ],
          "title": "Floor"
        },
        "Ceiling": {
          "anyOf": [
            {
              "description": "The high end of the dice range for this row.",
              "minimum": 1,
              "maximum": 100,
              "type": ["null", "integer"]
            },
            { "type": "null" }
          ],
          "title": "Ceiling"
        },
        "Result": {
          "description": "The primary result text for the row, annotated in Markdown.\nIn the book, this is frequently the only column aside from the roll column. Otherwise, it is the first column.\nSome tables label this column as something other than Result; see the parent (or grandparent) Oracle.Display for more information.",
          "type": "string",
          "title": "Result"
        },
        "Summary": {
          "description": "A secondary markdown string that must be presented to the user for the implementation to be complete, but may benefit from progressive disclosure (such as a collapsible element, popover/tooltip, etc).\n\nGenerally, `Summary` is longer than `Result`.\n\nSome tables label this column as something other than `Result`; see the parent (or grandparent) `IOracle.Display.Table` for more information.\n\n`null` is used in cases where an 'empty' `Summary` exists (example: Starship Type, p. 326). In the book, these table cells are rendered with the text `--` (and this is the recommended placeholder for tabular display). For display as a single result (e.g. VTT table roll output), however, `null` values can be safely omitted.",
          "type": ["null", "string"],
          "title": "Summary"
        },
        "Oracle rolls": {
          "description": "Additional oracle tables that should be rolled when this row is selected.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Oracle rolls"
        },
        "Multiple rolls": {
          "description": "Data for rows that call for multiple rolls, e.g. on `Roll twice` results.",
          "$ref": "#/definitions/IMultipleRolls",
          "title": "Multiple rolls"
        },
        "Attributes": {
          "description": "The attributes set by this row.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAttribute" },
          "title": "Attributes"
        },
        "Suggestions": {
          "$ref": "#/definitions/ISuggestions",
          "description": "\"Non-canonical\" suggestions of related items. They might be convenient to present to the user, but in most implementations rolling them automatically is not recommended.",
          "title": "Suggestions"
        },
        "Content": {
          "$ref": "#/definitions/IOracleContent",
          "description": "Metadata that describes an oracle's semantic or lexical content.",
          "title": "Content"
        },
        "Game objects": {
          "description": "Any game objects that are explicitly pointed to by the original text. For most implementations, it is *not* recommended to generate them automatically - see \"Peeling the Onion\", p. 293.",
          "type": "array",
          "items": { "$ref": "#/definitions/IGameObject" },
          "title": "Game objects"
        },
        "Display": {
          "$ref": "#/definitions/IDisplay",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Quest Starter": {
          "description": "A markdown string describing the quest starter associated with this item.",
          "type": "string",
          "title": "Quest Starter"
        },
        "Description": {
          "description": "A user-facing markdown description of the item, consisting of one or more paragraphs.",
          "type": "string",
          "title": "Description"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Ceiling",
        "Description",
        "Floor",
        "Quest Starter",
        "Result"
      ]
    },
    "IRollTemplate": {
      "description": "Describes the string keys of this item that should be replaced with template strings and filled with the results of one or more oracles.",
      "title": "IRollTemplate",
      "type": "object",
      "properties": {
        "Result": {
          "description": "A template string for the parent's `Result` property, to be filled with an oracle table roll Result.",
          "type": "string",
          "title": "Result"
        },
        "Summary": {
          "description": "A template string for the parent's `Summary` property, to be filled with an oracle table roll Result.",
          "type": "string",
          "title": "Summary"
        },
        "Description": {
          "description": "A template string for the parent's `Description` property, to be filled with an oracle table roll Result.",
          "type": "string",
          "title": "Description"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IRow": {
      "description": "Interface representing a single row in an oracle table.",
      "title": "IRow",
      "type": "object",
      "properties": {
        "$id": {
          "anyOf": [
            {
              "description": "The ID of this row.",
              "pattern": "^(Ironsworn|Starforged)/Oracles(/[A-z_-]+)+/[1-9][0-9]*(-[1-9][0-9]*)?(/Subtable/[1-9][0-9]*(-[1-9][0-9]*)?)?$",
              "type": ["null", "string"]
            },
            { "type": "null" }
          ],
          "title": "$id"
        },
        "Floor": {
          "anyOf": [
            {
              "description": "The low end of the dice range for this row.",
              "minimum": 1,
              "maximum": 100,
              "type": ["null", "integer"]
            },
            { "type": "null" }
          ],
          "title": "Floor"
        },
        "Ceiling": {
          "anyOf": [
            {
              "description": "The high end of the dice range for this row.",
              "minimum": 1,
              "maximum": 100,
              "type": ["null", "integer"]
            },
            { "type": "null" }
          ],
          "title": "Ceiling"
        },
        "Result": {
          "description": "The primary result text for the row, annotated in Markdown.\nIn the book, this is frequently the only column aside from the roll column. Otherwise, it is the first column.\nSome tables label this column as something other than Result; see the parent (or grandparent) Oracle.Display for more information.",
          "type": "string",
          "title": "Result"
        },
        "Summary": {
          "description": "A secondary markdown string that must be presented to the user for the implementation to be complete, but may benefit from progressive disclosure (such as a collapsible element, popover/tooltip, etc).\n\nGenerally, `Summary` is longer than `Result`.\n\nSome tables label this column as something other than `Result`; see the parent (or grandparent) `IOracle.Display.Table` for more information.\n\n`null` is used in cases where an 'empty' `Summary` exists (example: Starship Type, p. 326). In the book, these table cells are rendered with the text `--` (and this is the recommended placeholder for tabular display). For display as a single result (e.g. VTT table roll output), however, `null` values can be safely omitted.",
          "type": ["null", "string"],
          "title": "Summary"
        },
        "Oracle rolls": {
          "description": "Additional oracle tables that should be rolled when this row is selected.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Oracle rolls"
        },
        "Subtable": {
          "description": "A table to be rolled when this row is selected. If this row references an external oracle, the `Oracles` property is used instead.",
          "type": "array",
          "items": { "$ref": "#/definitions/IRow" },
          "title": "Subtable"
        },
        "Multiple rolls": {
          "description": "Data for rows that call for multiple rolls, e.g. on `Roll twice` results.",
          "$ref": "#/definitions/IMultipleRolls",
          "title": "Multiple rolls"
        },
        "Attributes": {
          "description": "The attributes set by this row.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAttribute" },
          "title": "Attributes"
        },
        "Roll template": {
          "$ref": "#/definitions/IRollTemplate_1",
          "description": "Describes the string values of this item that should be replaced with template strings and filled with the results of one or more oracle rolls.",
          "title": "Roll template"
        },
        "Suggestions": {
          "$ref": "#/definitions/ISuggestions",
          "description": "\"Non-canonical\" suggestions of related items. They might be convenient to present to the user, but in most implementations rolling them automatically is not recommended.",
          "title": "Suggestions"
        },
        "Content": {
          "$ref": "#/definitions/IOracleContent",
          "description": "Metadata that describes an oracle's semantic or lexical content.",
          "title": "Content"
        },
        "Game objects": {
          "description": "Any game objects that are explicitly pointed to by the original text. For most implementations, it is *not* recommended to generate them automatically - see \"Peeling the Onion\", p. 293.",
          "type": "array",
          "items": { "$ref": "#/definitions/IGameObject" },
          "title": "Game objects"
        },
        "Display": {
          "$ref": "#/definitions/IDisplay",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Ceiling", "Floor", "Result"]
    },
    "IMultipleRolls": {
      "description": "Describes{@linkIRow}results that call for multiple rolls, most commonly \"Roll twice\" results.",
      "title": "IMultipleRolls",
      "type": "object",
      "properties": {
        "Amount": {
          "description": "The number of rolls to make on the parent oracle table.",
          "type": "integer",
          "title": "Amount"
        },
        "Allow duplicates": {
          "description": "Whether to allow duplicate results when generating multiple rolls.\n\nImplicitly required by `Make it worse`.",
          "type": "boolean",
          "title": "Allow duplicates"
        },
        "Make it worse": {
          "description": "Whether duplicate rolls should be compounded in an Ironsworn-style \"Make it worse\" results.\n\nTypically this is accompanied by `IRow.Result` text like \"Roll twice more on this table. Both results occur. If they are the same result, make it worse.\"\n\nCan safely be ignored in Starforged-only implementations. Implicitly requires `Allow duplicates`.",
          "type": "boolean",
          "title": "Make it worse"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Allow duplicates", "Amount", "Make it worse"]
    },
    "IAttribute": {
      "description": "Describes an attribute key/value pair, set by an oracle row. The key-value pair should be set on any game object for which that row is generated.\n\nAttributes exist to describe prerequisites that might be fulfilled by more than one table, that don't exist on tables at all, or that a generated game object might want to 'force' as one of it's roll results.\n\nSee documentation for a list of available values.",
      "title": "IAttribute",
      "type": "object",
      "properties": {
        "Key": { "$ref": "#/definitions/AttributeKey", "title": "Key" },
        "Value": { "type": "string", "title": "Value" }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Key"]
    },
    "AttributeKey": {
      "title": "AttributeKey",
      "enum": [
        "Atmosphere",
        "Authority",
        "Creature Scale",
        "Derelict Type",
        "Disposition",
        "Dominion",
        "Encountered Behavior",
        "Environment",
        "Faction Type",
        "Fringe Group",
        "Guild",
        "Influence",
        "Initial Contact",
        "Leadership",
        "Life",
        "Location",
        "Location Theme",
        "Planetary Class",
        "Population",
        "Region",
        "Role",
        "Zone"
      ],
      "type": "string"
    },
    "IRollTemplate_1": {
      "description": "Describes the string keys of this item that should be replaced with template strings and filled with the results of one or more oracles.",
      "title": "IRollTemplate_1",
      "$ref": "#/definitions/IRollTemplate"
    },
    "ISuggestions": {
      "description": "Describes \"non-canonical\" suggestions for game content related to the parent item.\n\nThese are intended be offered as convenient shortcuts for the user (for instance, including a menu dropdown for rolling on suggested tables); having them roll automatically is **not recommended** for most projects.\n\nThese can be safely ignored if that functionality is not desired.",
      "title": "ISuggestions",
      "$ref": "#/definitions/ISuggestions_1"
    },
    "ISuggestions_1": {
      "description": "Describes \"non-canonical\" suggestions for game content related to the parent item.\n\nThese are intended be offered as convenient shortcuts for the user (for instance, including a menu dropdown for rolling on suggested tables); having them roll automatically is **not recommended** for most projects.\n\nThese can be safely ignored if that functionality is not desired.",
      "title": "ISuggestions_1",
      "type": "object",
      "properties": {
        "Game objects": {
          "description": "Suggested game objects and their parameters.",
          "type": "array",
          "items": { "$ref": "#/definitions/IGameObject" },
          "title": "Game objects"
        },
        "Oracle rolls": {
          "description": "Suggested oracle rolls, by table ID. Multiples of the same ID can be used to indicate that multiple rolls should be made.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Oracle rolls"
        },
        "Moves": {
          "description": "Suggested move IDs.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Moves"
        },
        "Assets": {
          "description": "Suggested asset IDs.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Assets"
        },
        "Encounters": {
          "description": "Suggested encounter IDs.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Encounters"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IGameObject": {
      "description": "Describes a game object, with optional required parameters (for example, a specific Location result).",
      "title": "IGameObject",
      "type": "object",
      "properties": {
        "Object type": {
          "$ref": "#/definitions/GameObjectType",
          "title": "Object type"
        },
        "Requires": {
          "$ref": "#/definitions/IRequirements",
          "title": "Requires"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Object type"]
    },
    "GameObjectType": {
      "title": "GameObjectType",
      "enum": [
        "Character",
        "Creature",
        "Derelict",
        "Derelict Zone",
        "Faction",
        "Planet",
        "Precursor Vault",
        "Settlement",
        "Starship"
      ],
      "type": "string"
    },
    "IRequirements": {
      "description": "Data describing an item's requirements.",
      "title": "IRequirements",
      "type": "object",
      "properties": {
        "Attributes": {
          "description": "A list of attribute keys, and values of those keys that satisfy the requirements.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAttributeChoices" },
          "title": "Attributes"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Attributes"]
    },
    "IAttributeChoices": {
      "title": "IAttributeChoices",
      "type": "object",
      "properties": {
        "Key": { "$ref": "#/definitions/AttributeKey", "title": "Key" },
        "Values": {
          "type": "array",
          "items": { "type": "string" },
          "title": "Values"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Key"]
    },
    "IOracleContent": {
      "description": "Interface for metadata that describes an oracle's semantic or lexical content.",
      "title": "IOracleContent",
      "$ref": "#/definitions/IOracleContent_1"
    },
    "IOracleContent_1": {
      "description": "Interface for metadata that describes an oracle's semantic or lexical content.",
      "title": "IOracleContent_1",
      "type": "object",
      "properties": {
        "Part of speech": {
          "description": "The part of speech of this oracle.",
          "type": "array",
          "items": {
            "enum": [
              "adjective",
              "common noun",
              "compound noun",
              "fragment",
              "name",
              "noun",
              "plural",
              "possessive case",
              "proper noun",
              "proper noun fragment",
              "sentences",
              "verb"
            ],
            "type": "string"
          },
          "title": "Part of speech"
        },
        "Tags": {
          "description": "Any arbitrary string tags associated with this oracle.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Tags"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IDisplay": {
      "description": "Interface for data relevant to an item's display/rendering.",
      "title": "IDisplay",
      "$ref": "#/definitions/IDisplay_1"
    },
    "IDisplay_1": {
      "description": "Interface for data relevant to an item's display/rendering.",
      "title": "IDisplay_1",
      "type": "object",
      "properties": {
        "Icon": {
          "description": "A URL pointing to a single SVG icon.",
          "pattern": "^\\.\\./\\.\\./img/vector/[A-z-_0-9/]+\\.svg$",
          "type": "string",
          "title": "Icon"
        },
        "Images": {
          "description": "An array of URLs pointing to one or more WEBP images.",
          "pattern": "^\\.\\./\\.\\./img/raster/[A-z-_0-9/]+\\.webp$",
          "type": "array",
          "items": { "type": "string" },
          "title": "Images"
        },
        "Color": {
          "description": "A hex color associated with this item, for use as e.g. an accent color in its display.",
          "pattern": "^#[A-f0-9][A-f0-9][A-f0-9][A-f0-9][A-f0-9][A-f0-9]$",
          "type": "string",
          "title": "Color"
        },
        "Title": {
          "description": "The title of this item as it appears printed in the rulebook. Intended for use as the item's header, label, etc.",
          "type": "string",
          "title": "Title"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IAssetType": {
      "description": "Represents an Asset Type such as Command Vehicle, Companion, or Path, and serves as a container for all assets of that type.",
      "title": "IAssetType",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Assets": {
          "description": "The assets that belong to this asset type.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAsset" },
          "title": "Assets"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Usage": { "$ref": "#/definitions/IAssetUsage", "title": "Usage" },
        "Description": {
          "description": "A user-facing markdown description of the item, consisting of one or more paragraphs.",
          "type": "string",
          "title": "Description"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        },
        "Aliases": {
          "description": "Alternate names for this item, including: names it had earlier in development that have since changed, alternate spellings/punctuation, common misspellings, and so on.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Aliases"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Assets",
        "Description",
        "Display",
        "Name",
        "Source",
        "Usage"
      ]
    },
    "IAsset": {
      "description": "An interface representing an *Ironsworn: Starforged* asset card.",
      "title": "IAsset",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Name": {
          "description": "The asset's name - the title printed on the card.",
          "type": "string",
          "title": "Name"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "States": {
          "description": "Describes any states that the asset might have, such as \"Broken\". Some states may disable the asset entirely.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAssetState" },
          "title": "States"
        },
        "Asset Type": {
          "description": "The ID of the asset's parent AssetType",
          "type": "string",
          "title": "Asset Type"
        },
        "Usage": {
          "$ref": "#/definitions/IAssetUsage",
          "description": "Information on the asset's usage, such as whether its abilities are shared amongst the player characters.",
          "title": "Usage"
        },
        "Attachments": {
          "description": "Details on what attachments (other assets) are accepted by this asset.",
          "$ref": "#/definitions/IAssetAttachment",
          "title": "Attachments"
        },
        "Inputs": {
          "description": "Data describing the Input controls that should be embedded in the card. Inputs embedded in specific asset abilities appear as keys of the corresponding ability object, instead.",
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "#/definitions/IInputSelect" },
              { "$ref": "#/definitions/IInputText" }
            ]
          },
          "title": "Inputs"
        },
        "Requirement": {
          "description": "An optional markdown string representing the requirement text that appears at the top of some asset cards.",
          "type": "string",
          "title": "Requirement"
        },
        "Abilities": {
          "description": "The asset's abilities.",
          "type": "array",
          "items": [
            { "$ref": "#/definitions/IAssetAbility" },
            { "$ref": "#/definitions/IAssetAbility" },
            { "$ref": "#/definitions/IAssetAbility" }
          ],
          "minItems": 3,
          "maxItems": 3,
          "title": "Abilities"
        },
        "Condition Meter": {
          "description": "Information on this asset's condition meter, if any.",
          "$ref": "#/definitions/IConditionMeter",
          "title": "Condition Meter"
        },
        "Tags": {
          "type": "array",
          "items": { "type": "string" },
          "title": "Tags"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        },
        "Aliases": {
          "description": "Alternate names for this item, including: names it had earlier in development that have since changed, alternate spellings/punctuation, common misspellings, and so on.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Aliases"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Abilities",
        "Asset Type",
        "Display",
        "Name",
        "Source",
        "Usage"
      ]
    },
    "IAssetState": {
      "description": "Describes a possible state for an asset, like the \"Broken\" status for certain assets (mainly Modules in *Starforged*).\n\nStates are frequently toggled on and off by players; for real-world gameplay, this is generally represented by flipping the card over. A checkbox or other on/off toggle might serve the same function in a digital implementation.",
      "title": "IAssetState",
      "type": "object",
      "properties": {
        "Name": {
          "description": "A string label name or label for the state.",
          "type": "string",
          "title": "Name"
        },
        "Enabled": {
          "description": "Whether this state is currently enabled.",
          "type": "boolean",
          "title": "Enabled"
        },
        "Disables asset": {
          "description": "Whether this state should disable the entire asset when `IAssetState.Enabled === true`",
          "type": "boolean",
          "title": "Disables asset"
        },
        "Impact": {
          "description": "Whether this state counts as an Impact for the asset's owner.\n\nNote that for vehicles, this shouldn't be applied automatically unless your implementation has some way of telling which vehicle the PC is currently using.",
          "type": "boolean",
          "title": "Impact"
        },
        "Permanent": {
          "description": "Whether or not this state is permanent.",
          "type": "boolean",
          "title": "Permanent"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Disables asset", "Enabled", "Impact", "Name", "Permanent"]
    },
    "IAssetUsage": {
      "title": "IAssetUsage",
      "type": "object",
      "properties": {
        "Shared": {
          "description": "Whether the asset's abilities are shared with Allies.\n\nIf set to `true`, the asset's abilities can be invoked by **any** player character; if your app facilitates co-op or guided play, consider how you might expose these abilities to players other than the asset's owner.\n\nDefaults to `true` for Command Vehicle, Support Vehicle, and Module assets.",
          "type": "boolean",
          "title": "Shared"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Shared"]
    },
    "IAssetAttachment": {
      "description": "Details which assets are valid attachments. The most prominent example in *Ironsworn: Starforged* is the STARSHIP asset (`Starship/Assets/Command_Vehicle/Starship`); Rover (`Starship/Assets/Support_Vehicle/Rover`) also has an elective ability that adds this property.",
      "title": "IAssetAttachment",
      "type": "object",
      "properties": {
        "Asset Types": {
          "description": "The type of asset that this asset accepts as attachments.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Asset Types"
        },
        "Max": {
          "description": "The maximum number of attached assets accepted by this asset. If undefined or null, there is no maximum.",
          "type": ["null", "integer"],
          "title": "Max"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Asset Types", "Max"]
    },
    "IInputSelect": {
      "description": "An input where the user selects a single option from a list of pre-set options.\nSuggested rendering: a drop-down selection menu.",
      "title": "IInputSelect",
      "type": "object",
      "properties": {
        "Input Type": {
          "$ref": "#/definitions/InputType.Select",
          "title": "Input Type"
        },
        "Sets": {
          "description": "Hints which attribute(s) set by this dropdown's options.",
          "type": "array",
          "items": { "$ref": "#/definitions/IInputSelectAttributeDefinition" },
          "title": "Sets"
        },
        "Options": {
          "type": "array",
          "items": { "$ref": "#/definitions/IInputSelectOption" },
          "title": "Options"
        },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+(/Abilities/[1-3])?/Inputs/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Adjustable": {
          "description": "Whether the input's value is expected to change over the course of a campaign. For example, name fields are typically `false`, while something like a clock or tally would be `true`.\n\nIt's a good idea to make everything editable regardless, but this property might inform whether your UI presents that functionality \"front and center\" or as a secondary interaction (via long press, right click, etc);",
          "type": "boolean",
          "title": "Adjustable"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Adjustable", "Input Type", "Name", "Options", "Sets"]
    },
    "InputType.Select": {
      "title": "InputType.Select",
      "type": "string",
      "enum": ["Select"]
    },
    "IInputSelectAttributeDefinition": {
      "description": "Provides hints for the keys and typing of an{@linkIInputSelect}'s child{@linkIInputSelectOption}s.",
      "title": "IInputSelectAttributeDefinition",
      "type": "object",
      "properties": {
        "Key": { "type": "string", "title": "Key" },
        "Type": {
          "$ref": "#/definitions/InputSelectOptionType",
          "title": "Type"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Key", "Type"]
    },
    "InputSelectOptionType": {
      "description": "The type of an attribute set by a Select Input.",
      "title": "InputSelectOptionType",
      "enum": ["Condition Meter", "Number", "Stat", "String"],
      "type": "string"
    },
    "IInputSelectOption": {
      "description": "Represents an option in an{@linkIInputSelect}.",
      "title": "IInputSelectOption",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Inputs/[A-z_-]+/Options/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Set": {
          "description": "A array describing what attribute keys should be set to when this option is active. *All* items in the array should be set in this manner.",
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "#/definitions/IInputSelectOptionSetterMeter" },
              { "$ref": "#/definitions/IInputSelectOptionSetterNumber" },
              { "$ref": "#/definitions/IInputSelectOptionSetterStat" },
              { "$ref": "#/definitions/IInputSelectOptionSetterString" }
            ]
          },
          "title": "Set"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Name", "Set"]
    },
    "IInputSelectOptionSetterMeter": {
      "description": "A condition meter set by an{@linkIInputSelectOption}.",
      "title": "IInputSelectOptionSetterMeter",
      "type": "object",
      "properties": {
        "Type": {
          "$ref": "#/definitions/InputSelectOptionType.ConditionMeter",
          "title": "Type"
        },
        "Value": {
          "$ref": "#/definitions/PlayerConditionMeter",
          "title": "Value"
        },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Inputs/[A-z_-]+/Options/[A-z_-]+/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Key": { "type": "string", "title": "Key" }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Key", "Type", "Value"]
    },
    "InputSelectOptionType.ConditionMeter": {
      "description": "A reference to one of the player character's condition meters: Health, Spirit, or Supply.",
      "title": "InputSelectOptionType.ConditionMeter",
      "type": "string",
      "enum": ["Condition Meter"]
    },
    "PlayerConditionMeter": {
      "description": "Standard player character condition meters.",
      "title": "PlayerConditionMeter",
      "enum": ["Health", "Spirit", "Supply"],
      "type": "string"
    },
    "IInputSelectOptionSetterNumber": {
      "description": "An integer value set by an{@linkIInputSelectOption}.",
      "title": "IInputSelectOptionSetterNumber",
      "type": "object",
      "properties": {
        "Type": {
          "$ref": "#/definitions/InputSelectOptionType.Number",
          "title": "Type"
        },
        "Value": { "type": "integer", "title": "Value" },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Inputs/[A-z_-]+/Options/[A-z_-]+/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Key": { "type": "string", "title": "Key" }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Key", "Type", "Value"]
    },
    "InputSelectOptionType.Number": {
      "description": "A arbitrary pre-set number value.",
      "title": "InputSelectOptionType.Number",
      "type": "string",
      "enum": ["Number"]
    },
    "IInputSelectOptionSetterStat": {
      "description": "A stat set by an{@linkIInputSelectOption}.",
      "title": "IInputSelectOptionSetterStat",
      "type": "object",
      "properties": {
        "Type": {
          "$ref": "#/definitions/InputSelectOptionType.Stat",
          "title": "Type"
        },
        "Value": { "$ref": "#/definitions/Stat", "title": "Value" },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Inputs/[A-z_-]+/Options/[A-z_-]+/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Key": { "type": "string", "title": "Key" }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Key", "Type", "Value"]
    },
    "InputSelectOptionType.Stat": {
      "description": "A reference to one of the player character's stats: Edge, Heart, Iron, Shadow, or Wits.",
      "title": "InputSelectOptionType.Stat",
      "type": "string",
      "enum": ["Stat"]
    },
    "Stat": {
      "description": "Enumerates player character stats.",
      "title": "Stat",
      "enum": ["Edge", "Heart", "Iron", "Shadow", "Wits"],
      "type": "string"
    },
    "IInputSelectOptionSetterString": {
      "description": "An arbitrary string value set by an{@linkIInputSelectOption}.",
      "title": "IInputSelectOptionSetterString",
      "type": "object",
      "properties": {
        "Type": {
          "$ref": "#/definitions/InputSelectOptionType.String",
          "title": "Type"
        },
        "Value": { "type": "string", "title": "Value" },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Inputs/[A-z_-]+/Options/[A-z_-]+/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Key": { "type": "string", "title": "Key" }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Key", "Type", "Value"]
    },
    "InputSelectOptionType.String": {
      "description": "An arbitrary pre-set string value.",
      "title": "InputSelectOptionType.String",
      "type": "string",
      "enum": ["String"]
    },
    "IInputText": {
      "description": "A text input.\nSuggested rendering: a single-line text input, similar to `<input type='text'>` in HTML.",
      "title": "IInputText",
      "type": "object",
      "properties": {
        "Input Type": {
          "$ref": "#/definitions/InputType.Text",
          "title": "Input Type"
        },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+(/Abilities/[1-3])?/Inputs/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Adjustable": {
          "description": "Whether the input's value is expected to change over the course of a campaign. For example, name fields are typically `false`, while something like a clock or tally would be `true`.\n\nIt's a good idea to make everything editable regardless, but this property might inform whether your UI presents that functionality \"front and center\" or as a secondary interaction (via long press, right click, etc);",
          "type": "boolean",
          "title": "Adjustable"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Adjustable", "Input Type", "Name"]
    },
    "InputType.Text": {
      "title": "InputType.Text",
      "type": "string",
      "enum": ["Text"]
    },
    "IAssetAbility": {
      "description": "Represents one of an asset's three abilities.",
      "title": "IAssetAbility",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]$",
          "type": "string",
          "title": "$id"
        },
        "Name": {
          "description": "Ironsworn companion assets provide names for their abilities. Starforged asset abilities do not have names.",
          "type": "string",
          "title": "Name"
        },
        "Moves": {
          "description": "New moves added by this asset ability.",
          "type": "array",
          "items": { "$ref": "#/definitions/IMove" },
          "title": "Moves"
        },
        "Inputs": {
          "description": "User inputs (text, clocks, etc) associated with this asset ability.",
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "#/definitions/IInputClock" },
              { "$ref": "#/definitions/IInputNumber" },
              { "$ref": "#/definitions/IInputText" }
            ]
          },
          "title": "Inputs"
        },
        "Alter Moves": {
          "description": "Information on how this ability alters moves when enabled.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAlterMove" },
          "title": "Alter Moves"
        },
        "Alter Properties": {
          "description": "Information on how this ability alters its parent asset when enabled.",
          "$ref": "#/definitions/IAssetAlterProperties",
          "title": "Alter Properties"
        },
        "Alter Momentum": {
          "description": "Information on how this ability alters its owner's momentum (triggers an effect on burn, on reset, etc)",
          "$ref": "#/definitions/IAlterMomentum",
          "title": "Alter Momentum"
        },
        "Enabled": {
          "description": "Whether the asset ability is enabled or not. In most cases, the first asset ability defaults to 'true' and the others to 'false'. If none of an asset's abilities are set to 'true', the player can pick which the ability they start with when purchasing the asset.",
          "type": "boolean",
          "title": "Enabled"
        },
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Enabled", "Text"]
    },
    "IMove": {
      "description": "Interface representing a Starforged move.",
      "title": "IMove",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Moves/([A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3])/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        },
        "Asset": {
          "description": "The ID of the parent Asset of the move, if any.",
          "type": "string",
          "title": "Asset"
        },
        "Category": {
          "description": "The ID of the move's category.",
          "type": "string",
          "title": "Category"
        },
        "Progress Move": {
          "description": "Whether or not the move is a Progress Move. Progress moves roll two challenge dice against a progress score.",
          "type": "boolean",
          "title": "Progress Move"
        },
        "Variant of": {
          "description": "The ID of the move that this move is a variant of, if any.",
          "type": "string",
          "title": "Variant of"
        },
        "Trigger": {
          "$ref": "#/definitions/IMoveTrigger",
          "description": "The move's trigger data.",
          "title": "Trigger"
        },
        "Oracles": {
          "description": "The IDs of any oracles directly referenced by the move, or vice versa.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Oracles"
        },
        "Outcomes": {
          "description": "Outcome information for the move.",
          "$ref": "#/definitions/IMoveOutcomes",
          "title": "Outcomes"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Tags": {
          "type": "array",
          "items": { "type": "string" },
          "title": "Tags"
        },
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        },
        "Optional": {
          "description": "Whether or not the source material presents this rules item as optional.",
          "default": false,
          "type": "boolean",
          "title": "Optional"
        },
        "Suggestions": {
          "$ref": "#/definitions/ISuggestions",
          "description": "\"Non-canonical\" suggestions of related items. They might be convenient to present to the user, but in most implementations rolling them automatically is not recommended.",
          "title": "Suggestions"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Category",
        "Display",
        "Name",
        "Optional",
        "Source",
        "Text",
        "Trigger"
      ]
    },
    "IMoveTrigger": {
      "description": "Describes the trigger conditions of the move.",
      "title": "IMoveTrigger",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/(Moves/[A-z_-]+/[A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[0-9]+|Moves/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/[A-z_-]+)/Trigger$",
          "type": "string",
          "title": "$id"
        },
        "Text": {
          "description": "A markdown string containing the primary trigger text for this move.\n\nSecondary triggers (for specific stats or uses of an asset ability) are described in `Options`.",
          "type": "string",
          "title": "Text"
        },
        "By": {
          "description": "Information on who can trigger this item. Used mainly by asset abilities, some of which can trigger from an Ally's move.\n\nIf unspecified, assume `Ally` is `false` and `Player` is `true`.",
          "$ref": "#/definitions/IMoveTriggerBy",
          "title": "By"
        },
        "Options": {
          "description": "Information on any action rolls or progress rolls that are made when this move is triggered (which may describe a specific subset of the primary trigger in their own `Text` property).\n\nIf there's no action rolls or progress rolls attached to this move, this is `undefined`.",
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "#/definitions/IMoveTriggerOptionAction" },
              { "$ref": "#/definitions/IMoveTriggerOptionProgress" }
            ]
          },
          "title": "Options"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id"]
    },
    "IMoveTriggerBy": {
      "title": "IMoveTriggerBy",
      "type": "object",
      "properties": {
        "Player": {
          "description": "Whether the player character who owns this item can trigger it. Unsurprisingly, this is usually true, but there's a few exceptions: see *Starforged's* LOYALIST asset for an example.",
          "type": "boolean",
          "title": "Player"
        },
        "Ally": {
          "description": "Whether an Ally (a player character other than the owner) can trigger this item. This is usually false, but there's several exceptions among asset abilities.",
          "type": "boolean",
          "title": "Ally"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Ally", "Player"]
    },
    "IMoveTriggerOptionAction": {
      "title": "IMoveTriggerOptionAction",
      "type": "object",
      "properties": {
        "Roll type": {
          "$ref": "#/definitions/RollType.Action",
          "description": "Whether this option is an action roll or progress roll.",
          "title": "Roll type"
        },
        "Using": {
          "description": "The stat(s) or progress track(s) that may be rolled with this move trigger option.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Using"
        },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/(Moves/[A-z_-]+/[A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[0-9]+|Moves/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/[A-z_-]+)/Trigger/Options/[0-9]+$",
          "type": "string",
          "title": "$id"
        },
        "Method": {
          "$ref": "#/definitions/RollMethod",
          "description": "The method used to choose the stat or track in the `Using` array.",
          "title": "Method"
        },
        "Custom stat": {
          "description": "Defines a custom stat, if one is included in this object's `With` array.",
          "$ref": "#/definitions/ICustomStat",
          "title": "Custom stat"
        },
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Method", "Roll type", "Using"]
    },
    "RollType.Action": {
      "title": "RollType.Action",
      "type": "string",
      "enum": ["Action roll"]
    },
    "RollMethod": {
      "description": "The stat(s) or progress track(s) that may be rolled with the parent move trigger option.",
      "title": "RollMethod",
      "enum": [
        "All",
        "Any",
        "Highest",
        "Inherit",
        "Lowest",
        "Strong Hit",
        "Weak Hit"
      ],
      "type": "string"
    },
    "ICustomStat": {
      "title": "ICustomStat",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Moves/([A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[0-9]+)/[A-z_-]+/Trigger/Options/[0-9]+/Custom_stat$",
          "type": "string",
          "title": "$id"
        },
        "Options": {
          "type": "array",
          "items": { "$ref": "#/definitions/ICustomStatOption" },
          "title": "Options"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Name", "Options"]
    },
    "ICustomStatOption": {
      "title": "ICustomStatOption",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Moves/([A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[0-9]+)/[A-z_-]+/Trigger/Options/[0-9]+/Custom_stat/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Name": {
          "description": "The name/label for this specific value of the custom stat.",
          "type": "string",
          "title": "Name"
        },
        "Value": {
          "description": "The numeric value to be used as +stat when making an Action Roll.",
          "type": "integer",
          "title": "Value"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Name", "Value"]
    },
    "IMoveTriggerOptionProgress": {
      "title": "IMoveTriggerOptionProgress",
      "type": "object",
      "properties": {
        "Roll type": {
          "$ref": "#/definitions/RollType.Progress",
          "description": "Whether this option is an action roll or progress roll.",
          "title": "Roll type"
        },
        "Using": {
          "description": "The stat(s) or progress track(s) that may be rolled with this move trigger option.",
          "type": "array",
          "items": {
            "enum": [
              "Bonds",
              "Bonds Legacy",
              "Combat",
              "Connection",
              "Delve",
              "Discoveries Legacy",
              "Expedition",
              "Journey",
              "Quests Legacy",
              "Scene Challenge",
              "Vow"
            ],
            "type": "string"
          },
          "title": "Using"
        },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/(Moves/[A-z_-]+/[A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[0-9]+|Moves/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/[A-z_-]+)/Trigger/Options/[0-9]+$",
          "type": "string",
          "title": "$id"
        },
        "Method": {
          "$ref": "#/definitions/RollMethod",
          "description": "The method used to choose the stat or track in the `Using` array.",
          "title": "Method"
        },
        "Custom stat": {
          "description": "Defines a custom stat, if one is included in this object's `With` array.",
          "$ref": "#/definitions/ICustomStat",
          "title": "Custom stat"
        },
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Method", "Roll type", "Using"]
    },
    "RollType.Progress": {
      "title": "RollType.Progress",
      "type": "string",
      "enum": ["Progress roll"]
    },
    "IMoveOutcomes": {
      "title": "IMoveOutcomes",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/(Moves/[A-z_-]+/[A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[0-9]+|Moves/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/[A-z_-]+)/Outcomes$",
          "type": "string",
          "title": "$id"
        },
        "Strong Hit": {
          "$ref": "#/definitions/IOutcomeInfo",
          "title": "Strong Hit"
        },
        "Weak Hit": {
          "$ref": "#/definitions/IOutcomeInfo",
          "title": "Weak Hit"
        },
        "Miss": { "$ref": "#/definitions/IOutcomeInfo", "title": "Miss" }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Miss", "Strong Hit", "Weak Hit"]
    },
    "IOutcomeInfo": {
      "title": "IOutcomeInfo",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/(Moves/[A-z_-]+/[A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[0-9]+|Moves/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/[A-z_-]+)/Outcomes/((Miss|Strong_Hit)(/With_a_Match)?|Weak_Hit)$",
          "type": "string",
          "title": "$id"
        },
        "With a Match": {
          "description": "Defines a different outcome for this result with a match. Its text should replace the text of this object.",
          "$ref": "#/definitions/IOutcomeInfo",
          "title": "With a Match"
        },
        "Count as": {
          "description": "Count this roll as another roll outcome, e.g. \"Count a weak hit as a miss\"",
          "enum": ["Miss", "Strong Hit", "Weak Hit"],
          "type": "string",
          "title": "Count as"
        },
        "Reroll": {
          "description": "Information on rerolls offered by this move.",
          "$ref": "#/definitions/IMoveReroll",
          "title": "Reroll"
        },
        "In Control": {
          "description": "Whether this outcome leaves the player character in control or not. If unspecified, assume that it's `true` on a Strong Hit, and `false` on a Weak Hit or Miss.",
          "type": "boolean",
          "title": "In Control"
        },
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Text"]
    },
    "IMoveReroll": {
      "description": "Describes a reroll offered by a move outcome. The vast majority of rerolls in *Ironsworn* are elective, so automatic rerolling isn't recommended.",
      "title": "IMoveReroll",
      "type": "object",
      "properties": {
        "Text": {
          "description": "The markdown string describing the conditions of the reroll. It should be presented to the user so that they can decide whether a reroll is appropriate.",
          "type": "string",
          "title": "Text"
        },
        "Dice": {
          "$ref": "#/definitions/RerollType",
          "description": "The dice to be rerolled.",
          "title": "Dice"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Dice", "Text"]
    },
    "RerollType": {
      "description": "Enumerates which dice are to be rerolled.",
      "title": "RerollType",
      "enum": ["Action die", "All", "Any", "Challenge dice", "Challenge die"],
      "type": "string"
    },
    "IInputClock": {
      "description": "An input representing an *Ironsworn: Starforged* clock.",
      "title": "IInputClock",
      "type": "object",
      "properties": {
        "Input Type": {
          "$ref": "#/definitions/InputType.Clock",
          "title": "Input Type"
        },
        "Clock Type": {
          "$ref": "#/definitions/ClockType",
          "description": "Whether the clock is a Tension Clock or a Campaign Clock. For assets this doesn't really matter since they have their own specific trigger conditions, and can probably be ignored.",
          "title": "Clock Type"
        },
        "Segments": {
          "$ref": "#/definitions/ClockSegments",
          "description": "An integer representing the total number of segments in this Clock. *Ironsworn: Starforged* uses clocks with 4, 6, 8, and 10 segments.\n\n`Filled` should not exceed this number.",
          "title": "Segments"
        },
        "Filled": {
          "description": "An integer representing how many filled segments this clock has. This is always 0 in Dataforged; it's included to make it easy to store clock states with the same interface.",
          "type": "integer",
          "title": "Filled"
        },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+(/Abilities/[1-3])?/Inputs/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Adjustable": {
          "description": "Whether the input's value is expected to change over the course of a campaign. For example, name fields are typically `false`, while something like a clock or tally would be `true`.\n\nIt's a good idea to make everything editable regardless, but this property might inform whether your UI presents that functionality \"front and center\" or as a secondary interaction (via long press, right click, etc);",
          "type": "boolean",
          "title": "Adjustable"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Adjustable",
        "Clock Type",
        "Filled",
        "Input Type",
        "Name",
        "Segments"
      ]
    },
    "InputType.Clock": {
      "title": "InputType.Clock",
      "type": "string",
      "enum": ["Clock"]
    },
    "ClockType": {
      "description": "See clocks (p. 234) for more information.",
      "title": "ClockType",
      "enum": ["Campaign", "Tension"],
      "type": "string"
    },
    "ClockSegments": {
      "title": "ClockSegments",
      "enum": [10, 4, 6, 8],
      "type": "number"
    },
    "IInputNumber": {
      "description": "An input where the user sets an integer.\nSuggested rendering: a number input spinner, similar to `<input type='number'>` in HTML.",
      "title": "IInputNumber",
      "type": "object",
      "properties": {
        "Input Type": {
          "$ref": "#/definitions/InputType.Number",
          "title": "Input Type"
        },
        "Min": { "type": "integer", "title": "Min" },
        "Max": { "type": ["null", "integer"], "title": "Max" },
        "Step": { "type": "number", "enum": [1], "title": "Step" },
        "Value": { "type": "integer", "title": "Value" },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+(/Abilities/[1-3])?/Inputs/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Adjustable": {
          "description": "Whether the input's value is expected to change over the course of a campaign. For example, name fields are typically `false`, while something like a clock or tally would be `true`.\n\nIt's a good idea to make everything editable regardless, but this property might inform whether your UI presents that functionality \"front and center\" or as a secondary interaction (via long press, right click, etc);",
          "type": "boolean",
          "title": "Adjustable"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Adjustable",
        "Input Type",
        "Max",
        "Min",
        "Name",
        "Step",
        "Value"
      ]
    },
    "InputType.Number": {
      "title": "InputType.Number",
      "type": "string",
      "enum": ["Number"]
    },
    "IAlterMove": {
      "description": "Describes alterations applied to moves by asset abilities.",
      "title": "IAlterMove",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[1-9][0-9]*$",
          "type": "string",
          "title": "$id"
        },
        "Moves": {
          "description": "The `$id`s of the move(s) to be altered. If it's `null`, it can alter *any* move to which its trigger conditions apply. If it's `undefined`, see `Extends` instead.",
          "anyOf": [
            { "type": "array", "items": { "type": "string" } },
            { "type": "null" },
            { "type": "null" }
          ],
          "title": "Moves"
        },
        "Alters": {
          "description": "Some asset abilities alter/extend other asset abilities, specified as an array of IDs. Only changed properties are specified; other properties are the same.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Alters"
        },
        "Trigger": {
          "description": "The trigger required by the asset ability. If `undefined`, the move alteration applies to all uses of the specified moves, so long as they also meet any implicit asset requirements (fictional framing, `IAsset.Requirement`, not being Broken or Out of Action, etc).",
          "$ref": "#/definitions/IMoveTrigger",
          "title": "Trigger"
        },
        "Text": {
          "description": "Markdown rules text describing added effects which apply *before* the move is rolled, such as adds.",
          "type": "string",
          "title": "Text"
        },
        "Outcomes": {
          "description": "Added rules text that applies on move outcomes.",
          "$ref": "#/definitions/IAlterMoveOutcomes",
          "title": "Outcomes"
        },
        "Suggestions": {
          "$ref": "#/definitions/ISuggestions",
          "description": "\"Non-canonical\" suggestions of related items. They might be convenient to present to the user, but in most implementations rolling them automatically is not recommended.",
          "title": "Suggestions"
        },
        "Asset": {
          "description": "The ID of the parent Asset of the move, if any.",
          "type": "string",
          "title": "Asset"
        },
        "Progress Move": {
          "description": "Whether or not the move is a Progress Move. Progress moves roll two challenge dice against a progress score.",
          "type": "boolean",
          "title": "Progress Move"
        },
        "Variant of": {
          "description": "The ID of the move that this move is a variant of, if any.",
          "type": "string",
          "title": "Variant of"
        },
        "Oracles": {
          "description": "The IDs of any oracles directly referenced by the move, or vice versa.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Oracles"
        },
        "Tags": {
          "type": "array",
          "items": { "type": "string" },
          "title": "Tags"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id"]
    },
    "IAlterMoveOutcomes": {
      "title": "IAlterMoveOutcomes",
      "type": "object",
      "properties": {
        "Strong Hit": {
          "$ref": "#/definitions/IAlterOutcomeInfo",
          "title": "Strong Hit"
        },
        "Weak Hit": {
          "$ref": "#/definitions/IAlterOutcomeInfo",
          "title": "Weak Hit"
        },
        "Miss": { "$ref": "#/definitions/IAlterOutcomeInfo", "title": "Miss" },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/(Moves/[A-z_-]+/[A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[0-9]+|Moves/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/[A-z_-]+)/Outcomes$",
          "type": "string",
          "title": "$id"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id"]
    },
    "IAlterOutcomeInfo": {
      "title": "IAlterOutcomeInfo",
      "type": "object",
      "properties": {
        "With a Match": {
          "$ref": "#/definitions/Omit<IAlterOutcomeInfo,\"WithaMatch\">",
          "title": "With a Match"
        },
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/(Moves/[A-z_-]+/[A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[0-9]+|Moves/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/[A-z_-]+)/Outcomes/((Miss|Strong_Hit)(/With_a_Match)?|Weak_Hit)$",
          "type": "string",
          "title": "$id"
        },
        "Count as": {
          "description": "Count this roll as another roll outcome, e.g. \"Count a weak hit as a miss\"",
          "enum": ["Miss", "Strong Hit", "Weak Hit"],
          "type": "string",
          "title": "Count as"
        },
        "Reroll": {
          "description": "Information on rerolls offered by this move.",
          "$ref": "#/definitions/Partial<IMoveReroll>",
          "title": "Reroll"
        },
        "In Control": {
          "description": "Whether this outcome leaves the player character in control or not. If unspecified, assume that it's `true` on a Strong Hit, and `false` on a Weak Hit or Miss.",
          "type": "boolean",
          "title": "In Control"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "Omit<IAlterOutcomeInfo,\"WithaMatch\">": {
      "title": "Omit<IAlterOutcomeInfo,\"WithaMatch\">",
      "type": "object",
      "properties": {
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        },
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/(Moves/[A-z_-]+/[A-z_-]+|Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/Alter_Moves/[0-9]+|Moves/Assets/[A-z_-]+/[A-z_-]+/Abilities/[1-3]/[A-z_-]+)/Outcomes/((Miss|Strong_Hit)(/With_a_Match)?|Weak_Hit)$",
          "type": "string",
          "title": "$id"
        },
        "Count as": {
          "description": "Count this roll as another roll outcome, e.g. \"Count a weak hit as a miss\"",
          "enum": ["Miss", "Strong Hit", "Weak Hit"],
          "type": "string",
          "title": "Count as"
        },
        "Reroll": {
          "description": "Information on rerolls offered by this move.",
          "$ref": "#/definitions/Partial<IMoveReroll>",
          "title": "Reroll"
        },
        "In Control": {
          "description": "Whether this outcome leaves the player character in control or not. If unspecified, assume that it's `true` on a Strong Hit, and `false` on a Weak Hit or Miss.",
          "type": "boolean",
          "title": "In Control"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "Partial<IMoveReroll>": {
      "title": "Partial<IMoveReroll>",
      "type": "object",
      "properties": {
        "Text": {
          "description": "The markdown string describing the conditions of the reroll. It should be presented to the user so that they can decide whether a reroll is appropriate.",
          "type": "string",
          "title": "Text"
        },
        "Dice": {
          "$ref": "#/definitions/RerollType_1",
          "description": "The dice to be rerolled.",
          "title": "Dice"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "RerollType_1": {
      "description": "Enumerates which dice are to be rerolled.",
      "title": "RerollType_1",
      "enum": ["Action die", "All", "Any", "Challenge dice", "Challenge die"],
      "type": "string"
    },
    "IAssetAlterProperties": {
      "description": "Describes changes that an asset ability makes to its parent asset when active. Any properties with object values should be merged recursively.",
      "title": "IAssetAlterProperties",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Name": {
          "description": "The asset's name - the title printed on the card.",
          "type": "string",
          "title": "Name"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle_1",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "States": {
          "description": "Describes any states that the asset might have, such as \"Broken\". Some states may disable the asset entirely.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAssetState" },
          "title": "States"
        },
        "Asset Type": {
          "description": "The ID of the asset's parent AssetType",
          "type": "string",
          "title": "Asset Type"
        },
        "Usage": {
          "$ref": "#/definitions/IAssetUsage_1",
          "description": "Information on the asset's usage, such as whether its abilities are shared amongst the player characters.",
          "title": "Usage"
        },
        "Attachments": {
          "description": "Details on what attachments (other assets) are accepted by this asset.",
          "$ref": "#/definitions/Partial<IAssetAttachment>",
          "title": "Attachments"
        },
        "Inputs": {
          "description": "Data describing the Input controls that should be embedded in the card. Inputs embedded in specific asset abilities appear as keys of the corresponding ability object, instead.",
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "#/definitions/IInputSelect" },
              { "$ref": "#/definitions/IInputText" }
            ]
          },
          "title": "Inputs"
        },
        "Requirement": {
          "description": "An optional markdown string representing the requirement text that appears at the top of some asset cards.",
          "type": "string",
          "title": "Requirement"
        },
        "Abilities": {
          "description": "The asset's abilities.",
          "type": "array",
          "items": [
            { "$ref": "#/definitions/IAssetAbility" },
            { "$ref": "#/definitions/IAssetAbility" },
            { "$ref": "#/definitions/IAssetAbility" }
          ],
          "minItems": 3,
          "maxItems": 3,
          "title": "Abilities"
        },
        "Condition Meter": {
          "description": "Information on this asset's condition meter, if any.",
          "$ref": "#/definitions/Partial<IConditionMeter>",
          "title": "Condition Meter"
        },
        "Tags": {
          "type": "array",
          "items": { "type": "string" },
          "title": "Tags"
        },
        "Source": {
          "$ref": "#/definitions/ISource_1",
          "description": "Information on this item's source.",
          "title": "Source"
        },
        "Aliases": {
          "description": "Alternate names for this item, including: names it had earlier in development that have since changed, alternate spellings/punctuation, common misspellings, and so on.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Aliases"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IDisplayWithTitle_1": {
      "title": "IDisplayWithTitle_1",
      "$ref": "#/definitions/Partial<IDisplayWithTitle>"
    },
    "Partial<IDisplayWithTitle>": {
      "title": "Partial<IDisplayWithTitle>",
      "type": "object",
      "properties": {
        "Title": {
          "description": "The title of this item as it appears printed in the rulebook. Intended for use as the item's header, label, etc.",
          "type": "string",
          "title": "Title"
        },
        "Icon": {
          "description": "A URL pointing to a single SVG icon.",
          "pattern": "^\\.\\./\\.\\./img/vector/[A-z-_0-9/]+\\.svg$",
          "type": "string",
          "title": "Icon"
        },
        "Images": {
          "description": "An array of URLs pointing to one or more WEBP images.",
          "pattern": "^\\.\\./\\.\\./img/raster/[A-z-_0-9/]+\\.webp$",
          "type": "array",
          "items": { "type": "string" },
          "title": "Images"
        },
        "Color": {
          "description": "A hex color associated with this item, for use as e.g. an accent color in its display.",
          "pattern": "^#[A-f0-9][A-f0-9][A-f0-9][A-f0-9][A-f0-9][A-f0-9]$",
          "type": "string",
          "title": "Color"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IAssetUsage_1": {
      "title": "IAssetUsage_1",
      "$ref": "#/definitions/Partial<IAssetUsage>"
    },
    "Partial<IAssetUsage>": {
      "title": "Partial<IAssetUsage>",
      "type": "object",
      "properties": {
        "Shared": {
          "description": "Whether the asset's abilities are shared with Allies.\n\nIf set to `true`, the asset's abilities can be invoked by **any** player character; if your app facilitates co-op or guided play, consider how you might expose these abilities to players other than the asset's owner.\n\nDefaults to `true` for Command Vehicle, Support Vehicle, and Module assets.",
          "type": "boolean",
          "title": "Shared"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "Partial<IAssetAttachment>": {
      "title": "Partial<IAssetAttachment>",
      "type": "object",
      "properties": {
        "Asset Types": {
          "description": "The type of asset that this asset accepts as attachments.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Asset Types"
        },
        "Max": {
          "description": "The maximum number of attached assets accepted by this asset. If undefined or null, there is no maximum.",
          "type": ["null", "integer"],
          "title": "Max"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "Partial<IConditionMeter>": {
      "title": "Partial<IConditionMeter>",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Condition_Meter$",
          "type": "string",
          "title": "$id"
        },
        "Min": {
          "description": "The minimum value of the meter. Usually this is 0. Momentum is currently the only exception to this and goes as low as -6.",
          "enum": [0],
          "type": "number",
          "title": "Min"
        },
        "Conditions": {
          "description": "The conditions that can apply to this meter.",
          "type": "array",
          "items": {
            "description": "Conditions (such as impacts) that can apply to asset cards with condition meters. These are typically presented as tick boxes on the asset card.",
            "enum": ["Battered", "Cursed", "Out of Action", "Wrecked"],
            "type": "string"
          },
          "title": "Conditions"
        },
        "Aliases": {
          "type": "array",
          "items": {
            "description": "Names of non-player condition meters (for e.g. companions and vehicles) that are referenced by moves and other assets.\nIf an asset condition meter can be used in this manner, the alias is included in its Aliases array.",
            "enum": [
              "Command Vehicle Integrity",
              "Companion Health",
              "Incidental Vehicle Integrity",
              "Support Vehicle Integrity",
              "Vehicle Integrity"
            ],
            "type": "string"
          },
          "title": "Aliases"
        },
        "Max": {
          "description": "The maximum value of the meter.",
          "type": "integer",
          "title": "Max"
        },
        "Value": {
          "description": "The initial value of the meter.",
          "type": "integer",
          "title": "Value"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "ISource_1": {
      "description": "Interface representing data on this item's source. For 'canonical' content, this is usually a book with numbered pages, but it might also be a link to a web site.",
      "title": "ISource_1",
      "$ref": "#/definitions/Partial<ISource>"
    },
    "Partial<ISource>": {
      "title": "Partial<ISource>",
      "type": "object",
      "properties": {
        "Title": {
          "description": "The title of the source.\n\nFor 'canonical' content, use one of the enumerated `SourceTitle` strings.\n\nFor 3rd-party content (including homebrew) that's been released as part of a titled document, use the title of that document (e.g. \"Steelforged\", \"Ironsmith\").\n\nIf the source has no particular title (for instance, it's a single custom element in a VTT implementation), use \"Custom\".",
          "type": "string",
          "title": "Title"
        },
        "Authors": {
          "description": "The author(s) of this item. For 'canonical' content, this one's usually pretty obvious 😉 However, it's included so that homebrew content can use the same interface/schema.",
          "default": ["Shawn Tomkin"],
          "type": "array",
          "items": { "type": "string" },
          "title": "Authors"
        },
        "Date": {
          "description": "The 6-number date string formatted as `MMDDYY`. Relevant only during Starforged development; it will be deprecated once the game is released.",
          "pattern": "^(0[1-9]|1[0-2])([0-2][1-9]|3[0-1])([0-9][0-9])$",
          "type": "string",
          "title": "Date"
        },
        "Page": {
          "description": "The page on which the item appears most prominently in the source material (if it's in a format that uses page numbers).",
          "type": "integer",
          "title": "Page"
        },
        "Url": {
          "description": "The URL where the source material is available.",
          "pattern": "^https?://.*$",
          "type": "string",
          "title": "Url"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IAlterMomentum": {
      "title": "IAlterMomentum",
      "type": "object",
      "properties": {
        "Burn": {
          "description": "Information on how the player's momentum burn is altered.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAlterMomentumBurn" },
          "title": "Burn"
        },
        "Reset": {
          "description": "Information on how the player's momentum reset is altered.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAlterMomentumReset" },
          "title": "Reset"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IAlterMomentumBurn": {
      "title": "IAlterMomentumBurn",
      "type": "object",
      "properties": {
        "Trigger": {
          "$ref": "#/definitions/IHasText",
          "description": "The trigger condition for altering the PC's momentum burn.",
          "title": "Trigger"
        },
        "Effect": {
          "$ref": "#/definitions/IHasText",
          "description": "The effect altering the PC's momentum burn.",
          "title": "Effect"
        },
        "Outcomes": {
          "type": "array",
          "items": { "enum": ["Strong Hit", "Weak Hit"], "type": "string" },
          "title": "Outcomes"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Effect", "Trigger"]
    },
    "IHasText": {
      "description": "Interface for items that reproduce Starforged rules text in markdown.",
      "title": "IHasText",
      "type": "object",
      "properties": {
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Text"]
    },
    "IAlterMomentumReset": {
      "title": "IAlterMomentumReset",
      "type": "object",
      "properties": {
        "Trigger": {
          "$ref": "#/definitions/IHasText",
          "description": "The trigger condition for altering the PC's momentum reset.",
          "title": "Trigger"
        },
        "Value": {
          "description": "The amount by which the PC's momentum reset is change.",
          "type": "integer",
          "title": "Value"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Trigger", "Value"]
    },
    "IConditionMeter": {
      "description": "Interface representing a condition meter such as Health, Spirit, Supply, or Integrity.",
      "title": "IConditionMeter",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Assets/[A-z_-]+/[A-z_-]+/Condition_Meter$",
          "type": "string",
          "title": "$id"
        },
        "Min": {
          "description": "The minimum value of the meter. Usually this is 0. Momentum is currently the only exception to this and goes as low as -6.",
          "type": "number",
          "enum": [0],
          "title": "Min"
        },
        "Conditions": {
          "description": "The conditions that can apply to this meter.",
          "type": "array",
          "items": {
            "description": "Conditions (such as impacts) that can apply to asset cards with condition meters. These are typically presented as tick boxes on the asset card.",
            "enum": ["Battered", "Cursed", "Out of Action", "Wrecked"],
            "type": "string"
          },
          "title": "Conditions"
        },
        "Aliases": {
          "type": "array",
          "items": {
            "description": "Names of non-player condition meters (for e.g. companions and vehicles) that are referenced by moves and other assets.\nIf an asset condition meter can be used in this manner, the alias is included in its Aliases array.",
            "enum": [
              "Command Vehicle Integrity",
              "Companion Health",
              "Incidental Vehicle Integrity",
              "Support Vehicle Integrity",
              "Vehicle Integrity"
            ],
            "type": "string"
          },
          "title": "Aliases"
        },
        "Max": {
          "description": "The maximum value of the meter.",
          "type": "integer",
          "title": "Max"
        },
        "Value": {
          "description": "The initial value of the meter.",
          "type": "integer",
          "title": "Value"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Conditions", "Max", "Min", "Name", "Value"]
    },
    "IMoveCategory": {
      "description": "Represents a category of moves such as \"Session Moves\" or \"Combat Moves\", and serves as a container for moves within that category.",
      "title": "IMoveCategory",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Starforged|Ironsworn)/Moves/[A-z_-]+$",
          "type": "string",
          "title": "$id"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        },
        "Moves": {
          "type": "array",
          "items": { "$ref": "#/definitions/IMove" },
          "title": "Moves"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        },
        "Description": {
          "description": "A user-facing markdown description of the item, consisting of one or more paragraphs.",
          "type": "string",
          "title": "Description"
        },
        "Optional": {
          "description": "Whether or not the source material presents this rules item as optional.",
          "default": false,
          "type": "boolean",
          "title": "Optional"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": [
        "$id",
        "Description",
        "Display",
        "Moves",
        "Name",
        "Optional",
        "Source"
      ]
    },
    "IOracleCategory": {
      "description": "Represents an oracle category: a grouping that can contain both{@linkIOracle}s and other instances of{@linkIOracleCategory}, but doesn't have its own `Table` key.\n\nIf you're looking for a way to crawl the oracle hierarchy in search of a specific ID, see{@linkIOracleBase}.",
      "title": "IOracleCategory",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Ironsworn|Starforged)/Oracles/[A-z_-]+(/[A-z_-]+)?$",
          "type": "string",
          "title": "$id"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        },
        "Category": {
          "description": "The ID of the most recent OracleCategory ancestor of this item, if any.",
          "type": "string",
          "title": "Category"
        },
        "Sample Names": {
          "description": "A list of sample names for this category (only used by Planetary Class subcategories).",
          "type": "array",
          "items": { "type": "string" },
          "title": "Sample Names"
        },
        "Member of": {
          "description": "The ID of the most recent Oracle ancestor of this item, if any.",
          "pattern": "^(Ironsworn|Starforged)/Oracles/[A-z_-]+/[A-z_-]+$",
          "type": "string",
          "title": "Member of"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayWithTitle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Usage": {
          "description": "Information on the usage of this oracle: recommended number of rolls, etc.",
          "$ref": "#/definitions/IOracleUsage",
          "title": "Usage"
        },
        "Table": {
          "description": "Represents a single oracle table, where 'table' is defined as being something with a single roll range.\n\nThis key appears only on 'leaf' nodes of the oracle hierarchy 'tree' - in other words, many (but not all){@linkIOracle}objects.",
          "type": "array",
          "items": { "$ref": "#/definitions/IRow" },
          "title": "Table"
        },
        "Oracles": {
          "description": "Oracle objects contained by this object.\n\nThis key appears only on 'branch' nodes of the oracle hierarchy 'tree':{@linkIOracleCategory}, and{@linkIOracle}(when it contains multiple closely-related tables).",
          "type": "array",
          "items": { "$ref": "#/definitions/IOracle" },
          "title": "Oracles"
        },
        "Categories": {
          "description": "Subcategories contained by this oracle category.\n\nThis key appears only on{@linkIOracleCategory}, and thus only on 'branch' nodes of the oracle hierarchy 'tree.",
          "type": "array",
          "items": { "$ref": "#/definitions/IOracleCategory" },
          "title": "Categories"
        },
        "On a Match": {
          "description": "Describes the match behaviour of this oracle's table, if any, and provides a `Text` string describing it. Only appears on a handful of move oracles like Ask the Oracle and Advance a Threat.\n\nThis key appears only on{@linkIOracle}s that have a `Table`.",
          "$ref": "#/definitions/IOracleMatch",
          "title": "On a Match"
        },
        "Aliases": {
          "description": "Alternate names for this item, including: names it had earlier in development that have since changed, alternate spellings/punctuation, common misspellings, and so on.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Aliases"
        },
        "Description": {
          "description": "A user-facing markdown description of the item, consisting of one or more paragraphs.",
          "type": "string",
          "title": "Description"
        },
        "Content": {
          "$ref": "#/definitions/IOracleContent",
          "description": "Metadata that describes an oracle's semantic or lexical content.",
          "title": "Content"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Display", "Name", "Source"]
    },
    "IOracleUsage": {
      "description": "Describes the recommended usage of this item.",
      "title": "IOracleUsage",
      "type": "object",
      "properties": {
        "Initial": {
          "description": "Whether this table should be included in the initial oracle rolls when generating a game object. This is a somewhat arbitrary recommendation, and may not be appropriate for all implementations (or all game situations). Rather it's a reasonable starting point in *most* cases.\n\nThat said, the game itself recommends **against** rolling all possible results at once (see \"Peeling the Onion\", p. 293, *Starforged*). If your goal is to implement the game 'as-written', consider how you might include some means of \"progressive disclosure\" of oracle results.\n\nMay be deprecated in the future in favour of dedicated object template information.",
          "type": "boolean",
          "title": "Initial"
        },
        "Suggestions": {
          "description": "\"Non-canonical\" suggestions of related items. They might be convenient to present to the user, but in most implementations rolling them automatically is not recommended.",
          "$ref": "#/definitions/ISuggestions_1",
          "title": "Suggestions"
        },
        "Requires": {
          "description": "Prerequisites for this item.",
          "$ref": "#/definitions/IRequirements",
          "title": "Requires"
        },
        "Min rolls": {
          "description": "The minimum number of rolls when using this oracle to create a game object, *if* this oracle is rolled. Assume it's 1 if not specified.",
          "type": "integer",
          "title": "Min rolls"
        },
        "Max rolls": {
          "description": "The maximum number of rolls when using this oracle to create a game object. Assume it's 1 if not specified.",
          "type": "integer",
          "title": "Max rolls"
        },
        "Repeatable": {
          "description": "Whether the table's standard use is iterative.  Common examples are Feature, Opportunity, and Peril tables, which are most often used repeatedly to describe different areas of/events in a place, rather than being assigned as a description of the place as a whole.\n\nMutually exclusive with `Max rolls`. If undefined, assume `false`.",
          "type": "boolean",
          "title": "Repeatable"
        },
        "Allow duplicates": {
          "description": "Whether multiple rolls (as in object generation, or with{@linkIMultipleRolls}) .",
          "type": "boolean",
          "title": "Allow duplicates"
        },
        "Sets": {
          "description": "Hints which attributes are set by this table.",
          "type": "array",
          "items": { "$ref": "#/definitions/IAttributeChoices" },
          "title": "Sets"
        },
        "Roll template": {
          "$ref": "#/definitions/IRollTemplate_1",
          "description": "Describes the string values of this item that should be replaced with template strings and filled with the results of one or more oracle rolls.",
          "title": "Roll template"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false
    },
    "IOracle": {
      "description": "Represents an oracle, which may have a Table or multiple child Oracles.\n\nIf you're looking for a way to crawl the oracle hierarchy in search of a specific ID, see{@linkIOracleBase}.",
      "title": "IOracle",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Ironsworn|Starforged)/Oracles/[A-z_-]+((/[A-z_-]+)+)?$",
          "type": "string",
          "title": "$id"
        },
        "Display": {
          "$ref": "#/definitions/IDisplayOracle",
          "description": "Data relevant to this item's display/rendering.",
          "title": "Display"
        },
        "Category": {
          "description": "The ID of the most recent OracleCategory ancestor of this item, if any.",
          "type": "string",
          "title": "Category"
        },
        "Member of": {
          "description": "The ID of the most recent Oracle ancestor of this item, if any.",
          "type": "string",
          "title": "Member of"
        },
        "Table": {
          "description": "Represents a single oracle table, where 'table' is defined as being something with a single roll range.\n\nThis key appears only on 'leaf' nodes of the oracle hierarchy 'tree' - in other words, many (but not all){@linkIOracle}objects.",
          "type": "array",
          "items": { "$ref": "#/definitions/IRow" },
          "title": "Table"
        },
        "On a Match": {
          "description": "Describes the match behaviour of this oracle's table, if any, and provides a `Text` string describing it. Only appears on a handful of move oracles like Ask the Oracle and Advance a Threat.",
          "$ref": "#/definitions/IOracleMatch",
          "title": "On a Match"
        },
        "Usage": {
          "description": "Information on the usage of this oracle: recommended number of rolls, etc.",
          "$ref": "#/definitions/IOracleUsage",
          "title": "Usage"
        },
        "Oracles": {
          "description": "Oracle objects contained by this object.\n\nThis key appears only on 'branch' nodes of the oracle hierarchy 'tree':{@linkIOracleCategory}, and{@linkIOracle}(when it contains multiple closely-related tables).",
          "type": "array",
          "items": { "$ref": "#/definitions/IOracle" },
          "title": "Oracles"
        },
        "Categories": {
          "description": "Subcategories contained by this oracle category.\n\nThis key appears only on{@linkIOracleCategory}, and thus only on 'branch' nodes of the oracle hierarchy 'tree.",
          "type": "array",
          "items": { "$ref": "#/definitions/IOracleCategory" },
          "title": "Categories"
        },
        "Aliases": {
          "description": "Alternate names for this item, including: names it had earlier in development that have since changed, alternate spellings/punctuation, common misspellings, and so on.",
          "type": "array",
          "items": { "type": "string" },
          "title": "Aliases"
        },
        "Description": {
          "description": "A user-facing markdown description of the item, consisting of one or more paragraphs.",
          "type": "string",
          "title": "Description"
        },
        "Content": {
          "$ref": "#/definitions/IOracleContent",
          "description": "Metadata that describes an oracle's semantic or lexical content.",
          "title": "Content"
        },
        "Source": {
          "$ref": "#/definitions/ISource",
          "description": "Information on this item's source.",
          "title": "Source"
        },
        "Name": {
          "description": "The item's internal name. Should be unique among its sibling elements, as this key is often used (along with the object's ancestors) to generate its $id.\n\nIf the item has Display.Title, that should be preferred for most user-facing labels.",
          "type": "string",
          "title": "Name"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Category", "Display", "Name", "Source"]
    },
    "IDisplayOracle": {
      "description": "Information on displaying Oracles, including their table(s) are rendered in the original text. Useful if you want your project's rendering of the tables to correspond with the book.",
      "title": "IDisplayOracle",
      "type": "object",
      "properties": {
        "Title": {
          "description": "The title of this item as it appears printed in the rulebook. Intended for use as the item's header, label, etc.",
          "type": "string",
          "title": "Title"
        },
        "Column of": {
          "description": "If this oracle's `Table` should be rendered as a column of another table, it's indicated here.\n\nIf `undefined`, this table is rendered as a standalone table.\n\nIf this is set (and the rendering such 'embedded' columns is desired), then `Display.Table` may be safely ignored.",
          "type": "string",
          "title": "Column of"
        },
        "Table": {
          "$ref": "#/definitions/ITableDisplayInfo",
          "description": "Information on the rendering of this table when it's provided as a standalone table (as opposed to a column of another table).\n\nIf close correspondence to the text's table rendering is desired, `Display[\"Column of\"]` should be preferred (when present).",
          "title": "Table"
        },
        "Embed in": {
          "description": "This table is displayed as embedded in a row of another table.",
          "type": ["null", "string"],
          "title": "Embed in"
        },
        "Icon": {
          "description": "A URL pointing to a single SVG icon.",
          "pattern": "^\\.\\./\\.\\./img/vector/[A-z-_0-9/]+\\.svg$",
          "type": "string",
          "title": "Icon"
        },
        "Images": {
          "description": "An array of URLs pointing to one or more WEBP images.",
          "pattern": "^\\.\\./\\.\\./img/raster/[A-z-_0-9/]+\\.webp$",
          "type": "array",
          "items": { "type": "string" },
          "title": "Images"
        },
        "Color": {
          "description": "A hex color associated with this item, for use as e.g. an accent color in its display.",
          "pattern": "^#[A-f0-9][A-f0-9][A-f0-9][A-f0-9][A-f0-9][A-f0-9]$",
          "type": "string",
          "title": "Color"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Table", "Title"]
    },
    "ITableDisplayInfo": {
      "description": "Provides information on how a specific oracle table is rendered in the source text.",
      "title": "ITableDisplayInfo",
      "type": "object",
      "properties": {
        "Result columns": {
          "type": "array",
          "items": { "$ref": "#/definitions/ITextColumn" },
          "title": "Result columns"
        },
        "Roll columns": {
          "type": "array",
          "items": { "$ref": "#/definitions/ITableColumnBase" },
          "title": "Roll columns"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Result columns", "Roll columns"]
    },
    "ITextColumn": {
      "description": "Describes the rendering of a table column that displays textual content (as opposed to{@linkIRollColumn}, which displays numerical ranges).",
      "title": "ITextColumn",
      "type": "object",
      "properties": {
        "Label": {
          "description": "The label or header text to use for this column.",
          "type": "string",
          "title": "Label"
        },
        "Use content from": {
          "description": "The ID of the oracle with a `Table` key.",
          "type": "string",
          "title": "Use content from"
        },
        "Key": {
          "description": "The key of each `Row` in the `Table`, whose string value is displayed in the rendered table.",
          "enum": ["Result", "Summary"],
          "type": "string",
          "title": "Key"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Key", "Label", "Use content from"]
    },
    "ITableColumnBase": {
      "description": "Interface with elements common to{@linkIRollColumn}and{@linkITextColumn}.",
      "title": "ITableColumnBase",
      "type": "object",
      "properties": {
        "Label": { "type": "string", "title": "Label" },
        "Use content from": {
          "description": "The ID of the oracle table to use.",
          "type": "string",
          "title": "Use content from"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["Label", "Use content from"]
    },
    "IOracleMatch": {
      "title": "IOracleMatch",
      "type": "object",
      "properties": {
        "$id": {
          "description": "The item's unique string ID.",
          "pattern": "^(Ironsworn|Starforged)/Oracles/[A-z_-]+((/[A-z_-]+)+)?/On_a_Match$",
          "type": "string",
          "title": "$id"
        },
        "Text": {
          "description": "The item's rules text as a markdown string.",
          "type": "string",
          "title": "Text"
        }
      },
      "defaultProperties": [],
      "additionalProperties": false,
      "required": ["$id", "Text"]
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
