Files
skori_games/schemas/scoring.schema.json
T
homer 84fbaa1be8
Validation du contenu / validate (push) Successful in 35s
Ajoute Galerapagos (bggId 224272)
Modele de score a formules : case "A embarque sur le radeau" par joueur, trois
modes (partie simple, tournoi solidaires, tournoi solitaire), points calcules
selon le nombre de rescapes. Fiche de regles redigee avec nos propres mots.

Schema des modeles regenere : il connait le noeud "total" (somme sur tous les
joueurs). Ne pas publier avant le deploiement du hub et de l'app qui le
connaissent : un hub plus ancien refuserait ce modele.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-01 19:11:01 +01:00

1227 lines
33 KiB
JSON

{
"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": "total"
},
"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_-]*$"
}
},
"required": [
"type",
"id",
"arg"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "gauge"
},
"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_-]*$"
},
"start": {
"type": "integer",
"default": 0
},
"min": {
"type": "integer"
},
"max": {
"type": "integer"
},
"show": {
"type": "boolean"
},
"icon": {
"type": "string",
"maxLength": 40
}
},
"required": [
"type",
"id",
"arg"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "eliminate"
},
"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_-]*$"
}
},
"required": [
"type",
"id",
"arg"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "lastStanding"
},
"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_-]*$"
}
},
"required": [
"type",
"id",
"arg"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "victory"
},
"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_-]*$"
}
},
"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)"
}