HOW TO CREATE A NEW SLOT — le guide pratique

De zéro à un zip prêt pour Stake Engine, sans toucher au moteur. Durée réaliste : 1 journée avec des assets prêts (hors production artistique et math finale).


0. Démarrer l'atelier

# terminal 1 — le moteur (preview live)
cd "SLOT FACTORY/engine" && npm run dev          # → http://localhost:5177

# terminal 2 — le panneau Factory
node "SLOT FACTORY/factory/site/server.mjs"      # → http://localhost:5178

Node vit dans ~/.local/node-v22.16.0-darwin-arm64/bin sur cette machine — ajoutez-le au PATH si besoin.


1. Créer le jeu (30 secondes)

Dans le panneau (localhost:5178) : + Create New Game → id (snake_case), nom affiché, template de départ (_placeholder ou demo_frontier).

Ou en ligne de commande :

curl -X POST 'http://localhost:5178/api/create' \
  -H 'Content-Type: application/json' \
  -d '{"id":"space_raiders","name":"Space Raiders","from":"_placeholder"}'

Le jeu naît jouable immédiatement avec le thème du template. Il apparaît dans la sidebar et sur localhost:5177/?game=space_raiders.

2. Habiller le thème (le gros du travail)

Les images — onglet Assets

Glissez-déposez chaque fichier sur sa carte : il est renommé et installé automatiquement selon la nomenclature (<theme>_<categorie>_<element>[_<idx>][_<etat>].webp). L'ancien fichier part en .bak.

Ce qu'il faut produire (≈ 52 fichiers, voir SLOT_ASSET_MANIFEST) :

Catégorie Fichiers Notes
Fonds base + bonus × landscape + portrait 1920×1080 / 1080×2340
Symboles 5 lows + 4 highs + wild + scatter, × idle + win 512×512, PNG/WebP alpha
Cadre + plaque 9-slice les marges de slice sont dans theme/assets.json
Boutons spin (rond), auto/turbo/info/sound, × default + pressed
Panneau bonus 1 intro/récap free spins
Sons spin, reelstop, click, win, bigwin, scatter, bonustrigger, rollup ×2, error, bgm WAV/MP3/OGG

Les couleurs — games/<id>/theme/tokens.json

primary, panel, text, win… deviennent les variables CSS --ck-* de toute l'UI (modales, plaques, toasts). Un thème western et un thème horreur n'ont aucun CSS à écrire.

Les textes — games/<id>/locales/en.json

en obligatoire (règle Stake). Ajoutez fr.json etc. et listez-les dans game.config.json > localization.supported.

Règle d'or : le moteur ne connaît que des clés logiques (symbol.wild, ui.spin). Aucun nom de fichier, aucun nom de thème dans le code. Une clé manquante → warning dans l'onglet Validation + placeholder procédural — jamais de crash.

3. Régler le gameplay — game.config.json

4. La math — remplacer le mock

Le template embarque une math factice (math.meta.json marqué MOCK) qui alimente le RGS simulé en dev. Pour la vraie soumission :

  1. Produisez le package math (books .jsonl.zst + lookup CSV + index.json) avec math-tools.
  2. Régénérez math/math.meta.json depuis index.json (modes, coûts, RTP, wincap, paytable) — jamais à la main : c'est la source de vérité des coûts affichés.
  3. Le warning MATH MOCK disparaît de la validation.

5. Prévisualiser et tester

6. Valider puis exporter

Onglet Validation : erreurs bloquantes (config, clause malfunction, assets manquants, locale) et warnings (budgets de poids : initial ≤ 10 Mo, audio ≤ 4 Mo…).

Onglet Export : build de production + zip exports/<id>-v<version>-<date>.zip avec index.html à la racine (chemins relatifs, prêt pour {team}.cdn.stake-engine.com/{game}/{version}/).

Rien n'est jamais publié automatiquement. L'upload sur Stake Engine reste un acte manuel et volontaire, avec la STAKE_SUBMISSION_CHECKLIST sous les yeux.

6bis. Porte de contrôle soumission (OBLIGATOIRE)

Avant de proposer un DOWNLOAD, la machine doit passer la reproduction des conditions réelles de Stake Engine :

node factory/qa/submission-check.mjs <gameId>

Ce test exporte le build, retire le dossier math/ (comme Stake, qui le prend pour le package RGS), sert le tout derrière un RGS au vrai format Stake (config.betLevels imbriqué, balance.currency, round), et vérifie : - boot en JPY/ja, EUR/fr, USD/en (0 erreur JS) — attrape le BOOT ERROR ; - la devise suit le RGS (¥ pour JPY, pas $ figé) ; - le mode Replay (?replay=true) rejoue sans crash, bet bar visible.

Règle d'or apprise en production : math.meta.json vit à la RACINE du jeu (games/<id>/math.meta.json), jamais dans math/. Le dossier math/ ne contient QUE le package RGS (publish_files/configs/forces), et Stake le retire du frontend. Le générateur math l'écrit déjà au bon endroit.

7. Checklist de sortie