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 \times \text{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 \times \text{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 $\text{Damage} \times \text{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 ?
ZDoom multiplie la propriété Damage d'un projectile par random(1, 8) à chaque impact. Damage 10 donne 10, 20, 30, 40, 50, 60, 70 ou 80 — toutes les valeurs sont équiprobables. La moyenne est 45. Le flag +STRIFEDAMAGE change le multiplicateur en random(1, 4) : il sort 10, 20, 30 ou 40 avec une moyenne de 25.
Quelle est la formule des dégâts du pistolet dans le Doom classique ?
Le pistolet utilise $5 \times \text{random}(1, 3)$ par tir, donc chaque coup fait 5, 10 ou 15 points avec une valeur attendue de 10. La mitrailleuse et le fusil (par pellet) utilisent la même formule. La propriété Damage d'un acteur hitscan est ignorée — la formule est câblée dans A_FirePistol, A_FireShotgun et A_FireCGun.
Combien de tics y a-t-il dans une seconde de ZDoom ?
35 tics par seconde. TICRATE est fixé à 35 depuis la sortie originale de 1993. GZDoom v3.2.2 et au-delà garantissent que 35 tics valent exactement 1,000 seconde de temps réel ; les versions antérieures tronquaient à 28 ms par tic, ce qui faisait afficher 35 tics comme 0,98 seconde — une dérive de 2 % qui ne compte que dans les longues chaînes de Delay().
Comment calculer ACS Delay() pour X secondes ?
Multiplie les secondes par 35 et arrondis à l'entier. 0,5 s = 18 tics, 1 s = 35, 2 s = 70, 5 s = 175, 10 s = 350, 60 s = 2 100. En ACS, écris `Delay(35 * secondes)` directement — le compilateur résout la multiplication à la compilation.
À quoi sert le flag +STRIFEDAMAGE ?
+STRIFEDAMAGE é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. Marche sur n'importe quel acteur dans n'importe quel mod ZDoom, quel que soit le jeu de base — le nom vient de Strife mais le flag est portable. Utile quand tu veux un projectile intermédiaire prévisible.
Combien de PV a le Cyberdémon ?
4 000 PV. Le Cyberdémon ne prend que des dégâts directs — les éclats des roquettes et des tirs du Mancubus ne le touchent pas. Le BFG9000 est la méthode canonique (environ 2 à 4 pressions de gâchette en comptant le spray) ; il tombe aussi sous environ 20 tirs de super fusil à bout portant ou 45 impacts directs de roquette si tu as les munitions. Le tableau des 19 lignes sous le calculateur recense toutes les valeurs vanilla de Doom.
Pourquoi les dégâts du BFG sont-ils si bizarres — c'est quoi cette boucle de 15 random ?
La boule principale du BFG suit la formule standard (Damage 100 × random(1, 8) = 100 à 800), mais les rayons du spray non. Chacun des 40 rayons maximum additionne 15 random(1, 8) indépendants : plage 15 à 120 par rayon, valeur attendue 67,5. Le Doom Wiki rappelle que le déterminisme de la table pseudo-aléatoire P_Random (256 octets fixes) ramène la plage pratique à 49 à 87, mais le maximum théorique par rayon reste 120.
Le calculateur marche-t-il aussi pour les acteurs ZScript ?
Oui. ZScript et DECORATE partagent la même sémantique de Damage / DamageFunction / Speed / Health / +STRIFEDAMAGE — seule la syntaxe change. Un acteur ZScript avec `Damage 5;` dans le bloc Default tire exactement la même formule $5 \times \text{random}(1, 8)$ qu'un acteur DECORATE avec la même propriété. Les résultats du calculateur s'appliquent aux deux.
Le calculateur marche-t-il avec Brutal Doom ou Project Brutality ?
Seulement pour les acteurs qui conservent la propriété Damage standard et les fonctions hitscan vanilla. Brutal Doom (Sergeant Mark IV) et Project Brutality redéfinissent la majorité de leurs armes avec des expressions DamageFunction maison et des routines A_FireCustomMissile personnalisées qui ne respectent pas le multiplicateur random(1, 8). Pour ces armes, le calculateur affiche le calcul vanilla équivalent, à ajuster en lisant le code DECORATE/ZScript de l'acteur précis du mod.
La traduction française officielle de ZDoom influe-t-elle sur les calculs ?
Non. Le fichier de langue `language.fr` historiquement maintenu dans le dépôt ZDoom de Randy Heitman (Diablotin pour Imp, Cacodémon, Cyberdémon, Baron de l'Enfer, Chevalier de l'Enfer, Archi-infâme, Lance-roquettes, Fusil à plasma) ne traduit que les chaînes du menu, du HUD et des messages de ramassage. L'arithmétique du moteur — random(1, 8), TICRATE = 35, +STRIFEDAMAGE, PV des monstres — se comporte à l'identique sur un build GZDoom anglais et sur un build avec la traduction française chargée.
Y a-t-il une différence de dégâts entre PrBoom+, ZDoom, GZDoom et Zandronum ?
Non pour le Doom et Doom II vanilla. PrBoom+, ZDoom, GZDoom et Zandronum préservent à la lettre TICRATE 35, les formules random(1, 8) et random(1, 3) et les valeurs de PV d'origine. Les écarts entre ports apparaissent sur des fonctionnalités avancées (physique, MAPINFO, ZScript, scripts de monstres MBF21), pas sur l'arithmétique de base des dégâts. Un Cacodémon avec PV 400 tombe de la même façon avec la même séquence de tirages dans les quatre moteurs.
Qu'est-ce qui distingue ZScript et DECORATE côté dégâts ?
Rien sur le plan mathématique, juste la syntaxe. ZScript est un sur-ensemble de DECORATE : le même `Damage 10` dans le bloc Default tire le même random(1, 8), et le même flag +STRIFEDAMAGE échange le multiplicateur contre random(1, 4). DECORATE est marqué obsolète dans GZDoom mais reste compatible ; pour les nouveaux mods on recommande ZScript, mais pour l'arithmétique de dégâts du calculateur ça revient au même.
Pourquoi le traceur du Revenant tape-t-il 10 à 80 et pas 10 à 40 ?
L'acteur RevenantTracer porte Damage 10 dans son bloc, mais il NE porte PAS le flag +STRIFEDAMAGE — il utilise le multiplicateur par défaut random(1, 8). C'est pour ça que sa plage est 10 à 80 avec une valeur attendue de 45, pas 10 à 40. Confusion classique parce que les roquettes du Revenant ont des allures de math Strife ; en vrai c'est une autre formule.
La difficulté (UV / Nightmare) augmente-t-elle les dégâts des armes ?
Non. Nightmare double l'agressivité des monstres et les munitions ramassées, mais les dégâts d'arme sont identiques sur les cinq niveaux de difficulté. Le seul multiplicateur de dégâts dans le Doom vanilla, c'est le power-up Berserk, qui multiplie par 10 les dégâts du poing. La difficulté change qui tire en premier et à quelle fréquence — pas la force des impacts.
À quel point le calculateur est-il fidèle au jeu réel ?
Exact au niveau moteur pour le comportement vanilla de Doom et Doom II sous ZDoom / GZDoom. La vérification couvre tous les presets de projectile, toutes les armes hitscan, toutes les valeurs de PV de monstre et la boucle 15× du spray BFG — chaque plage de dégâts, chaque PV et chaque Speed de projectile correspond à l'unité près aux définitions de l'acteur vanilla. Les acteurs de remplacement en DECORATE / ZScript, les expressions DamageFunction maison et les opus modernes (Doom 2016, Eternal, The Dark Ages) utilisent une autre arithmétique et sortent du périmètre.
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 \times \text{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.
Contenu verifie par Smart Calculators