228a1e4afb
Validation du contenu / validate (push) Successful in 43s
- Format expansions/<bggId>-<nom>/ (expansion.json, rules.fr.json), schémas expansion et expansion-rules, guide de contribution - Harmonies : choix de la face des plateaux personnels (A/B), module Esprits de la nature renommé - Crescendo (472690) : modules Sanctuaires et Murmures, faces C et D, fiche de règles résumée Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
124 lines
4.1 KiB
Markdown
124 lines
4.1 KiB
Markdown
# Contribuer
|
|
|
|
Chaque ajout ou correction passe par une demande de fusion (pull request),
|
|
relue avant publication. Le CI vérifie automatiquement les fichiers.
|
|
|
|
## Ajouter un jeu
|
|
|
|
1. Trouvez le jeu sur [BoardGameGeek](https://boardgamegeek.com) et notez son
|
|
`bggId` (le nombre dans l'adresse de sa page).
|
|
2. Créez le dossier `games/<bggId>-<nom-en-kebab-case>/`, par exemple
|
|
`games/9209-les-aventuriers-du-rail/`.
|
|
3. Ajoutez `game.json` :
|
|
|
|
```json
|
|
{
|
|
"$schema": "../../schemas/game.schema.json",
|
|
"schemaVersion": 1,
|
|
"bggId": 9209,
|
|
"name": "Les Aventuriers du Rail",
|
|
"officialRulesUrl": "https://www.daysofwonder.com/…"
|
|
}
|
|
```
|
|
|
|
4. Ajoutez `scoring.json`, le modèle de score. Son `id` vaut `bgg-<bggId>`.
|
|
Le plus simple : dans l'app, **Jeux → Ajouter un jeu**, créez le modèle,
|
|
puis **Exporter le modèle** depuis la fiche du jeu. Inspirez-vous aussi des
|
|
jeux existants (catégories, options, cible de fin de partie, équipes…).
|
|
|
|
5. Facultatif : `rules.fr.json`, la fiche de règles :
|
|
|
|
```json
|
|
{
|
|
"$schema": "../../schemas/rules.schema.json",
|
|
"schemaVersion": 1,
|
|
"locale": "fr",
|
|
"summary": "Le jeu en une ou deux phrases.",
|
|
"goal": "But du jeu.",
|
|
"setup": "Mise en place.",
|
|
"turn": "Déroulement d'un tour.",
|
|
"end": "Fin de partie.",
|
|
"scoring": "Décompte des points.",
|
|
"tips": "Conseils."
|
|
}
|
|
```
|
|
|
|
`summary`, `goal` et `turn` sont obligatoires. Texte brut, retours à la
|
|
ligne autorisés. **Rédigez avec vos propres mots** : pas de copier-coller
|
|
du livret de l'éditeur.
|
|
|
|
## Ajouter une extension
|
|
|
|
Une **variante incluse dans la boîte** du jeu (mode alternatif, règle
|
|
optionnelle) est une **option** dans `scoring.json`. Un **produit vendu à
|
|
part, avec sa propre fiche BoardGameGeek**, est une **extension** :
|
|
|
|
```
|
|
games/414317-harmonies/
|
|
expansions/
|
|
472690-crescendo/ # <bggId de l'extension>-<nom>
|
|
expansion.json # obligatoire
|
|
rules.fr.json # facultatif : seulement ce qui change
|
|
```
|
|
|
|
`expansion.json` décrit uniquement ce que l'extension **ajoute** au modèle du
|
|
jeu de base :
|
|
|
|
```json
|
|
{
|
|
"$schema": "../../../../schemas/expansion.schema.json",
|
|
"schemaVersion": 1,
|
|
"bggId": 472690,
|
|
"name": "Crescendo",
|
|
"adds": {
|
|
"options": [
|
|
{ "type": "boolean", "id": "murmures", "label": "Module Murmures", "default": true }
|
|
],
|
|
"choices": [
|
|
{ "optionId": "plateau", "values": [{ "value": "C", "label": "Face C" }] }
|
|
],
|
|
"categories": [
|
|
{ "id": "murmures", "label": "Murmures", "requiresOption": "murmures", "after": "animaux" }
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
- `options` : chaque **module** de l'extension devient une option, que les
|
|
joueurs cochent au lancement de la partie.
|
|
- `choices` : nouvelles valeurs pour un choix existant du jeu de base.
|
|
- `categories` : nouvelles catégories de score, placées après `after` (sinon
|
|
à la fin) ; `requiresOption` les lie au module correspondant.
|
|
- `players` / `end` : remplacent le nombre de joueurs ou la fin de partie.
|
|
|
|
Le CI vérifie que l'extension s'applique au jeu de base, et que toutes les
|
|
extensions d'un jeu peuvent être jouées ensemble (pas deux fois le même
|
|
identifiant, pas deux extensions qui changent la même règle).
|
|
|
|
La fiche de règles d'une extension (`rules.fr.json`, schéma
|
|
`expansion-rules.schema.json`) n'exige que `summary` : décrivez ce qui change
|
|
(mise en place, déroulement, décompte), pas tout le jeu.
|
|
|
|
## Vérifier avant d'envoyer
|
|
|
|
Avec un éditeur qui comprend les schémas JSON (VS Code…), la clé `$schema`
|
|
donne l'autocomplétion et signale les erreurs au fil de la frappe.
|
|
|
|
La validation complète (celle du CI) se lance depuis le dépôt de l'app :
|
|
|
|
```bash
|
|
pnpm --filter @skori/server content:validate ../skori-games
|
|
```
|
|
|
|
## Jeux intégrés à l'app
|
|
|
|
Les dossiers dont `game.json` contient un `slug` (`azul`, `cabo`…)
|
|
correspondent aux jeux livrés avec l'app ; leur `scoring.json` garde l'`id`
|
|
du jeu intégré. Une correction de leur modèle de score doit aussi être
|
|
reportée dans le dépôt de l'app.
|
|
|
|
## Licence
|
|
|
|
En contribuant, vous acceptez que votre contribution soit publiée sous
|
|
licence [CC BY-SA 4.0](LICENSE).
|