Smart Calculators

Smart

Calculators

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.

ZS>Dégâts et DPS ZDoom

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).

Multiplicateur façon Strife : damage × random(1, 4) au lieu de × random(1, 8). Marche sur n'importe quel acteur dans n'importe quel mod ZDoom, quel que soit le jeu de base.

Dégâts attendus par tir
13,5
3–24 par tir, moy. 13,5
Damage 3 × random(1, 8)
Dégâts minimaux par tir
3
Dégâts maximaux par tir
24

Distribution des dégâts

random(1, N) est uniforme — chaque multiplicateur est équiprobable.

Distribution des dégâts3691215182124Dégâts par tirProbabilitéMoyenne (13,5)
Tableau de distribution des dégâts pour lecteurs d'écran.
Dégâts par tirProbabilité
312,5%
612,5%
912,5%
1212,5%
1512,5%
1812,5%
2112,5%
2412,5%

Référence des projectiles vanilla

Clique une ligne pour la charger dans les champs ci-dessus.

ProjectileDamageMultiplicateurMinMaxMoy.Speed (u.c./tic)
Boule de feu du Diablotin — DoomImpBall3× random(1, 8)32413,510
Plasma du Cacodémon — CacodemonBall5× random(1, 8)54022,510
Plasma de l'Arachnotron — ArachnotronPlasma5× random(1, 8)54022,525
Plasma du fusil à plasma — PlasmaBall5× random(1, 8)54022,525
Boule du Baron de l'Enfer / Chevalier de l'Enfer — BaronBall8× random(1, 8)8643615
Boule de feu du Mancubus — FatShot8× random(1, 8)8643620
Traceur du Revenant (à tête chercheuse) — RevenantTracer10× random(1, 8)10804510
Roquette (impact direct) — Rocket20× random(1, 8)201609020
Spray BFG (par rayon)67× 1..8 loop1512067,5
Boule de BFG (impact direct) — BFGBall100× random(1, 8)10080045025

Snippet DECORATE/ZScript qui reproduit ces chiffres.

ACTOR CustomProjectile : DoomImpBall
{
Damage 3
// Min 3 Max 24 Avg 13.5 (× random(1, 8))
}
Mis à jour le 11 mai 2026
Calculateur de revenu de cargaison OpenTTDCalculatrice de pity Arknights: Endfield

Calculateur de dégâts ZDoom. Plage, DPS et tics pour les moddeurs Doom.

Un calculateur de dégâts ZDoom convertit une valeur Damage en min, moyen et max par tir, en DPS attendu et en tics pour ACS Delay(). Il rassemble sur une seule page le multiplicateur aléatoire, le flag +STRIFEDAMAGE, les presets vanilla de projectiles et de hitscans, un tableau de PV pour 19 monstres et le convertisseur tic-seconde.

Qu'est-ce que le calculateur de dégâts et de DPS de ZDoom ?

Le calculateur de dégâts et de DPS de ZDoom est un outil web qui, à partir d'une propriété Damage d'acteur, d'un preset d'arme ou de projectile et d'une cadence d'attaque, renvoie la plage exacte des dégâts, le DPS attendu, le nombre de tirs nécessaires pour tuer n'importe quel monstre vanilla de Doom ou Doom II et le nombre de tics que doit porter un appel ACS Delay(). Il vise ZDoom et GZDoom — les source ports dans lesquels vivent les acteurs DECORATE et ZScript —, reproduit la même arithmétique de moteur qu'id Software a publiée dans le code source de 1997 et règle en trois modes sur une seule page les trois questions qui reviennent le plus chez les moddeurs francophones de la communauté Doom France.
La confusion principale que le calculateur dissipe, c'est le multiplicateur aléatoire. Par défaut, un projectile avec Damage 3 ne frappe pas en partie pour 3 : il frappe pour 3 multiplié par un entier aléatoire entre 1 et 8, donc la boule de feu de l'Imp (Diablotin dans la traduction officielle ZDoom) tombe dans la plage 3 à 24 avec une valeur attendue de 13,5 par impact. Un projectile maison écrit avec Damage 10 dans le bloc Default inflige 10, 20, 30, 40, 50, 60, 70 ou 80 — jamais exactement 10. Le flag +STRIFEDAMAGE échange le multiplicateur contre random(1, 4) : le même Damage 10 tombe maintenant sur 10, 20, 30 ou 40. Les armes hitscan empruntent un autre chemin : le pistolet, le fusil et la mitrailleuse utilisent 5 multiplié par random(1, 3) par pellet (5, 10 ou 15), et le poing et la tronçonneuse utilisent 2 multiplié par random(1, 10). La propriété Damage d'un acteur hitscan est ignorée — la formule est câblée en dur dans la fonction d'action de l'arme. Le bonus Berserk multiplie les dégâts du poing par 10 après le tirage aléatoire ; aucune autre arme n'en profite.
Le deuxième mode convertit cette plage par tir en DPS attendu. Saisis les dégâts par pellet, le nombre de pellets, les tics entre deux attaques (la durée des états entre deux appels consécutifs à A_FireProjectile ou A_FireBullets) et choisis une cible — Zombieman avec 20 PV, Cacodémon avec 400, Spider Mastermind avec 3 000, Cyberdémon avec 4 000 ou n'importe lequel des 19 monstres vanilla extraits des définitions ZScript de GZDoom. Le calculateur renvoie les dégâts attendus par tir, le DPS attendu, le nombre de tirs attendu pour tuer, le temps avant la mort en secondes et les compteurs dans le meilleur et le pire des cas, pour que tu voies toute la fourchette et pas seulement la moyenne. Le champ DamageFactor couvre les cas de résistance et de vulnérabilité (0,5 divise les dégâts par deux, 2,0 les double, 0 rend la cible invulnérable).
Le troisième mode regroupe deux convertisseurs dont un moddeur Doom a besoin chaque fois qu'il touche à un script ACS ou qu'il équilibre le temps de vol d'un projectile. Le premier convertit les tics en secondes via la constante TICRATE = 35 : Delay(35 * 2) vaut exactement deux secondes dans le GZDoom moderne (v3.2.2 et au-delà), tandis qu'avant la v3.2.2 ces mêmes 35 tics s'affichaient comme 0,98 seconde à cause d'une troncature de division entière dans le code du timer. Le second convertit la propriété Speed d'un projectile (unités de carte par tic) en unités de carte par seconde, mètres par seconde, km/h et mph, en utilisant l'équivalence consacrée par la communauté de 16 unités de carte horizontales = 1 pied. Si tu colles une distance cible à côté de Speed, tu obtiens aussi le temps de vol arrondi à l'entier supérieur, exactement comme le moteur avance image par image.

Comment calculer dégâts, DPS et tics en ZDoom (et comment le calculateur s'y prend)

Trois calculs indépendants cohabitent ici, parce que trois questions reviennent dans n'importe quel fil DECORATE, ZScript ou ACS. Le calculateur ci-dessus relance les trois à chaque changement d'entrée ; la version manuelle ci-dessous est celle que tu poses sur papier pour vérifier un projectile avant de recharger le WAD.
Avec l'outil
1. Choisis le mode en haut : Plage de dégâts, DPS et temps avant la mort, ou Convertisseur tics et vitesse. Chaque mode conserve ses propres entrées quand tu basculer.
2. Mode Plage de dégâts. Choisis le sous-mode qui correspond à ton acteur. Le sous-mode Projectile accepte une valeur Damage et l'interrupteur optionnel +STRIFEDAMAGE, et renvoie Damage × 1 (min), Damage × 4,5 (moyen) et Damage × 8 (max). Le sous-mode Hitscan accepte un preset d'arme et un nombre de pellets — la formule par pellet est câblée. Le sous-mode Personnalisé accepte un min et un max libres, utile si tu travailles avec une expression DamageFunction. Choisir un preset de projectile (boule de feu de l'Imp, plasma du Cacodémon, plasma du fusil à plasma, roquette, plasma du BFG, rayon du spray BFG et six autres) auto-remplit Damage depuis le bloc Default de l'acteur vanilla.
3. Mode DPS. Saisis les dégâts par pellet, le type de formule (projectile, STRIFEDAMAGE ou hitscan), le nombre de pellets, les tics par attaque, et choisis un monstre dans la liste vanilla de 19 lignes (ou tape des PV personnalisés). L'accordéon avancé expose DamageFactor et un override des PV de la cible. La ligne principale affiche le DPS attendu et le nombre de tirs attendu pour tuer ; les cartes secondaires affichent le temps avant la mort en secondes, le meilleur cas (chaque tirage tombe au maximum) et le pire cas (chaque tirage tombe au minimum).
4. Mode Tics et vitesse. Tape un nombre de tics et tu vois les secondes correspondantes, ou l'inverse. En dessous, saisis un Speed (unités de carte par tic) et une distance optionnelle en unités de carte pour obtenir la vitesse en u.c./s, m/s, km/h et mph, en plus du temps de vol en tics et secondes.
À la main
1. Plage de dégâts d'un projectile : min = $D$, max = $D \times 8$, attendu = $D \times 4{,}5$. Avec +STRIFEDAMAGE : max = $D \times 4$, attendu = $D \times 2{,}5$. La distribution est uniforme — chaque multiplicateur de 1 à 8 (ou de 1 à 4) est équiprobable.
2. Dégâts hitscan par pellet : pistolet / fusil / mitrailleuse = $5 \times \text{random}(1, 3)$, moyenne 10 par pellet. Poing / tronçonneuse = $2 \times \text{random}(1, 10)$, moyenne 11. Berserk multiplie par 10 les dégâts du poing après le tirage. Multiplie par le nombre de pellets : fusil 7, super fusil 20, tout le reste 1.
3. DPS attendu : $\text{DPS} = \frac{\text{dégâts attendus par tir} \times 35}{\text{tics par attaque}}$. Le 35 est TICRATE ; les tics par attaque sont la somme des durées d'état entre deux appels consécutifs à A_FireProjectile ou A_FireBullets dans le bloc States de l'acteur.
4. Tirs pour tuer : $\lceil \frac{\text{PV}}{\text{dégâts attendus par tir} \times \text{damageFactor}} \rceil$. Temps avant la mort : tirs pour tuer multiplié par tics par attaque et divisé par 35.
5. Tics en secondes : tics divisé par 35. Secondes en tics : round(secondes × 35). Pour Delay() en ACS, écris `Delay(35 * secondes)` directement — le compilateur résout la multiplication à la compilation.
6. Vol d'un projectile : tics = $\lceil \frac{\text{distance}}{\text{Speed}} \rceil$, secondes = tics divisé par 35. Le moteur avance par tics entiers, donc on arrondit toujours à l'entier supérieur. Vitesse réelle : $\text{mph} \approx \text{Speed} \times 1{,}49$, $\text{km/h} \approx \text{Speed} \times 2{,}4$, $\text{m/s} \approx \text{Speed} \times 0{,}667$.
Reproduction du scénario par défaut : boule de feu de l'Imp avec Damage 3 contre un Cacodémon (PV 400). Dégâts attendus par tir = $3 \times 4{,}5 = 13{,}5$. 400 divisé par 13,5 = 29,6, donc le nombre de tirs attendu est de 30. Le même Cacodémon tombe en 2 à 4 tirs de super fusil (meilleur cas 2, pire 4, attendu 2) : chaque tir inflige en moyenne 200 points de dégâts avec la formule canonique à 20 pellets — un écart de 15× par tir qui se traduit directement par le nombre de secondes que tu passes devant un Cacodémon selon l'arme dans tes mains.

Dégâts, DPS et tics — les formules du moteur

deˊgaˆtsmin=Dmmin,deˊgaˆtsmax=Dmmax,E[deˊgaˆts]=Dmmin+mmax2DPS=E[deˊgaˆts par tir]35tattaque,tirs=HE[deˊgaˆts par tir]ftics=round(s35),vol=dv\begin{aligned} \text{dégâts}_{\min} &= D \cdot m_{\min}, \quad \text{dégâts}_{\max} = D \cdot m_{\max}, \quad \mathbb{E}[\text{dégâts}] = D \cdot \tfrac{m_{\min} + m_{\max}}{2} \\ \text{DPS} &= \frac{\mathbb{E}[\text{dégâts par tir}] \cdot 35}{t_{\text{attaque}}}, \quad \text{tirs} = \left\lceil \frac{H}{\mathbb{E}[\text{dégâts par tir}] \cdot f} \right\rceil \\ \text{tics} &= \text{round}(s \cdot 35), \quad \text{vol} = \left\lceil \frac{d}{v} \right\rceil \end{aligned}
  • DD = Propriété Damage du bloc Default de l'acteur en DECORATE ou ZScript (un entier)
  • mmin,mmaxm_{\min}, m_{\max} = 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
  • tattaquet_{\text{attaque}} = Tics par attaque — la durée de la machine à états entre deux appels de tir consécutifs dans le bloc States de l'acteur
  • HH = 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
  • ff = Multiplicateur DamageFactor — 1,0 normal, 0,5 résistance, 2,0 vulnérabilité, 0,0 invulnérable
  • ss = Temps en secondes — multiplié par TICRATE = 35 et arrondi à des tics entiers pour les durées d'état et l'argument de Delay()
  • d,vd, v = 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
Le 35 du dénominateur du DPS, c'est TICRATE, la constante qu'id Software a fixée en tête de doomdef.h en 1993 et que ZDoom, GZDoom et tous les autres source ports de Doom respectent à la lettre. La même constante gouverne chaque durée d'état en DECORATE et ZScript : un état `TNT1 A 24` dure 24 tics, c'est exactement l'intervalle par attaque qui atterrit au dénominateur du DPS. Le spray BFG est la seule exception à la règle uniforme 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, donc la plage par rayon est 15 à 120 avec une valeur attendue de 67,5 ; une boule de BFG lâche jusqu'à 40 rayons. Le multiplicateur Berserk s'applique après le tirage random(1, 10), donc un coup de poing sous Berserk tombe dans la plage 20 à 200 avec une valeur attendue de 110.

Exemples résolus avec tous les calculs

Boule de feu de l'Imp contre un Cacodémon — le scénario par défaut

La boule de feu de l'Imp (acteur DoomImpBall) a Damage 3 dans le bloc Default. Plage par tir = 3 à 24 (3 × random(1, 8)), attendu = 13,5. PV du Cacodémon = 400 (propriété Health de l'acteur Cacodemon, identique à la valeur reportée sur le Doom Wiki). Tirs attendus pour tuer = $\lceil 400 / 13{,}5 \rceil$ = 30. Pire cas (chaque tirage donne le minimum) = $\lceil 400 / 3 \rceil$ = 134. Meilleur cas (chaque tirage donne le maximum) = $\lceil 400 / 24 \rceil$ = 17. Cette fourchette 17 à 134 surprend les moddeurs débutants : le multiplicateur aléatoire est la variable dominante, bien plus que la valeur de Damage elle-même. Une boule avec Damage 6 divise l'attendu par deux (15 tirs), mais le pire cas ne descend qu'à 67.

DPS du pistolet contre un Zombieman — "le pistolet est-il vraiment nul ?"

Formule du pistolet : $5 \times \text{random}(1, 3)$ par tir, pellets 1. Plage par tir = 5 à 15, attendu = 10. A_FirePistol tire environ 150 fois par minute dans le Doom vanilla (~14 tics par cycle). DPS = $10 \times 35 / 14$ ≈ 25 points de dégâts attendus par seconde. PV du Zombieman = 20. Tirs attendus pour tuer = $\lceil 20 / 10 \rceil$ = 2. Meilleur cas = 2 tirs (deux 15 d'affilée), pire cas = 4 tirs (quatre 5). Temps avant la mort avec 14 tics par attaque = $2 \times (14/35) = 0{,}8$ seconde attendue, jusqu'à 1,6 dans le pire cas. Le pistolet n'est pas inutile — il abat un Zombieman en 2 tirs et grignote un Imp en 6 — mais son DPS tourne autour du tiers de celui de la mitrailleuse (même formule par tir, ~4 tics par attaque au lieu de 14) et du dixième du lance-roquettes. C'est précisément pour ça que la mitrailleuse le met au placard dès qu'elle tombe entre tes mains.

Super fusil contre un Chevalier de l'Enfer — la réalité à bout portant

Formule du super fusil : $5 \times \text{random}(1, 3)$ par pellet, pellets 20. Plage par tir = 100 à 300, attendu = 200. PV du Chevalier de l'Enfer (Hell Knight) = 500. Tirs attendus pour tuer = $\lceil 500 / 200 \rceil$ = 3. Pire cas = $\lceil 500 / 100 \rceil$ = 5 tirs (chaque pellet sort un 1). Meilleur cas = $\lceil 500 / 300 \rceil$ = 2 tirs (chaque pellet sort un 3). A_FireShotgun2 cycle à ~36,8 tirs/minute (environ 57 tics par attaque en comptant la mise en joue et le rechargement), donc temps avant la mort avec 3 tirs = $3 \times (57/35) \approx 4{,}9$ secondes. Ça colle au consensus des forums Doom France : deux tirs ne descendent un Chevalier que si les dés tombent bien ; trois, c'est le plan réaliste.

Impact direct de boule BFG contre un Cyberdémon (sans spray)

La boule de BFG a Damage 100 dans l'acteur BFGBall. Plage de l'impact direct = 100 à 800, attendu = 450. PV du Cyberdémon = 4 000, sans dégâts de zone (le Cyberdémon est immunisé contre les dégâts d'explosion, donc seuls les impacts directs comptent). Impacts directs attendus = $\lceil 4000 / 450 \rceil$ = 9. Meilleur cas = $\lceil 4000 / 800 \rceil$ = 5. Pire cas = $\lceil 4000 / 100 \rceil$ = 40 impacts (chaque tirage donne le minimum). Le conseil classique du wiki "trois à quatre tirs de BFG tuent un Cyberdémon" suppose que les rayons du spray touchent aussi et que la distance maintient la bête dans le cône. La vraie efficacité du BFG vient du spray : une boule avec couverture complète des 40 rayons cumule 450 + 40 × 67,5 = 3 150 points de dégâts attendus par pression de gâchette, ce qui couche le Cyberdémon en 2 tirs si tu plantes à la fois l'impact direct et le cône.

Arithmétique d'ACS Delay — "combien de tics font 2,5 secondes ?"

Tics par seconde = 35. Secondes en tics pour 2,5 = $\text{round}(2{,}5 \times 35)$ = round(87,5) = 88 tics. En ACS : écris `Delay(35 * 25 / 10)` si tu veux garder l'arithmétique lisible, ou directement `Delay(88)`. Les équivalences que tout moddeur garde en tête : 0,1 s = 4 tics, 0,5 s = 18, 1 s = 35, 1,5 s = 53, 2 s = 70, 3 s = 105, 5 s = 175, 10 s = 350. Speed de la boule de feu de l'Imp = 10 unités de carte par tic. Vol sur 1 024 unités = $\lceil 1024 / 10 \rceil$ = 103 tics ≈ 2,94 secondes, soit environ 15 mph (10 × 1,49 ≈ 14,9). La boule du fusil à plasma à Speed 25 couvre les mêmes 1 024 u.c. en 41 tics ≈ 1,17 seconde, soit environ 60 km/h.

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