{
	"$schema": "http://json-schema.org/draft-07/schema#",
	"$id": "https://ironswornrpg.com/datasworn-source.schema.json",
	"$ref": "#/definitions/SourceRoot",
	"title": "DataswornSource v0.0.10",
	"description": "Source data schema for Datasworn, which describes game rules compatible with the Ironsworn tabletop roleplaying game by Shawn Tomkin.\n\nThe source data omits IDs, and makes properties that provide a default value optional; these values are inserted during validation/processing to produce the JSON for distribution.",
	"definitions": {
		"SourceRoot": {
			"title": "SourceRoot",
			"description": "The root object for a Datasworn source file, whose schema is discriminated by the `type` property. Unlike the JSON schema for distribution, this may be a standalone object (Asset, Npc, Move, OracleRollable, DelveSite, DelveSiteTheme, DelveSiteDomain, or Rarity), but it still must specify its `ruleset` and `datasworn_version`.",
			"anyOf": [
				{
					"$ref": "#/definitions/RulesPackage"
				},
				{
					"allOf": [
						{
							"type": "object",
							"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `type` property as a discriminator.",
							"required": ["type"],
							"properties": {
								"type": {
									"enum": [
										"asset",
										"npc",
										"move",
										"oracle_rollable",
										"delve_site",
										"delve_site_theme",
										"delve_site_domain",
										"rarity"
									]
								}
							},
							"additionalProperties": true,
							"allOf": [
								{
									"if": {
										"properties": {
											"type": {
												"const": "asset",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/Asset"
									}
								},
								{
									"if": {
										"properties": {
											"type": {
												"const": "npc",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/Npc"
									}
								},
								{
									"if": {
										"properties": {
											"type": {
												"const": "move",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/Move"
									}
								},
								{
									"if": {
										"properties": {
											"type": {
												"const": "oracle_rollable",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/OracleRollable"
									}
								},
								{
									"if": {
										"properties": {
											"type": {
												"const": "delve_site",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/DelveSite"
									}
								},
								{
									"if": {
										"properties": {
											"type": {
												"const": "delve_site_theme",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/DelveSiteTheme"
									}
								},
								{
									"if": {
										"properties": {
											"type": {
												"const": "delve_site_domain",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/DelveSiteDomain"
									}
								},
								{
									"if": {
										"properties": {
											"type": {
												"const": "rarity",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/Rarity"
									}
								}
							]
						},
						{
							"type": "object",
							"required": ["datasworn_version", "ruleset"],
							"properties": {
								"datasworn_version": {
									"type": "string",
									"description": "The version of the Datasworn format used by this data.",
									"const": "0.0.10",
									"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
								},
								"ruleset": {
									"$ref": "#/definitions/RulesetId"
								}
							},
							"additionalProperties": true
						}
					]
				}
			]
		},
		"RulesPackage": {
			"title": "RulesPackage",
			"type": "object",
			"description": "Describes game rules compatible with the Ironsworn tabletop role-playing game by Shawn Tomkin.",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `type` property as a discriminator.",
			"required": ["type"],
			"properties": {
				"type": {
					"enum": ["ruleset", "expansion"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"type": {
								"const": "ruleset",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/Ruleset"
					}
				},
				{
					"if": {
						"properties": {
							"type": {
								"const": "expansion",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/Expansion"
					}
				}
			]
		},
		"Ruleset": {
			"title": "Ruleset",
			"type": "object",
			"description": "A standalone Datasworn package that describes its own ruleset.",
			"required": ["_id", "datasworn_version", "type"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/RulesetId"
				},
				"datasworn_version": {
					"type": "string",
					"description": "The version of the Datasworn format used by this data.",
					"const": "0.0.10",
					"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
				},
				"type": {
					"type": "string",
					"const": "ruleset"
				},
				"title": {
					"$ref": "#/definitions/SourceTitle"
				},
				"authors": {
					"type": "array",
					"description": "Lists authors credited by the source material.",
					"items": {
						"$ref": "#/definitions/AuthorInfo"
					},
					"minItems": 1
				},
				"date": {
					"$ref": "#/definitions/Date",
					"description": "The date of the source documents's last update, formatted YYYY-MM-DD. Required because it's used to determine whether the data needs updating."
				},
				"url": {
					"$ref": "#/definitions/WebUrl",
					"description": "A URL where the source document is available.",
					"examples": ["https://ironswornrpg.com"]
				},
				"license": {
					"$ref": "#/definitions/License"
				},
				"rules": {
					"$ref": "#/definitions/Rules"
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"oracles": {
					"type": "object",
					"description": "A dictionary object containing oracle collections, which may contain oracle tables and/or oracle collections.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/OracleTablesCollection"
						}
					}
				},
				"assets": {
					"type": "object",
					"description": "A dictionary object containing asset collections, which contain assets.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AssetCollection"
						}
					}
				},
				"atlas": {
					"type": "object",
					"description": "A dictionary object containing atlas collections, which contain atlas entries.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AtlasCollection"
						}
					}
				},
				"moves": {
					"type": "object",
					"description": "A dictionary object containing move categories, which contain moves.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/MoveCategory"
						}
					}
				},
				"npcs": {
					"type": "object",
					"description": "A dictionary object containing NPC collections, which contain NPCs.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/NpcCollection"
						}
					}
				},
				"rarities": {
					"type": "object",
					"description": "A dictionary object containing rarities, like those presented in Ironsworn: Delve.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/Rarity"
						}
					}
				},
				"delve_sites": {
					"type": "object",
					"description": "A dictionary object of delve sites, like the premade delve sites presented in Ironsworn: Delve",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/DelveSite"
						}
					}
				},
				"site_domains": {
					"type": "object",
					"description": "A dictionary object containing delve site domains.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/DelveSiteDomain"
						}
					}
				},
				"site_themes": {
					"type": "object",
					"description": "A dictionary object containing delve site themes.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/DelveSiteTheme"
						}
					}
				},
				"truths": {
					"type": "object",
					"description": "A dictionary object of truth categories.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/Truth"
						}
					}
				}
			},
			"additionalProperties": true
		},
		"Expansion": {
			"title": "Expansion",
			"type": "object",
			"description": "A Datasworn package that relies on an external package to provide its ruleset.",
			"required": ["_id", "datasworn_version", "type", "ruleset"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/ExpansionId"
				},
				"datasworn_version": {
					"type": "string",
					"description": "The version of the Datasworn format used by this data.",
					"const": "0.0.10",
					"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
				},
				"type": {
					"type": "string",
					"const": "expansion"
				},
				"ruleset": {
					"$ref": "#/definitions/RulesetId"
				},
				"title": {
					"$ref": "#/definitions/SourceTitle"
				},
				"authors": {
					"type": "array",
					"description": "Lists authors credited by the source material.",
					"items": {
						"$ref": "#/definitions/AuthorInfo"
					},
					"minItems": 1
				},
				"date": {
					"$ref": "#/definitions/Date",
					"description": "The date of the source documents's last update, formatted YYYY-MM-DD. Required because it's used to determine whether the data needs updating."
				},
				"url": {
					"$ref": "#/definitions/WebUrl",
					"description": "A URL where the source document is available.",
					"examples": ["https://ironswornrpg.com"]
				},
				"license": {
					"$ref": "#/definitions/License"
				},
				"rules": {
					"$ref": "#/definitions/RulesExpansion"
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"oracles": {
					"type": "object",
					"description": "A dictionary object containing oracle collections, which may contain oracle tables and/or oracle collections.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/OracleTablesCollection"
						}
					}
				},
				"assets": {
					"type": "object",
					"description": "A dictionary object containing asset collections, which contain assets.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AssetCollection"
						}
					}
				},
				"atlas": {
					"type": "object",
					"description": "A dictionary object containing atlas collections, which contain atlas entries.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AtlasCollection"
						}
					}
				},
				"moves": {
					"type": "object",
					"description": "A dictionary object containing move categories, which contain moves.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/MoveCategory"
						}
					}
				},
				"npcs": {
					"type": "object",
					"description": "A dictionary object containing NPC collections, which contain NPCs.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/NpcCollection"
						}
					}
				},
				"rarities": {
					"type": "object",
					"description": "A dictionary object containing rarities, like those presented in Ironsworn: Delve.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/Rarity"
						}
					}
				},
				"delve_sites": {
					"type": "object",
					"description": "A dictionary object of delve sites, like the premade delve sites presented in Ironsworn: Delve",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/DelveSite"
						}
					}
				},
				"site_domains": {
					"type": "object",
					"description": "A dictionary object containing delve site domains.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/DelveSiteDomain"
						}
					}
				},
				"site_themes": {
					"type": "object",
					"description": "A dictionary object containing delve site themes.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/DelveSiteTheme"
						}
					}
				},
				"truths": {
					"type": "object",
					"description": "A dictionary object of truth categories.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/Truth"
						}
					}
				}
			},
			"additionalProperties": true
		},
		"AssetAbilityId": {
			"title": "AssetAbilityId",
			"type": "string",
			"description": "A unique ID for an AssetAbility.",
			"pattern": "^([a-z0-9_]{3,})\\/assets\\/([a-z][a-z_]*)\\/([a-z][a-z_]*)\\/abilities\\/(0|[1-9][0-9]*)$"
		},
		"AssetCollectionId": {
			"title": "AssetCollectionId",
			"type": "string",
			"description": "A unique ID for an AssetCollection.",
			"pattern": "^([a-z0-9_]{3,})\\/collections\\/assets\\/([a-z][a-z_]*)$"
		},
		"AssetCollectionIdWildcard": {
			"title": "AssetCollectionIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple AssetCollections.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/collections\\/assets\\/(\\*|([a-z][a-z_]*))$"
		},
		"AssetId": {
			"title": "AssetId",
			"type": "string",
			"description": "A unique ID for an Asset.",
			"pattern": "^([a-z0-9_]{3,})\\/assets\\/([a-z][a-z_]*)\\/([a-z][a-z_]*)$"
		},
		"AssetIdWildcard": {
			"title": "AssetIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple Assets.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/assets\\/(\\*|([a-z][a-z_]*))\\/(\\*|([a-z][a-z_]*))$"
		},
		"AtlasCollectionId": {
			"title": "AtlasCollectionId",
			"type": "string",
			"description": "A unique ID for an AtlasCollection.",
			"examples": ["classic/collections/atlas/ironlands"],
			"pattern": "^([a-z0-9_]{3,})\\/collections\\/atlas\\/([a-z][a-z_]*)$"
		},
		"AtlasCollectionIdWildcard": {
			"title": "AtlasCollectionIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple AtlasCollections.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/collections\\/atlas\\/(\\*|([a-z][a-z_]*))$"
		},
		"AtlasEntryId": {
			"title": "AtlasEntryId",
			"type": "string",
			"description": "A unique ID for an AtlasEntry.",
			"examples": ["classic/atlas/ironlands/hinterlands"],
			"pattern": "^([a-z0-9_]{3,})\\/atlas\\/([a-z][a-z_]*)\\/([a-z][a-z_]*)$"
		},
		"AtlasEntryIdWildcard": {
			"title": "AtlasEntryIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple AtlasEntrys.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/atlas\\/(\\*|([a-z][a-z_]*))\\/(\\*|([a-z][a-z_]*))$"
		},
		"ConditionMeterRuleId": {
			"title": "ConditionMeterRuleId",
			"type": "string",
			"description": "A unique ID for a ConditionMeterRule.",
			"examples": [
				"classic/rules/condition_meters/health",
				"starforged/rules/condition_meters/spirit"
			],
			"pattern": "^([a-z0-9_]{3,})\\/rules\\/condition_meters\\/([a-z][a-z_]*)$"
		},
		"DelveSiteDomainId": {
			"title": "DelveSiteDomainId",
			"type": "string",
			"description": "A unique ID for a DelveSiteDomain.",
			"examples": ["delve/site_domains/shadowfen"],
			"pattern": "^([a-z0-9_]{3,})\\/site_domains\\/([a-z][a-z_]*)$"
		},
		"DelveSiteDomainIdWildcard": {
			"title": "DelveSiteDomainIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple DelveSiteDomains.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/site_domains\\/(\\*|([a-z][a-z_]*))$"
		},
		"DelveSiteId": {
			"title": "DelveSiteId",
			"type": "string",
			"description": "A unique ID for a DelveSite.",
			"examples": ["delve/delve_sites/alvas_rest"],
			"pattern": "^([a-z0-9_]{3,})\\/delve_sites\\/([a-z][a-z_]*)$"
		},
		"DelveSiteIdWildcard": {
			"title": "DelveSiteIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple DelveSites.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/delve_sites\\/(\\*|([a-z][a-z_]*))$"
		},
		"DelveSiteThemeId": {
			"title": "DelveSiteThemeId",
			"type": "string",
			"description": "A unique ID for a DelveSiteTheme.",
			"examples": ["delve/site_themes/hallowed"],
			"pattern": "^([a-z0-9_]{3,})\\/site_themes\\/([a-z][a-z_]*)$"
		},
		"DelveSiteThemeIdWildcard": {
			"title": "DelveSiteThemeIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple DelveSiteThemes.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/site_themes\\/(\\*|([a-z][a-z_]*))$"
		},
		"DictKey": {
			"title": "DictKey",
			"type": "string",
			"description": "A `snake_case` key used in a Datasworn dictionary object.",
			"remarks": "If you need to generate a key from a user-provided label, it's recommended to use a 'slugify' function/library, e.g. https://www.npmjs.com/package/slugify for NodeJS.",
			"pattern": "^([a-z][a-z_]*)$"
		},
		"ExpansionId": {
			"title": "ExpansionId",
			"type": "string",
			"description": "The ID of a Datasworn package that relies on an external package to provide its ruleset.",
			"examples": ["delve"],
			"pattern": "^([a-z0-9_]{3,})$"
		},
		"ImpactRuleCollectionId": {
			"title": "ImpactRuleCollectionId",
			"type": "string",
			"description": "A unique ID for an ImpactRuleCollection.",
			"examples": [
				"classic/collections/rules/impacts/conditions",
				"starforged/collections/rules/impacts/vehicle_troubles"
			],
			"pattern": "^([a-z0-9_]{3,})\\/collections\\/rules\\/impacts\\/([a-z][a-z_]*)$"
		},
		"ImpactRuleId": {
			"title": "ImpactRuleId",
			"type": "string",
			"description": "A unique ID for an ImpactRule.",
			"examples": [
				"classic/rules/impacts/conditions/wounded",
				"starforged/rules/impacts/vehicle_troubles/battered"
			],
			"pattern": "^([a-z0-9_]{3,})\\/rules\\/impacts\\/([a-z][a-z_]*)\\/([a-z][a-z_]*)$"
		},
		"MoveCategoryId": {
			"title": "MoveCategoryId",
			"type": "string",
			"description": "A unique ID for a MoveCategory.",
			"examples": ["starforged/collections/moves/adventure"],
			"pattern": "^([a-z0-9_]{3,})\\/collections\\/moves\\/([a-z][a-z_]*)$"
		},
		"MoveCategoryIdWildcard": {
			"title": "MoveCategoryIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple MoveCategorys.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/collections\\/moves\\/(\\*|([a-z][a-z_]*))$"
		},
		"MoveId": {
			"title": "MoveId",
			"description": "A move ID, for a standard move or a unique asset move",
			"examples": [
				"classic/moves/combat/strike",
				"starforged/assets/module/grappler/abilities/0/moves/ready_grappler"
			],
			"anyOf": [
				{
					"type": "string",
					"description": "A move ID for a standard move.",
					"pattern": "^([a-z0-9_]{3,})\\/moves\\/([a-z][a-z_]*)\\/([a-z][a-z_]*)$"
				},
				{
					"type": "string",
					"description": "A move ID for an asset move.",
					"pattern": "^([a-z0-9_]{3,})\\/assets\\/([a-z][a-z_]*)\\/([a-z][a-z_]*)\\/abilities\\/(0|[1-9][0-9]*)\\/moves\\/([a-z][a-z_]*)$"
				}
			]
		},
		"MoveIdWildcard": {
			"title": "MoveIdWildcard",
			"description": "A move ID with wildcards.",
			"examples": [
				"*/moves/*/face_danger",
				"*/assets/ritual/*/abilities/*/moves/*"
			],
			"anyOf": [
				{
					"type": "string",
					"description": "A wildcarded ID that can be used to match multiple StandardMoves.",
					"pattern": "^(\\*|([a-z0-9_]{3,}))\\/moves\\/(\\*|([a-z][a-z_]*))\\/(\\*|([a-z][a-z_]*))$"
				},
				{
					"type": "string",
					"description": "A wildcarded ID that can be used to match multiple AssetMoves.",
					"pattern": "^(\\*|([a-z0-9_]{3,}))\\/assets\\/(\\*|([a-z][a-z_]*))\\/(\\*|([a-z][a-z_]*))\\/abilities\\/(\\*|(0|[1-9][0-9]*))\\/moves\\/(\\*|([a-z][a-z_]*))$"
				}
			]
		},
		"NpcCollectionId": {
			"title": "NpcCollectionId",
			"type": "string",
			"description": "A unique ID for a NpcCollection.",
			"examples": [
				"classic/collections/npcs/firstborn",
				"starforged/collections/npcs/sample_npcs"
			],
			"pattern": "^([a-z0-9_]{3,})\\/collections\\/npcs\\/([a-z][a-z_]*)$"
		},
		"NpcCollectionIdWildcard": {
			"title": "NpcCollectionIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple NpcCollections.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/collections\\/npcs\\/(\\*|([a-z][a-z_]*))$"
		},
		"NpcId": {
			"title": "NpcId",
			"type": "string",
			"description": "A unique ID for a Npc.",
			"examples": [
				"classic/npcs/firstborn/elf",
				"starforged/npcs/sample_npcs/chiton"
			],
			"pattern": "^([a-z0-9_]{3,})\\/npcs\\/([a-z][a-z_]*)\\/([a-z][a-z_]*)$"
		},
		"NpcIdWildcard": {
			"title": "NpcIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple Npcs.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/npcs\\/(\\*|([a-z][a-z_]*))\\/(\\*|([a-z][a-z_]*))$"
		},
		"NpcVariantId": {
			"title": "NpcVariantId",
			"type": "string",
			"description": "A unique ID for a NpcVariant.",
			"examples": [
				"starforged/npcs/sample_npcs/chiton/variants/chiton_drone_pack"
			],
			"pattern": "^([a-z0-9_]{3,})\\/npcs\\/([a-z][a-z_]*)\\/([a-z][a-z_]*)\\/variants\\/([a-z][a-z_]*)$"
		},
		"OracleCollectionId": {
			"title": "OracleCollectionId",
			"type": "string",
			"description": "A unique ID for an OracleCollection.",
			"examples": [
				"starforged/collections/oracles/core",
				"starforged/collections/oracles/character/names",
				"starforged/collections/oracles/planets/furnace/settlements"
			],
			"pattern": "^([a-z0-9_]{3,})\\/collections\\/oracles(\\/([a-z][a-z_]*)){1,3}$"
		},
		"OracleCollectionIdWildcard": {
			"title": "OracleCollectionIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple OracleCollections.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/collections\\/oracles((\\/([a-z][a-z_]*)){1,3}|\\/\\*\\*|\\/\\*\\*\\/([a-z][a-z_]*)|\\/([a-z][a-z_]*)\\/\\*\\*)$"
		},
		"OracleRollableId": {
			"title": "OracleRollableId",
			"examples": [
				"starforged/oracles/core/action",
				"starforged/oracles/character/names/given",
				"starforged/oracles/planets/furnace/settlements/terminus"
			],
			"anyOf": [
				{
					"title": "OracleRollableId",
					"type": "string",
					"description": "A unique ID for an OracleRollable.",
					"examples": [
						"starforged/oracles/core/action",
						"starforged/oracles/character/names/given",
						"starforged/oracles/planets/furnace/settlements/terminus"
					],
					"pattern": "^([a-z0-9_]{3,})\\/oracles(\\/([a-z][a-z_]*)){1,3}\\/([a-z][a-z_]*)$"
				},
				{
					"title": "OracleRollableId",
					"type": "string",
					"description": "A unique ID for an OracleRollable.",
					"examples": [
						"starforged/oracles/core/action",
						"starforged/oracles/character/names/given",
						"starforged/oracles/planets/furnace/settlements/terminus"
					],
					"pattern": "^([a-z0-9_]{3,})\\/oracles(\\/([a-z][a-z_]*)){1,3}\\/([a-z][a-z_]*)$"
				}
			]
		},
		"OracleRollableIdWildcard": {
			"title": "OracleRollableIdWildcard",
			"type": "string",
			"description": "Oracle table wildcards can also use '**' to represent any number of collection levels in the oracle tree.",
			"examples": [
				"*/oracles/**/peril",
				"starforged/oracles/character/names/*",
				"starforged/oracles/planets/*/settlements/*"
			],
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/oracles((\\/([a-z][a-z_]*)){1,3}|\\/\\*\\*|\\/\\*\\*\\/([a-z][a-z_]*)|\\/([a-z][a-z_]*)\\/\\*\\*)\\/(\\*|([a-z][a-z_]*))$"
		},
		"RarityId": {
			"title": "RarityId",
			"type": "string",
			"description": "A unique ID for a Rarity.",
			"examples": ["classic/rarities/ayethins_journal"],
			"pattern": "^([a-z0-9_]{3,})\\/rarities\\/([a-z][a-z_]*)$"
		},
		"RarityIdWildcard": {
			"title": "RarityIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple Raritys.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/rarities\\/(\\*|([a-z][a-z_]*))$"
		},
		"RulesetId": {
			"title": "RulesetId",
			"type": "string",
			"description": "The ID of standalone Datasworn package that describes its own ruleset.",
			"examples": ["classic", "starforged", "sundered_isles"],
			"pattern": "^([a-z0-9_]{3,})$"
		},
		"SpecialTrackRuleId": {
			"title": "SpecialTrackRuleId",
			"type": "string",
			"description": "A unique ID for a SpecialTrackRule.",
			"examples": [
				"classic/rules/special_tracks/bonds",
				"delve/rules/special_tracks/failure",
				"starforged/rules/special_tracks/bonds_legacy"
			],
			"pattern": "^([a-z0-9_]{3,})\\/rules\\/special_tracks\\/([a-z][a-z_]*)$"
		},
		"StatRuleId": {
			"title": "StatRuleId",
			"type": "string",
			"description": "A unique ID for a StatRule.",
			"pattern": "^([a-z0-9_]{3,})\\/rules\\/stats\\/([a-z][a-z_]*)$"
		},
		"TruthId": {
			"title": "TruthId",
			"type": "string",
			"description": "A unique ID for a Truth.",
			"examples": ["classic/truths/iron", "starforged/truths/iron"],
			"pattern": "^([a-z0-9_]{3,})\\/truths\\/([a-z][a-z_]*)$"
		},
		"TruthIdWildcard": {
			"title": "TruthIdWildcard",
			"type": "string",
			"description": "A wildcarded ID that can be used to match multiple Truths.",
			"pattern": "^(\\*|([a-z0-9_]{3,}))\\/truths\\/(\\*|([a-z][a-z_]*))$"
		},
		"AuthorInfo": {
			"title": "AuthorInfo",
			"type": "object",
			"description": "Information on the original creator of this material.",
			"examples": [
				{
					"name": "Shawn Tomkin",
					"url": "https://ironswornrpg.com"
				}
			],
			"required": ["name"],
			"properties": {
				"name": {
					"type": "string",
					"examples": ["Shawn Tomkin"]
				},
				"url": {
					"type": "string",
					"description": "An optional URL for the author's website.",
					"format": "uri"
				},
				"email": {
					"title": "Email",
					"type": "string",
					"description": "An optional email contact for the author",
					"format": "email"
				}
			},
			"additionalProperties": false
		},
		"CssColor": {
			"title": "CssColor",
			"type": "string",
			"description": "A CSS color value.",
			"remarks": "See https://developer.mozilla.org/en-US/docs/Web/CSS/color_value"
		},
		"Date": {
			"title": "Date",
			"type": "string",
			"description": "A date formatted YYYY-MM-DD.",
			"remarks": "You may prefer to deserialize this as a Date object.",
			"format": "date",
			"pattern": "[0-9]{4}-((0[0-9])|(1[0-2]))-(([0-2][0-9])|(3[0-1]))"
		},
		"License": {
			"title": "License",
			"description": "An URL pointing to the location where this element's license can be found.\n\nA `null` here indicates that the content provides __no__ license, and is not intended for redistribution.",
			"examples": [
				"https://creativecommons.org/licenses/by/4.0",
				"https://creativecommons.org/licenses/by-nc-sa/4.0"
			],
			"anyOf": [
				{
					"$ref": "#/definitions/WebUrl"
				},
				{
					"type": "null"
				}
			]
		},
		"PageNumber": {
			"title": "PageNumber",
			"type": "integer",
			"description": "Represents a page number in a book.",
			"minimum": 1
		},
		"SourceInfo": {
			"title": "SourceInfo",
			"type": "object",
			"description": "Metadata describing the original source of this item",
			"required": ["title", "authors", "date", "url", "license"],
			"properties": {
				"title": {
					"$ref": "#/definitions/SourceTitle"
				},
				"page": {
					"$ref": "#/definitions/PageNumber",
					"description": "The page number where this item is described in full."
				},
				"authors": {
					"type": "array",
					"description": "Lists authors credited by the source material.",
					"items": {
						"$ref": "#/definitions/AuthorInfo"
					},
					"minItems": 1
				},
				"date": {
					"$ref": "#/definitions/Date",
					"description": "The date of the source documents's last update, formatted YYYY-MM-DD. Required because it's used to determine whether the data needs updating."
				},
				"url": {
					"$ref": "#/definitions/WebUrl",
					"description": "A URL where the source document is available.",
					"examples": ["https://ironswornrpg.com"]
				},
				"license": {
					"$ref": "#/definitions/License"
				}
			},
			"additionalProperties": false
		},
		"SourceTitle": {
			"title": "SourceTitle",
			"type": "string",
			"description": "The title of the source document.",
			"examples": [
				"Ironsworn Rulebook",
				"Ironsworn Assets Master Set",
				"Ironsworn: Delve",
				"Ironsworn: Starforged Rulebook",
				"Ironsworn: Starforged Assets",
				"Sundered Isles"
			]
		},
		"Suggestions": {
			"title": "Suggestions",
			"type": "object",
			"releaseStage": "experimental",
			"properties": {
				"oracles": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/OracleRollableId"
					}
				},
				"assets": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/AssetId"
					}
				},
				"atlas": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/AtlasEntryId"
					}
				},
				"moves": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/MoveId"
					}
				},
				"npcs": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/NpcId"
					}
				},
				"rarities": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/RarityId"
					}
				},
				"site_domains": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/DelveSiteDomainId"
					}
				},
				"site_themes": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/DelveSiteThemeId"
					}
				}
			},
			"additionalProperties": false
		},
		"SvgImageUrl": {
			"title": "SvgImageUrl",
			"type": "string",
			"description": "A relative (local) URL pointing to a vector image in the SVG format.",
			"format": "uri-reference",
			"pattern": "\\.svg$"
		},
		"WebUrl": {
			"title": "WebUrl",
			"type": "string",
			"description": "An absolute URL pointing to a website.",
			"format": "uri"
		},
		"WebpImageUrl": {
			"title": "WebpImageUrl",
			"type": "string",
			"description": "A relative (local) URL pointing to a raster image in the WEBP format.",
			"format": "uri-reference",
			"pattern": "\\.webp$"
		},
		"I18nHint": {
			"title": "I18nHint",
			"type": "object",
			"releaseStage": "experimental",
			"properties": {
				"part_of_speech": {
					"$ref": "#/definitions/PartOfSpeech",
					"description": "The part of speech for this string."
				}
			},
			"additionalProperties": false
		},
		"I18nHints": {
			"title": "I18nHints",
			"type": "object",
			"description": "Internationalization/localization hints for the text content of this object.",
			"releaseStage": "experimental",
			"properties": {
				"text": {
					"$ref": "#/definitions/I18nHint"
				},
				"text2": {
					"$ref": "#/definitions/I18nHint"
				},
				"text3": {
					"$ref": "#/definitions/I18nHint"
				},
				"template": {
					"type": "object",
					"properties": {
						"text": {
							"$ref": "#/definitions/I18nHint"
						},
						"text2": {
							"$ref": "#/definitions/I18nHint"
						},
						"text3": {
							"$ref": "#/definitions/I18nHint"
						}
					}
				}
			},
			"additionalProperties": false
		},
		"InputLabel": {
			"title": "InputLabel",
			"type": "string",
			"description": "A localized label for an input. In some contexts it may be undesirable to render this text, but it should always be exposed to assistive technology (e.g. with `aria-label` in HTML).",
			"i18n": true,
			"pattern": "^[^A-Z]+$"
		},
		"Label": {
			"title": "Label",
			"type": "string",
			"description": "A localized plain text name or label.",
			"i18n": true
		},
		"MarkdownString": {
			"title": "MarkdownString",
			"type": "string",
			"description": "Localized text, formatted in Markdown.\n\nIt uses some custom syntax; e.g. `{{table:some_oracle_table_id}}` indicates that the referenced oracle table is rendered there in the source material.",
			"i18n": true,
			"format": "markdown"
		},
		"PartOfSpeech": {
			"title": "PartOfSpeech",
			"description": "  - `common_noun`: A common noun.\n  - `proper_noun`: A proper noun.\n  - `adjunct_common_noun`: A common noun used as an adjective, to modify another noun.\n  - `adjunct_proper_noun`: A proper noun used as an adjective, to modify another noun.\n  - `verb`: A verb in present tense\n  - `gerund`: Gerund or present participle of a verb, e.g. \"going\", \"seeing\", \"waving\". Can function as a noun, an adjective, or a progressive verb.\n  - `adjective`: An adjective.\n  - `attributive_verb`: A verb used as an adjective, to modify a noun.\n  - `adjective_as_proper_noun`: An adjective used as a proper noun.\n  - `common_noun_as_proper_noun`: An common noun used as a proper noun.",
			"enum": [
				"common_noun",
				"proper_noun",
				"adjunct_common_noun",
				"adjunct_proper_noun",
				"verb",
				"gerund",
				"adjective",
				"attributive_verb",
				"adjective_as_proper_noun",
				"common_noun_as_proper_noun"
			]
		},
		"TemplateString": {
			"title": "TemplateString",
			"type": "string",
			"description": "A rich text string in Markdown with replaced values from oracle roll results.\n\nThe custom syntax `{{some_row_key:some_oracle_table_id}}` should be replaced by the `some_row_key` string of a rolled oracle table. This is usually the `result` key, for example `{{result:starforged/oracles/core/action}}`\n",
			"releaseStage": "experimental",
			"i18n": true,
			"format": "markdown"
		},
		"CollectableType": {
			"title": "CollectableType",
			"enum": ["oracle_rollable", "move", "asset", "atlas_entry", "npc"]
		},
		"CollectionType": {
			"title": "CollectionType",
			"enum": [
				"oracle_collection",
				"move_category",
				"asset_collection",
				"atlas_collection",
				"npc_collection"
			]
		},
		"ConditionMeterRule": {
			"title": "ConditionMeterRule",
			"type": "object",
			"description": "Describes a standard player character condition meter.",
			"required": ["label", "max", "description"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"rollable": {
					"type": "boolean",
					"description": "Is this meter's `value` usable as a stat in an action roll?",
					"default": true,
					"const": true
				},
				"min": {
					"type": "integer",
					"description": "The minimum value of this meter.",
					"default": 0
				},
				"max": {
					"type": "integer",
					"description": "The maximum value of this meter."
				},
				"value": {
					"type": "integer",
					"description": "The current value of this meter.",
					"default": 0
				},
				"shared": {
					"type": "boolean",
					"description": "Is this condition meter shared by all players?",
					"default": false
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A description of this condition meter."
				}
			},
			"additionalProperties": false
		},
		"ImpactCategory": {
			"title": "ImpactCategory",
			"type": "object",
			"description": "Describes a category of standard impacts/debilities.",
			"required": ["label", "description", "contents"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel",
					"description": "A label for this impact category."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A description of this impact category."
				},
				"contents": {
					"type": "object",
					"description": "A dictionary object of the Impacts in this category.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/ImpactRule"
						}
					}
				}
			},
			"additionalProperties": false
		},
		"ImpactRule": {
			"title": "ImpactRule",
			"type": "object",
			"description": "Describes a standard impact/debility.",
			"required": ["label", "description"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel",
					"description": "The label for this impact."
				},
				"prevents_recovery": {
					"type": "array",
					"description": "Any ruleset condition meters that can't recover when this impact is active.",
					"default": [],
					"items": {
						"$ref": "#/definitions/ConditionMeterKey"
					}
				},
				"permanent": {
					"type": "boolean",
					"description": "Is this impact permanent?",
					"default": false
				},
				"shared": {
					"type": "boolean",
					"description": "Is this impact applied to all players at once?",
					"default": false
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A description of this impact."
				}
			},
			"additionalProperties": false
		},
		"NonCollectableType": {
			"title": "NonCollectableType",
			"enum": [
				"delve_site",
				"delve_site_theme",
				"delve_site_domain",
				"truth",
				"rarity"
			]
		},
		"ObjectType": {
			"title": "ObjectType",
			"anyOf": [
				{
					"$ref": "#/definitions/CollectableType"
				},
				{
					"$ref": "#/definitions/NonCollectableType"
				},
				{
					"$ref": "#/definitions/CollectionType"
				}
			]
		},
		"Rules": {
			"title": "Rules",
			"type": "object",
			"description": "Describes rules for player characters in this ruleset, such as stats and condition meters.",
			"releaseStage": "experimental",
			"required": ["condition_meters", "stats", "impacts", "special_tracks"],
			"properties": {
				"condition_meters": {
					"type": "object",
					"description": "Describes the standard condition meters used by player characters in this ruleset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/ConditionMeterRule"
						}
					}
				},
				"stats": {
					"type": "object",
					"description": "Describes the standard stats used by player characters in this ruleset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/StatRule"
						}
					}
				},
				"impacts": {
					"type": "object",
					"description": "Describes the standard impacts/debilities used by player characters in this ruleset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/ImpactCategory"
						}
					}
				},
				"special_tracks": {
					"type": "object",
					"description": "Describes the special tracks used by player characters in this ruleset, like Bonds (classic Ironsworn), Failure (Delve), or Legacies (Starforged).",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/SpecialTrackRule"
						}
					}
				},
				"tags": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"releaseStage": "experimental",
					"default": {},
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/TagRule"
						}
					}
				}
			},
			"additionalProperties": false
		},
		"RulesExpansion": {
			"title": "RulesExpansion",
			"type": "object",
			"description": "Describes rules for player characters in this ruleset, such as stats and condition meters.",
			"releaseStage": "experimental",
			"properties": {
				"condition_meters": {
					"type": "object",
					"description": "Describes the standard condition meters used by player characters in this ruleset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/ConditionMeterRule"
						}
					}
				},
				"stats": {
					"type": "object",
					"description": "Describes the standard stats used by player characters in this ruleset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/StatRule"
						}
					}
				},
				"impacts": {
					"type": "object",
					"description": "Describes the standard impacts/debilities used by player characters in this ruleset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/ImpactCategory"
						}
					}
				},
				"special_tracks": {
					"type": "object",
					"description": "Describes the special tracks used by player characters in this ruleset, like Bonds (classic Ironsworn), Failure (Delve), or Legacies (Starforged).",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/SpecialTrackRule"
						}
					}
				},
				"tags": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"releaseStage": "experimental",
					"default": {},
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/TagRule"
						}
					}
				}
			},
			"additionalProperties": false
		},
		"SpecialTrackRule": {
			"title": "SpecialTrackRule",
			"type": "object",
			"description": "Describes a special track like Bonds (classic Ironsworn), Failure (Delve), or Legacies (Starforged).",
			"required": ["label", "description"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel",
					"description": "A label for this special track."
				},
				"optional": {
					"type": "boolean",
					"description": "Is this track an optional rule?",
					"default": false
				},
				"shared": {
					"type": "boolean",
					"description": "Is this track shared by all players?",
					"default": false
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A description of this special track."
				}
			},
			"additionalProperties": false
		},
		"StatRule": {
			"title": "StatRule",
			"type": "object",
			"description": "Describes a standard player character stat.",
			"required": ["label", "description"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel",
					"description": "A label for this stat.",
					"examples": ["edge"]
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A description of this stat.",
					"examples": [
						"Quickness, agility, and prowess when fighting at a distance."
					]
				}
			},
			"additionalProperties": false
		},
		"Tag": {
			"title": "Tag",
			"anyOf": [
				{
					"type": "boolean"
				},
				{
					"type": "integer"
				},
				{
					"$ref": "#/definitions/DictKey"
				},
				{
					"$ref": "#/definitions/DiceExpression"
				},
				{
					"$ref": "#/definitions/OracleRollableId"
				},
				{
					"$ref": "#/definitions/MoveId"
				},
				{
					"$ref": "#/definitions/AssetId"
				},
				{
					"$ref": "#/definitions/AtlasEntryId"
				},
				{
					"$ref": "#/definitions/NpcId"
				},
				{
					"$ref": "#/definitions/OracleCollectionId"
				},
				{
					"$ref": "#/definitions/MoveCategoryId"
				},
				{
					"$ref": "#/definitions/AssetCollectionId"
				},
				{
					"$ref": "#/definitions/AtlasCollectionId"
				},
				{
					"$ref": "#/definitions/NpcCollectionId"
				},
				{
					"$ref": "#/definitions/DelveSiteId"
				},
				{
					"$ref": "#/definitions/DelveSiteThemeId"
				},
				{
					"$ref": "#/definitions/DelveSiteDomainId"
				},
				{
					"$ref": "#/definitions/TruthId"
				},
				{
					"$ref": "#/definitions/RarityId"
				},
				{
					"type": "array",
					"items": {
						"anyOf": [
							{
								"$ref": "#/definitions/OracleRollableIdWildcard"
							},
							{
								"$ref": "#/definitions/MoveIdWildcard"
							},
							{
								"$ref": "#/definitions/AssetIdWildcard"
							},
							{
								"$ref": "#/definitions/AtlasEntryIdWildcard"
							},
							{
								"$ref": "#/definitions/NpcIdWildcard"
							},
							{
								"$ref": "#/definitions/OracleCollectionIdWildcard"
							},
							{
								"$ref": "#/definitions/MoveCategoryIdWildcard"
							},
							{
								"$ref": "#/definitions/AssetCollectionIdWildcard"
							},
							{
								"$ref": "#/definitions/AtlasCollectionIdWildcard"
							},
							{
								"$ref": "#/definitions/NpcCollectionIdWildcard"
							},
							{
								"$ref": "#/definitions/DelveSiteIdWildcard"
							},
							{
								"$ref": "#/definitions/DelveSiteThemeIdWildcard"
							},
							{
								"$ref": "#/definitions/DelveSiteDomainIdWildcard"
							},
							{
								"$ref": "#/definitions/TruthIdWildcard"
							},
							{
								"$ref": "#/definitions/RarityIdWildcard"
							}
						]
					}
				}
			]
		},
		"TagRule": {
			"title": "TagRule",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `value_type` property as a discriminator.",
			"required": ["value_type"],
			"properties": {
				"value_type": {
					"enum": [
						"boolean",
						"integer",
						"oracle_rollable",
						"move",
						"asset",
						"atlas_entry",
						"npc",
						"oracle_collection",
						"move_category",
						"asset_collection",
						"atlas_collection",
						"npc_collection",
						"delve_site",
						"delve_site_theme",
						"delve_site_domain",
						"truth",
						"rarity",
						"enum"
					]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "boolean",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleBoolean",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"array": {
								"default": false,
								"type": "boolean"
							},
							"value_type": {
								"const": "boolean",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "integer",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleInteger",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"array": {
								"default": false,
								"type": "boolean"
							},
							"value_type": {
								"const": "integer",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "oracle_rollable",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleOracleRollable",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "oracle_rollable",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "move",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleMove",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "move",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "asset",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleAsset",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "asset",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "atlas_entry",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleAtlasEntry",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "atlas_entry",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "npc",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleNpc",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "npc",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "oracle_collection",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleOracleCollection",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "oracle_collection",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "move_category",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleMoveCategory",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "move_category",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "asset_collection",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleAssetCollection",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "asset_collection",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "atlas_collection",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleAtlasCollection",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "atlas_collection",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "npc_collection",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleNpcCollection",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "npc_collection",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "delve_site",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleDelveSite",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "delve_site",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "delve_site_theme",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleDelveSiteTheme",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "delve_site_theme",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "delve_site_domain",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleDelveSiteDomain",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "delve_site_domain",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "truth",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleTruth",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "truth",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "rarity",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleRarity",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"wildcard": {
								"default": false,
								"description": "If `true`, this field accepts an array of wildcard IDs. If `false`, this field accepts a single non-wildcard ID.",
								"type": "boolean"
							},
							"value_type": {
								"const": "rarity",
								"type": "string"
							}
						},
						"required": ["description", "value_type"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"value_type": {
								"const": "enum",
								"type": "string"
							}
						}
					},
					"then": {
						"type": "object",
						"title": "TagRuleEnum",
						"properties": {
							"applies_to": {
								"default": null,
								"description": "Types of object that can receive this tag, or `null` if any type of object accepts it.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/ObjectType"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"description": {
								"$ref": "#/definitions/MarkdownString"
							},
							"array": {
								"default": false,
								"type": "boolean"
							},
							"value_type": {
								"const": "enum",
								"type": "string"
							},
							"enum": {
								"type": "array",
								"items": {
									"$ref": "#/definitions/DictKey"
								}
							}
						},
						"required": ["description", "value_type", "enum"],
						"additionalProperties": false
					}
				}
			]
		},
		"ChallengeRank": {
			"title": "ChallengeRank",
			"description": "Challenge rank, represented as an integer from 1 (troublesome) to 5 (epic).\n\n  - `1`: Troublesome\n  - `2`: Dangerous\n  - `3`: Formidable\n  - `4`: Extreme\n  - `5`: Epic",
			"enum": [1, 2, 3, 4, 5]
		},
		"ProgressTrackTypeInfo": {
			"title": "ProgressTrackTypeInfo",
			"type": "object",
			"description": "Describes the features of a type of progress track.",
			"required": ["category"],
			"properties": {
				"category": {
					"$ref": "#/definitions/Label",
					"description": "A category label for progress tracks of this type.",
					"examples": [
						"Vow",
						"Journey",
						"Combat",
						"Scene Challenge",
						"Expedition",
						"Connection",
						"Delve"
					]
				},
				"controls": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"type": "object",
							"properties": {}
						}
					}
				}
			},
			"additionalProperties": false
		},
		"SpecialTrackType": {
			"$ref": "#/definitions/DictKey",
			"title": "SpecialTrackType",
			"description": "Special, ruleset-specific progress tracks. Usually, one exists per player character, and they persist through the life of the player character.\n'Canonical' examples:\n  * `bonds_track`, described in the Ironsworn Rulebook. For the Starforged legacy track, use `bonds_legacy` instead.\n  * `failure_track`, described in Ironsworn: Delve\n  * `quests_legacy`, `bonds_legacy`, and `discoveries_legacy`, described Ironsworn: Starforged\n\n",
			"examples": [
				"bonds_track",
				"failure_track",
				"quests_legacy",
				"bonds_legacy",
				"discoveries_legacy"
			]
		},
		"AssetControlValueRef": {
			"title": "AssetControlValueRef",
			"type": "object",
			"description": "A reference to the value of an asset control.",
			"required": ["using", "control"],
			"properties": {
				"using": {
					"type": "string",
					"description": "A reference to the value of an asset control.",
					"const": "asset_control"
				},
				"control": {
					"$ref": "#/definitions/DictKey",
					"description": "The dictionary key of the asset control field.",
					"examples": ["health", "integrity"]
				},
				"assets": {
					"description": "Asset IDs (which may be wildcarded) that may provide the control field. For asset ability enhancements, `null` is used to represent the asset's own control fields.",
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/AssetIdWildcard"
							}
						},
						{
							"type": "null"
						}
					]
				}
			},
			"additionalProperties": false
		},
		"AssetOptionValueRef": {
			"title": "AssetOptionValueRef",
			"type": "object",
			"description": "A reference to the value of an asset option.",
			"required": ["using", "option"],
			"properties": {
				"using": {
					"type": "string",
					"description": "A reference to the value of an asset option.",
					"const": "asset_option"
				},
				"option": {
					"$ref": "#/definitions/DictKey",
					"description": "The dictionary key of the asset option field."
				},
				"assets": {
					"description": "Asset IDs (which may be wildcarded) that may provide the option field. For asset ability enhancements, `null` is used to represent the asset's own option fields.",
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/AssetIdWildcard"
							}
						},
						{
							"type": "null"
						}
					]
				}
			},
			"additionalProperties": false
		},
		"AttachedAssetControlValueRef": {
			"title": "AttachedAssetControlValueRef",
			"type": "object",
			"description": "A reference to the value of an attached asset control. For example, a Module asset could use this to roll using the `integrity` control of an attached Vehicle.",
			"required": ["using", "control"],
			"properties": {
				"using": {
					"type": "string",
					"description": "A reference to the value of an attached asset control. For example, a Module asset could use this to roll using the `integrity` control of an attached Vehicle.",
					"const": "attached_asset_control"
				},
				"control": {
					"$ref": "#/definitions/DictKey",
					"description": "The dictionary key of the asset control field.",
					"examples": ["health", "integrity"]
				}
			},
			"additionalProperties": false
		},
		"AttachedAssetOptionValueRef": {
			"title": "AttachedAssetOptionValueRef",
			"type": "object",
			"description": "A reference to the value of an attached asset option.",
			"required": ["using", "option"],
			"properties": {
				"using": {
					"type": "string",
					"description": "A reference to the value of an attached asset option.",
					"const": "attached_asset_option"
				},
				"option": {
					"$ref": "#/definitions/DictKey",
					"description": "The dictionary key of the asset option field."
				}
			},
			"additionalProperties": false
		},
		"ConditionMeterValueRef": {
			"title": "ConditionMeterValueRef",
			"type": "object",
			"description": "A reference to the value of a standard player condition meter.",
			"required": ["using", "condition_meter"],
			"properties": {
				"using": {
					"type": "string",
					"description": "A reference to the value of a standard player condition meter.",
					"const": "condition_meter"
				},
				"condition_meter": {
					"$ref": "#/definitions/ConditionMeterKey"
				}
			},
			"additionalProperties": false
		},
		"CustomValue": {
			"title": "CustomValue",
			"type": "object",
			"description": "An arbitrary static integer value with a label.",
			"required": ["label", "using", "value"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"using": {
					"type": "string",
					"description": "An arbitrary static integer value with a label.",
					"const": "custom"
				},
				"value": {
					"type": "integer"
				}
			},
			"additionalProperties": false
		},
		"RollableValue": {
			"title": "RollableValue",
			"type": "object",
			"description": "Provides a value like a stat, condition meter, or other number (usually for use in an action roll). The expected value is an integer, or null.",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `using` property as a discriminator.",
			"required": ["using"],
			"properties": {
				"using": {
					"enum": [
						"stat",
						"condition_meter",
						"asset_control",
						"asset_option",
						"attached_asset_control",
						"attached_asset_option",
						"custom"
					]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"using": {
								"const": "stat",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/StatValueRef"
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "condition_meter",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/ConditionMeterValueRef"
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "asset_control",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetControlValueRef"
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "asset_option",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetOptionValueRef"
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "attached_asset_control",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AttachedAssetControlValueRef"
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "attached_asset_option",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AttachedAssetOptionValueRef"
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "custom",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/CustomValue"
					}
				}
			]
		},
		"StatValueRef": {
			"title": "StatValueRef",
			"type": "object",
			"description": "A reference to the value of a standard player character stat.",
			"required": ["using", "stat"],
			"properties": {
				"using": {
					"type": "string",
					"description": "A reference to the value of a standard player character stat.",
					"const": "stat"
				},
				"stat": {
					"$ref": "#/definitions/StatKey"
				}
			},
			"additionalProperties": false
		},
		"Npc": {
			"title": "Npc",
			"type": "object",
			"description": "A non-player character entry, similar to those in Chapter 5 of the Ironsworn Rulebook, or Chapter 4 of Starforged.",
			"required": [
				"type",
				"name",
				"rank",
				"nature",
				"features",
				"drives",
				"tactics",
				"description",
				"_source"
			],
			"properties": {
				"_id": {
					"$ref": "#/definitions/NpcId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "npc"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"rank": {
					"$ref": "#/definitions/ChallengeRank",
					"description": "The suggested challenge rank for this NPC."
				},
				"nature": {
					"$ref": "#/definitions/NpcNature"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString"
				},
				"features": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/MarkdownString"
					}
				},
				"drives": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/MarkdownString"
					}
				},
				"tactics": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/MarkdownString"
					}
				},
				"variants": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/NpcVariant"
						}
					}
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"quest_starter": {
					"$ref": "#/definitions/MarkdownString"
				},
				"your_truth": {
					"$ref": "#/definitions/MarkdownString"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"NpcCollection": {
			"title": "NpcCollection",
			"type": "object",
			"required": ["type", "name", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/NpcCollectionId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "npc_collection"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"replaces": {
					"$ref": "#/definitions/NpcCollectionId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/NpcCollectionId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/Npc"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"NpcNature": {
			"$ref": "#/definitions/Label",
			"title": "NpcNature",
			"description": "A localized category label describing the nature of this NPC.\n\nIn Ironsworn classic, this is probably the singular form of the parent collection's name.\n\nFor Starforged, see the table on p. 258 for examples.",
			"examples": [
				"Ironlander",
				"Firstborn",
				"Animal",
				"Beast",
				"Horror",
				"Anomaly",
				"Creature",
				"Human",
				"Machine",
				"Monster",
				"Vehicle"
			]
		},
		"NpcVariant": {
			"title": "NpcVariant",
			"type": "object",
			"required": ["name", "rank", "nature", "description"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/NpcVariantId",
					"description": "The unique Datasworn ID for this item."
				},
				"name": {
					"$ref": "#/definitions/Label"
				},
				"rank": {
					"$ref": "#/definitions/ChallengeRank",
					"description": "The suggested challenge rank for this NPC."
				},
				"nature": {
					"$ref": "#/definitions/NpcNature"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString"
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				}
			},
			"additionalProperties": false
		},
		"DiceExpression": {
			"title": "DiceExpression",
			"type": "string",
			"description": "A simple dice roll expression with an optional modifer.",
			"examples": ["1d100", "1d6+2"],
			"pattern": "([1-9][0-9]*)d([1-9][0-9]*)([+-]([1-9][0-9]*))?"
		},
		"OracleDuplicateBehavior": {
			"title": "OracleDuplicateBehavior",
			"description": "Special roll instructions to use when rolling multiple times on a single oracle.\n\n  - `reroll`: Duplicate results should be re-rolled.\n  - `keep`: Duplicates results should be kept.\n  - `make_it_worse`: Duplicate results should be kept, and they compound to make things worse.",
			"enum": ["reroll", "keep", "make_it_worse"]
		},
		"OracleMatchBehavior": {
			"title": "OracleMatchBehavior",
			"type": "object",
			"required": ["text"],
			"properties": {
				"text": {
					"$ref": "#/definitions/MarkdownString"
				}
			},
			"additionalProperties": false
		},
		"OracleRoll": {
			"title": "OracleRoll",
			"type": "object",
			"properties": {
				"oracle": {
					"description": "The ID of the oracle to be rolled. A `null` value indicates that it's a roll on the same table.",
					"default": null,
					"anyOf": [
						{
							"$ref": "#/definitions/OracleRollableId"
						},
						{
							"type": "null"
						}
					]
				},
				"dice": {
					"description": "The dice roll to make on the oracle table. Set it to `null` if you just want the table's default.",
					"default": null,
					"anyOf": [
						{
							"$ref": "#/definitions/DiceExpression"
						},
						{
							"type": "null"
						}
					]
				},
				"auto": {
					"type": "boolean",
					"description": "Both Ironsworn and Starforged explicitly recommend *against* rolling all details at once. That said, some oracle results only provide useful information once a secondary roll occurs, such as \"Action + Theme\" or \"Roll twice\".",
					"default": false
				},
				"duplicates": {
					"$ref": "#/definitions/OracleDuplicateBehavior",
					"description": "Special rules on how to handle duplicate results, when rolling multiple times.",
					"default": "reroll"
				},
				"number_of_rolls": {
					"type": "integer",
					"description": "The number of times to roll.",
					"default": 1,
					"minimum": 1
				}
			},
			"additionalProperties": false
		},
		"OracleRollTemplate": {
			"title": "OracleRollTemplate",
			"type": "object",
			"description": "Provides string templates that may be used in place of the static row text from `OracleTableRow#text`, `OracleTableRow#text2`, and `OracleTableRow#text3`.\n\n  These strings are formatted in Markdown, but use a special syntax for their placeholders: `{{text:some_oracle_table_id}}`. The placeholder should be replaced with the value of a rolled (or selected) `OracleTableRow#text` from the target oracle table ID.",
			"releaseStage": "experimental",
			"properties": {
				"text": {
					"$ref": "#/definitions/TemplateString",
					"description": "A string template that may be used in place of OracleTableRow#text.",
					"examples": [
						"{{text:starforged/oracles/factions/affiliation}} of the {{text:starforged/oracles/factions/legacy}} {{text:starforged/oracles/factions/identity}}"
					]
				},
				"text2": {
					"$ref": "#/definitions/TemplateString",
					"description": "A string template that may be used in place of OracleTableRow#text2."
				},
				"text3": {
					"$ref": "#/definitions/TemplateString",
					"description": "A string template that may be used in place of OracleTableRow#text3."
				}
			},
			"additionalProperties": false
		},
		"OracleCollection": {
			"title": "OracleCollection",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `oracle_type` property as a discriminator.",
			"required": ["oracle_type"],
			"properties": {
				"oracle_type": {
					"enum": [
						"tables",
						"table_shared_rolls",
						"table_shared_text",
						"table_shared_text2",
						"OracleTableSharedText3"
					]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "tables",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTablesCollection"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_shared_rolls",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableSharedRolls"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_shared_text",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableSharedText"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_shared_text2",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableSharedText2"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "OracleTableSharedText3",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableSharedText3"
					}
				}
			]
		},
		"OracleColumnText": {
			"title": "OracleColumnText",
			"type": "object",
			"description": "Represents a single column in an OracleCollection.",
			"required": ["type", "name", "oracle_type", "rows"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_rollable"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary label at the head of this column."
				},
				"oracle_type": {
					"type": "string",
					"const": "column_text"
				},
				"replaces": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Indicates that this object replaces the identified OracleRollable. References to the replaced object can be considered equivalent to this object."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "An optional thematic color for this column. For an example, see \"Basic Creature Form\" (Starforged p. 337)"
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An optional icon for this column."
				},
				"dice": {
					"$ref": "#/definitions/DiceExpression",
					"description": "The roll used to select a result on this oracle.",
					"default": "1d100"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "Optional secondary text at the head of this column. For best results, this should be no more than a few words in length."
				},
				"match": {
					"$ref": "#/definitions/OracleMatchBehavior",
					"description": "Most oracle tables are insensitive to matches, but a few define special match behavior."
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"rows": {
					"type": "array",
					"description": "An array of objects, each representing a single row of the table.",
					"rollable": true,
					"items": {
						"$ref": "#/definitions/OracleTableRowText"
					}
				}
			},
			"additionalProperties": false
		},
		"OracleColumnText2": {
			"title": "OracleColumnText2",
			"type": "object",
			"required": ["type", "name", "oracle_type", "rows"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_rollable"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary label at the head of this column."
				},
				"oracle_type": {
					"type": "string",
					"const": "column_text2"
				},
				"replaces": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Indicates that this object replaces the identified OracleRollable. References to the replaced object can be considered equivalent to this object."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "An optional thematic color for this column. For an example, see \"Basic Creature Form\" (Starforged p. 337)"
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An optional icon for this column."
				},
				"dice": {
					"$ref": "#/definitions/DiceExpression",
					"description": "The roll used to select a result on this oracle.",
					"default": "1d100"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "Optional secondary text at the head of this column. For best results, this should be no more than a few words in length."
				},
				"match": {
					"$ref": "#/definitions/OracleMatchBehavior",
					"description": "Most oracle tables are insensitive to matches, but a few define special match behavior."
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"rows": {
					"type": "array",
					"description": "An array of objects, each representing a single row of the table.",
					"rollable": true,
					"items": {
						"$ref": "#/definitions/OracleTableRowText2"
					}
				}
			},
			"additionalProperties": false
		},
		"OracleColumnText3": {
			"title": "OracleColumnText3",
			"type": "object",
			"required": ["type", "name", "oracle_type", "rows"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_rollable"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary label at the head of this column."
				},
				"oracle_type": {
					"type": "string",
					"const": "column_text3"
				},
				"replaces": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Indicates that this object replaces the identified OracleRollable. References to the replaced object can be considered equivalent to this object."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "An optional thematic color for this column. For an example, see \"Basic Creature Form\" (Starforged p. 337)"
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An optional icon for this column."
				},
				"dice": {
					"$ref": "#/definitions/DiceExpression",
					"description": "The roll used to select a result on this oracle.",
					"default": "1d100"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "Optional secondary text at the head of this column. For best results, this should be no more than a few words in length."
				},
				"match": {
					"$ref": "#/definitions/OracleMatchBehavior",
					"description": "Most oracle tables are insensitive to matches, but a few define special match behavior."
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"rows": {
					"type": "array",
					"description": "An array of objects, each representing a single row of the table.",
					"rollable": true,
					"items": {
						"$ref": "#/definitions/OracleTableRowText3"
					}
				}
			},
			"additionalProperties": false
		},
		"OracleRollable": {
			"title": "OracleRollable",
			"type": "object",
			"description": "A collection of table rows from which random results may be rolled. This may represent a standalone table, or a column in a larger table.",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `oracle_type` property as a discriminator.",
			"required": ["oracle_type"],
			"properties": {
				"oracle_type": {
					"enum": [
						"table_text",
						"table_text2",
						"table_text3",
						"column_text",
						"column_text2",
						"column_text3"
					]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_text",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableText"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_text2",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableText2"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_text3",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableText3"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "column_text",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleColumnText"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "column_text2",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleColumnText2"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "column_text3",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleColumnText3"
					}
				}
			]
		},
		"OracleTableRollable": {
			"title": "OracleTableRollable",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `oracle_type` property as a discriminator.",
			"required": ["oracle_type"],
			"properties": {
				"oracle_type": {
					"enum": ["table_text", "table_text2", "table_text3"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_text",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableText"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_text2",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableText2"
					}
				},
				{
					"if": {
						"properties": {
							"oracle_type": {
								"const": "table_text3",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/OracleTableText3"
					}
				}
			]
		},
		"OracleTableRow": {
			"title": "OracleTableRow",
			"anyOf": [
				{
					"$ref": "#/definitions/OracleTableRowText"
				},
				{
					"$ref": "#/definitions/OracleTableRowText2"
				},
				{
					"$ref": "#/definitions/OracleTableRowText3"
				}
			]
		},
		"OracleTableRowText": {
			"title": "OracleTableRowText",
			"type": "object",
			"description": "Represents a row in an oracle table, with a single text cell.",
			"required": ["text"],
			"properties": {
				"min": {
					"description": "Low end of the dice range for this table row. `null` represents an unrollable row, included only for rendering purposes.",
					"default": null,
					"anyOf": [
						{
							"type": "integer",
							"description": "Low end of the dice range for this table row."
						},
						{
							"type": "null"
						}
					]
				},
				"max": {
					"description": "High end of the dice range for this table row. `null` represents an unrollable row, included only for rendering purposes.",
					"default": null,
					"anyOf": [
						{
							"type": "integer",
							"description": "High end of the dice range for this table row."
						},
						{
							"type": "null"
						}
					]
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl"
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "The primary text content of this row."
				},
				"template": {
					"$ref": "#/definitions/OracleRollTemplate",
					"releaseStage": "experimental"
				},
				"embed_table": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Hints that the identified table should be rendered inside this table row.",
					"releaseStage": "experimental"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"oracle_rolls": {
					"type": "array",
					"description": "Further oracle rolls prompted by this table row.",
					"items": {
						"$ref": "#/definitions/OracleRoll"
					}
				},
				"_i18n": {
					"$ref": "#/definitions/I18nHints",
					"releaseStage": "experimental"
				}
			},
			"additionalProperties": false
		},
		"OracleTableRowText2": {
			"title": "OracleTableRowText2",
			"type": "object",
			"description": "Represents a row in an oracle table that provides a secondary text field.",
			"required": ["text", "text2"],
			"properties": {
				"min": {
					"description": "Low end of the dice range for this table row. `null` represents an unrollable row, included only for rendering purposes.",
					"default": null,
					"anyOf": [
						{
							"type": "integer",
							"description": "Low end of the dice range for this table row."
						},
						{
							"type": "null"
						}
					]
				},
				"max": {
					"description": "High end of the dice range for this table row. `null` represents an unrollable row, included only for rendering purposes.",
					"default": null,
					"anyOf": [
						{
							"type": "integer",
							"description": "High end of the dice range for this table row."
						},
						{
							"type": "null"
						}
					]
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl"
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "The primary text content of this row."
				},
				"text2": {
					"description": "The secondary text for this row. Use `null` to represent a cell with a blank or empty vlue.",
					"anyOf": [
						{
							"$ref": "#/definitions/MarkdownString"
						},
						{
							"type": "null"
						}
					]
				},
				"template": {
					"$ref": "#/definitions/OracleRollTemplate",
					"releaseStage": "experimental"
				},
				"embed_table": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Hints that the identified table should be rendered inside this table row.",
					"releaseStage": "experimental"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"oracle_rolls": {
					"type": "array",
					"description": "Further oracle rolls prompted by this table row.",
					"items": {
						"$ref": "#/definitions/OracleRoll"
					}
				},
				"_i18n": {
					"$ref": "#/definitions/I18nHints",
					"releaseStage": "experimental"
				}
			},
			"additionalProperties": false
		},
		"OracleTableRowText3": {
			"title": "OracleTableRowText3",
			"type": "object",
			"description": "Represents a row in an oracle table with 3 text cells.",
			"required": ["text", "text2", "text3"],
			"properties": {
				"min": {
					"description": "Low end of the dice range for this table row. `null` represents an unrollable row, included only for rendering purposes.",
					"default": null,
					"anyOf": [
						{
							"type": "integer",
							"description": "Low end of the dice range for this table row."
						},
						{
							"type": "null"
						}
					]
				},
				"max": {
					"description": "High end of the dice range for this table row. `null` represents an unrollable row, included only for rendering purposes.",
					"default": null,
					"anyOf": [
						{
							"type": "integer",
							"description": "High end of the dice range for this table row."
						},
						{
							"type": "null"
						}
					]
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl"
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "The primary text content of this row."
				},
				"text2": {
					"description": "The secondary text for this row. Use `null` to represent a cell with a blank or empty vlue.",
					"anyOf": [
						{
							"$ref": "#/definitions/MarkdownString"
						},
						{
							"type": "null"
						}
					]
				},
				"text3": {
					"description": "The tertiary text for this row. Use `null` to represent a cell with a blank or empty vlue.",
					"anyOf": [
						{
							"$ref": "#/definitions/MarkdownString"
						},
						{
							"type": "null"
						}
					]
				},
				"template": {
					"$ref": "#/definitions/OracleRollTemplate",
					"releaseStage": "experimental"
				},
				"embed_table": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Hints that the identified table should be rendered inside this table row.",
					"releaseStage": "experimental"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"oracle_rolls": {
					"type": "array",
					"description": "Further oracle rolls prompted by this table row.",
					"items": {
						"$ref": "#/definitions/OracleRoll"
					}
				},
				"_i18n": {
					"$ref": "#/definitions/I18nHints",
					"releaseStage": "experimental"
				}
			},
			"additionalProperties": false
		},
		"OracleTableSharedRolls": {
			"title": "OracleTableSharedRolls",
			"type": "object",
			"description": "An OracleCollection representing a single table with one roll column and multiple `result` columns.",
			"required": ["type", "name", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_collection"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"oracle_type": {
					"type": "string",
					"description": "A table with one shared roll column, and multiple unique text columns.",
					"default": "table_shared_rolls",
					"const": "table_shared_rolls"
				},
				"replaces": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/OracleColumnText"
						}
					}
				},
				"column_labels": {
					"title": "ColumnLabels",
					"type": "object",
					"description": "Provides column labels for this table. The `roll` key refers to the roll column showing the dice range (`min` and `max` on each table row). For all other column labels, see the `name` property of each child `OracleColumn`.",
					"default": {
						"roll": "Roll"
					},
					"required": ["roll"],
					"properties": {
						"roll": {
							"$ref": "#/definitions/Label",
							"default": "Roll"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"OracleTableSharedText": {
			"title": "OracleTableSharedText",
			"type": "object",
			"description": "An OracleCollection representing a single table with multiple roll columns and one `result` column.",
			"required": ["type", "name", "oracle_type", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_collection"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"oracle_type": {
					"type": "string",
					"description": "A table with multiple unique roll columns, and one shared text column.",
					"const": "table_shared_text"
				},
				"replaces": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/OracleColumnText"
						}
					}
				},
				"column_labels": {
					"title": "ColumnLabels",
					"type": "object",
					"description": "The label at the head of each table column. The `roll` key refers to the roll column showing the dice range (`min` and `max` on each table row).",
					"default": {
						"text": "Result"
					},
					"required": ["text"],
					"properties": {
						"text": {
							"$ref": "#/definitions/Label",
							"default": "Result"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"OracleTableSharedText2": {
			"title": "OracleTableSharedText2",
			"type": "object",
			"description": "An OracleCollection representing a single table with multiple roll columns, and 2 shared text columns.",
			"required": ["type", "name", "oracle_type", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_collection"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"oracle_type": {
					"type": "string",
					"description": "A table with multiple unique roll columns, and 2 shared text columns.",
					"const": "table_shared_text2"
				},
				"replaces": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/OracleColumnText2"
						}
					}
				},
				"column_labels": {
					"title": "ColumnLabels",
					"type": "object",
					"description": "The label at the head of each table column. The `roll` key refers to the roll column showing the dice range (`min` and `max` on each table row).",
					"default": {
						"text": "Result",
						"text2": "Details"
					},
					"required": ["text", "text2"],
					"properties": {
						"text": {
							"$ref": "#/definitions/Label",
							"default": "Result"
						},
						"text2": {
							"$ref": "#/definitions/Label",
							"default": "Details"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"OracleTableSharedText3": {
			"title": "OracleTableSharedText3",
			"type": "object",
			"description": "An OracleCollection representing a single table with multiple roll columns, and 2 shared text columns.",
			"required": ["type", "name", "oracle_type", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_collection"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"oracle_type": {
					"type": "string",
					"description": "A table with multiple unique roll columns, and 3 shared text columns.",
					"const": "table_shared_text3"
				},
				"replaces": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/OracleColumnText3"
						}
					}
				},
				"column_labels": {
					"title": "ColumnLabels",
					"type": "object",
					"description": "The label at the head of each table column. The `roll` key refers to the roll column showing the dice range (`min` and `max` on each table row).",
					"default": {
						"text": "Result"
					},
					"required": ["text"],
					"properties": {
						"text": {
							"$ref": "#/definitions/Label",
							"default": "Result"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"OracleTableText": {
			"title": "OracleTableText",
			"type": "object",
			"description": "Represents a basic rollable oracle table with one roll column and one text result column.",
			"required": ["type", "name", "oracle_type", "rows", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_rollable"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"oracle_type": {
					"type": "string",
					"const": "table_text"
				},
				"replaces": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Indicates that this object replaces the identified OracleRollable. References to the replaced object can be considered equivalent to this object."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon that represents this table."
				},
				"dice": {
					"$ref": "#/definitions/DiceExpression",
					"description": "The roll used to select a result on this oracle.",
					"default": "1d100"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of the oracle table's intended usage, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of the oracle table's intended usage, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"match": {
					"$ref": "#/definitions/OracleMatchBehavior",
					"description": "Most oracle tables are insensitive to matches, but a few define special match behavior."
				},
				"recommended_rolls": {
					"type": "object",
					"required": ["min", "max"],
					"properties": {
						"min": {
							"type": "integer",
							"default": 1
						},
						"max": {
							"type": "integer",
							"default": 1
						}
					}
				},
				"column_labels": {
					"title": "ColumnLabels",
					"type": "object",
					"description": "The label at the head of each table column. The `roll` key refers to the roll column showing the dice range (`min` and `max` on each table row).",
					"default": {
						"roll": "Roll",
						"text": "Result"
					},
					"required": ["roll", "text"],
					"properties": {
						"roll": {
							"$ref": "#/definitions/Label",
							"default": "Roll"
						},
						"text": {
							"$ref": "#/definitions/Label",
							"default": "Result"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"rows": {
					"type": "array",
					"description": "An array of objects, each representing a single row of the table.",
					"rollable": true,
					"items": {
						"$ref": "#/definitions/OracleTableRowText"
					}
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"OracleTableText2": {
			"title": "OracleTableText2",
			"type": "object",
			"description": "A rollable oracle table with one roll column and two text columns.",
			"required": ["type", "name", "oracle_type", "rows", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_rollable"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"oracle_type": {
					"type": "string",
					"const": "table_text2"
				},
				"replaces": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Indicates that this object replaces the identified OracleRollable. References to the replaced object can be considered equivalent to this object."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon that represents this table."
				},
				"dice": {
					"$ref": "#/definitions/DiceExpression",
					"description": "The roll used to select a result on this oracle.",
					"default": "1d100"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of the oracle table's intended usage, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of the oracle table's intended usage, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"match": {
					"$ref": "#/definitions/OracleMatchBehavior",
					"description": "Most oracle tables are insensitive to matches, but a few define special match behavior."
				},
				"recommended_rolls": {
					"type": "object",
					"required": ["min", "max"],
					"properties": {
						"min": {
							"type": "integer",
							"default": 1
						},
						"max": {
							"type": "integer",
							"default": 1
						}
					}
				},
				"column_labels": {
					"title": "ColumnLabels",
					"type": "object",
					"description": "The label at the head of each table column. The `roll` key refers to the roll column showing the dice range (`min` and `max` on each table row).",
					"default": {
						"roll": "Roll",
						"text": "Result",
						"text2": "Details"
					},
					"required": ["roll", "text", "text2"],
					"properties": {
						"roll": {
							"$ref": "#/definitions/Label",
							"default": "Roll"
						},
						"text": {
							"$ref": "#/definitions/Label",
							"default": "Result"
						},
						"text2": {
							"$ref": "#/definitions/Label",
							"default": "Details"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"rows": {
					"type": "array",
					"description": "An array of objects, each representing a single row of the table.",
					"rollable": true,
					"items": {
						"$ref": "#/definitions/OracleTableRowText2"
					}
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"OracleTableText3": {
			"title": "OracleTableText3",
			"type": "object",
			"description": "A rollable oracle table with one roll column and 3 text columns.",
			"required": ["type", "name", "oracle_type", "rows", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_rollable"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"oracle_type": {
					"type": "string",
					"const": "table_text3"
				},
				"replaces": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "Indicates that this object replaces the identified OracleRollable. References to the replaced object can be considered equivalent to this object."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon that represents this table."
				},
				"dice": {
					"$ref": "#/definitions/DiceExpression",
					"description": "The roll used to select a result on this oracle.",
					"default": "1d100"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of the oracle table's intended usage, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of the oracle table's intended usage, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"match": {
					"$ref": "#/definitions/OracleMatchBehavior",
					"description": "Most oracle tables are insensitive to matches, but a few define special match behavior."
				},
				"recommended_rolls": {
					"type": "object",
					"required": ["min", "max"],
					"properties": {
						"min": {
							"type": "integer",
							"default": 1
						},
						"max": {
							"type": "integer",
							"default": 1
						}
					}
				},
				"column_labels": {
					"title": "ColumnLabels",
					"type": "object",
					"description": "The label at the head of each table column. The `roll` key refers to the roll column showing the dice range (`min` and `max` on each table row).",
					"default": {},
					"required": ["roll", "text", "text2", "text3"],
					"properties": {
						"roll": {
							"$ref": "#/definitions/Label"
						},
						"text": {
							"$ref": "#/definitions/Label"
						},
						"text2": {
							"$ref": "#/definitions/Label"
						},
						"text3": {
							"$ref": "#/definitions/Label"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"rows": {
					"type": "array",
					"description": "An array of objects, each representing a single row of the table.",
					"rollable": true,
					"items": {
						"$ref": "#/definitions/OracleTableRowText3"
					}
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"OracleTablesCollection": {
			"title": "OracleTablesCollection",
			"type": "object",
			"description": "An OracleCollection that represents a category or grouping of tables, which may themselves be `OracleTablesCollection`s.",
			"required": ["type", "name", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "oracle_collection"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"oracle_type": {
					"type": "string",
					"description": "A grouping of separate tables.",
					"default": "tables",
					"const": "tables"
				},
				"replaces": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/OracleCollectionId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/OracleTableRollable"
						}
					}
				},
				"collections": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/OracleCollection"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"ActionRollMethod": {
			"title": "ActionRollMethod",
			"description": "  - `miss`: An automatic miss.\n  - `weak_hit`: An automatic weak hit.\n  - `strong_hit`: An automatic strong hit.\n  - `player_choice`: The player chooses which roll option to use.\n  - `highest`: Use the roll option with the best/highest value.\n  - `lowest`: Use the roll option with the worst/lowest value.\n  - `all`: Use _every_ roll option at once.",
			"enum": [
				"miss",
				"weak_hit",
				"strong_hit",
				"player_choice",
				"highest",
				"lowest",
				"all"
			]
		},
		"Move": {
			"title": "Move",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `roll_type` property as a discriminator.",
			"required": ["roll_type"],
			"properties": {
				"roll_type": {
					"enum": ["action_roll", "no_roll", "progress_roll", "special_track"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"roll_type": {
								"const": "action_roll",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/MoveActionRoll"
					}
				},
				{
					"if": {
						"properties": {
							"roll_type": {
								"const": "no_roll",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/MoveNoRoll"
					}
				},
				{
					"if": {
						"properties": {
							"roll_type": {
								"const": "progress_roll",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/MoveProgressRoll"
					}
				},
				{
					"if": {
						"properties": {
							"roll_type": {
								"const": "special_track",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/MoveSpecialTrack"
					}
				}
			]
		},
		"MoveActionRoll": {
			"title": "MoveActionRoll",
			"type": "object",
			"description": "A move that makes an action roll.",
			"required": [
				"type",
				"name",
				"roll_type",
				"trigger",
				"text",
				"outcomes",
				"_source"
			],
			"properties": {
				"_id": {
					"$ref": "#/definitions/MoveId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "move"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"roll_type": {
					"type": "string",
					"description": "A move that makes an action roll.",
					"const": "action_roll"
				},
				"replaces": {
					"$ref": "#/definitions/MoveId",
					"description": "Indicates that this move replaces the identified move. References to the replaced move can be considered equivalent to this move."
				},
				"trigger": {
					"$ref": "#/definitions/TriggerActionRoll",
					"title": "Trigger",
					"description": "Trigger conditions for this move."
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "The complete rules text of the move."
				},
				"outcomes": {
					"$ref": "#/definitions/MoveOutcomes",
					"title": "MoveOutcomes"
				},
				"oracles": {
					"type": "array",
					"description": "Oracles associated with this move. It's not recommended to roll these automatically, as almost all moves present them as an option, not a requirement.",
					"items": {
						"$ref": "#/definitions/OracleRollableId"
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"MoveActionRollEnhancement": {
			"title": "MoveActionRollEnhancement",
			"type": "object",
			"description": "An object that describes changes to a move. These changes should be applied recursively, altering only the specified properties; enhanced arrays should be concatencated with the original array value.",
			"required": ["roll_type"],
			"properties": {
				"roll_type": {
					"type": "string",
					"description": "A move must have this `roll_type` to receive this enhancement. This is in addition to any other restrictions made by other properties.",
					"const": "action_roll"
				},
				"enhances": {
					"description": "An array of wildcard IDs. An item must match one of the wildcard IDs to receive this enhancement. If this is `null`, any ID is valid.",
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/MoveIdWildcard"
							}
						},
						{
							"type": "null"
						}
					]
				},
				"trigger": {
					"$ref": "#/definitions/TriggerActionRollEnhancement"
				}
			},
			"additionalProperties": false
		},
		"MoveCategory": {
			"title": "MoveCategory",
			"type": "object",
			"required": ["type", "name", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/MoveCategoryId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "move_category"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"replaces": {
					"$ref": "#/definitions/MoveCategoryId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/MoveCategoryId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/Move"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"MoveEnhancement": {
			"title": "MoveEnhancement",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `roll_type` property as a discriminator.",
			"required": ["roll_type"],
			"properties": {
				"roll_type": {
					"enum": ["action_roll", "no_roll", "progress_roll", "special_track"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"roll_type": {
								"const": "action_roll",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/MoveActionRollEnhancement"
					}
				},
				{
					"if": {
						"properties": {
							"roll_type": {
								"const": "no_roll",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/MoveNoRollEnhancement"
					}
				},
				{
					"if": {
						"properties": {
							"roll_type": {
								"const": "progress_roll",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/MoveProgressRollEnhancement"
					}
				},
				{
					"if": {
						"properties": {
							"roll_type": {
								"const": "special_track",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/MoveSpecialTrackEnhancement"
					}
				}
			]
		},
		"MoveNoRoll": {
			"title": "MoveNoRoll",
			"type": "object",
			"description": "A move that makes no progress rolls or action rolls.",
			"required": ["type", "name", "roll_type", "trigger", "text", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/MoveId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "move"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"roll_type": {
					"type": "string",
					"description": "A move that makes no action rolls or progress rolls.",
					"const": "no_roll"
				},
				"replaces": {
					"$ref": "#/definitions/MoveId",
					"description": "Indicates that this move replaces the identified move. References to the replaced move can be considered equivalent to this move."
				},
				"trigger": {
					"$ref": "#/definitions/TriggerNoRoll",
					"title": "Trigger",
					"description": "Trigger conditions for this move."
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "The complete rules text of the move."
				},
				"outcomes": {
					"title": "MoveOutcomes",
					"type": "null",
					"default": null
				},
				"oracles": {
					"type": "array",
					"description": "Oracles associated with this move. It's not recommended to roll these automatically, as almost all moves present them as an option, not a requirement.",
					"items": {
						"$ref": "#/definitions/OracleRollableId"
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"MoveNoRollEnhancement": {
			"title": "MoveNoRollEnhancement",
			"type": "object",
			"description": "An object that describes changes to a move. These changes should be applied recursively, altering only the specified properties; enhanced arrays should be concatencated with the original array value.",
			"required": ["roll_type"],
			"properties": {
				"roll_type": {
					"type": "string",
					"description": "A move must have this `roll_type` to receive this enhancement. This is in addition to any other restrictions made by other properties.",
					"const": "no_roll"
				},
				"enhances": {
					"description": "An array of wildcard IDs. An item must match one of the wildcard IDs to receive this enhancement. If this is `null`, any ID is valid.",
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/MoveIdWildcard"
							}
						},
						{
							"type": "null"
						}
					]
				},
				"trigger": {
					"$ref": "#/definitions/TriggerNoRollEnhancement"
				}
			},
			"additionalProperties": false
		},
		"MoveOutcome": {
			"title": "MoveOutcome",
			"type": "object",
			"required": ["text"],
			"properties": {
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"type": "string",
					"pattern": "On a __(strong hit|weak hit|miss)__"
				},
				"oracle_rolls": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/OracleRoll"
					}
				}
			},
			"additionalProperties": false
		},
		"MoveOutcomes": {
			"title": "MoveOutcomes",
			"type": "object",
			"description": "A standalone localized description for each move outcome (miss, weak hit, or strong hit). This is for for e.g. VTT implementations, where it's often useful to display only the rules text relevant to a roll result.\n\n  This often requires light editorialization to create text that can stand alone without reference to the rest of the move. For example, 'as above' (in reference to another move outcome) shouldn't be used here; instead, the relevant text should be repeated.",
			"required": ["strong_hit", "weak_hit", "miss"],
			"properties": {
				"strong_hit": {
					"$ref": "#/definitions/MoveOutcome"
				},
				"weak_hit": {
					"$ref": "#/definitions/MoveOutcome"
				},
				"miss": {
					"$ref": "#/definitions/MoveOutcome"
				}
			},
			"additionalProperties": false
		},
		"MoveProgressRoll": {
			"title": "MoveProgressRoll",
			"type": "object",
			"description": "A progress move that rolls on a standard progress track type (whose features are defined by this move object). For progress rolls that use special tracks, see MoveSpecialTrack.",
			"required": [
				"type",
				"name",
				"roll_type",
				"tracks",
				"trigger",
				"text",
				"outcomes",
				"_source"
			],
			"properties": {
				"_id": {
					"$ref": "#/definitions/MoveId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "move"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"roll_type": {
					"type": "string",
					"description": "A progress move that rolls on a standard progress track type (defined by this move).",
					"const": "progress_roll"
				},
				"tracks": {
					"$ref": "#/definitions/ProgressTrackTypeInfo",
					"description": "Describes the common features of progress tracks associated with this move."
				},
				"replaces": {
					"$ref": "#/definitions/MoveId",
					"description": "Indicates that this move replaces the identified move. References to the replaced move can be considered equivalent to this move."
				},
				"trigger": {
					"$ref": "#/definitions/TriggerProgressRoll",
					"title": "Trigger",
					"description": "Trigger conditions for this move."
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "The complete rules text of the move."
				},
				"outcomes": {
					"$ref": "#/definitions/MoveOutcomes",
					"title": "MoveOutcomes"
				},
				"oracles": {
					"type": "array",
					"description": "Oracles associated with this move. It's not recommended to roll these automatically, as almost all moves present them as an option, not a requirement.",
					"items": {
						"$ref": "#/definitions/OracleRollableId"
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"MoveProgressRollEnhancement": {
			"title": "MoveProgressRollEnhancement",
			"type": "object",
			"description": "An object that describes changes to a move. These changes should be applied recursively, altering only the specified properties; enhanced arrays should be concatencated with the original array value.",
			"required": ["roll_type"],
			"properties": {
				"roll_type": {
					"type": "string",
					"description": "A move must have this `roll_type` to receive this enhancement. This is in addition to any other restrictions made by other properties.",
					"const": "progress_roll"
				},
				"enhances": {
					"description": "An array of wildcard IDs. An item must match one of the wildcard IDs to receive this enhancement. If this is `null`, any ID is valid.",
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/MoveIdWildcard"
							}
						},
						{
							"type": "null"
						}
					]
				},
				"trigger": {
					"$ref": "#/definitions/TriggerProgressRollEnhancement"
				}
			},
			"additionalProperties": false
		},
		"MoveRollType": {
			"title": "MoveRollType",
			"description": "  - `no_roll`: A move that makes no action rolls or progress rolls.\n  - `action_roll`: A move that makes an action roll.\n  - `progress_roll`: A progress move that rolls on a standard progress track type (defined by this move).\n  - `special_track`: A progress move that rolls on one or more special tracks, like Bonds (classic Ironsworn), Failure (Delve), or Legacies (Starforged).",
			"enum": ["no_roll", "action_roll", "progress_roll", "special_track"]
		},
		"MoveSpecialTrack": {
			"title": "MoveSpecialTrack",
			"type": "object",
			"description": "A progress move that rolls on a special track, such as Legacies (Starforged) or Bonds (classic Ironsworn). For progress moves that use standard progress tracks, see MoveProgressRoll instead.",
			"required": [
				"type",
				"name",
				"roll_type",
				"trigger",
				"text",
				"outcomes",
				"_source"
			],
			"properties": {
				"_id": {
					"$ref": "#/definitions/MoveId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "move"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"roll_type": {
					"type": "string",
					"description": "A progress move that rolls on one or more special tracks, like Bonds (classic Ironsworn), Failure (Delve), or Legacies (Starforged).",
					"const": "special_track"
				},
				"replaces": {
					"$ref": "#/definitions/MoveId",
					"description": "Indicates that this move replaces the identified move. References to the replaced move can be considered equivalent to this move."
				},
				"trigger": {
					"$ref": "#/definitions/TriggerSpecialTrack",
					"title": "Trigger",
					"description": "Trigger conditions for this move."
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "The complete rules text of the move."
				},
				"outcomes": {
					"$ref": "#/definitions/MoveOutcomes",
					"title": "MoveOutcomes"
				},
				"oracles": {
					"type": "array",
					"description": "Oracles associated with this move. It's not recommended to roll these automatically, as almost all moves present them as an option, not a requirement.",
					"items": {
						"$ref": "#/definitions/OracleRollableId"
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"MoveSpecialTrackEnhancement": {
			"title": "MoveSpecialTrackEnhancement",
			"type": "object",
			"description": "An object that describes changes to a move. These changes should be applied recursively, altering only the specified properties; enhanced arrays should be concatencated with the original array value.",
			"required": ["roll_type"],
			"properties": {
				"roll_type": {
					"type": "string",
					"description": "A move must have this `roll_type` to receive this enhancement. This is in addition to any other restrictions made by other properties.",
					"const": "special_track"
				},
				"enhances": {
					"description": "An array of wildcard IDs. An item must match one of the wildcard IDs to receive this enhancement. If this is `null`, any ID is valid.",
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/MoveIdWildcard"
							}
						},
						{
							"type": "null"
						}
					]
				},
				"trigger": {
					"$ref": "#/definitions/TriggerSpecialTrackEnhancement"
				}
			},
			"additionalProperties": false
		},
		"ProgressRollMethod": {
			"title": "ProgressRollMethod",
			"description": "  - `miss`: An automatic miss.\n  - `weak_hit`: An automatic weak hit.\n  - `strong_hit`: An automatic strong hit.\n  - `progress_roll`: Make a progress roll on a progress track associated with this move.",
			"enum": ["miss", "weak_hit", "strong_hit", "progress_roll"]
		},
		"ProgressRollOption": {
			"title": "ProgressRollOption",
			"type": "object",
			"required": ["using"],
			"properties": {
				"using": {
					"type": "string",
					"const": "progress_track"
				}
			},
			"additionalProperties": false
		},
		"SpecialTrackRollMethod": {
			"title": "SpecialTrackRollMethod",
			"description": "  - `miss`: An automatic miss.\n  - `weak_hit`: An automatic weak hit.\n  - `strong_hit`: An automatic strong hit.\n  - `player_choice`: The player chooses which roll option to use.\n  - `highest`: Use the roll option with the best/highest value.\n  - `lowest`: Use the roll option with the worst/lowest value.\n  - `all`: Use _every_ roll option at once.",
			"enum": [
				"miss",
				"weak_hit",
				"strong_hit",
				"player_choice",
				"highest",
				"lowest",
				"all"
			]
		},
		"TriggerActionRoll": {
			"title": "TriggerActionRoll",
			"type": "object",
			"description": "Describes trigger conditions for a move that makes an action roll.",
			"required": ["conditions", "text"],
			"properties": {
				"conditions": {
					"type": "array",
					"description": "Specific conditions that qualify for this trigger.",
					"items": {
						"$ref": "#/definitions/TriggerActionRollCondition"
					}
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"type": "string",
					"description": "A markdown string containing the primary trigger text for this move.\n\nSecondary trigger text (for specific stats or uses of an asset ability) may be described in individual trigger conditions.",
					"pattern": ".*\\.{3}"
				}
			},
			"additionalProperties": false
		},
		"TriggerActionRollCondition": {
			"title": "TriggerActionRollCondition",
			"type": "object",
			"required": ["method", "roll_options"],
			"properties": {
				"by": {
					"$ref": "#/definitions/TriggerBy"
				},
				"method": {
					"$ref": "#/definitions/ActionRollMethod"
				},
				"roll_options": {
					"type": "array",
					"description": "The options available when rolling with this trigger condition.",
					"items": {
						"$ref": "#/definitions/RollableValue"
					}
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A markdown string of any trigger text specific to this trigger condition."
				}
			},
			"additionalProperties": false
		},
		"TriggerActionRollConditionEnhancement": {
			"title": "TriggerActionRollConditionEnhancement",
			"type": "object",
			"properties": {
				"by": {
					"$ref": "#/definitions/TriggerBy"
				},
				"method": {
					"description": "A `null` value means this condition provides no roll mechanic of its own; it must be used with another trigger condition that provides a non-null `method`.",
					"default": null,
					"anyOf": [
						{
							"$ref": "#/definitions/ActionRollMethod"
						},
						{
							"type": "null"
						}
					]
				},
				"roll_options": {
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"description": "The options available when rolling with this trigger condition.",
							"items": {
								"$ref": "#/definitions/RollableValue"
							}
						},
						{
							"type": "null"
						}
					]
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A markdown string of any trigger text specific to this trigger condition."
				}
			},
			"additionalProperties": false
		},
		"TriggerActionRollEnhancement": {
			"title": "TriggerActionRollEnhancement",
			"type": "object",
			"description": "Describes changes/additions made to the enhanced move's trigger conditions.",
			"required": ["conditions"],
			"properties": {
				"conditions": {
					"type": "array",
					"description": "Trigger conditions added to the enhanced move.",
					"items": {
						"$ref": "#/definitions/TriggerActionRollConditionEnhancement"
					}
				}
			},
			"additionalProperties": false
		},
		"TriggerBy": {
			"title": "TriggerBy",
			"type": "object",
			"description": "Information on who can activate this trigger condition. Usually this is just the player, but some asset abilities can trigger from an ally's move.",
			"properties": {
				"ally": {
					"type": "boolean",
					"description": "Can this trigger be activated by one of the player's allies?",
					"default": false
				},
				"player": {
					"type": "boolean",
					"description": "Can this trigger be activated by the player who owns this?",
					"default": true
				}
			},
			"additionalProperties": false
		},
		"TriggerNoRoll": {
			"title": "TriggerNoRoll",
			"type": "object",
			"description": "Describes trigger conditions for a move that makes no rolls.",
			"required": ["text"],
			"properties": {
				"conditions": {
					"description": "Specific conditions that qualify for this trigger.",
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/TriggerNoRollCondition"
							}
						},
						{
							"type": "null"
						}
					]
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"type": "string",
					"description": "A markdown string containing the primary trigger text for this move.\n\nSecondary trigger text (for specific stats or uses of an asset ability) may be described in individual trigger conditions.",
					"pattern": ".*\\.{3}"
				}
			},
			"additionalProperties": false
		},
		"TriggerNoRollCondition": {
			"title": "TriggerNoRollCondition",
			"type": "object",
			"properties": {
				"by": {
					"$ref": "#/definitions/TriggerBy"
				},
				"method": {
					"type": "null",
					"default": null
				},
				"roll_options": {
					"type": "null",
					"description": "The options available when rolling with this trigger condition.",
					"default": null
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A markdown string of any trigger text specific to this trigger condition."
				}
			},
			"additionalProperties": false
		},
		"TriggerNoRollEnhancement": {
			"title": "TriggerNoRollEnhancement",
			"type": "object",
			"description": "Describes changes/additions made to the enhanced move's trigger conditions.",
			"required": ["conditions"],
			"properties": {
				"conditions": {
					"type": "array",
					"description": "Trigger conditions added to the enhanced move.",
					"items": {
						"$ref": "#/definitions/TriggerNoRollCondition"
					}
				}
			},
			"additionalProperties": false
		},
		"TriggerProgressRoll": {
			"title": "TriggerProgressRoll",
			"type": "object",
			"required": ["conditions", "text"],
			"properties": {
				"conditions": {
					"type": "array",
					"description": "Specific conditions that qualify for this trigger.",
					"items": {
						"$ref": "#/definitions/TriggerProgressRollCondition"
					}
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"type": "string",
					"description": "A markdown string containing the primary trigger text for this move.\n\nSecondary trigger text (for specific stats or uses of an asset ability) may be described in individual trigger conditions.",
					"pattern": ".*\\.{3}"
				}
			},
			"additionalProperties": false
		},
		"TriggerProgressRollCondition": {
			"title": "TriggerProgressRollCondition",
			"type": "object",
			"required": ["roll_options"],
			"properties": {
				"by": {
					"$ref": "#/definitions/TriggerBy"
				},
				"method": {
					"$ref": "#/definitions/ProgressRollMethod",
					"default": "progress_roll"
				},
				"roll_options": {
					"type": "array",
					"description": "The options available when rolling with this trigger condition.",
					"items": {
						"$ref": "#/definitions/ProgressRollOption"
					}
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A markdown string of any trigger text specific to this trigger condition."
				}
			},
			"additionalProperties": false
		},
		"TriggerProgressRollConditionEnhancement": {
			"title": "TriggerProgressRollConditionEnhancement",
			"type": "object",
			"properties": {
				"by": {
					"$ref": "#/definitions/TriggerBy"
				},
				"method": {
					"description": "A `null` value means this condition provides no roll mechanic of its own; it must be used with another trigger condition that provides a non-null `method`.",
					"default": null,
					"anyOf": [
						{
							"$ref": "#/definitions/ProgressRollMethod",
							"default": "progress_roll"
						},
						{
							"type": "null"
						}
					]
				},
				"roll_options": {
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"description": "The options available when rolling with this trigger condition.",
							"items": {
								"$ref": "#/definitions/ProgressRollOption"
							}
						},
						{
							"type": "null"
						}
					]
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A markdown string of any trigger text specific to this trigger condition."
				}
			},
			"additionalProperties": false
		},
		"TriggerProgressRollEnhancement": {
			"title": "TriggerProgressRollEnhancement",
			"type": "object",
			"description": "Describes changes/additions made to the enhanced move's trigger conditions.",
			"required": ["conditions"],
			"properties": {
				"conditions": {
					"type": "array",
					"description": "Trigger conditions added to the enhanced move.",
					"items": {
						"$ref": "#/definitions/TriggerProgressRollConditionEnhancement"
					}
				}
			},
			"additionalProperties": false
		},
		"TriggerSpecialTrack": {
			"title": "TriggerSpecialTrack",
			"type": "object",
			"required": ["conditions", "text"],
			"properties": {
				"conditions": {
					"type": "array",
					"description": "Specific conditions that qualify for this trigger.",
					"items": {
						"$ref": "#/definitions/TriggerSpecialTrackCondition"
					}
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"type": "string",
					"description": "A markdown string containing the primary trigger text for this move.\n\nSecondary trigger text (for specific stats or uses of an asset ability) may be described in individual trigger conditions.",
					"pattern": ".*\\.{3}"
				}
			},
			"additionalProperties": false
		},
		"TriggerSpecialTrackCondition": {
			"title": "TriggerSpecialTrackCondition",
			"type": "object",
			"required": ["method", "roll_options"],
			"properties": {
				"by": {
					"$ref": "#/definitions/TriggerBy"
				},
				"method": {
					"$ref": "#/definitions/SpecialTrackRollMethod"
				},
				"roll_options": {
					"type": "array",
					"description": "The options available when rolling with this trigger condition.",
					"items": {
						"$ref": "#/definitions/TriggerSpecialTrackConditionOption"
					}
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A markdown string of any trigger text specific to this trigger condition."
				}
			},
			"additionalProperties": false
		},
		"TriggerSpecialTrackConditionEnhancement": {
			"title": "TriggerSpecialTrackConditionEnhancement",
			"type": "object",
			"description": "A progress move that rolls on one or more special tracks, like Bonds (classic Ironsworn), Failure (Delve), or Legacy (Starforged).",
			"properties": {
				"by": {
					"$ref": "#/definitions/TriggerBy"
				},
				"method": {
					"description": "A `null` value means this condition provides no roll mechanic of its own; it must be used with another trigger condition that provides a non-null `method`.",
					"default": null,
					"anyOf": [
						{
							"$ref": "#/definitions/SpecialTrackRollMethod"
						},
						{
							"type": "null"
						}
					]
				},
				"roll_options": {
					"default": null,
					"anyOf": [
						{
							"type": "array",
							"description": "The options available when rolling with this trigger condition.",
							"items": {
								"$ref": "#/definitions/TriggerSpecialTrackConditionOption"
							}
						},
						{
							"type": "null"
						}
					]
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A markdown string of any trigger text specific to this trigger condition."
				}
			},
			"additionalProperties": false
		},
		"TriggerSpecialTrackConditionOption": {
			"title": "TriggerSpecialTrackConditionOption",
			"type": "object",
			"required": ["using"],
			"properties": {
				"using": {
					"$ref": "#/definitions/SpecialTrackType"
				}
			},
			"additionalProperties": false
		},
		"TriggerSpecialTrackEnhancement": {
			"title": "TriggerSpecialTrackEnhancement",
			"type": "object",
			"description": "Describes changes/additions made to the enhanced move's trigger conditions.",
			"required": ["conditions"],
			"properties": {
				"conditions": {
					"type": "array",
					"description": "Trigger conditions added to the enhanced move.",
					"items": {
						"$ref": "#/definitions/TriggerSpecialTrackConditionEnhancement"
					}
				}
			},
			"additionalProperties": false
		},
		"Asset": {
			"title": "Asset",
			"type": "object",
			"required": ["type", "name", "category", "abilities", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/AssetId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "asset"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"category": {
					"$ref": "#/definitions/Label",
					"description": "A localized category label for this asset. This is the surtitle above the asset's name on the card.",
					"examples": [
						"Combat Talent",
						"Command Vehicle",
						"Companion",
						"Deed",
						"Module",
						"Path",
						"Ritual",
						"Support Vehicle"
					]
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this asset."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "This asset's icon."
				},
				"options": {
					"type": "object",
					"description": "Options are input fields set when the player purchases the asset. They're likely to remain the same through the life of the asset. Typically, they are rendered at the top of the asset card.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AssetOptionField"
						}
					}
				},
				"count_as_impact": {
					"type": "boolean",
					"description": "If `true`, this asset counts as an impact (Starforged) or a debility (classic Ironsworn).",
					"default": false
				},
				"shared": {
					"type": "boolean",
					"description": "Most assets only benefit to their owner, but certain assets (like Starforged's module and command vehicle assets) are shared amongst the player's allies, too.",
					"default": false
				},
				"attachments": {
					"$ref": "#/definitions/AssetAttachment"
				},
				"requirement": {
					"$ref": "#/definitions/MarkdownString",
					"description": "Describes prerequisites for purchasing or using this asset."
				},
				"abilities": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/AssetAbility",
						"description": "Abilities provided by this asset. Most assets have 3."
					}
				},
				"controls": {
					"type": "object",
					"description": "Controls are condition meters, clocks, counters, and other asset input fields whose values are expected to change throughout the life of the asset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AssetControlField"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"AssetAbility": {
			"title": "AssetAbility",
			"type": "object",
			"description": "An asset ability: one of the purchasable features of an asset. Most assets have three.",
			"required": ["text"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/AssetAbilityId",
					"description": "The unique Datasworn ID for this item."
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "A handful of asset abilities have a label/name, for instance classic Ironsworn companion assets. Most canonical assets omit this property."
				},
				"enabled": {
					"type": "boolean",
					"description": "Is this asset ability enabled?",
					"default": false
				},
				"options": {
					"type": "object",
					"description": "Fields that are expected to be set once and remain the same through the life of the asset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AssetAbilityOptionField"
						}
					}
				},
				"text": {
					"$ref": "#/definitions/MarkdownString",
					"description": "The complete rules text of this asset ability."
				},
				"controls": {
					"type": "object",
					"description": "Fields whose values are expected to change over the life of the asset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AssetAbilityControlField"
						}
					}
				},
				"enhance_asset": {
					"$ref": "#/definitions/AssetEnhancement",
					"description": "Changes made to the asset, when this ability is enabled."
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"enhance_moves": {
					"type": "array",
					"description": "Describes changes made to various moves by this asset ability. Usually these require specific trigger conditions.",
					"items": {
						"$ref": "#/definitions/MoveEnhancement"
					}
				},
				"moves": {
					"type": "object",
					"description": "Unique moves added by this asset ability.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/Move"
						}
					}
				}
			},
			"additionalProperties": false
		},
		"AssetAbilityControlField": {
			"title": "AssetAbilityControlField",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `field_type` property as a discriminator.",
			"required": ["field_type"],
			"properties": {
				"field_type": {
					"enum": ["clock", "counter", "checkbox", "text"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "clock",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/ClockField"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "counter",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/CounterField"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "checkbox",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetCheckboxField"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "text",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/TextField"
					}
				}
			]
		},
		"AssetAbilityOptionField": {
			"title": "AssetAbilityOptionField",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `field_type` property as a discriminator.",
			"required": ["field_type"],
			"properties": {
				"field_type": {
					"enum": ["text"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "text",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/TextField"
					}
				}
			]
		},
		"AssetAttachment": {
			"title": "AssetAttachment",
			"type": "object",
			"description": "Describes which assets can be attached to this asset. Example: Starforged's Module assets, which can be equipped by Command Vehicle assets. See p. 55 of Starforged for more info.",
			"required": ["assets"],
			"properties": {
				"max": {
					"description": "Null if there's no upper limit to the number of attached assets.",
					"default": null,
					"anyOf": [
						{
							"type": "integer",
							"minimum": 1
						},
						{
							"type": "null"
						}
					]
				},
				"assets": {
					"type": "array",
					"description": "Asset IDs (which may be wildcards) that may be attached to this asset",
					"items": {
						"$ref": "#/definitions/AssetIdWildcard"
					}
				}
			},
			"additionalProperties": false
		},
		"AssetCardFlipField": {
			"title": "AssetCardFlipField",
			"type": "object",
			"required": ["label", "field_type"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "card_flip"
				},
				"value": {
					"type": "boolean",
					"description": "Is the card flipped over?",
					"default": false
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				},
				"is_impact": {
					"type": "boolean",
					"description": "Does this field count as an impact (Starforged) or debility (Ironsworn classic) when its value is set to `true`?",
					"default": false
				},
				"disables_asset": {
					"type": "boolean",
					"description": "Does this field disable the asset when its value is set to `true`?",
					"default": false
				}
			},
			"additionalProperties": false
		},
		"AssetCheckboxField": {
			"title": "AssetCheckboxField",
			"type": "object",
			"required": ["label", "field_type"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "checkbox"
				},
				"value": {
					"type": "boolean",
					"description": "Is the box checked?",
					"default": false
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				},
				"is_impact": {
					"type": "boolean",
					"description": "Does this field count as an impact (Starforged) or debility (Ironsworn classic) when its value is set to `true`?",
					"default": false
				},
				"disables_asset": {
					"type": "boolean",
					"description": "Does this field disable the asset when its value is set to `true`?",
					"default": false
				}
			},
			"additionalProperties": false
		},
		"AssetCollection": {
			"title": "AssetCollection",
			"type": "object",
			"required": ["type", "name", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/AssetCollectionId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "asset_collection"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"replaces": {
					"$ref": "#/definitions/AssetCollectionId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/AssetCollectionId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/Asset"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"AssetConditionMeter": {
			"title": "AssetConditionMeter",
			"type": "object",
			"description": "Some assets provide a special condition meter of their own. The most common example is the health meters on companion assets. Asset condition meters may also include their own controls, such as the checkboxes that Starforged companion assets use to indicate they are \"out of action\".",
			"required": ["label", "field_type", "max"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "condition_meter"
				},
				"rollable": {
					"type": "boolean",
					"description": "Is this meter's `value` usable as a stat in an action roll?",
					"default": true,
					"const": true
				},
				"min": {
					"type": "integer",
					"description": "The minimum value of this meter.",
					"default": 0
				},
				"max": {
					"type": "integer",
					"description": "The maximum value of this meter."
				},
				"value": {
					"type": "integer",
					"description": "The current value of this meter.",
					"default": 0
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				},
				"controls": {
					"type": "object",
					"description": "Checkbox controls rendered as part of the condition meter.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AssetConditionMeterControlField"
						}
					}
				},
				"moves": {
					"type": "object",
					"description": "Provides hints for moves that interact with this condition meter, such as suffer and recovery moves.",
					"releaseStage": "experimental",
					"properties": {
						"recover": {
							"type": "array",
							"description": "The ID(s) of recovery moves associated with this meter.",
							"items": {
								"$ref": "#/definitions/MoveIdWildcard",
								"examples": [
									"classic/moves/adventure/heal",
									"classic/moves/adventure/make_camp",
									"classic/moves/relationship/sojourn",
									"starforged/moves/recover/heal",
									"starforged/moves/recover/repair"
								]
							}
						},
						"suffer": {
							"type": "array",
							"description": "The ID(s) of suffer moves associated with the condition meter. If the suffer move makes an action roll, this condition meter value should be made available as a roll option.",
							"items": {
								"$ref": "#/definitions/MoveIdWildcard",
								"examples": [
									"classic/moves/suffer/companion_endure_harm",
									"starforged/moves/suffer/companion_takes_a_hit",
									"starforged/moves/suffer/withstand_damage"
								]
							}
						}
					}
				}
			},
			"additionalProperties": false
		},
		"AssetConditionMeterControlField": {
			"title": "AssetConditionMeterControlField",
			"type": "object",
			"description": "A checkbox control field, rendered as part of an asset condition meter.",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `field_type` property as a discriminator.",
			"required": ["field_type"],
			"properties": {
				"field_type": {
					"enum": ["checkbox", "card_flip"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "checkbox",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetCheckboxField"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "card_flip",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetCardFlipField"
					}
				}
			]
		},
		"AssetConditionMeterEnhancement": {
			"title": "AssetConditionMeterEnhancement",
			"type": "object",
			"description": "Some assets provide a special condition meter of their own. The most common example is the health meters on companion assets. Asset condition meters may also include their own controls, such as the checkboxes that Starforged companion assets use to indicate they are \"out of action\".",
			"required": ["field_type", "max"],
			"properties": {
				"field_type": {
					"type": "string",
					"const": "condition_meter"
				},
				"max": {
					"type": "integer",
					"description": "The maximum value of this meter."
				}
			},
			"additionalProperties": false
		},
		"AssetControlField": {
			"title": "AssetControlField",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `field_type` property as a discriminator.",
			"required": ["field_type"],
			"properties": {
				"field_type": {
					"enum": [
						"condition_meter",
						"select_enhancement",
						"checkbox",
						"card_flip"
					]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "condition_meter",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetConditionMeter"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "select_enhancement",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/SelectEnhancementField"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "checkbox",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetCheckboxField"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "card_flip",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetCardFlipField"
					}
				}
			]
		},
		"AssetControlFieldEnhancement": {
			"title": "AssetControlFieldEnhancement",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `field_type` property as a discriminator.",
			"required": ["field_type"],
			"properties": {
				"field_type": {
					"enum": ["condition_meter"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "condition_meter",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/AssetConditionMeterEnhancement"
					}
				}
			]
		},
		"AssetEnhancement": {
			"title": "AssetEnhancement",
			"type": "object",
			"description": "Describes enhancements made to this asset in a partial asset object. The changes should be applied recursively; only the values that are specified should be changed.",
			"properties": {
				"count_as_impact": {
					"type": "boolean",
					"description": "If `true`, this asset counts as an impact (Starforged) or a debility (classic Ironsworn)."
				},
				"shared": {
					"type": "boolean",
					"description": "Most assets only benefit to their owner, but certain assets (like Starforged's module and command vehicle assets) are shared amongst the player's allies, too."
				},
				"attachments": {
					"$ref": "#/definitions/AssetAttachment"
				},
				"controls": {
					"type": "object",
					"description": "Controls are condition meters, clocks, counters, and other asset input fields whose values are expected to change throughout the life of the asset.",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AssetControlFieldEnhancement"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				}
			},
			"additionalProperties": false
		},
		"AssetOptionField": {
			"title": "AssetOptionField",
			"type": "object",
			"description": "Options are asset input fields which are set once, usually when the character takes the asset. The most common example is the \"name\" field on companion assets. A more complex example is the choice of a god's stat for the Devotant asset.",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `field_type` property as a discriminator.",
			"required": ["field_type"],
			"properties": {
				"field_type": {
					"enum": ["select_value", "select_enhancement", "text"]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "select_value",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/SelectValueField"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "select_enhancement",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/SelectEnhancementField"
					}
				},
				{
					"if": {
						"properties": {
							"field_type": {
								"const": "text",
								"type": "string"
							}
						}
					},
					"then": {
						"$ref": "#/definitions/TextField"
					}
				}
			]
		},
		"ClockField": {
			"title": "ClockField",
			"type": "object",
			"description": "A clock with 4 or more segments.",
			"remarks": "Semantics are similar to HTML `<input type=\"number\">`, but rendered as a clock (a circle with equally sized wedges).",
			"required": ["label", "field_type", "max"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "clock"
				},
				"rollable": {
					"type": "boolean",
					"default": false,
					"const": false
				},
				"min": {
					"type": "integer",
					"description": "The minimum number of filled clock segments. This is always 0.",
					"default": 0,
					"const": 0
				},
				"max": {
					"title": "ClockSize",
					"type": "integer",
					"description": "The size of the clock -- in other words, the maximum number of filled clock segments. Standard clocks have 4, 6, 8, or 10 segments.",
					"multipleOf": 2,
					"minimum": 2
				},
				"value": {
					"type": "integer",
					"description": "The current value of this input.",
					"default": 0
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				}
			},
			"additionalProperties": false
		},
		"ConditionMeterField": {
			"title": "ConditionMeterField",
			"type": "object",
			"description": "A meter with an integer value, bounded by a minimum and maximum.",
			"required": ["label", "field_type", "max"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "condition_meter"
				},
				"rollable": {
					"type": "boolean",
					"description": "Is this meter's `value` usable as a stat in an action roll?",
					"default": true,
					"const": true
				},
				"min": {
					"type": "integer",
					"description": "The minimum value of this meter.",
					"default": 0
				},
				"max": {
					"type": "integer",
					"description": "The maximum value of this meter."
				},
				"value": {
					"type": "integer",
					"description": "The current value of this meter.",
					"default": 0
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				}
			},
			"additionalProperties": false
		},
		"CounterField": {
			"title": "CounterField",
			"type": "object",
			"description": "A basic counter representing a non-rollable integer value. They usually start at 0, and may or may not have a maximum.",
			"remarks": "Semantics are similar to `<input type=\"number\" step=\"1\">`",
			"required": ["label", "field_type"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "counter"
				},
				"rollable": {
					"type": "boolean",
					"default": false,
					"const": false
				},
				"min": {
					"type": "integer",
					"description": "The (inclusive) minimum value.",
					"default": 0
				},
				"max": {
					"description": "The (inclusive) maximum value, or `null` if there's no maximum.",
					"default": null,
					"anyOf": [
						{
							"type": "integer"
						},
						{
							"type": "null"
						}
					]
				},
				"value": {
					"type": "integer",
					"description": "The current value of this input.",
					"default": 0
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				}
			},
			"additionalProperties": false
		},
		"SelectEnhancementField": {
			"title": "SelectEnhancementField",
			"type": "object",
			"description": "Select from player and/or asset enhancements. Use it to describe modal abilities. For examples, see Ironclad (classic Ironsworn) and Windbinder (Sundered Isles).",
			"remarks": "Semantics are similar to the HTML `<select>` element",
			"required": ["label", "field_type", "choices"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "select_enhancement"
				},
				"choices": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"type": "object",
							"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `choice_type` property as a discriminator.",
							"required": ["choice_type"],
							"properties": {
								"choice_type": {
									"enum": ["choice", "choice_group"]
								}
							},
							"additionalProperties": true,
							"allOf": [
								{
									"if": {
										"properties": {
											"choice_type": {
												"const": "choice",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/SelectEnhancementFieldChoice"
									}
								},
								{
									"if": {
										"properties": {
											"choice_type": {
												"const": "choice_group",
												"type": "string"
											}
										}
									},
									"then": {
										"$ref": "#/definitions/SelectEnhancementFieldChoiceGroup"
									}
								}
							]
						}
					}
				},
				"value": {
					"description": "The current value of this input.",
					"default": null,
					"anyOf": [
						{
							"$ref": "#/definitions/DictKey",
							"description": "The key of the currently selected choice from the `choices` property, or `null` if none is selected.",
							"default": null
						},
						{
							"type": "null"
						}
					]
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				}
			},
			"additionalProperties": false
		},
		"SelectEnhancementFieldChoice": {
			"title": "SelectEnhancementFieldChoice",
			"type": "object",
			"description": "Represents an option in a list of choices.",
			"remarks": "Semantics are similar to the HTML `<option>` element.",
			"required": ["label", "choice_type"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"choice_type": {
					"type": "string",
					"const": "choice"
				},
				"enhance_asset": {
					"$ref": "#/definitions/AssetEnhancement"
				},
				"enhance_moves": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/MoveEnhancement"
					}
				}
			},
			"additionalProperties": false
		},
		"SelectEnhancementFieldChoiceGroup": {
			"title": "SelectEnhancementFieldChoiceGroup",
			"type": "object",
			"description": "Represents a grouping of options in a list of choices.",
			"remarks": "Semantics are similar to the HTML `<optgroup>` element.",
			"required": ["name", "choice_type", "choices"],
			"properties": {
				"name": {
					"$ref": "#/definitions/InputLabel",
					"description": "A label for this option group."
				},
				"choice_type": {
					"type": "string",
					"const": "choice_group"
				},
				"choices": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/SelectEnhancementFieldChoice"
						}
					}
				}
			},
			"additionalProperties": false
		},
		"SelectValueField": {
			"title": "SelectValueField",
			"type": "object",
			"description": "Represents a list of mutually exclusive choices.",
			"remarks": "Semantics are similar to the HTML `<select>` element",
			"required": ["label", "field_type", "choices"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "select_value"
				},
				"choices": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/SelectValueFieldChoice"
						}
					}
				},
				"value": {
					"description": "The current value of this input.",
					"default": null,
					"anyOf": [
						{
							"$ref": "#/definitions/DictKey",
							"description": "The key of the currently selected choice from the `choices` property, or `null` if none is selected.",
							"default": null
						},
						{
							"type": "null"
						}
					]
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				}
			},
			"additionalProperties": false
		},
		"SelectValueFieldChoice": {
			"title": "SelectValueFieldChoice",
			"type": "object",
			"remarks": "Deserialize as a discriminated union/polymorphic object type, using the `using` property as a discriminator.",
			"required": ["using"],
			"properties": {
				"using": {
					"enum": [
						"stat",
						"condition_meter",
						"asset_control",
						"asset_option",
						"attached_asset_control",
						"attached_asset_option",
						"custom"
					]
				}
			},
			"additionalProperties": true,
			"allOf": [
				{
					"if": {
						"properties": {
							"using": {
								"const": "stat",
								"type": "string"
							}
						}
					},
					"then": {
						"description": "Represents an option in a list of choices.",
						"remarks": "Semantics are similar to the HTML `<option>` element.",
						"type": "object",
						"properties": {
							"label": {
								"$ref": "#/definitions/InputLabel"
							},
							"choice_type": {
								"const": "choice",
								"type": "string"
							},
							"stat": {
								"$ref": "#/definitions/StatKey"
							},
							"using": {
								"description": "A reference to the value of a standard player character stat.",
								"const": "stat",
								"type": "string"
							}
						},
						"required": ["label", "choice_type", "stat", "using"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "condition_meter",
								"type": "string"
							}
						}
					},
					"then": {
						"description": "Represents an option in a list of choices.",
						"remarks": "Semantics are similar to the HTML `<option>` element.",
						"type": "object",
						"properties": {
							"label": {
								"$ref": "#/definitions/InputLabel"
							},
							"choice_type": {
								"const": "choice",
								"type": "string"
							},
							"condition_meter": {
								"$ref": "#/definitions/ConditionMeterKey"
							},
							"using": {
								"description": "A reference to the value of a standard player condition meter.",
								"const": "condition_meter",
								"type": "string"
							}
						},
						"required": ["label", "choice_type", "condition_meter", "using"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "asset_control",
								"type": "string"
							}
						}
					},
					"then": {
						"description": "Represents an option in a list of choices.",
						"remarks": "Semantics are similar to the HTML `<option>` element.",
						"type": "object",
						"properties": {
							"label": {
								"$ref": "#/definitions/InputLabel"
							},
							"choice_type": {
								"const": "choice",
								"type": "string"
							},
							"assets": {
								"default": null,
								"description": "Asset IDs (which may be wildcarded) that may provide the control field. For asset ability enhancements, `null` is used to represent the asset's own control fields.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/AssetIdWildcard"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"control": {
								"description": "The dictionary key of the asset control field.",
								"examples": ["health", "integrity"],
								"$ref": "#/definitions/DictKey"
							},
							"using": {
								"description": "A reference to the value of an asset control.",
								"const": "asset_control",
								"type": "string"
							}
						},
						"required": ["label", "choice_type", "control", "using"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "asset_option",
								"type": "string"
							}
						}
					},
					"then": {
						"description": "Represents an option in a list of choices.",
						"remarks": "Semantics are similar to the HTML `<option>` element.",
						"type": "object",
						"properties": {
							"label": {
								"$ref": "#/definitions/InputLabel"
							},
							"choice_type": {
								"const": "choice",
								"type": "string"
							},
							"assets": {
								"default": null,
								"description": "Asset IDs (which may be wildcarded) that may provide the option field. For asset ability enhancements, `null` is used to represent the asset's own option fields.",
								"anyOf": [
									{
										"type": "array",
										"items": {
											"$ref": "#/definitions/AssetIdWildcard"
										}
									},
									{
										"type": "null"
									}
								]
							},
							"option": {
								"description": "The dictionary key of the asset option field.",
								"$ref": "#/definitions/DictKey"
							},
							"using": {
								"description": "A reference to the value of an asset option.",
								"const": "asset_option",
								"type": "string"
							}
						},
						"required": ["label", "choice_type", "option", "using"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "attached_asset_control",
								"type": "string"
							}
						}
					},
					"then": {
						"description": "Represents an option in a list of choices.",
						"remarks": "Semantics are similar to the HTML `<option>` element.",
						"type": "object",
						"properties": {
							"label": {
								"$ref": "#/definitions/InputLabel"
							},
							"choice_type": {
								"const": "choice",
								"type": "string"
							},
							"control": {
								"description": "The dictionary key of the asset control field.",
								"examples": ["health", "integrity"],
								"$ref": "#/definitions/DictKey"
							},
							"using": {
								"description": "A reference to the value of an attached asset control. For example, a Module asset could use this to roll using the `integrity` control of an attached Vehicle.",
								"const": "attached_asset_control",
								"type": "string"
							}
						},
						"required": ["label", "choice_type", "control", "using"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "attached_asset_option",
								"type": "string"
							}
						}
					},
					"then": {
						"description": "Represents an option in a list of choices.",
						"remarks": "Semantics are similar to the HTML `<option>` element.",
						"type": "object",
						"properties": {
							"label": {
								"$ref": "#/definitions/InputLabel"
							},
							"choice_type": {
								"const": "choice",
								"type": "string"
							},
							"option": {
								"description": "The dictionary key of the asset option field.",
								"$ref": "#/definitions/DictKey"
							},
							"using": {
								"description": "A reference to the value of an attached asset option.",
								"const": "attached_asset_option",
								"type": "string"
							}
						},
						"required": ["label", "choice_type", "option", "using"],
						"additionalProperties": false
					}
				},
				{
					"if": {
						"properties": {
							"using": {
								"const": "custom",
								"type": "string"
							}
						}
					},
					"then": {
						"description": "Represents an option in a list of choices.",
						"remarks": "Semantics are similar to the HTML `<option>` element.",
						"type": "object",
						"properties": {
							"label": {
								"$ref": "#/definitions/InputLabel"
							},
							"choice_type": {
								"const": "choice",
								"type": "string"
							},
							"value": {
								"type": "integer"
							},
							"using": {
								"description": "An arbitrary static integer value with a label.",
								"const": "custom",
								"type": "string"
							}
						},
						"required": ["label", "choice_type", "value", "using"],
						"additionalProperties": false
					}
				}
			]
		},
		"TextField": {
			"title": "TextField",
			"type": "object",
			"description": "Represents an input that accepts plain text.",
			"remarks": "Semantics are similar to the HTML `<input type=\"text\">` element.",
			"required": ["label", "field_type"],
			"properties": {
				"label": {
					"$ref": "#/definitions/InputLabel"
				},
				"field_type": {
					"type": "string",
					"const": "text"
				},
				"value": {
					"description": "The content of this text input, or `null` if it's empty",
					"default": null,
					"anyOf": [
						{
							"type": "string"
						},
						{
							"type": "null"
						}
					]
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An icon associated with this input."
				}
			},
			"additionalProperties": false
		},
		"Truth": {
			"title": "Truth",
			"type": "object",
			"description": "A setting truth category.",
			"required": ["name", "options", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/TruthId",
					"description": "The unique Datasworn ID for this item."
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl"
				},
				"dice": {
					"$ref": "#/definitions/DiceExpression",
					"default": "1d100"
				},
				"options": {
					"type": "array",
					"rollable": true,
					"items": {
						"$ref": "#/definitions/TruthOption"
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString"
				},
				"your_character": {
					"$ref": "#/definitions/MarkdownString"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"TruthOption": {
			"title": "TruthOption",
			"type": "object",
			"required": ["description", "quest_starter"],
			"properties": {
				"min": {
					"type": "integer"
				},
				"max": {
					"type": "integer"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString"
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"quest_starter": {
					"$ref": "#/definitions/MarkdownString"
				},
				"table": {
					"type": "object",
					"description": "Represents a basic rollable oracle table with one roll column and one text result column.",
					"required": ["oracle_type", "dice", "rows"],
					"properties": {
						"oracle_type": {
							"type": "string",
							"const": "table_text"
						},
						"dice": {
							"$ref": "#/definitions/DiceExpression",
							"description": "The roll used to select a result on this oracle.",
							"default": "1d100"
						},
						"rows": {
							"type": "array",
							"description": "An array of objects, each representing a single row of the table.",
							"rollable": true,
							"items": {
								"$ref": "#/definitions/OracleTableRowText"
							}
						}
					}
				}
			},
			"additionalProperties": false
		},
		"AtlasCollection": {
			"title": "AtlasCollection",
			"type": "object",
			"required": ["type", "name", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/AtlasCollectionId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "atlas"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"replaces": {
					"$ref": "#/definitions/AtlasCollectionId",
					"description": "This collection replaces the identified collection. References to the replaced collection can be considered equivalent to this collection."
				},
				"enhances": {
					"$ref": "#/definitions/AtlasCollectionId",
					"description": "This collection's content enhances the identified collection, rather than being a standalone collection of its own."
				},
				"color": {
					"$ref": "#/definitions/CssColor",
					"description": "A thematic color associated with this collection."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl",
					"description": "An SVG icon associated with this collection."
				},
				"images": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/WebpImageUrl",
						"description": "Extra images associated with this collection."
					}
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A brief summary of this collection, no more than a few sentences in length. This is intended for use in application tooltips and similar sorts of hints. Longer text should use the \"description\" key instead."
				},
				"description": {
					"$ref": "#/definitions/MarkdownString",
					"description": "A longer description of this collection, which might include multiple paragraphs. If it's only a couple sentences, use the `summary` key instead."
				},
				"contents": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AtlasEntry"
						}
					}
				},
				"collections": {
					"type": "object",
					"remarks": "Deserialize as a dictionary object.",
					"patternProperties": {
						"^([a-z][a-z_]*)$": {
							"$ref": "#/definitions/AtlasCollection"
						}
					}
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": false
		},
		"AtlasEntry": {
			"title": "AtlasEntry",
			"type": "object",
			"description": "An atlas entry, like the Ironlands region entries found in classic Ironsworn.",
			"required": ["type", "name", "features", "description", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/AtlasEntryId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "atlas_entry"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString"
				},
				"features": {
					"type": "array",
					"items": {
						"$ref": "#/definitions/MarkdownString"
					}
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"quest_starter": {
					"$ref": "#/definitions/MarkdownString"
				},
				"your_truth": {
					"$ref": "#/definitions/MarkdownString"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"ConditionMeterKey": {
			"$ref": "#/definitions/DictKey",
			"title": "ConditionMeterKey",
			"description": "A basic, rollable player character resource specified by the ruleset.",
			"examples": ["health", "spirit", "supply"]
		},
		"StatKey": {
			"$ref": "#/definitions/DictKey",
			"title": "StatKey",
			"description": "A basic player character stat.",
			"examples": ["edge", "heart", "iron", "shadow", "wits"]
		},
		"Rarity": {
			"title": "Rarity",
			"type": "object",
			"description": "A rarity, as described in Ironsworn: Delve.",
			"required": ["type", "name", "asset", "description", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/RarityId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "rarity"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"xp_cost": {
					"type": "integer",
					"description": "From Ironsworn: Delve, p. 174:\n\n      Some assets will bring a rarity into play more often than others, so the experience point cost for a rarity will vary by the linked asset. These costs are shown in the tables on page 175.\n\n      If you are playing solo, and aren’t concerned with the relative balance of rarity abilities, you can ignore these variable costs. If so, spend 3 experience points to purchase a rarity.",
					"default": 3,
					"minimum": 3,
					"maximum": 5
				},
				"asset": {
					"$ref": "#/definitions/AssetId",
					"description": "The asset augmented by this rarity."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl"
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"DelveSite": {
			"title": "DelveSite",
			"type": "object",
			"description": "A delve site with a theme, domain, and denizens.",
			"required": [
				"type",
				"name",
				"theme",
				"domain",
				"rank",
				"description",
				"denizens",
				"_source"
			],
			"properties": {
				"_id": {
					"$ref": "#/definitions/DelveSiteId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "delve_site"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"region": {
					"$ref": "#/definitions/AtlasEntryId",
					"description": "The ID of an atlas entry representing the region in which this delve site is located."
				},
				"theme": {
					"$ref": "#/definitions/DelveSiteThemeId",
					"description": "The ID of the site's DelveSiteTheme card."
				},
				"domain": {
					"$ref": "#/definitions/DelveSiteDomainId",
					"description": "The ID of the site's DelveSiteDomain card."
				},
				"extra_card": {
					"description": "An additional theme or domain card ID, for use with optional rules in Ironsworn: Delve.",
					"anyOf": [
						{
							"$ref": "#/definitions/DelveSiteThemeId"
						},
						{
							"$ref": "#/definitions/DelveSiteDomainId"
						}
					]
				},
				"rank": {
					"$ref": "#/definitions/ChallengeRank"
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl"
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"denizens": {
					"description": "Represents the delve site's denizen matrix as an array of objects.",
					"rollable": "1d100",
					"allOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/DelveSiteDenizen"
							}
						},
						{
							"type": "array",
							"items": [
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 1
										},
										"max": {
											"type": "number",
											"const": 27
										},
										"frequency": {
											"type": "string",
											"const": "very_common"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 28
										},
										"max": {
											"type": "number",
											"const": 41
										},
										"frequency": {
											"type": "string",
											"const": "common"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 42
										},
										"max": {
											"type": "number",
											"const": 55
										},
										"frequency": {
											"type": "string",
											"const": "common"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 56
										},
										"max": {
											"type": "number",
											"const": 69
										},
										"frequency": {
											"type": "string",
											"const": "common"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 70
										},
										"max": {
											"type": "number",
											"const": 75
										},
										"frequency": {
											"type": "string",
											"const": "uncommon"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 76
										},
										"max": {
											"type": "number",
											"const": 81
										},
										"frequency": {
											"type": "string",
											"const": "uncommon"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 82
										},
										"max": {
											"type": "number",
											"const": 87
										},
										"frequency": {
											"type": "string",
											"const": "uncommon"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 88
										},
										"max": {
											"type": "number",
											"const": 93
										},
										"frequency": {
											"type": "string",
											"const": "uncommon"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 94
										},
										"max": {
											"type": "number",
											"const": 95
										},
										"frequency": {
											"type": "string",
											"const": "rare"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 96
										},
										"max": {
											"type": "number",
											"const": 97
										},
										"frequency": {
											"type": "string",
											"const": "rare"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 98
										},
										"max": {
											"type": "number",
											"const": 99
										},
										"frequency": {
											"type": "string",
											"const": "rare"
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max", "frequency"],
									"properties": {
										"min": {
											"type": "number",
											"const": 100
										},
										"max": {
											"type": "number",
											"const": 100
										},
										"frequency": {
											"type": "string",
											"const": "unforeseen"
										}
									},
									"additionalProperties": true
								}
							],
							"minItems": 12,
							"maxItems": 12,
							"additionalItems": false
						}
					]
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"DelveSiteDenizen": {
			"title": "DelveSiteDenizen",
			"type": "object",
			"description": "Represents an entry in a site denizen matrix. Denizen matrices are described in Ironsworn: Delve.",
			"required": ["min", "max", "frequency"],
			"properties": {
				"name": {
					"$ref": "#/definitions/Label",
					"description": "A name for the denizen, if it's different than the `name` property of the NPC."
				},
				"npc": {
					"$ref": "#/definitions/NpcId",
					"description": "The ID of the relevant NPC entry, if one is specified."
				},
				"min": {
					"type": "integer",
					"description": "Low end of the dice range for this denizen."
				},
				"max": {
					"type": "integer",
					"description": "High end of the dice range for this denizen."
				},
				"frequency": {
					"$ref": "#/definitions/DelveSiteDenizenFrequency"
				}
			},
			"additionalProperties": false
		},
		"DelveSiteDenizenFrequency": {
			"title": "DelveSiteDenizenFrequency",
			"enum": ["very_common", "common", "uncommon", "rare", "unforeseen"]
		},
		"DelveSiteDomain": {
			"title": "DelveSiteDomain",
			"type": "object",
			"description": "A delve site Domain card.",
			"required": ["type", "name", "summary", "features", "dangers", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/DelveSiteDomainId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "delve_site_domain"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"name_oracle": {
					"$ref": "#/definitions/OracleRollableId",
					"description": "An oracle table ID containing place name elements. For examples, see oracle ID `delve/oracles/site_name/place/barrow`, and its siblings in oracle collection ID `delve/collections/oracles/site_name/place`. These oracles are used by the site name oracle from Ironsworn: Delve (ID: delve/oracles/site_name/format) to create random names for delve sites."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString",
					"deprecated": true
				},
				"features": {
					"allOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/OracleTableRowText"
							}
						},
						{
							"type": "array",
							"items": [
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 21
										},
										"max": {
											"type": "number",
											"const": 43
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 44
										},
										"max": {
											"type": "number",
											"const": 56
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 57
										},
										"max": {
											"type": "number",
											"const": 64
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 65
										},
										"max": {
											"type": "number",
											"const": 68
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 69
										},
										"max": {
											"type": "number",
											"const": 72
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 73
										},
										"max": {
											"type": "number",
											"const": 76
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 77
										},
										"max": {
											"type": "number",
											"const": 80
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 81
										},
										"max": {
											"type": "number",
											"const": 84
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 85
										},
										"max": {
											"type": "number",
											"const": 88
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 89
										},
										"max": {
											"type": "number",
											"const": 98
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 99
										},
										"max": {
											"type": "number",
											"const": 99
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 100
										},
										"max": {
											"type": "number",
											"const": 100
										}
									},
									"additionalProperties": true
								}
							],
							"minItems": 12,
							"maxItems": 12,
							"additionalItems": false
						}
					]
				},
				"dangers": {
					"allOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/OracleTableRowText"
							}
						},
						{
							"type": "array",
							"items": [
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 31
										},
										"max": {
											"type": "number",
											"const": 33
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 34
										},
										"max": {
											"type": "number",
											"const": 36
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 37
										},
										"max": {
											"type": "number",
											"const": 39
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 40
										},
										"max": {
											"type": "number",
											"const": 42
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 43
										},
										"max": {
											"type": "number",
											"const": 45
										}
									},
									"additionalProperties": true
								}
							],
							"minItems": 5,
							"maxItems": 5,
							"additionalItems": false
						}
					]
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		},
		"DelveSiteTheme": {
			"title": "DelveSiteTheme",
			"type": "object",
			"description": "A delve site theme card.",
			"required": ["type", "name", "summary", "features", "dangers", "_source"],
			"properties": {
				"_id": {
					"$ref": "#/definitions/DelveSiteThemeId",
					"description": "The unique Datasworn ID for this item."
				},
				"type": {
					"type": "string",
					"const": "delve_site_theme"
				},
				"name": {
					"$ref": "#/definitions/Label",
					"description": "The primary name/label for this item."
				},
				"canonical_name": {
					"$ref": "#/definitions/Label",
					"description": "The name of this item as it appears on the page in the book, if it's different from `name`."
				},
				"icon": {
					"$ref": "#/definitions/SvgImageUrl"
				},
				"summary": {
					"$ref": "#/definitions/MarkdownString"
				},
				"features": {
					"allOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/OracleTableRowText"
							}
						},
						{
							"type": "array",
							"items": [
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 1
										},
										"max": {
											"type": "number",
											"const": 4
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 5
										},
										"max": {
											"type": "number",
											"const": 8
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 9
										},
										"max": {
											"type": "number",
											"const": 12
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 13
										},
										"max": {
											"type": "number",
											"const": 16
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 17
										},
										"max": {
											"type": "number",
											"const": 20
										}
									},
									"additionalProperties": true
								}
							],
							"minItems": 5,
							"maxItems": 5,
							"additionalItems": false
						}
					]
				},
				"dangers": {
					"allOf": [
						{
							"type": "array",
							"items": {
								"$ref": "#/definitions/OracleTableRowText"
							}
						},
						{
							"type": "array",
							"items": [
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 1
										},
										"max": {
											"type": "number",
											"const": 5
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 6
										},
										"max": {
											"type": "number",
											"const": 10
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 11
										},
										"max": {
											"type": "number",
											"const": 12
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 13
										},
										"max": {
											"type": "number",
											"const": 14
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 15
										},
										"max": {
											"type": "number",
											"const": 16
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 17
										},
										"max": {
											"type": "number",
											"const": 18
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 19
										},
										"max": {
											"type": "number",
											"const": 20
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 21
										},
										"max": {
											"type": "number",
											"const": 22
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 23
										},
										"max": {
											"type": "number",
											"const": 24
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 25
										},
										"max": {
											"type": "number",
											"const": 26
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 27
										},
										"max": {
											"type": "number",
											"const": 28
										}
									},
									"additionalProperties": true
								},
								{
									"type": "object",
									"required": ["min", "max"],
									"properties": {
										"min": {
											"type": "number",
											"const": 29
										},
										"max": {
											"type": "number",
											"const": 30
										}
									},
									"additionalProperties": true
								}
							],
							"minItems": 12,
							"maxItems": 12,
							"additionalItems": false
						}
					]
				},
				"description": {
					"$ref": "#/definitions/MarkdownString"
				},
				"suggestions": {
					"$ref": "#/definitions/Suggestions"
				},
				"tags": {
					"type": "object",
					"releaseStage": "experimental",
					"patternProperties": {
						"^([a-z0-9_]{3,})$": {
							"type": "object",
							"remarks": "Deserialize as a dictionary object.",
							"patternProperties": {
								"^([a-z][a-z_]*)$": {
									"$ref": "#/definitions/Tag"
								}
							}
						}
					}
				},
				"_comment": {
					"type": "string",
					"description": "Any implementation hints or other developer-facing comments on this object. These should be omitted when presenting the object for gameplay."
				},
				"_source": {
					"$ref": "#/definitions/SourceInfo",
					"description": "Attribution for the original source (such as a book or website) of this item, including the author and licensing information."
				}
			},
			"additionalProperties": true
		}
	}
}
