Pourquoi des fiches d’entités « prêtes à produire »
Dans un petit jeu 2D, la vitesse de production dépend souvent de la clarté des entités (personnages, ennemis, objets, obstacles). Une fiche standardisée sert de contrat entre design, code, art et QA : elle décrit ce que fait l’entité, comment elle se lit (télégraphie), comment elle interagit (collisions, dégâts, invincibilité), et comment elle varie (versions faciles/difficiles) sans ambiguïté.
Objectif : produire des fiches directement exploitables pour implémenter des comportements (IA simple), configurer des paramètres (stats), préparer les animations (états), et écrire des tests (cas limites).
Structure standard d’une fiche d’entité
Champs indispensables (à garder identiques partout)
- ID : identifiant unique (ex. ENE_SLIME_GREEN).
- Rôle : fonction dans le gameplay (harcèlement, tank, sniper, contrôle de zone…).
- Silhouette & lisibilité : taille, contraste, éléments visuels clés (sans parler de direction artistique globale).
- Comportement : description courte + règles (cible, distance, cadence, conditions).
- Stats : PV, vitesse, dégâts, portée, cadence, résistances, etc.
- Patterns : séquences d’actions répétables (ex. “2 tirs + dash”).
- Télégraphie : signaux avant action (animation, son, particules, délai).
- Récompense : ce que le joueur obtient (drop, ouverture, clé, soin…).
- Variations : versions (élite, rare, élémentaire) et ce qui change.
- États : machine d’états (spawn, idle, attaque, hit, mort) + transitions.
- Interactions : dégâts, poussée, invincibilité, collisions, immunités.
Règles d’écriture (pour éviter les fiches « littéraires »)
- Chaque règle doit être testable (ex. “attaque toutes les 1,2 s si distance < 4 m”).
- Préférer des valeurs numériques et des conditions à des adjectifs (“rapide”, “fort”).
- Décrire la télégraphie avec un délai (wind-up) et un indice (flash, posture, son).
- Limiter les patterns à 1–3 par ennemi pour un petit jeu.
États & interactions : spécification exploitable par le code
Machine d’états minimale (recommandée)
| État | But | Entrée | Sortie / transitions |
|---|---|---|---|
| spawn | Apparition + invuln courte | À la création | Vers idle après durée ou animation |
| idle | Patrouille / attente | Après spawn / après action | Vers attaque si condition; vers hit si touché |
| attaque | Exécuter un pattern | Condition d’attaque vraie | Vers idle (cooldown) ou vers hit |
| hit | Réaction aux dégâts | Quand reçoit un hit valide | Vers idle après stun; vers mort si PV ≤ 0 |
| mort | Fin + drop | PV ≤ 0 | Despawn après animation |
Interactions à définir systématiquement
- Dégâts : formule simple (valeur fixe ou valeur + multiplicateur). Préciser si dégâts au contact, projectile, zone.
- Poussée (knockback) : force, durée, direction (depuis l’attaquant ou depuis le point d’impact), immunités éventuelles.
- Invincibilité (i-frames) : durée après hit, clignotement visuel, annulation/maintien de la poussée.
- Collisions : couches (player, enemy, projectile, décor), forme (AABB/cercle), règles (bloquant, traversable, trigger).
- Priorités : que se passe-t-il si hit pendant attaque ? (interruption, super-armure, réduction de dégâts).
Mini-spécification “hit” (modèle)
OnHit(source, damage, knockbackVector): if state == mort: return if invincibleTimer > 0: return PV -= damage invincibleTimer = iFrameDuration if PV <= 0: EnterState(mort) else: ApplyKnockback(knockbackVector, knockbackDuration) EnterState(hit) // stunDurationItems : fiche de spécification (effet, durée, rareté, apparition)
Champs recommandés pour un item
- ID : ITM_HEAL_SMALL, ITM_BOMB…
- Type : consommable, passif, clé, ressource.
- Effet : ce qui change (PV +20, vitesse +15%, invincibilité 2 s…).
- Durée : instantané / temporaire (durée) / permanent (jusqu’à la mort ou fin de niveau).
- Stacking : cumulable ? (oui/non) + règle (max stacks, refresh durée, addition).
- Rareté simple : Commun / Rare / Épique (ou 3 niveaux max).
- Conditions d’apparition : où/quand (type de salle, après mini-boss, dans coffres), et contraintes (1 par niveau, interdit avant X).
- Feedback : son/particules/animation (sans texte à l’écran ici).
- Interactions : ramassage (hitbox), aimantation, auto-pickup, collision avec décor.
Étapes pratiques pour produire une fiche “prête à produire”
- Nommer et identifier : choisir un ID stable + nom lisible.
- Définir le rôle : une phrase “sert à …” (ex. forcer le mouvement, punir l’immobilité).
- Écrire le pattern : 1 séquence principale + 1 variation max.
- Ajouter la télégraphie : préciser wind-up (ms), indice visuel/sonore, fenêtre d’esquive.
- Fixer les stats : PV, dégâts, vitesse, cooldowns, portée.
- Décrire la machine d’états : transitions et interruptions.
- Spécifier collisions & hit : couches, formes, i-frames, knockback.
- Récompense & variations : drop, chance, version élite (ce qui change exactement).
- Cas limites : que se passe-t-il si l’entité est poussée contre un mur, si le joueur sort de portée pendant l’attaque, etc.
Templates (livrables)
Template : fiche Ennemi
[ENNEMI] Nom (ID) Rôle: Silhouette & lisibilité: Contexte d’apparition: (biome/salle/conditions) Stats: - PV: - Vitesse: - Dégâts: - Portée: - Cadence/Cooldown: - Résistances/Immunités: Comportement (résumé): Patterns: P1: (séquence + timings) P2: (optionnel) Télégraphie: - Wind-up: - Indice visuel: - Indice sonore: - Fenêtre d’esquive: États & transitions: spawn -> idle: idle -> attaque: attaque -> idle: any -> hit: hit -> idle: any -> mort: Interactions: - Hitbox/Hurtbox: (formes, tailles) - Collisions décor: (bloquant/slide/stop) - Knockback: (force/durée/immunités) - i-frames: (durée) - Interruption d’attaque: (oui/non, conditions) Récompense: (drop + probas si besoin) Variations: (élite/élémentaire; changements chiffrés) Notes QA: (cas limites testables)Template : fiche Item
[ITEM] Nom (ID) Type: (consommable/passif/clé/ressource) Effet: (valeurs chiffrées) Durée: (instant/temporaire/permanent) Stacking: (règle) Rareté: (Commun/Rare/Épique) Conditions d’apparition: (où/quand/contraintes) Ramassage: (auto? bouton? rayon d’attraction?) Feedback: (VFX/SFX/animation) Interactions: (avec dégâts, invincibilité, collisions, autres items) Notes QA: (cas limites)Template : fiche Obstacle
[OBSTACLE] Nom (ID) Rôle: (bloquer, canaliser, danger, puzzle simple) Forme & collision: (AABB/cercle; dimensions; bloquant/trigger) Comportement: (statique/dynamique; cycle) Dégâts/effets: (si applicable) Télégraphie: (si danger: wind-up + indice) États: (idle/active/broken…) Interactions: (poussée, destruction, immunités, projectiles) Variations: (plus rapide, plus large, intermittent) Notes QA:Exemples (jeu 2D) : 3 ennemis
Ennemi 1 : Slime bondissant (ENE_SLIME_GREEN)
Rôle : pression de proximité, force le repositionnement.
Silhouette & lisibilité : petit corps arrondi, compression visible avant saut.
Contexte d’apparition : salles de début, groupes de 2–4.
Continuez dans notre application.
Vous pouvez écouter le livre audio écran éteint, recevoir un certificat gratuit pour ce cours et accéder également à 5 000 autres cours en ligne gratuits.
Ou poursuivez votre lecture ci-dessous...Téléchargez l'application
| Stat | Valeur |
|---|---|
| PV | 20 |
| Vitesse (au sol) | 1,2 u/s |
| Dégâts (contact en saut) | 8 |
| Portée d’aggro | 6 u |
| Cooldown saut | 1,4 s |
| i-frames après hit | 0,15 s |
| Knockback reçu | fort (1,0 u sur 0,12 s) |
Comportement : se rapproche en glissant; si le joueur est à < 4 u et cooldown prêt, saute vers la position actuelle du joueur (verrouillage de cible au début du wind-up).
Pattern P1 : (1) wind-up 0,25 s (compression) (2) saut 0,35 s (hitbox active) (3) recovery 0,20 s (immobile) (4) retour idle.
Télégraphie : wind-up 250 ms; indice visuel = compression + flash léger; indice sonore = “squish”; fenêtre d’esquive = pendant les 150 ms avant l’impact (le saut est rectiligne).
États & transitions : spawn (0,3 s invuln) → idle; idle → attaque si distance < 4 u et cooldown=0; attaque → idle après recovery; any → hit si hit valide; hit (stun 0,12 s) → idle; any → mort.
Interactions : collision décor bloquante; si heurte un mur pendant le saut, stop immédiat + recovery (évite les rebonds imprévus). Interruption d’attaque : oui (un hit stoppe le saut si reçu pendant wind-up; pendant le saut, super-armure légère : dégâts appliqués mais pas d’interruption).
Récompense : 20% chance de drop un petit soin (ITM_HEAL_SMALL).
Variation : Slime bleu (ENE_SLIME_BLUE) : PV 28, cooldown saut 1,1 s, dégâts 10.
Ennemi 2 : Archer sentinelle (ENE_ARCHER_WOOD)
Rôle : menace à distance, punit les lignes droites.
Silhouette & lisibilité : humanoïde fin, arc visible; posture de visée marquée.
Contexte d’apparition : couloirs/arenas, souvent derrière des obstacles.
| Stat | Valeur |
|---|---|
| PV | 18 |
| Vitesse | 0,9 u/s (repositionnement) |
| Dégâts projectile | 6 |
| Vitesse projectile | 8 u/s |
| Cadence | 1 tir / 1,6 s |
| Portée max | 12 u |
| i-frames après hit | 0,10 s |
Comportement : maintient une distance de 6–10 u. Si le joueur est trop proche (< 4 u), recule 0,6 s puis tente un tir.
Pattern P1 : viser 0,45 s (wind-up) → tirer 1 flèche → cooldown 1,15 s.
Pattern P2 (optionnel) : “tir rapide” si le joueur reste immobile 1,0 s : wind-up 0,30 s, dégâts -1 (5), cooldown identique.
Télégraphie : wind-up 450 ms; indice visuel = arc tendu + ligne de visée implicite (orientation stricte); indice sonore = corde tendue; fenêtre d’esquive = pendant les 200 ms avant le tir (le projectile est rapide mais rectiligne).
États : spawn → idle; idle (reposition) → attaque si ligne de vue et cooldown=0; attaque → idle; hit → idle; mort.
Interactions : projectile collisionne décor (se détruit). Archer collision décor bloquante. Interruption d’attaque : oui (hit pendant wind-up annule le tir et met cooldown réduit à 0,6 s pour éviter le spam d’annulation).
Récompense : 10% drop ITM_AMMO_PACK (si le jeu utilise des munitions) sinon 15% drop ITM_COIN_SMALL (ressource simple).
Variation : Archer élite (ENE_ARCHER_ELITE) : PV 24, cadence 1,3 s, tire une flèche “perçante” (traverse 1 ennemi/obstacle léger si applicable) mais télégraphie +100 ms.
Ennemi 3 : Scarabée chargeur (ENE_BEETLE_CHARGER)
Rôle : contrôle de couloir, menace de burst, enseigne l’esquive latérale.
Silhouette & lisibilité : carapace large, cornes; posture basse avant charge.
Contexte d’apparition : salles moyennes, 1–2 à la fois.
| Stat | Valeur |
|---|---|
| PV | 35 |
| Vitesse (idle) | 1,0 u/s |
| Dégâts charge | 12 |
| Vitesse charge | 6,5 u/s |
| Durée charge | 0,55 s |
| Cooldown charge | 2,2 s |
| Super-armure | pendant charge (pas d’interruption) |
| i-frames après hit | 0,12 s |
Comportement : se place face au joueur; si aligné horizontalement ou verticalement (tolérance 0,6 u) et distance < 8 u, prépare une charge.
Pattern P1 : wind-up 0,35 s (grattage du sol) → charge 0,55 s (hitbox active) → crash si mur (stun auto 0,35 s) sinon recovery 0,25 s.
Télégraphie : wind-up 350 ms; indice visuel = recul + poussière; indice sonore = frottement; fenêtre d’esquive = pendant le wind-up (la charge est très rapide).
États : spawn → idle; idle → attaque si alignement vrai et cooldown=0; attaque → hit uniquement si PV≤0 (super-armure), sinon ignore interruption; après crash, passe en hit-like (stun) puis idle; mort.
Interactions : collision décor bloquante; pendant charge, ignore knockback reçu (mais prend les dégâts). Si touche le joueur : applique dégâts + knockback moyen (0,7 u sur 0,10 s) + mini-stun joueur 0,08 s (si le système le permet).
Récompense : 25% drop ITM_SHIELD_ORB (bouclier temporaire).
Variation : version “rouge” : cooldown 1,8 s, dégâts 14, wind-up +100 ms (plus lisible).
Exemples (jeu 2D) : 5 objets (items)
Objet 1 : Soin léger (ITM_HEAL_SMALL)
| Champ | Spécification |
|---|---|
| Type | Consommable (instantané) |
| Effet | Rend +20 PV (sans dépasser PV max) |
| Durée | Instantané |
| Stacking | Oui (ramassages multiples), pas d’effet au-delà du max |
| Rareté | Commun |
| Conditions d’apparition | Drop ennemis faibles; limite soft: pas plus de 2 au sol simultanément |
| Ramassage | Auto-pickup au contact (trigger) |
| Feedback | Flash vert + son court |
Objet 2 : Bombe (ITM_BOMB)
| Champ | Spécification |
|---|---|
| Type | Consommable (actif) |
| Effet | À l’utilisation: pose une bombe; explosion après 0,8 s; zone rayon 2,2 u; dégâts 18 aux ennemis; pousse fort (1,2 u) |
| Durée | Explosion unique |
| Stacking | Oui, max 3 en inventaire |
| Rareté | Rare |
| Conditions d’apparition | Coffres ou drop élite; interdit dans les 2 premières salles |
| Ramassage | Au contact + animation de pickup 0,15 s (annulable par dash si applicable) |
| Feedback | Clignotement rapide avant explosion + son “tic-tac” |
| Interactions | Ne blesse pas le joueur (ou préciser l’inverse); détruit obstacles fragiles (voir fiche obstacle) |
Objet 3 : Orbe de bouclier (ITM_SHIELD_ORB)
| Champ | Spécification |
|---|---|
| Type | Consommable (buff temporaire) |
| Effet | Accorde 1 bouclier: annule le prochain hit reçu (dégâts=0) puis se dissipe |
| Durée | Jusqu’au prochain hit ou 12 s (au premier atteint) |
| Stacking | Non (si déjà actif: refresh durée à 12 s) |
| Rareté | Rare |
| Conditions d’apparition | Drop de chargeurs/tanks; 15% sur ENE_BEETLE_CHARGER |
| Ramassage | Auto-pickup |
| Feedback | Halo autour du joueur; son “shield on”; à la casse: son “shatter” |
| Interactions | Quand bouclier absorbe: pas de knockback ni stun; i-frames joueur non déclenchées (ou préciser l’inverse) |
Objet 4 : Bottes de vitesse (ITM_SPEED_BOOTS)
| Champ | Spécification |
|---|---|
| Type | Passif (temporaire) |
| Effet | +15% vitesse de déplacement |
| Durée | 10 s |
| Stacking | Non (ramasser refresh à 10 s) |
| Rareté | Commun |
| Conditions d’apparition | Récompense de salle de mobilité; pas plus d’un par niveau |
| Ramassage | Auto-pickup |
| Feedback | Traînée légère derrière le joueur pendant l’effet |
| Interactions | N’affecte pas la vitesse d’attaque; affecte la distance de dash uniquement si le dash dépend de la vitesse (à préciser) |
Objet 5 : Aimant à loot (ITM_LOOT_MAGNET)
| Champ | Spécification |
|---|---|
| Type | Passif (temporaire) |
| Effet | Augmente rayon d’attraction des pickups à 3,5 u (au lieu de 1,5 u) |
| Durée | 15 s |
| Stacking | Oui (2 stacks max): +1,0 u de rayon par stack; ramasser refresh durée |
| Rareté | Commun |
| Conditions d’apparition | Drop sur ennemis à distance (ex. archers) 12% |
| Ramassage | Auto-pickup |
| Feedback | Petites particules aspirées vers le joueur |
| Interactions | N’attire pas les projectiles; attire uniquement items/ressources au sol (couche “pickup”) |
Exemple d’obstacle (bonus) : Mur fragile (OBS_CRACKED_WALL)
Rôle : obstacle destructible qui récompense l’exploration (ouvre un passage).
| Champ | Spécification |
|---|---|
| Forme & collision | AABB 2x2 tuiles; bloquant |
| Comportement | Statique; passe en “broken” si reçoit explosion (bombe) ou 3 hits lourds |
| États | idle → hit (flash 0,08 s) → idle; idle → broken (animation 0,4 s) |
| Interactions | Ignore projectiles légers; accepte explosion (ITM_BOMB) : destruction instant |
| Télégraphie | Fissures visibles; à l’impact: poussière |
Checklist de validation (avant de figer les fiches)
- Chaque entité a un ID unique et des valeurs chiffrées (timings, dégâts, PV).
- Chaque attaque a une télégraphie (indice + wind-up) et une fenêtre d’esquive plausible.
- Les transitions d’états couvrent les interruptions (hit pendant attaque, mort pendant action).
- Les règles de collision sont explicites (bloquant vs trigger, projectile vs décor).
- Les items précisent durée, stacking, rareté simple et conditions d’apparition.
- Les variations indiquent exactement ce qui change (pas seulement “plus fort”).