{ "type": "object", "properties": { "$schema": { "type": "string" }, "schemaVersion": { "type": "number", "const": 2 }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "bggId": { "type": "integer", "exclusiveMinimum": 0 }, "name": { "type": "string", "minLength": 1, "maxLength": 60 }, "description": { "type": "string", "maxLength": 400 }, "players": { "type": "object", "properties": { "min": { "type": "integer", "minimum": 1, "maximum": 30 }, "max": { "type": "integer", "minimum": 1, "maximum": 30 } }, "required": [ "min", "max" ], "additionalProperties": false }, "winner": { "type": "string", "enum": [ "highest", "lowest" ] }, "aggregation": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "sum" } }, "required": [ "type" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "sum_with_reset" }, "threshold": { "type": "number" }, "resetTo": { "type": "number" }, "oncePerPlayer": { "type": "boolean" } }, "required": [ "type", "threshold", "resetTo", "oncePerPlayer" ], "additionalProperties": false } ], "default": { "type": "sum" } }, "end": { "type": "object", "properties": { "target": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "fixed" }, "value": { "type": "number" } }, "required": [ "type", "value" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "option" }, "optionId": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "customValue": { "type": "string" }, "customOptionId": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" } }, "required": [ "type", "optionId" ], "additionalProperties": false } ] }, "targetCondition": { "type": "string", "enum": [ "reaches", "exceeds" ], "default": "reaches" }, "rounds": { "type": "integer", "exclusiveMinimum": 0 } }, "additionalProperties": false, "default": {} }, "teams": { "type": "object", "properties": { "rounds": { "type": "integer", "exclusiveMinimum": 0 }, "list": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" } }, "required": [ "id", "label", "color" ], "additionalProperties": false }, "minItems": 2 } }, "required": [ "rounds", "list" ], "additionalProperties": false }, "categories": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "icon": { "type": "string", "maxLength": 40 }, "color": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "requiresOption": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" } }, "required": [ "id", "label" ], "additionalProperties": false }, "default": [] }, "options": { "type": "array", "items": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "boolean" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "default": { "type": "boolean" }, "visibleWhen": { "type": "object", "properties": { "optionId": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "equals": { "type": [ "boolean", "number", "string" ] } }, "required": [ "optionId", "equals" ], "additionalProperties": false } }, "required": [ "type", "id", "label", "default" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "number" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "default": { "type": "number" }, "min": { "type": "number" }, "max": { "type": "number" }, "visibleWhen": { "type": "object", "properties": { "optionId": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "equals": { "type": [ "boolean", "number", "string" ] } }, "required": [ "optionId", "equals" ], "additionalProperties": false } }, "required": [ "type", "id", "label", "default" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "select" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "default": { "type": "string" }, "choices": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 } }, "required": [ "value", "label" ], "additionalProperties": false }, "minItems": 1 }, "visibleWhen": { "type": "object", "properties": { "optionId": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "equals": { "type": [ "boolean", "number", "string" ] } }, "required": [ "optionId", "equals" ], "additionalProperties": false } }, "required": [ "type", "id", "label", "default", "choices" ], "additionalProperties": false } ] }, "default": [] }, "icon": { "type": "string", "maxLength": 40 }, "colors": { "type": "object", "properties": { "primary": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "secondary": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" } }, "required": [ "primary" ], "additionalProperties": false }, "assets": { "type": "object", "properties": { "logo": { "type": "string" }, "banner": { "type": "string" }, "rules": { "type": "string" } }, "additionalProperties": false } }, "required": [ "schemaVersion", "id", "name", "players", "winner", "colors" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#", "title": "Modèle de score Skori (scoring.json)" }