{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://salvageunion.com/schemas/chassis.schema.json","title":"chassis","description":"Mech chassis definitions","type":"array","items":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"hasArtwork":{"type":"boolean","description":"Whether this entity has artwork; the .webp URL is derived from schema + slug"},"content":{"type":"array","items":{"description":"Block of structured content for rendering (paragraph, heading, list item, etc.)","type":"object","properties":{"type":{"default":"paragraph","type":"string","enum":["paragraph","heading","list-item","label","datavalues","hint","flavor","choice"],"description":"Type of content block for rendering structured text"},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"label":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Display label for this data value"},"value":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"The data value"},"type":{"type":"string","enum":["keyword","trait","cost"],"description":"Type classification for this data value"},"unit":{"type":"string","description":"Optional unit shown after the value (e.g. damage type \"SP\")"},"perTechLevel":{"type":"number","description":"When set, this numeric value scales with the entity's effective tech level: it increases by this amount for each tech level above the first (e.g. Custom Sniper Rifle damage \"+1 SP per Tech Level after the first\")"}},"required":["label"],"additionalProperties":false,"description":"A data value with label, optional value, optional type, optional unit, and optional per-tech-level scaling"},"description":"Array of data values when type is 'datavalues'"}]},"label":{"type":"string"},"level":{"type":"integer","minimum":1,"maximum":6},"lead":{"type":"boolean"},"choiceId":{"type":"string","description":"When type is \"choice\": the id of the entity choice to render inline at this position"},"items":{"type":"array","items":{"type":"object","properties":{"type":{"default":"paragraph","type":"string","enum":["paragraph","heading","list-item","label","datavalues","hint","flavor","choice"],"description":"Type of content block for rendering structured text"},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"label":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Display label for this data value"},"value":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"The data value"},"type":{"type":"string","enum":["keyword","trait","cost"],"description":"Type classification for this data value"},"unit":{"type":"string","description":"Optional unit shown after the value (e.g. damage type \"SP\")"},"perTechLevel":{"type":"number","description":"When set, this numeric value scales with the entity's effective tech level: it increases by this amount for each tech level above the first (e.g. Custom Sniper Rifle damage \"+1 SP per Tech Level after the first\")"}},"required":["label"],"additionalProperties":false,"description":"A data value with label, optional value, optional type, optional unit, and optional per-tech-level scaling"},"description":"Array of data values when type is 'datavalues'"}]},"label":{"type":"string"},"level":{"type":"integer","minimum":1,"maximum":6}},"required":["type"],"additionalProperties":false}}},"required":["type"],"additionalProperties":false},"description":"Descriptive content blocks for this entity"},"id":{"type":"string","description":"Unique identifier for this entity"},"blackMarket":{"type":"boolean","description":"Whether this entity is only available on the black market"},"name":{"type":"string","minLength":1,"description":"Display name of this entity"},"source":{"type":"string","enum":["Salvage Union Workshop Manual","Salvage Union Starter Set","Reclamation of the Wastes","The Hive","Thatcher's Mech Base","Relics of a Time Gone By","Mech Monday","We Were Here First!","Rainmaker","False Flag"],"description":"Primary source book this entity appears in"},"page":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Page number in the primary source book"},"booklet":{"type":"string","minLength":1,"description":"Booklet code within a multi-booklet primary source (e.g. \"CR\", \"PH\", \"PC\", \"RR\", \"AP\" for the Salvage Union Starter Set). Omit for single-volume sources."},"additionalSources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["Salvage Union Workshop Manual","Salvage Union Starter Set","Reclamation of the Wastes","The Hive","Thatcher's Mech Base","Relics of a Time Gone By","Mech Monday","We Were Here First!","Rainmaker","False Flag"],"description":"Secondary source book this entity also appears in"},"booklet":{"type":"string","minLength":1,"description":"Booklet code within a multi-booklet source (e.g. \"CR\", \"PH\", \"PC\", \"RR\", \"AP\" for the Salvage Union Starter Set — Core Rulebook / Pilots Handbook / Parts Catalogue / Rules Reference / Asset Pack). Omit for single-volume sources."},"page":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Page number in the secondary source book"}},"required":["source","page"],"additionalProperties":false,"description":"A secondary source where this entity is reprinted (e.g. condensed in a Starter Set)"},"description":"Other source books where this entity is reprinted"},"structurePoints":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Structure points (mech health)"},"energyPoints":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Energy points for powering systems"},"heatCapacity":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Maximum heat before overheating"},"systemSlots":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of system slots available"},"moduleSlots":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of module slots available"},"cargoCapacity":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Cargo carrying capacity"},"techLevel":{"anyOf":[{"type":"integer","minimum":1,"maximum":6},{"type":"string","const":"B"},{"type":"string","const":"N"}],"description":"Technology level of the item or entity (integer 1-6, 'B' for Bio, or 'N' for Nanite)"},"salvageValue":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Scrap value when salvaged"},"chassisAbilities":{"type":"array","items":{"type":"string"},"description":"Array of chassis ability names that reference actions.json"},"patterns":{"type":"array","items":{"description":"A preset mech loadout defining systems and modules for a chassis","type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name of this mech pattern"},"content":{"type":"array","items":{"description":"Block of structured content for rendering (paragraph, heading, list item, etc.)","type":"object","properties":{"type":{"default":"paragraph","type":"string","enum":["paragraph","heading","list-item","label","datavalues","hint","flavor","choice"],"description":"Type of content block for rendering structured text"},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"label":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Display label for this data value"},"value":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"The data value"},"type":{"type":"string","enum":["keyword","trait","cost"],"description":"Type classification for this data value"},"unit":{"type":"string","description":"Optional unit shown after the value (e.g. damage type \"SP\")"},"perTechLevel":{"type":"number","description":"When set, this numeric value scales with the entity's effective tech level: it increases by this amount for each tech level above the first (e.g. Custom Sniper Rifle damage \"+1 SP per Tech Level after the first\")"}},"required":["label"],"additionalProperties":false,"description":"A data value with label, optional value, optional type, optional unit, and optional per-tech-level scaling"},"description":"Array of data values when type is 'datavalues'"}]},"label":{"type":"string"},"level":{"type":"integer","minimum":1,"maximum":6},"lead":{"type":"boolean"},"choiceId":{"type":"string","description":"When type is \"choice\": the id of the entity choice to render inline at this position"},"items":{"type":"array","items":{"type":"object","properties":{"type":{"default":"paragraph","type":"string","enum":["paragraph","heading","list-item","label","datavalues","hint","flavor","choice"],"description":"Type of content block for rendering structured text"},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"object","properties":{"label":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Display label for this data value"},"value":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"The data value"},"type":{"type":"string","enum":["keyword","trait","cost"],"description":"Type classification for this data value"},"unit":{"type":"string","description":"Optional unit shown after the value (e.g. damage type \"SP\")"},"perTechLevel":{"type":"number","description":"When set, this numeric value scales with the entity's effective tech level: it increases by this amount for each tech level above the first (e.g. Custom Sniper Rifle damage \"+1 SP per Tech Level after the first\")"}},"required":["label"],"additionalProperties":false,"description":"A data value with label, optional value, optional type, optional unit, and optional per-tech-level scaling"},"description":"Array of data values when type is 'datavalues'"}]},"label":{"type":"string"},"level":{"type":"integer","minimum":1,"maximum":6}},"required":["type"],"additionalProperties":false}}},"required":["type"],"additionalProperties":false},"description":"Descriptive content for this pattern"},"legalStarting":{"type":"boolean","description":"Whether this is a valid starting pattern"},"hidden":{"type":"boolean","description":"Withhold this pattern from every rendered surface while keeping the record in the dataset. A stored data tag (mirrors the legalStarting convention) — never computed from source. Set on the community-designed \"Mech Monday\" patterns, which are not rulebook-PDF-sourced."},"source":{"type":"string","enum":["Salvage Union Workshop Manual","Salvage Union Starter Set","Reclamation of the Wastes","The Hive","Thatcher's Mech Base","Relics of a Time Gone By","Mech Monday","We Were Here First!","Rainmaker","False Flag"],"description":"Source book for this pattern"},"page":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Page number in the source book"},"booklet":{"type":"string","minLength":1,"description":"Booklet code within a multi-booklet primary source (e.g. \"CR\", \"PH\", \"PC\", \"RR\", \"AP\" for the Salvage Union Starter Set). Omit for single-volume sources."},"additionalSources":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["Salvage Union Workshop Manual","Salvage Union Starter Set","Reclamation of the Wastes","The Hive","Thatcher's Mech Base","Relics of a Time Gone By","Mech Monday","We Were Here First!","Rainmaker","False Flag"],"description":"Secondary source book this entity also appears in"},"booklet":{"type":"string","minLength":1,"description":"Booklet code within a multi-booklet source (e.g. \"CR\", \"PH\", \"PC\", \"RR\", \"AP\" for the Salvage Union Starter Set — Core Rulebook / Pilots Handbook / Parts Catalogue / Rules Reference / Asset Pack). Omit for single-volume sources."},"page":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Page number in the secondary source book"}},"required":["source","page"],"additionalProperties":false,"description":"A secondary source where this entity is reprinted (e.g. condensed in a Starter Set)"},"description":"Other source books where this pattern is reprinted"},"systems":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name of the system or module"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of this system/module in the pattern"},"preselectedChoices":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","minLength":1,"description":"Name of the entry"},"description":"Preselected choices for this system or module, keyed by choice ID"}},"required":["name"],"additionalProperties":false,"description":"System or module configuration within a pattern"},"description":"Systems included in this pattern"},"modules":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name of the system or module"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of this system/module in the pattern"},"preselectedChoices":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","minLength":1,"description":"Name of the entry"},"description":"Preselected choices for this system or module, keyed by choice ID"}},"required":["name"],"additionalProperties":false,"description":"System or module configuration within a pattern"},"description":"Modules included in this pattern"},"drones":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name of this drone configuration"},"ref":{"description":"Name of the drones entry this configuration instantiates (defaults to `name`)","type":"string"},"systems":{"type":"array","items":{"type":"string"},"description":"System names installed on this drone"},"modules":{"type":"array","items":{"type":"string"},"description":"Module names installed on this drone"}},"required":["name","systems","modules"],"additionalProperties":false,"description":"Named drone configuration for patterns with multiple drones"},"description":"Named drone configurations for this pattern"}},"required":["name","systems","modules"],"additionalProperties":false},"description":"Available mech patterns for this chassis"}},"required":["id","name","source","page","structurePoints","energyPoints","heatCapacity","systemSlots","moduleSlots","cargoCapacity","techLevel","salvageValue","chassisAbilities","patterns"],"additionalProperties":false,"description":"Mech chassis definitions"}}