{ "type": "object", "properties": { "$schema": { "type": "string" }, "schemaVersion": { "type": "number", "enum": [ 2, 3 ] }, "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": [] }, "starter": { "type": "object", "properties": { "rule": { "type": "string", "enum": [ "fixed", "next", "highest", "lowest", "chosen" ] }, "label": { "type": "string", "minLength": 1, "maxLength": 80, "default": "a la main" }, "prompt": { "type": "string", "minLength": 1, "maxLength": 80 }, "icon": { "type": "string", "maxLength": 40 } }, "required": [ "rule" ], "additionalProperties": false }, "formula": { "type": "object", "properties": { "nodes": { "type": "array", "items": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "input" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "kind": { "type": "string", "enum": [ "number", "boolean", "choice" ], "default": "number" }, "min": { "type": "integer" }, "max": { "type": "integer" }, "choices": { "type": "array", "items": { "type": "object", "properties": { "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "value": { "type": "integer" } }, "required": [ "label", "value" ], "additionalProperties": false }, "minItems": 1 }, "icon": { "type": "string", "maxLength": 40 }, "requiresOption": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" } }, "required": [ "type", "id", "label" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "const" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "value": { "type": "integer" } }, "required": [ "type", "id", "value" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "option" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "optionId": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" } }, "required": [ "type", "id", "optionId" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "op" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "op": { "type": "string", "enum": [ "add", "sub", "mul", "div", "min", "max" ] }, "args": { "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "minItems": 1, "maxItems": 20 } }, "required": [ "type", "id", "op", "args" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "table" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "arg": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "steps": { "type": "array", "items": { "type": "object", "properties": { "min": { "type": "integer" }, "points": { "type": "integer" } }, "required": [ "min", "points" ], "additionalProperties": false }, "minItems": 1, "maxItems": 50 } }, "required": [ "type", "id", "arg", "steps" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "compare" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "cmp": { "type": "string", "enum": [ "gt", "ge", "lt", "le", "eq", "ne" ] }, "args": { "type": "array", "minItems": 2, "maxItems": 2, "items": [ { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" } ] } }, "required": [ "type", "id", "cmp", "args" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "if" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "args": { "type": "array", "minItems": 3, "maxItems": 3, "items": [ { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" } ] } }, "required": [ "type", "id", "args" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "rank" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "arg": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "order": { "type": "string", "enum": [ "highest", "lowest" ], "default": "highest" } }, "required": [ "type", "id", "arg" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "best" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "arg": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "order": { "type": "string", "enum": [ "highest", "lowest" ], "default": "highest" }, "ties": { "type": "string", "enum": [ "all", "none" ], "default": "all" } }, "required": [ "type", "id", "arg" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "const": "output" }, "id": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "label": { "type": "string", "minLength": 1, "maxLength": 80 }, "arg": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" }, "category": { "type": "string", "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" } }, "required": [ "type", "id", "arg", "category" ], "additionalProperties": false } ] }, "minItems": 1, "maxItems": 150 }, "layout": { "type": "object", "additionalProperties": { "type": "object", "properties": { "x": { "type": "number" }, "y": { "type": "number" } }, "required": [ "x", "y" ], "additionalProperties": false }, "propertyNames": { "minLength": 1, "maxLength": 60, "pattern": "^[a-z0-9][a-z0-9_-]*$" } } }, "required": [ "nodes" ], "additionalProperties": false }, "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)" }