Couverture de livre électronique gratuite Programmation de jeux : concevoir un game design document (GDD) pour un petit jeu

Programmation de jeux : concevoir un game design document (GDD) pour un petit jeu

Nouveau cours

12 pages

Personnages, ennemis et objets : fiches de contenu prêtes à produire dans le GDD

Capítulo 8

Temps de lecture estimé : 12 minutes

+ Exercice

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)

ÉtatButEntréeSortie / transitions
spawnApparition + invuln courteÀ la créationVers idle après durée ou animation
idlePatrouille / attenteAprès spawn / après actionVers attaque si condition; vers hit si touché
attaqueExécuter un patternCondition d’attaque vraieVers idle (cooldown) ou vers hit
hitRéaction aux dégâtsQuand reçoit un hit valideVers idle après stun; vers mort si PV ≤ 0
mortFin + dropPV ≤ 0Despawn 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) // stunDuration

Items : 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”

  1. Nommer et identifier : choisir un ID stable + nom lisible.
  2. Définir le rôle : une phrase “sert à …” (ex. forcer le mouvement, punir l’immobilité).
  3. Écrire le pattern : 1 séquence principale + 1 variation max.
  4. Ajouter la télégraphie : préciser wind-up (ms), indice visuel/sonore, fenêtre d’esquive.
  5. Fixer les stats : PV, dégâts, vitesse, cooldowns, portée.
  6. Décrire la machine d’états : transitions et interruptions.
  7. Spécifier collisions & hit : couches, formes, i-frames, knockback.
  8. Récompense & variations : drop, chance, version élite (ce qui change exactement).
  9. 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...
Download App

Téléchargez l'application

StatValeur
PV20
Vitesse (au sol)1,2 u/s
Dégâts (contact en saut)8
Portée d’aggro6 u
Cooldown saut1,4 s
i-frames après hit0,15 s
Knockback reçufort (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.

StatValeur
PV18
Vitesse0,9 u/s (repositionnement)
Dégâts projectile6
Vitesse projectile8 u/s
Cadence1 tir / 1,6 s
Portée max12 u
i-frames après hit0,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.

StatValeur
PV35
Vitesse (idle)1,0 u/s
Dégâts charge12
Vitesse charge6,5 u/s
Durée charge0,55 s
Cooldown charge2,2 s
Super-armurependant charge (pas d’interruption)
i-frames après hit0,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)

ChampSpécification
TypeConsommable (instantané)
EffetRend +20 PV (sans dépasser PV max)
DuréeInstantané
StackingOui (ramassages multiples), pas d’effet au-delà du max
RaretéCommun
Conditions d’apparitionDrop ennemis faibles; limite soft: pas plus de 2 au sol simultanément
RamassageAuto-pickup au contact (trigger)
FeedbackFlash vert + son court

Objet 2 : Bombe (ITM_BOMB)

ChampSpécification
TypeConsommable (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éeExplosion unique
StackingOui, max 3 en inventaire
RaretéRare
Conditions d’apparitionCoffres ou drop élite; interdit dans les 2 premières salles
RamassageAu contact + animation de pickup 0,15 s (annulable par dash si applicable)
FeedbackClignotement rapide avant explosion + son “tic-tac”
InteractionsNe blesse pas le joueur (ou préciser l’inverse); détruit obstacles fragiles (voir fiche obstacle)

Objet 3 : Orbe de bouclier (ITM_SHIELD_ORB)

ChampSpécification
TypeConsommable (buff temporaire)
EffetAccorde 1 bouclier: annule le prochain hit reçu (dégâts=0) puis se dissipe
DuréeJusqu’au prochain hit ou 12 s (au premier atteint)
StackingNon (si déjà actif: refresh durée à 12 s)
RaretéRare
Conditions d’apparitionDrop de chargeurs/tanks; 15% sur ENE_BEETLE_CHARGER
RamassageAuto-pickup
FeedbackHalo autour du joueur; son “shield on”; à la casse: son “shatter”
InteractionsQuand 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)

ChampSpécification
TypePassif (temporaire)
Effet+15% vitesse de déplacement
Durée10 s
StackingNon (ramasser refresh à 10 s)
RaretéCommun
Conditions d’apparitionRécompense de salle de mobilité; pas plus d’un par niveau
RamassageAuto-pickup
FeedbackTraînée légère derrière le joueur pendant l’effet
InteractionsN’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)

ChampSpécification
TypePassif (temporaire)
EffetAugmente rayon d’attraction des pickups à 3,5 u (au lieu de 1,5 u)
Durée15 s
StackingOui (2 stacks max): +1,0 u de rayon par stack; ramasser refresh durée
RaretéCommun
Conditions d’apparitionDrop sur ennemis à distance (ex. archers) 12%
RamassageAuto-pickup
FeedbackPetites particules aspirées vers le joueur
InteractionsN’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).

ChampSpécification
Forme & collisionAABB 2x2 tuiles; bloquant
ComportementStatique; passe en “broken” si reçoit explosion (bombe) ou 3 hits lourds
Étatsidle → hit (flash 0,08 s) → idle; idle → broken (animation 0,4 s)
InteractionsIgnore projectiles légers; accepte explosion (ITM_BOMB) : destruction instant
TélégraphieFissures 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”).

Répondez maintenant à l’exercice sur le contenu :

Quel élément rend une fiche d’entité réellement « prête à produire » pour l’équipe (code, art, QA) ?

Tu as raison! Félicitations, passez maintenant à la page suivante

Vous avez raté! Essayer à nouveau.

Une fiche « prête à produire » sert de contrat: elle spécifie des comportements et interactions sans ambiguïté via des conditions et valeurs mesurables (timings, stats), une télégraphie, une machine d’états et des règles de collision/hit, afin d’être implémentable et testable.

Chapitre suivant

Direction artistique et audio : spécifications exploitables dans le GDD

Arrow Right Icon
Téléchargez l'application pour obtenir une certification gratuite et écouter des cours en arrière-plan, même avec l'écran éteint.