From 9d323e7d94782d32526254eee04cc96a6b8005cd Mon Sep 17 00:00:00 2001 From: homer Date: Sat, 24 Oct 2026 14:30:51 +0200 Subject: [PATCH] =?UTF-8?q?Ajoute=20le=20joueur=20qui=20a=20la=20main=20et?= =?UTF-8?q?=20les=20ic=C3=B4nes=20de=20cat=C3=A9gories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - champ starter des modèles d'Azul (jeton premier joueur), d'Harmonies (main fixe), d'Odin (joueur suivant) et des Chouineurs (meilleur total) ; - documente les icônes de catégories et du joueur qui a la main dans assets/, et les créations originales (« original »: true, sans source) ; - schémas régénérés. Co-Authored-By: Claude Opus 5.5 --- CONTRIBUTING.md | 42 ++++++++++++++++++++++------ games/230802-azul/scoring.json | 5 ++++ games/406854-odin/scoring.json | 3 ++ games/414317-harmonies/scoring.json | 3 ++ games/453781-chouineurs/scoring.json | 3 ++ schemas/assets.schema.json | 14 ++++++++-- schemas/scoring.schema.json | 34 ++++++++++++++++++++++ 7 files changed, 93 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9a17956..b478fe0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,9 +101,18 @@ La fiche de règles d'une extension (`rules.fr.json`, schéma ## Ajouter des images -Par défaut, l'app affiche la miniature BoardGameGeek du jeu. Vous pouvez -fournir un **logo** (carré) et une **bannière** (format large, environ 3:1), -**uniquement si leurs droits le permettent** : +Par défaut, l'app affiche la miniature BoardGameGeek du jeu et des symboles +génériques. Vous pouvez fournir vos propres images, **uniquement si leurs +droits le permettent** : + +| Rôle (`role`) | Image | Format conseillé | +|---|---|---| +| `logo` | remplace la miniature du jeu | carré, 256 × 256 | +| `banner` | bannière en haut de la fiche | large, environ 3:1 | +| `category-icon` | icône d'une catégorie de score ; `category` donne son identifiant dans `scoring.json` (ex : `arbres`) | carré, 96 × 96, fond transparent (PNG ou WebP) | +| `starter-icon` | pastille du joueur qui a la main (ex : le jeton premier joueur d'Azul) ; le modèle doit avoir un champ `starter` | carré, 96 × 96, fond transparent | + +Une image par rôle, et une icône par catégorie. Licences acceptées : | Licence (`license`) | Quand l'utiliser | |---|---| @@ -115,6 +124,11 @@ fournir un **logo** (carré) et une **bannière** (format large, environ 3:1), Une image trouvée sur internet, une photo de boîte ou un visuel de l'éditeur **sans licence libre ni autorisation écrite** n'a pas sa place ici. +**Votre propre création** (dessinée par vous, publiée ici pour la première +fois) : mettez `"original": true` à la place de `source`, avec une licence +libre et votre nom dans `author`. En la publiant ici, vous la placez sous +cette licence. + ``` games/230802-azul/ assets/ @@ -134,11 +148,22 @@ games/230802-azul/ "license": "CC-BY-4.0", "author": "Nom de l'auteur", "source": "https://… (page d'origine de l'image)" + }, + { + "file": "jeton.png", + "role": "starter-icon", + "license": "CC-BY-4.0", + "author": "Votre nom", + "original": true } ] } ``` +Les icônes des catégories ajoutées par une extension (ex : `murmures` pour +Crescendo) vont dans le dossier `assets/` de l'extension ; celles du jeu de +base et le jeton, dans le dossier du jeu. + Le CI vérifie que : - chaque image est déclarée dans `assets.json`, et chaque image déclarée @@ -146,12 +171,13 @@ Le CI vérifie que : - c'est vraiment une image **PNG, JPEG ou WebP** (pas de SVG) qui correspond à son extension ; - elle pèse **512 Ko au maximum** (préférez WebP) ; -- l'auteur est indiqué (sauf CC0), et le lien d'autorisation pour - `publisher-permission`. +- l'auteur est indiqué (sauf CC0), la page d'origine (sauf création + originale), et le lien d'autorisation pour `publisher-permission` ; +- chaque icône de catégorie illustre une catégorie qui existe, et le jeton + un jeu qui suit le joueur qui a la main. -L'app affiche le crédit (auteur, licence, lien vers la source) près de chaque -image. Une extension peut aussi avoir son dossier `assets/`, dans son propre -dossier. +L'app affiche le crédit (auteur, licence, lien vers la source) près du logo +et de la bannière, et regroupe celui des icônes en bas de la fiche du jeu. **À la relecture**, vérifiez la licence sur la page `source` (et l'autorisation sur `permission`) : le CI ne peut pas le faire à votre place. diff --git a/games/230802-azul/scoring.json b/games/230802-azul/scoring.json index e0f246c..3c4fe4b 100644 --- a/games/230802-azul/scoring.json +++ b/games/230802-azul/scoring.json @@ -15,6 +15,11 @@ "primary": "#1d5f96", "secondary": "#e4572e" }, + "starter": { + "rule": "chosen", + "label": "a le jeton premier joueur", + "prompt": "Qui a pris le jeton premier joueur ?" + }, "options": [ { "type": "boolean", diff --git a/games/406854-odin/scoring.json b/games/406854-odin/scoring.json index e321e2e..396a06d 100644 --- a/games/406854-odin/scoring.json +++ b/games/406854-odin/scoring.json @@ -23,6 +23,9 @@ "colors": { "primary": "#c2410c" }, + "starter": { + "rule": "next" + }, "options": [ { "type": "select", diff --git a/games/414317-harmonies/scoring.json b/games/414317-harmonies/scoring.json index 531d9e6..f4c7ece 100644 --- a/games/414317-harmonies/scoring.json +++ b/games/414317-harmonies/scoring.json @@ -18,6 +18,9 @@ "primary": "#2b4aa8", "secondary": "#f2a93b" }, + "starter": { + "rule": "fixed" + }, "options": [ { "type": "boolean", diff --git a/games/453781-chouineurs/scoring.json b/games/453781-chouineurs/scoring.json index 6284502..f706c5c 100644 --- a/games/453781-chouineurs/scoring.json +++ b/games/453781-chouineurs/scoring.json @@ -16,5 +16,8 @@ "icon": "Drama", "colors": { "primary": "#6d4a95" + }, + "starter": { + "rule": "highest" } } diff --git a/schemas/assets.schema.json b/schemas/assets.schema.json index 4304ed2..dc6086e 100644 --- a/schemas/assets.schema.json +++ b/schemas/assets.schema.json @@ -21,9 +21,15 @@ "type": "string", "enum": [ "logo", - "banner" + "banner", + "category-icon", + "starter-icon" ] }, + "category": { + "type": "string", + "pattern": "^[a-z0-9][a-z0-9_-]*$" + }, "license": { "type": "string", "enum": [ @@ -38,6 +44,9 @@ "minLength": 1, "maxLength": 120 }, + "original": { + "type": "boolean" + }, "source": { "type": "string", "format": "uri", @@ -52,8 +61,7 @@ "required": [ "file", "role", - "license", - "source" + "license" ], "additionalProperties": false }, diff --git a/schemas/scoring.schema.json b/schemas/scoring.schema.json index 2dc79c1..72e296b 100644 --- a/schemas/scoring.schema.json +++ b/schemas/scoring.schema.json @@ -251,6 +251,40 @@ }, "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 + }, "options": { "type": "array", "items": {