Campaign
Campaign
Section titled “Campaign”ID: Campaign
A campaign configuration and homebrew ruleset
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "id": "Campaign", "examples": [ { "_type": "campaign", "_meta": { "rulesetUrl": "https://dh-forge.com/schema.json", "rulesetVersion": "0.1.0", "dateCreated": "2025-05-30T12:00:00.000Z", "dateUpdated": "2025-05-30T12:00:00.000Z" }, "homebrew": { "item/armor": {}, "item/weapon": {}, "item/thing": {}, "role/class": {}, "role/subclass": {}, "heritage/ancestry": {}, "heritage/community": {} } } ], "type": "object", "properties": { "$schema": { "type": "string", "format": "uri" }, "_type": { "const": "campaign" }, "_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" } }, "required": [ "rulesetVersion", "dateCreated", "dateUpdated", "rulesetUrl" ], "additionalProperties": false }, "homebrew": { "type": "object", "properties": { "$schema": { "type": "string", "format": "uri" }, "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" } } }, "additionalProperties": false } }, "required": [ "_type", "_meta", "homebrew" ], "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 } }}