dataforged
Version:
Official content and rules data for the Ironsworn: Starforged tabletop role-playing game, formatted as JSON for use in community tools. 🚀 Includes JSON schemas and a Javascript/Typescript API.
1,240 lines (1,239 loc) • 120 kB
JSON
{
"description": "Root object for *Ironsworn* game data.",
"type": "object",
"properties": {
"Encounters": {
"type": "array",
"items": { "$ref": "#/definitions/IEncounterNatureInfo" },
"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"
],
"definitions": {
"IEncounterNatureInfo": {
"description": "Represents the metadata describing an *Ironsworn* encounter's nature; used as a category to contain all Encounters of that type.",
"title": "IEncounterNatureInfo",
"type": "object",
"properties": {
"$id": {
"description": "The item's unique string ID.",
"pattern": "^Ironsworn/Encounters/[A-z_-]+$",
"type": "string",
"title": "$id"
},
"Name": {
"$ref": "#/definitions/EncounterNatureIronsworn",
"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.",
"title": "Name"
},
"Encounters": {
"type": "array",
"items": { "$ref": "#/definitions/IEncounterIronsworn" },
"title": "Encounters"
},
"Summary": {
"description": "A user-facing markdown summary of the item. `Summary` is shorter than{@linkIHasDescription| Description}.",
"type": "string",
"title": "Summary"
},
"Display": {
"$ref": "#/definitions/IDisplayWithTitle",
"description": "Data relevant to this item's display/rendering.",
"title": "Display"
},
"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",
"Encounters",
"Name",
"Source",
"Summary"
]
},
"EncounterNatureIronsworn": {
"title": "EncounterNatureIronsworn",
"enum": [
"Animal",
"Anomaly",
"Beast",
"Firstborn",
"Horror",
"Ironlander"
],
"type": "string"
},
"IEncounterIronsworn": {
"description": "Represents an *Ironsworn* Encounter entry.",
"title": "IEncounterIronsworn",
"type": "object",
"properties": {
"$id": {
"description": "The item's unique string ID.",
"pattern": "^(Starforged|Ironsworn)/Encounters/[A-z_-]+/[A-z_-]+$",
"type": "string",
"title": "$id"
},
"Nature": {
"$ref": "#/definitions/EncounterNatureIronsworn",
"title": "Nature"
},
"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"
},
"Summary": {
"description": "A user-facing markdown summary of the item. `Summary` is shorter than{@linkIHasDescription| Description}.",
"type": "string",
"title": "Summary"
},
"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"
},
"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",
"Tactics"
]
},
"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"]
},
"ChallengeRank": {
"description": "Enumerates challenge ranks.",
"title": "ChallengeRank",
"enum": [1, 2, 3, 4, 5],
"type": "number"
},
"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"]
},
"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,