SLOT_ASSET_MANIFEST.md
Checklist exhaustive des assets nécessaires pour produire une machine à sous Cool Kids sur Stake Engine.
Ce document est la référence : le Slot Factory génère un assets.json par jeu à partir de cette liste, et sa validation automatique vérifie chaque entrée.
0. Conventions globales
0.1 Nomenclature (obligatoire)
<theme>_<categorie>_<element>[_<index>][_<etat>].<ext>
exemples :
cowboy_symbol_high_01_idle.webp
cowboy_symbol_high_01_win.webp
cowboy_ui_spin_default.webp
cowboy_ui_spin_pressed.webp
cowboy_bg_base_landscape.webp
cowboy_bg_base_portrait.webp
cowboy_bonus_freespins_intro.webm
cowboy_audio_bigwin.mp3
<theme> : identifiant kebab/snake du thème (cowboy, aliens, myth, horror, placeholder). Jamais de nom de jeu marketing dans les fichiers.
- Le code ne référence JAMAIS un fichier : il référence une clé logique (
symbol.high.01.win) résolue par assets.json. Changer de thème = changer le manifest, zéro modification de code.
- Pas d'espaces ni d'accents dans les noms de fichiers (leçon TNF :
bouton mobile.png → renommé). Minuscules uniquement.
- Les sources de travail (PSD, PNG bruts, mockups) vivent dans
art-src/ (non buildé) — jamais dans assets/.
| Type |
Format |
Alternative |
Notes |
| Images UI / symboles |
WebP (qualité 80–90) |
PNG si transparence délicate |
AVIF optionnel en 2e source |
| Fonds |
WebP ou JPG q80 |
— |
Pas de PNG opaque plein écran |
| Atlas de symboles |
WebP + JSON (format TexturePacker/pixi) |
— |
2048×2048 max par page |
| Vidéo |
MP4 H.264 (CRF 19–23, faststart) |
WebM VP9 alpha si transparence |
Le chroma-key runtime (canvas) reste possible pour l'alpha, pattern validé TNF |
| Audio |
MP3 128–192 kbps |
— |
Web Audio décodé en buffers (pipeline TNF validé) |
| Fonts |
WOFF2 self-hosté |
TTF fallback |
JAMAIS de Google Fonts CDN en prod (static-files-only Stake) |
| 3D (optionnel) |
glTF en data-URI |
— |
Le CDN Stake bloque blob: — piège résolu sur TNF |
0.3 États standards
- Boutons :
default (obligatoire) · pressed (obligatoire) · disabled · hover (desktop) · highlighted — fallback : le moteur génère pressed (scale .96 + assombrissement) et disabled (grayscale) si absents.
- Symboles :
idle (obligatoire) · win (anim ou frame) · anticipation · appear · vanish · locked · transformed — fallback : idle + effets procéduraux du moteur (glow/pulse/shake).
- Tout asset manquant ⇒ placeholder du thème neutre + warning dans le Factory. Un jeu ne crashe jamais pour un asset absent.
0.4 Résolutions de référence
- Design de référence : 1920×1080 (landscape, stage fixe scalé — stratégie validée TNF) et 1080×1920 logique en portrait (couches plein écran).
- Export ×1 seulement, le moteur scale (les devices récents sont ≥2dpr mais le stage 1920 suffit — validé en review).
1. Branding du jeu
| Asset |
Fichier |
Format |
Taille |
Transp. |
Oblig. |
Module |
Fallback |
| Logo du jeu (titre) |
<t>_brand_logo.webp |
WebP |
~1200×400, ratio libre |
oui |
✔ |
frame/loading |
texte stylé (font titre + or) |
| Logo studio Cool Kids |
commun coolkids_logo.png |
PNG |
512×512 |
oui |
✔ |
loading/splash |
— (asset commun au moteur) |
| Icône/favicon |
<t>_brand_icon.webp |
WebP |
256×256 |
oui |
✔ |
html head |
logo réduit |
2. Backgrounds
| Asset |
Fichier |
Taille |
Oblig. |
Module |
Fallback |
| Fond principal landscape |
<t>_bg_base_landscape.webp |
1920×1080 |
✔ |
scene |
dégradé thème |
| Fond principal portrait |
<t>_bg_base_portrait.webp |
1080×2340 (couvre 0.42–0.56) |
✔ |
scene |
crop du landscape |
| Fond bonus landscape/portrait |
<t>_bg_bonus_*.webp |
idem |
si feature bonus à scène |
features/* |
teinte du fond de base |
| Couches parallax (opt.) |
<t>_bg_layer_0N.webp |
1920×1080+bleed |
✖ |
scene |
fond statique |
| Ambiance loading |
<t>_bg_loading.webp |
1920×1080 |
✖ |
loading |
fond noir + logo |
3. Cadres & décors
| Asset |
Fichier |
Notes |
Oblig. |
Fallback |
| Cadre de la grille |
<t>_frame_reels.webp |
9-slice OU pièces (top/sides/bottom) — les 2 modes existent au moteur (patterns TNF) |
✔ |
cadre or générique placeholder |
| Bandeau titre |
<t>_frame_title.webp |
intègre ou non le logo |
✖ |
logo posé sur barre sombre |
| Barre de contrôle (bet bar) |
<t>_frame_betbar_landscape.webp + _portrait |
pièces séparées acceptées (_betbar_left/right/socket) |
✔ |
barre sombre + liserés or |
| Séparateurs de rouleaux |
<t>_frame_reeldivider.webp |
✖ |
aucun (gap simple) |
|
| Décors additionnels (personnage hôte, props) |
<t>_deco_*.webp/mp4 |
opt-in module character-actor |
✖ |
— |
4. Rouleaux
| Asset |
Fichier |
Notes |
Oblig. |
Fallback |
| Fond de grille |
<t>_reels_bg.webp |
sous les symboles, dans le masque |
✔ |
panneau sombre semi-opaque |
| Fond de cellule (opt.) |
<t>_reels_cell.webp |
grilles « cases » (cluster/HnW) |
✖ |
aucun |
| Flou/blur de spin (opt.) |
<t>_reels_blurstrip_N.webp |
sinon motion-blur procédural |
✖ |
procédural |
| Overlay anticipation |
<t>_reels_anticipation.webp/.webm |
colonne surlignée |
✖ |
glow procédural |
5. Symboles
Par défaut un jeu 5×3 : 5 low-tier + 4 high-tier + wild + scatter (+ bonus/cash selon features).
| Asset |
Fichier |
Taille |
États |
Oblig. |
| Low-tier ×5 |
<t>_symbol_low_01..05_<etat>.webp |
512×512 (marge 6 %) |
idle ✔ · win ✔ · autres opt. |
✔ |
| High-tier ×4 |
<t>_symbol_high_01..04_<etat>.webp |
512×512 |
idem |
✔ |
| Wild |
<t>_symbol_wild_<etat>.webp |
512×512 |
idle ✔ · win ✔ · sticky/expand si features |
si feature |
| Scatter |
<t>_symbol_scatter_<etat>.webp |
512×512 |
idle ✔ · win ✔ · anticipation recommandé |
si free spins |
| Bonus |
<t>_symbol_bonus_<etat>.webp |
512×512 |
idem scatter |
si feature |
| Cash/collect |
<t>_symbol_cash_<etat>.webp |
512×512 |
idle ✔ (+ zone texte valeur) |
si HnW/cash |
| Mystery |
<t>_symbol_mystery_<etat>.webp |
512×512 |
idle ✔ · reveal ✔ |
si feature |
| Multiplicateur |
<t>_symbol_mult_<etat>.webp |
512×512 |
idle ✔ |
si feature |
| Géants (2×2, 3×3) |
<t>_symbol_giant_<n>x<n>_*.webp |
1024/1536 |
idle ✔ |
si feature |
Les symboles sont packés en atlas au build (le Factory s'en charge) — l'artiste livre des fichiers unitaires 512×512.
Anim de win : soit sprite-sheet <t>_symbol_high_01_win_sheet.webp (+ JSON), soit frame win unique animée par le moteur (scale/glow/particules). Le placeholder utilise la 2e voie.
6. UI principale
Tous en WebP transparent. États : default ✔ · pressed ✔ · disabled/hover opt. (fallback procédural).
| Élément |
Fichier |
Taille |
Oblig. |
| Bouton Spin |
<t>_ui_spin_<etat>.webp |
~440×440 (rond) |
✔ |
| Bouton Stop (peut = état de Spin) |
<t>_ui_stop_<etat>.webp |
idem |
✖ (icône moteur) |
| Auto Spin |
<t>_ui_auto_<etat>.webp |
256×256 |
✖ (icône moteur) |
| Turbo |
<t>_ui_turbo_<etat>.webp |
256×256 |
✖ |
| Mise + / − |
<t>_ui_bet_up/down_<etat>.webp |
128×128 |
✖ |
| Plaque balance / mise / gain |
<t>_ui_plaque_<etat>.webp |
9-slice ~1024×306 |
✔ (1 plaque réutilisée) |
| MAX bet |
<t>_ui_maxbet_<etat>.webp |
256×128 |
✖ |
| Menu / burger |
<t>_ui_menu_<etat>.webp |
128×128 |
✖ |
| Info / règles |
<t>_ui_info_<etat>.webp |
128×128 |
✔ |
| Son on/off |
<t>_ui_sound_<etat>.webp |
128×128 |
✔ (état muted = grayscale auto) |
| Plein écran |
<t>_ui_fullscreen_<etat>.webp |
128×128 |
✖ |
| Retour / fermer |
<t>_ui_back_<etat>.webp, <t>_ui_close_<etat>.webp |
128×128 |
✔ |
| Bonus Buy |
<t>_ui_bonusbuy_<etat>.webp |
plaque ornée ~1024×632 |
si feature |
| Tooltip / notification |
<t>_ui_tooltip.webp |
9-slice |
✖ (style moteur) |
7. Modales
| Élément |
Fichier |
Oblig. |
Fallback |
| Panneau modal (9-slice) |
<t>_modal_panel.webp |
✔ |
panneau moteur sombre+or |
| Bouton confirmer / annuler |
<t>_modal_btn_yes/no_<etat>.webp |
✖ |
boutons moteur |
| Ornement/pendentif (opt.) |
<t>_modal_ornament.webp |
✖ |
aucun |
Contenu des modales (règles, paytable, historique, autoplay, bonus-buy confirm, erreur) = généré par le moteur depuis la config (jamais des images de texte — leçon compliance/i18n).
8. Bonus (par module activé)
| Module |
Assets requis |
| Free Spins |
_bonus_freespins_intro.webp/.webm (écran d'entrée) · _bonus_freespins_bg_* · compteur (style moteur) · _bonus_freespins_total.webp (panneau récap) · retrigger : réutilise l'intro |
| Hold & Win |
_bonus_hnw_bg · _symbol_cash_* · _bonus_hnw_cell_empty/locked.webp · compteur respins |
| Pick Bonus |
_bonus_pick_bg · _bonus_pick_item_idle/revealed_win/revealed_end.webp (×N) |
| Wheel |
_bonus_wheel_disc.webp · _bonus_wheel_pointer.webp · _bonus_wheel_center.webp |
| Multiplicateurs |
_fx_mult_x2..xN.webp ou rendu texte FX or (moteur, pattern TNF) |
| Win tiers |
_fx_bigwin/megawin/epicwin.webp/.webm — fallback : texte FX or + pluie de pièces (moteur) |
9. Animations
| Type |
Format |
Usage recommandé |
| Effets procéduraux (glow, shake, pulse, compteurs, pluie de pièces, particules) |
code moteur |
DÉFAUT — zéro asset |
| Sprite-sheets |
WebP + JSON atlas |
anims de symboles, explosions localisées |
| Vidéos plein écran |
MP4 H.264 muet + piste audio séparée (pattern TNF validé : video muted + Web Audio synchro) |
cinématiques (intro bonus, jackpot) |
| Vidéo à transparence |
chroma-key runtime canvas (couleur dédiée par asset, ex. vert [15,185,37] / bleu [13,49,222]) |
personnages animés — pipeline TNF complet réutilisable |
| Squelettique (Spine/Rive) |
opt-in futur |
pas dans le v1 du moteur (pas de 2e consommateur) |
10. Vidéos
| Asset |
Fichier |
Specs |
Oblig. |
| Cinématique bonus intro |
<t>_video_bonus_intro.mp4 |
1920×1080, ≤6 s, ≤4 Mo |
✖ |
| Cinématique jackpot/max win |
<t>_video_maxwin.mp4 |
idem |
✖ |
| Clips personnage (états) |
<t>_char_<nom>_<etat>_gs.mp4 |
portrait ~834×1112, fond chroma PLAT, boucle parfaite (start=end frame) |
si character-actor |
11. Audio
| Catégorie |
Fichier |
Oblig. |
Fallback |
| Musique principale (loop) |
<t>_audio_bgm_main.mp3 |
✔ |
musique placeholder |
| Musique bonus (loop) |
<t>_audio_bgm_bonus.mp3 |
✖ |
bgm principale |
| Ambiance (loop, opt.) |
<t>_audio_ambience.mp3 |
✖ |
aucune |
| Spin / arrêt rouleau |
_audio_spin.mp3, _audio_reelstop.mp3 |
✔ |
sons placeholder |
| Anticipation |
_audio_anticipation.mp3 |
✖ |
riser placeholder |
| Gain (petit/moyen) |
_audio_win_small.mp3, _audio_win.mp3 |
✔ |
placeholder |
| Big / Mega / Epic win |
_audio_bigwin/megawin/epicwin.mp3 |
✔ (au moins bigwin) |
escalade du win.mp3 |
| Scatter / wild / bonus trigger |
_audio_scatter/wild/bonustrigger.mp3 |
selon features |
placeholder |
| Boutons / erreur |
_audio_click.mp3, _audio_error.mp3 |
✔ |
placeholder |
| Voix (opt.) |
<t>_voice_<perso>_<ligne>.mp3 |
✖ |
aucune |
| Transitions musicales |
crossfade moteur (hold/release, pattern TNF) |
— |
— |
12. Fonts
| Usage |
Fichier |
Oblig. |
Fallback |
| Titre / display |
<t>_font_display.woff2 |
✖ |
Cinzel (self-hosté, SIL OFL — validé TNF) |
| UI / chiffres |
<t>_font_ui.woff2 |
✖ |
system-ui |
| Licences |
SIL OFL / libre uniquement, licence archivée dans art-src/licenses/ |
✔ |
— |
13. Localisation
locales/en.json (obligatoire, référence) + <lang>.json par langue.
- Table SOCIAL (stake.us) générée par le moteur — les clés restreintes (bet/pays/buy/cash/$) sont traitées au niveau moteur, pas par thème.
- AUCUN texte cuit dans les images pour les éléments réglementaires (règles, montants, disclaimers) — les images décoratives avec texte doivent avoir une variante social si le texte contient un mot restreint (leçon TNF).
14. Écrans de chargement
| Asset |
Oblig. |
Fallback |
_bg_loading + logo + barre de progression (style moteur) |
✖ |
fond noir + logo Cool Kids + barre or |
| Astuce/flavor text localisé |
✖ |
aucun |
15. Marketing & thumbnails (soumission Stake)
| Asset |
Specs |
Oblig. |
| Tile carrée |
<t>_mkt_tile.png 512×512 |
✔ |
| Tile portrait (lobby) |
<t>_mkt_portrait.png 1080×1440 (ratio 3:4) |
✔ |
| Bannière large |
<t>_mkt_banner.png 1920×1080 |
✖ |
| Screenshots (desktop + mobile) |
PNG, générés par le harnais QA |
✔ (auto) |
16. Assets nécessaires à la soumission Stake
- Zip frontend :
index.html racine + assets/ (structure validée TNF v2) — généré par l'Export du Factory (strip des modules dev, exclusion art-src/).
- Package math :
index.json + books_<mode>.jsonl.zst + lookUpTable_<mode>_0.csv (format ACP vérifié).
REVIEW-EVENTS.md : book IDs par mode pour chaque classe d'outcome (perte / win / big win / wincap / bonus) — généré par les math-tools.
- Rapport de validation du Factory (checklist auto passée).
17. Variantes desktop / mobile / responsive
- Landscape : stage fixe 1920×1080 scalé (
gfit) — assets _landscape.
- Portrait : couches plein écran en vw/% (stratégie TNF v2 validée) — assets
_portrait pour bg/frame/betbar ; symboles et UI partagés.
- Chaque asset de structure (bg, frame, betbar) existe en 2 variantes ; symboles, modales, audio, fonts : 1 seule (partagée).
- Safe areas iOS (notch/home bar) gérées par le moteur (
100dvh, insets) — pas d'asset dédié.
Récap volumétrie type (jeu 5×3, free spins + bonus buy)
| Catégorie |
Nb fichiers indicatif |
| Branding |
3 |
| Backgrounds |
4–6 |
| Cadres/décors |
4–8 |
| Rouleaux |
2–4 |
| Symboles (11 × ~2 états) |
~22–33 |
| UI (12 éléments × ~2 états) |
~24 |
| Modales |
1–4 |
| Bonus (free spins) |
4–6 |
| Vidéos |
0–3 |
| Audio |
12–18 |
| Fonts |
0–2 |
| Marketing |
2–4 |
| Total |
~80–110 fichiers — le Factory affiche cette checklist avec preview + warnings |