Ruleset
Ruleset
Section titled “Ruleset”ID: Ruleset
A ruleset of all the things that can be used in the game
{  "$schema": "https://json-schema.org/draft/2020-12/schema",  "id": "Ruleset",  "examples": [    {      "_type": "ruleset",      "_meta": {        "rulesetUrl": "https://dh-forge.com/schema.json",        "rulesetVersion": "0.2.0",        "minVersion": "0.0.1",        "dateCreated": "2025-05-30T12:00:00.000Z",        "dateUpdated": "2025-05-30T12:00:00.000Z"      },      "item/armor": {},      "item/weapon": {},      "item/thing": {},      "role/class": {},      "role/subclass": {},      "heritage/ancestry": {},      "heritage/community": {}    }  ],  "type": "object",  "properties": {    "$schema": {      "type": "string",      "format": "uri"    },    "_type": {      "const": "ruleset"    },    "_meta": {      "type": "object",      "properties": {        "rulesetVersion": {          "$ref": "#/$defs/SchemaVersion"        },        "dateCreated": {          "type": "string",          "format": "date-time",          "pattern": "^((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))T([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?(Z)$"        },        "dateUpdated": {          "type": "string",          "format": "date-time",          "pattern": "^((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))T([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?(Z)$"        },        "rulesetUrl": {          "$ref": "#/$defs/RulesetUrl"        },        "minVersion": {          "$ref": "#/$defs/SchemaVersion"        }      },      "required": [        "rulesetVersion",        "dateCreated",        "dateUpdated",        "rulesetUrl",        "minVersion"      ],      "additionalProperties": false    },    "item/armor": {      "type": "object",      "propertyNames": {        "type": "string"      },      "additionalProperties": {        "$ref": "#/$defs/Armor"      }    },    "item/thing": {      "type": "object",      "propertyNames": {        "type": "string"      },      "additionalProperties": {        "$ref": "#/$defs/Thing"      }    },    "item/weapon": {      "type": "object",      "propertyNames": {        "type": "string"      },      "additionalProperties": {        "$ref": "#/$defs/Weapon"      }    },    "role/class": {      "type": "object",      "propertyNames": {        "type": "string"      },      "additionalProperties": {        "$ref": "#/$defs/Class"      }    },    "role/subclass": {      "type": "object",      "propertyNames": {        "type": "string"      },      "additionalProperties": {        "$ref": "#/$defs/Subclass"      }    },    "heritage/ancestry": {      "type": "object",      "propertyNames": {        "type": "string"      },      "additionalProperties": {        "$ref": "#/$defs/Ancestry"      }    },    "heritage/community": {      "type": "object",      "propertyNames": {        "type": "string"      },      "additionalProperties": {        "$ref": "#/$defs/Community"      }    }  },  "required": [    "_type",    "_meta",    "item/armor",    "item/thing",    "item/weapon",    "role/class",    "role/subclass",    "heritage/ancestry",    "heritage/community"  ],  "additionalProperties": false,  "$defs": {    "SchemaVersion": {      "id": "SchemaVersion",      "title": "Schema Version",      "description": "A version number",      "examples": [        "0.0.0"      ],      "type": "string",      "pattern": "^\\d+\\.\\d+\\.\\d+$"    },    "RulesetUrl": {      "id": "RulesetUrl",      "title": "Ruleset URL",      "description": "The URL of the ruleset",      "examples": [        "https://docs.dh-forge.com/schema/0.0.0/ruleset.json",        "https://docs.dh-forge.com/schema/1.0.0/ruleset.json"      ],      "type": "string",      "format": "uri"    },    "Armor": {      "id": "Armor",      "title": "Armor",      "description": "A set of armor that can be equipped by a character",      "type": "object",      "properties": {        "_type": {          "default": "inventoryArmor",          "const": "inventoryArmor"        },        "name": {          "type": "string"        },        "description": {          "anyOf": [            {              "type": "string"            },            {              "type": "null"            }          ]        },        "baseThresholds": {          "$ref": "#/$defs/DamageThresholds"        },        "baseScore": {          "type": "integer",          "minimum": 0,          "maximum": 9007199254740991        },        "features": {          "anyOf": [            {              "type": "array",              "items": {                "type": "string"              }            },            {              "type": "null"            }          ]        }      },      "required": [        "_type",        "name",        "description",        "baseThresholds",        "baseScore",        "features"      ],      "additionalProperties": false    },    "DamageThresholds": {      "id": "DamageThresholds",      "title": "Damage Thresholds",      "description": "The damage thresholds of a character",      "type": "object",      "properties": {        "_type": {          "default": "damageThresholds",          "const": "damageThresholds"        },        "major": {          "type": "integer",          "minimum": 0,          "maximum": 100        },        "severe": {          "type": "integer",          "minimum": 0,          "maximum": 100        }      },      "required": [        "_type",        "major",        "severe"      ],      "additionalProperties": false    },    "Thing": {      "id": "Thing",      "title": "Thing",      "description": "A thing that can be added to a character's inventory",      "type": "object",      "properties": {        "_type": {          "default": "inventoryThing",          "const": "inventoryThing"        },        "name": {          "type": "string"        },        "description": {          "anyOf": [            {              "type": "string"            },            {              "type": "null"            }          ]        }      },      "required": [        "_type",        "name",        "description"      ],      "additionalProperties": false    },    "Weapon": {      "id": "Weapon",      "title": "Weapon",      "description": "A weapon that can be equipped by a character",      "type": "object",      "properties": {        "_type": {          "default": "inventoryWeapon",          "const": "inventoryWeapon"        },        "name": {          "type": "string"        },        "trait": {          "$ref": "#/$defs/TraitName"        },        "range": {          "$ref": "#/$defs/Range"        },        "damageDice": {          "$ref": "#/$defs/DiceType"        },        "damageType": {          "$ref": "#/$defs/DamageType"        },        "features": {          "anyOf": [            {              "type": "array",              "items": {                "type": "string"              }            },            {              "type": "null"            }          ]        },        "burden": {          "anyOf": [            {              "const": "One-Handed"            },            {              "const": "Two-Handed"            }          ]        }      },      "required": [        "_type",        "name",        "trait",        "range",        "damageDice",        "damageType",        "features",        "burden"      ],      "additionalProperties": false    },    "TraitName": {      "id": "TraitName",      "title": "Trait Name",      "description": "The name of a character trait",      "examples": [        "Agility",        "Strength",        "Finesse",        "Instinct",        "Presence",        "Knowledge"      ],      "anyOf": [        {          "const": "Agility"        },        {          "const": "Strength"        },        {          "const": "Finesse"        },        {          "const": "Instinct"        },        {          "const": "Presence"        },        {          "const": "Knowledge"        }      ]    },    "Range": {      "id": "Range",      "title": "Range",      "description": "The range of a weapon or ability",      "examples": [        "Melee",        "Very Close",        "Close",        "Far",        "Very Far"      ],      "anyOf": [        {          "const": "Melee"        },        {          "const": "Very Close"        },        {          "const": "Close"        },        {          "const": "Far"        },        {          "const": "Very Far"        }      ]    },    "DiceType": {      "id": "DiceType",      "title": "Dice Type",      "description": "The type of dice to roll",      "examples": [        "d4",        "d6",        "d8",        "d10",        "d12",        "d20"      ],      "anyOf": [        {          "const": "d4"        },        {          "const": "d6"        },        {          "const": "d8"        },        {          "const": "d10"        },        {          "const": "d12"        },        {          "const": "d20"        }      ]    },    "DamageType": {      "id": "DamageType",      "title": "Damage Type",      "description": "The type of damage a weapon or ability deals",      "examples": [        "Physical",        "Magical"      ],      "anyOf": [        {          "const": "Physical"        },        {          "const": "Magical"        }      ]    },    "Class": {      "id": "Class",      "title": "Class",      "description": "A class of a character",      "type": "object",      "properties": {        "_type": {          "const": "class"        },        "name": {          "type": "string"        },        "domain": {          "$ref": "#/$defs/ReferenceDomain"        },        "initialEvasion": {          "type": "integer",          "minimum": 0,          "maximum": 100        },        "initialHitPoints": {          "type": "integer",          "minimum": 0,          "maximum": 9007199254740991        },        "initialInventory": {          "type": "array",          "items": {            "anyOf": [              {                "$ref": "#/$defs/Thing"              },              {                "$ref": "#/$defs/Weapon"              },              {                "$ref": "#/$defs/Armor"              }            ]          }        },        "features": {          "type": "array",          "items": {            "type": "object",            "properties": {              "name": {                "type": "string"              },              "description": {                "type": "string"              }            },            "required": [              "name",              "description"            ],            "additionalProperties": false          }        },        "hopeFeature": {          "type": "object",          "properties": {            "name": {              "type": "string"            },            "description": {              "type": "string"            }          },          "required": [            "name",            "description"          ],          "additionalProperties": false        },        "subclasses": {          "type": "array",          "items": {            "$ref": "#/$defs/ReferenceSubclass"          }        }      },      "required": [        "_type",        "name",        "domain",        "initialEvasion",        "initialHitPoints",        "initialInventory",        "features",        "hopeFeature",        "subclasses"      ],      "additionalProperties": false    },    "ReferenceDomain": {      "id": "ReferenceDomain",      "title": "Reference to a Domain",      "type": "object",      "properties": {        "_type": {          "const": "reference"        },        "_key": {          "const": "role/domain"        },        "value": {          "type": "string"        }      },      "required": [        "_type",        "_key",        "value"      ],      "additionalProperties": false    },    "ReferenceSubclass": {      "id": "ReferenceSubclass",      "title": "Reference to a Subclass",      "type": "object",      "properties": {        "_type": {          "const": "reference"        },        "_key": {          "const": "role/subclass"        },        "value": {          "type": "string"        }      },      "required": [        "_type",        "_key",        "value"      ],      "additionalProperties": false    },    "Subclass": {      "id": "Subclass",      "title": "Subclass",      "description": "A subclass of a class",      "type": "object",      "properties": {        "_type": {          "const": "subclass"        },        "name": {          "type": "string"        },        "description": {          "type": "string"        },        "spellTrait": {          "default": null,          "anyOf": [            {              "$ref": "#/$defs/TraitName"            },            {              "type": "null"            }          ]        },        "foundationFeatures": {          "type": "array",          "items": {            "$ref": "#/$defs/Feature"          }        },        "specializationFeatures": {          "type": "array",          "items": {            "$ref": "#/$defs/Feature"          }        },        "masteryFeatures": {          "type": "array",          "items": {            "$ref": "#/$defs/Feature"          }        }      },      "required": [        "_type",        "name",        "description",        "spellTrait",        "foundationFeatures",        "specializationFeatures",        "masteryFeatures"      ],      "additionalProperties": false    },    "Feature": {      "id": "Feature",      "title": "Feature",      "description": "A feature for a character to use",      "type": "object",      "properties": {        "_type": {          "const": "feature"        },        "name": {          "type": "string"        },        "description": {          "type": "string"        },        "notes": {          "default": null,          "anyOf": [            {              "type": "array",              "items": {                "type": "string"              }            },            {              "type": "null"            }          ]        },        "modifiers": {          "default": null,          "type": "null"        }      },      "required": [        "_type",        "name",        "description",        "notes",        "modifiers"      ],      "additionalProperties": false    },    "Ancestry": {      "id": "Ancestry",      "title": "Ancestry",      "description": "The ancestry of a character",      "type": "object",      "properties": {        "_type": {          "const": "ancestry"        },        "name": {          "type": "string"        },        "description": {          "type": "string"        },        "primaryFeature": {          "type": "object",          "properties": {            "name": {              "type": "string"            },            "description": {              "type": "string"            }          },          "required": [            "name",            "description"          ],          "additionalProperties": false        },        "secondaryFeature": {          "type": "object",          "properties": {            "name": {              "type": "string"            },            "description": {              "type": "string"            }          },          "required": [            "name",            "description"          ],          "additionalProperties": false        }      },      "required": [        "_type",        "name",        "primaryFeature",        "secondaryFeature"      ],      "additionalProperties": false    },    "Community": {      "id": "Community",      "title": "Community",      "description": "A community that shaped a characters backstory",      "type": "object",      "properties": {        "_type": {          "const": "community"        },        "name": {          "type": "string"        },        "description": {          "type": "string"        },        "feature": {          "type": "object",          "properties": {            "name": {              "type": "string"            },            "description": {              "type": "string"            }          },          "required": [            "name",            "description"          ],          "additionalProperties": false        }      },      "required": [        "_type",        "name",        "feature"      ],      "additionalProperties": false    }  }}