Calculateur de dégâts et de DPS ZDoom
Calcule la plage exacte de dégâts, le DPS attendu et le temps avant la mort pour n'importe quelle arme ou projectile ZDoom / GZDoom. Inclut le multiplicateur random(1,8), le flag STRIFEDAMAGE et un convertisseur tics-vers-secondes pour les scripts ACS.
Plage de dégâts, DPS et convertisseur de tics pour moddeurs Doom.
Calcule min/moy/max des dégâts pour n'importe quel projectile, arme hitscan ou DamageFunction personnalisée.
Formule de dégâts
Utilise Damage × random(1, 8) — la formule standard des projectiles ZDoom.
Choisis un projectile vanilla de Doom pour remplir automatiquement Damage. Modifier Damage ensuite repasse le preset sur Personnalisé.
dmg
Le N que tu mets après Damage en DECORATE/ZScript (par exemple Damage 3 sur la boule de feu du Diablotin).
Distribution des dégâts
random(1, N) est uniforme — chaque multiplicateur est équiprobable.
| Dégâts par tir | Probabilité |
|---|---|
| 3 | 12,5% |
| 6 | 12,5% |
| 9 | 12,5% |
| 12 | 12,5% |
| 15 | 12,5% |
| 18 | 12,5% |
| 21 | 12,5% |
| 24 | 12,5% |
Référence des projectiles vanilla
Clique une ligne pour la charger dans les champs ci-dessus.
| Projectile | Damage | Multiplicateur | Min | Max | Moy. | Speed (u.c./tic) |
|---|---|---|---|---|---|---|
| Boule de feu du Diablotin — DoomImpBall | 3 | × random(1, 8) | 3 | 24 | 13,5 | 10 |
| Plasma du Cacodémon — CacodemonBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 10 |
| Plasma de l'Arachnotron — ArachnotronPlasma | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Plasma du fusil à plasma — PlasmaBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Boule du Baron de l'Enfer / Chevalier de l'Enfer — BaronBall | 8 | × random(1, 8) | 8 | 64 | 36 | 15 |
| Boule de feu du Mancubus — FatShot | 8 | × random(1, 8) | 8 | 64 | 36 | 20 |
| Traceur du Revenant (à tête chercheuse) — RevenantTracer | 10 | × random(1, 8) | 10 | 80 | 45 | 10 |
| Roquette (impact direct) — Rocket | 20 | × random(1, 8) | 20 | 160 | 90 | 20 |
| Spray BFG (par rayon) | 67 | × 1..8 loop | 15 | 120 | 67,5 | — |
| Boule de BFG (impact direct) — BFGBall | 100 | × random(1, 8) | 100 | 800 | 450 | 25 |
Snippet DECORATE/ZScript qui reproduit ces chiffres.
ACTOR CustomProjectile : DoomImpBall{ Damage 3 // Min 3 Max 24 Avg 13.5 (× random(1, 8))}Calculateur de dégâts ZDoom. Plage, DPS et tics pour les moddeurs Doom.
Qu'est-ce que le calculateur de dégâts et de DPS de ZDoom ?
Comment calculer dégâts, DPS et tics en ZDoom (et comment le calculateur s'y prend)
Dégâts, DPS et tics — les formules du moteur
- = Propriété Damage du bloc Default de l'acteur en DECORATE ou ZScript (un entier)
- = Bornes du multiplicateur aléatoire — 1 et 8 par défaut ; 1 et 4 avec +STRIFEDAMAGE ; 1 et 3 pour les pellets de pistolet/fusil/mitrailleuse ; 1 et 10 pour poing/tronçonneuse
- = Tics par attaque — la durée de la machine à états entre deux appels de tir consécutifs dans le bloc States de l'acteur
- = PV de la cible — 20 pour Zombieman, 60 pour Imp, 400 pour Cacodémon, 1 000 pour Baron de l'Enfer, 3 000 pour Spider Mastermind, 4 000 pour Cyberdémon
- = Multiplicateur DamageFactor — 1,0 normal, 0,5 résistance, 2,0 vulnérabilité, 0,0 invulnérable
- = Temps en secondes — multiplié par TICRATE = 35 et arrondi à des tics entiers pour les durées d'état et l'argument de Delay()
- = Distance de vol en unités de carte et Speed du projectile en unités de carte par tic ; la division avec plafond donne les tics parce que le moteur avance par pas entiers
Exemples résolus avec tous les calculs
Boule de feu de l'Imp contre un Cacodémon — le scénario par défaut
DPS du pistolet contre un Zombieman — "le pistolet est-il vraiment nul ?"
Super fusil contre un Chevalier de l'Enfer — la réalité à bout portant
Impact direct de boule BFG contre un Cyberdémon (sans spray)
Arithmétique d'ACS Delay — "combien de tics font 2,5 secondes ?"
Conseils dégâts et équilibrage ZDoom pour moddeurs, mappeurs et curieux
- Lis la propriété Damage de ton acteur en valeur attendue, pas en valeur littérale. Un projectile avec Damage 5 fait en moyenne 22,5 en partie (5 × 4,5), pas 5. Si ton nouveau monstre doit rivaliser avec la boule de l'Imp (attendu 13,5), mets Damage 3 — pas Damage 10. L'erreur numéro un en équilibrage DECORATE, c'est lire Damage 10 comme "il tape pour 10", alors qu'il tape entre 10 et 80 avec une moyenne de 45.
- Le flag +STRIFEDAMAGE est la façon la moins coûteuse de resserrer la plage d'un projectile. Même valeur de Damage, le multiplicateur max passe de 8 à 4, la valeur attendue passe de 4,5× à 2,5×. Utile quand tu veux un projectile intermédiaire prévisible (par exemple une roquette personnalisée qui doit donner du 60 à 240 au lieu de 60 à 480). Marche sur n'importe quel acteur dans n'importe quel mod ZDoom, quel que soit le jeu de base — le nom vient de Strife (le premier IWAD non-Doom du moteur) mais le flag est portable et s'utilise couramment dans les mods Doom.
- Les armes hitscan ignorent complètement la propriété Damage. Pistolet, fusil, mitrailleuse et super fusil câblent 5 × random(1, 3) par pellet dans A_FireBullets / A_FirePistol / A_FireShotgun. Pour relever les dégâts d'une arme hitscan, tu touches au nombre de pellets, à l'argument damage de A_CustomBulletAttack ou tu la convertis en projectile. Le poing et la tronçonneuse utilisent 2 × random(1, 10) ; Berserk n'affecte que le poing et multiplie par 10 après le tirage (donc 20 à 200 par coup, attendu 110).
- Les tics entre attaques pèsent plus que les dégâts par tir quand tu compares des DPS. La mitrailleuse et le pistolet ont des dégâts par tir identiques (5 à 15, attendu 10), mais la mitrailleuse tire toutes les ~4 tics contre les ~14 du pistolet — environ 3,5× de DPS pour la même arithmétique par pellet. Quand tu équilibres un mod d'armes, fixe d'abord le DPS cible (pistolet vanilla ~25 DPS, fusil ~70, super fusil ~150, mitrailleuse ~88, fusil à plasma ~263, impact direct du lance-roquettes ~159), puis déduis les dégâts par tir et les tics par attaque qui le produisent.
- Sers-toi de l'antisèche des 19 monstres pour vérifier le design d'une rencontre. Zombieman (PV 20), Shotgun Guy (30), Wolfenstein SS (50), Imp (60), Chaingunner (70), Lost Soul / Commander Keen (100), Demon / Spectre (150), Revenant (300), Pain Elemental / Cacodémon (400), Chevalier de l'Enfer / Arachnotron (500), Mancubus (600), Archi-infâme (700), Baron de l'Enfer (1 000), Spider Mastermind (3 000), Cyberdémon (4 000). Un tir de super fusil (attendu 200, max 300) abat dans le meilleur cas tout ce qui va jusqu'au Revenant (PV 300) ; le Pain Elemental et le Cacodémon (PV 400) demandent au moins deux bons tirs. Un tir de pistolet (attendu 10) ne descend qu'un Zombieman. Échanger le Demon de la première salle contre un Mancubus, ce n'est pas un saut de difficulté de 1,5× — c'est 4×, parce que la courbe des PV est géométrique, pas linéaire.
- GZDoom v3.2.2 (fin 2017) et au-delà garantissent que 35 tics valent exactement une seconde réelle. Les versions antérieures affichaient un intervalle de 28 ms par tic (35 tics se voyaient comme 0,98 seconde) à cause de la troncature entière dans le code du timer. Si ton arithmétique ACS Delay() exige une précision infraseconde et que tu vises des joueurs sur ports anciens, compte les 2 % de dérive : `Delay(35 * 60)` sur le timer legacy fait 58,8 secondes réelles, soit 1,2 seconde de moins qu'une vraie minute.
- Le spray BFG est le seul projectile qui ne suit pas la règle Damage × random(1, 8). À l'intérieur de A_BFGSpray, les dégâts par rayon sont calculés comme la somme de 15 random(1, 8) indépendants — plage 15 à 120, attendu 67,5, distribution en cloche (pas uniforme). La boule de BFG lâche jusqu'à 40 rayons dans un cône frontal de 90°, donc en couverture complète 40 × 67,5 = 2 700 points de dégâts attendus se cumulent sur les 100 à 800 de la boule elle-même. C'est ça qui explique l'effet "Cyberdémon descendu en deux tirs" — uniquement quand l'impact direct et le cône touchent en même temps.
- Les unités de carte ont deux équivalences, pas une. À l'horizontale, 16 unités = 1 pied (0,3048 m) ; à la verticale, seulement 10 unités = 1 pied, parce que le mode 320×200 d'origine de Doom étirait l'image de 20 % en hauteur. Pour convertir Speed, le calculateur utilise l'équivalence horizontale, parce que les projectiles voyagent dans le plan de la carte : Speed 10 (boule de l'Imp) ≈ 6,67 m/s ≈ 15 mph ; Speed 25 (plasma, boule du BFG) ≈ 16,67 m/s ≈ 60 km/h ≈ 37 mph. La vitesse de course de Doomguy tourne autour de Speed 16, soit environ 24 mph — d'où le fait qu'un Imp te rattrape de temps en temps dans un couloir.
- DamageFactor résout résistances et vulnérabilités sans réécrire le code des dégâts. DamageFactor 'Fire', 0.5 sur un monstre divise par deux les dégâts de type Fire ; 2.0 les double ; 0.0 rend le monstre immunisé. Le mode DPS du calculateur expose une seule case scalaire DamageFactor qui modélise le cas résistant sans créer de type de dégâts maison — pratique quand tu compares le TTK d'une arme vanilla contre, mettons, une variante de Cacodémon avec 0,7 de résistance au plasma.
- Le pire cas et la fourchette pèsent plus que la moyenne dès que tu signes un combat tendu. "Tirs attendus pour tuer = 30" cache le fait qu'un Cacodémon peut survivre à 134 boules d'Imp dans le pire cas pathologique. Le calculateur affiche meilleur et pire cas à côté de l'attendu pour exactement cette raison : quand tu dessines une slaughter map et qu'un monstre doit tomber dans un budget de tirs strict, tu dimensionnes sur le pire cas. Pour une map classique, tu dimensionnes sur l'attendu. Les deux chiffres peuvent différer d'un facteur 5 à 10 pour les projectiles en random(1, 8).
- Si tu moddes en français, garde les noms d'acteur et de propriété en anglais tels qu'ils apparaissent dans le moteur (Damage, Speed, Health, +STRIFEDAMAGE, Cacodemon, Cyberdemon). DECORATE et ZScript n'acceptent pas d'identifiants localisés, donc même si la traduction officielle ZDoom (`language.fr`) parle de "Cacodémon" ou de "Diablotin" pour l'Imp dans les écrans de jeu, dans le code l'acteur reste Cacodemon ou DoomImp. Conserver les noms anglais dans tes PK3 t'épargne des heures de débogage le jour où un autre moddeur ouvre ton WAD.
Calculateur de dégâts ZDoom — questions fréquentes
Pourquoi mon projectile avec Damage 10 frappe-t-il parfois pour 80 ?
Quelle est la formule des dégâts du pistolet dans le Doom classique ?
Combien de tics y a-t-il dans une seconde de ZDoom ?
Comment calculer ACS Delay() pour X secondes ?
À quoi sert le flag +STRIFEDAMAGE ?
Combien de PV a le Cyberdémon ?
Pourquoi les dégâts du BFG sont-ils si bizarres — c'est quoi cette boucle de 15 random ?
Le calculateur marche-t-il aussi pour les acteurs ZScript ?
Le calculateur marche-t-il avec Brutal Doom ou Project Brutality ?
La traduction française officielle de ZDoom influe-t-elle sur les calculs ?
Y a-t-il une différence de dégâts entre PrBoom+, ZDoom, GZDoom et Zandronum ?
Qu'est-ce qui distingue ZScript et DECORATE côté dégâts ?
Pourquoi le traceur du Revenant tape-t-il 10 à 80 et pas 10 à 40 ?
La difficulté (UV / Nightmare) augmente-t-elle les dégâts des armes ?
À quel point le calculateur est-il fidèle au jeu réel ?
Glossaire dégâts et temps en ZDoom
Propriété Damage
Propriété numérique du bloc Default d'un acteur DECORATE ou ZScript que le moteur multiplie par random(1, 8) à chaque impact (random(1, 4) avec +STRIFEDAMAGE). Écrire Damage 10 produit en partie une plage de 10 à 80, jamais un 10 plat.
+STRIFEDAMAGE
Flag d'acteur qui change le multiplicateur des dégâts de projectile de random(1, 8) à random(1, 4). Même valeur Damage, plage plus étroite, moyenne plus basse (Damage × 2,5 au lieu de Damage × 4,5). Marche sur n'importe quel acteur dans n'importe quel mod ZDoom, quel que soit le jeu de base.
tic
Unité atomique de temps du moteur Doom. TICRATE = 35 tics par seconde ; 1 tic ≈ 28,5714 ms. Les durées d'état en DECORATE / ZScript et l'argument d'ACS Delay() s'expriment en tics. GZDoom v3.2.2 et au-delà garantissent 35 tics = 1,000 seconde exacte ; les versions antérieures tronquaient à 28 ms.
Arme hitscan
Arme dont les dégâts se résolvent instantanément le long d'une ligne droite, sans acteur projectile au milieu. Pistolet, fusil, super fusil et mitrailleuse sont hitscan ; leurs formules sont câblées dans les action functions A_Fire* (5 × random(1, 3) par pellet) et la propriété Damage de l'acteur est ignorée.
DamageFactor
Multiplicateur des dégâts entrants d'un type donné. DamageFactor 'Fire', 0.5 divise par deux les dégâts Fire ; 2.0 les double ; 0.0 rend l'acteur immunisé. Le mode DPS du calculateur expose une seule case scalaire DamageFactor qui couvre le cas résistant ou vulnérable.
Berserk
Power-up qui multiplie par 10 les dégâts du poing après le tirage random(1, 10), produisant une plage de 20 à 200 avec une valeur attendue de 110. Seul le poing reçoit le bonus ; tronçonneuse, hitscans et armes à projectile sont laissés de côté.
Unité de carte (map unit)
Unité de coordonnées de l'espace Doom. Par consensus de la communauté, 16 unités horizontales = 1 pied = 0,3048 m (Doomguy mesure 56 unités verticales = 5 pieds 7 pouces). Le calculateur convertit la Speed du projectile (unités par tic) en m/s, km/h et mph via l'équivalence horizontale 16 u.c./pied.
Propriété Speed
Vitesse d'un acteur projectile en unités de carte par tic. Boule de l'Imp Speed 10 ; roquette Speed 20 ; boule du fusil à plasma et boule du BFG Speed 25. Multiplier par 35 donne les unités par seconde ; par 0,667 les mètres par seconde ; par 1,49 les milles par heure.
Spray BFG
Le cône de 40 rayons que la boule de BFG lâche à l'impact (le spray part de l'état Death de la boule via A_BFGSpray). Les dégâts de chaque rayon sont calculés comme la somme de 15 random(1, 8) indépendants : plage 15 à 120 par rayon, valeur attendue 67,5. La réputation du BFG de descendre un Cyberdémon en un tir vient du spray, pas de la boule elle-même.
TICRATE
Constante moteur qui fixe la cadence Doom à 35 tics par seconde depuis 1993. Déclarée dans le doomdef.h d'id Software ; respectée à la lettre par ZDoom, GZDoom, Zandronum, PrBoom+, Boom, MBF21 et tous les autres ports compatibles vanilla. Chaque durée d'état, chaque argument de Delay() et chaque calcul de temps de vol de projectile utilise 35 comme constante de conversion.
DamageFunction
Alternative à la propriété Damage qui permet à un moddeur de renvoyer un entier arbitraire au moment de l'impact via une expression ZScript. Contourne le multiplicateur random(1, 8) — renvoie un nombre plat pour des dégâts déterministes, ou calcule-le à partir de inflictor / target / distance pour un comportement sensible au contexte.
P_Random
Fonction pseudo-aléatoire du moteur Doom : un index parcourt une table statique de 256 octets aux valeurs mélangées entre 0 et 255 et chaque appel renvoie l'octet suivant. Pas uniforme (la valeur 1 n'apparaît jamais, 145 apparaît cinq fois), mais suffisante pour l'arithmétique de combat. Utilisée dans tous les tirages de dégâts ; M_Random tient son propre index pour les effets non jouables, afin de ne pas casser la synchro du multijoueur.
Sources et références
- Le code source de DOOM publié par id Software en 1996 — les formules de dégâts sont lues dans le code lui-même, pas dans un wiki : doomdef.h fixe TICRATE à 35, p_inter.c porte la règle des projectiles (dégâts × random 1..8, ou 1..4 avec STRIFEDAMAGE) et p_pspr.c celles du hitscan (5 × random 1..3 par plomb pour pistolet, fusil et mitrailleuse ; 2 × random 1..10 pour poing et tronçonneuse, ×10 avec Berserk).
- GZDoom sur GitHub — le moteur maintenu, qui reprend les règles de dégâts d'origine à l'identique mais change le timing : depuis la v3.2.2, 35 tics valent exactement 1,000 s, alors que les builds antérieurs tronquaient chaque tic à 28 ms, soit 35 tics ≈ 0,98 s. Les deux sont proposés ici parce que les démos et les mods anciens tournent sur l'ancien timing.
- The Doom Wiki — Tic : le pas de temps atomique du moteur, 1/35 de seconde. C'est aussi pourquoi le temps de vol d'un projectile est arrondi au supérieur ici : le moteur avance par tics entiers, un reste partiel devient donc un tic complet.
- The Level Design Book — métriques de Doom : la convention communautaire utilisée ici pour l'unité de map, 16 unités horizontales par pied, soit 0,01905 m par unité. C'est une convention de mapping et non une constante du moteur — le code de Doom ignore ce qu'est un mètre.