Smart Calculators

Smart

Calculators

Calcolatore di danno e DPS di ZDoom

Calcola il range esatto di danno, il DPS atteso e il tempo per uccidere di qualsiasi arma o proiettile di ZDoom / GZDoom. Include il moltiplicatore random(1,8), la flag STRIFEDAMAGE e un convertitore di tic in secondi per gli script ACS.

ZS>Danno e DPS di ZDoom

Range di danno, DPS e convertitore di tic per modder Doom.

Calcola danno min/medio/max per qualsiasi proiettile, arma hitscan o DamageFunction personalizzata.

Formula di danno

Usa Damage × random(1, 8) — la formula standard del proiettile di ZDoom.

Scegli un proiettile vanilla di Doom per riempire Damage automaticamente. Modificare Damage dopo riporta il preset su Personalizzato.

dmg

Il valore N dopo Damage in DECORATE/ZScript (es. Damage 3 sulla palla di fuoco dell'Imp).

Moltiplicatore in stile Strife: damage × random(1, 4) al posto di × random(1, 8). Funziona con qualsiasi actor in qualsiasi mod ZDoom, indipendentemente dal gioco base.

Danno atteso per impatto
13,5
3–24 per impatto, media 13,5
Damage 3 × random(1, 8)
Danno minimo per impatto
3
Danno massimo per impatto
24

Distribuzione del danno

random(1, N) è uniforme — ogni moltiplicatore è ugualmente probabile.

Distribuzione del danno3691215182124Danno per impattoProbabilitàMedia (13,5)
Tabella di distribuzione del danno per screen reader.
Danno per impattoProbabilità
312,5%
612,5%
912,5%
1212,5%
1512,5%
1812,5%
2112,5%
2412,5%

Riferimento proiettili vanilla

Clicca una riga per caricarla nei campi qui sopra.

ProiettileDamageMoltiplicatoreMinMaxMediaSpeed (um/tic)
Palla di fuoco dell'Imp — DoomImpBall3× random(1, 8)32413,510
Palla del Cacodemone — CacodemonBall5× random(1, 8)54022,510
Plasma dell'Arachnotron — ArachnotronPlasma5× random(1, 8)54022,525
Palla del fucile al plasma — PlasmaBall5× random(1, 8)54022,525
Palla del Baron of Hell / Hell Knight — BaronBall8× random(1, 8)8643615
Palla di fuoco del Mancubus — FatShot8× random(1, 8)8643620
Missile tracciante del Revenant — RevenantTracer10× random(1, 8)10804510
Razzo (impatto diretto) — Rocket20× random(1, 8)201609020
Spray della BFG (per raggio)67× 1..8 loop1512067,5
Palla della BFG (impatto diretto) — BFGBall100× random(1, 8)10080045025

Frammento DECORATE/ZScript che riproduce questi numeri.

ACTOR CustomProjectile : DoomImpBall
{
Damage 3
// Min 3 Max 24 Avg 13.5 (× random(1, 8))
}
Aggiornato il 11 mag 2026
Calcolatore trade-up CS2Calcolatore di pity di Arknights: Endfield

Calcolatore danno ZDoom. Range, DPS e tic per i modder di Doom.

Un calcolatore danno ZDoom trasforma un valore Damage nel minimo, medio e massimo per impatto, nel DPS atteso e nei tic per ACS Delay(). Raccoglie su una sola pagina il moltiplicatore casuale, il flag +STRIFEDAMAGE, i preset vanilla di proiettili e hitscan, una tabella di HP con i 19 mostri e il convertitore tic-secondi.

Cos'è il calcolatore danno e DPS di ZDoom?

Il calcolatore danno e DPS di ZDoom è uno strumento web che, partendo dalla proprietà Damage di un actor, da un preset di arma o proiettile e da un ritmo di attacco, restituisce il range esatto di danno, il DPS atteso, gli spari necessari per uccidere qualsiasi mostro vanilla di Doom o Doom II e il numero di tic che una chiamata ACS Delay() deve contenere. Punta a ZDoom e GZDoom — i source port in cui vivono gli actor DECORATE e ZScript — riproduce la stessa aritmetica del motore che id Software ha pubblicato nel codice sorgente del 1997 e risolve in tre modalità su un'unica pagina le tre domande che si ripetono più spesso fra i modder italiani.
La confusione principale che il calcolatore spazza via è il moltiplicatore casuale. Per impostazione predefinita, un proiettile con Damage 3 non colpisce in partita per 3: colpisce per 3 moltiplicato per un intero casuale fra 1 e 8, quindi la palla di fuoco del Diavoletto (Imp) cade nel range da 3 a 24 con un valore atteso di 13,5 per impatto. Un proiettile personalizzato scritto con Damage 10 nel blocco Default infligge 10, 20, 30, 40, 50, 60, 70 oppure 80 — mai esattamente 10. Il flag +STRIFEDAMAGE scambia il moltiplicatore con random(1, 4): lo stesso Damage 10 cade ora in 10, 20, 30 o 40. Le armi hitscan seguono un'altra strada: pistola, fucile a pompa e mitragliatrice (chaingun) usano 5 moltiplicato per random(1, 3) per pellet (5, 10 o 15), mentre pugno e motosega usano 2 moltiplicato per random(1, 10). La proprietà Damage su un actor hitscan viene ignorata — la formula è cablata dentro la action function dell'arma. Il power-up Berserk moltiplica per 10 il danno del pugno dopo il tiro casuale; nessun'altra arma ne beneficia.
La seconda modalità trasforma quel range per colpo in DPS atteso. Inserisci il danno per pellet, il numero di pellet, i tic fra un attacco e l'altro (la durata degli stati fra due chiamate consecutive ad A_FireProjectile o A_FireBullets) e scegli un bersaglio — Zombieman con 20 HP, Cacodemone con 400, Spider Mastermind con 3.000, Cyberdemone con 4.000 o uno qualsiasi dei 19 mostri vanilla estratti dalle definizioni ZScript del GZDoom. Il calcolatore restituisce il danno atteso per colpo, il DPS atteso, gli spari attesi per uccidere, il tempo fino al kill in secondi e i conteggi nel caso migliore e nel caso peggiore, così vedi tutta la forchetta e non solo la media. Il campo DamageFactor copre il caso di resistenze e vulnerabilità (0,5 dimezza il danno, 2,0 lo raddoppia, 0 rende il bersaglio invulnerabile).
La terza modalità copre due convertitori che ogni modder Doom usa ogni volta che tocca uno script ACS o bilancia il tempo di volo di un proiettile. Il primo converte tic in secondi usando TICRATE = 35: Delay(35 * 2) sono esattamente due secondi nel GZDoom moderno (v3.2.2 in poi), mentre prima della v3.2.2 gli stessi 35 tic comparivano come 0,98 secondi a causa del troncamento intero nel codice del timer. Il secondo converte la proprietà Speed di un proiettile (unità di mappa per tic) in unità di mappa al secondo, metri al secondo, km/h e mph, usando l'equivalenza canonica della community di 16 unità di mappa orizzontali = 1 piede. Se affianchi allo Speed una distanza obiettivo, ottieni anche il tempo di volo arrotondato per eccesso al tic successivo — esattamente come il motore avanza di fotogramma in fotogramma.

Come calcolare danno, DPS e tic in ZDoom (e come lo fa il calcolatore)

Qui convivono tre calcoli indipendenti, perché tre domande si ripropongono in qualunque thread su DECORATE, ZScript o ACS. Il calcolatore qui sopra esegue tutti e tre a ogni cambio di input; la versione manuale qui sotto è quella che porti sulla carta per verificare un proiettile prima di ricaricare il WAD.
Con lo strumento
1. Scegli la modalità in alto: Range di danno, DPS e tempo fino al kill, oppure Convertitore di tic e velocità. Ogni modalità conserva i propri input quando passi all'altra.
2. Modalità Range di danno. Scegli la sotto-modalità adatta al tuo actor. La sotto-modalità Proiettile accetta un valore Damage e l'interruttore opzionale +STRIFEDAMAGE e restituisce Damage × 1 (min), Damage × 4,5 (medio) e Damage × 8 (max). La sotto-modalità Hitscan accetta un preset di arma e un numero di pellet — la formula per pellet è cablata. La sotto-modalità Personalizzato accetta un min e un max liberi, utile se stai lavorando con un'espressione DamageFunction. Scegliere un preset di proiettile (palla del Diavoletto, palla del Cacodemone, palla del fucile al plasma, razzo, palla della BFG, raggio dello spray della BFG e altri sei) precompila Damage dal blocco Default dell'actor vanilla.
3. Modalità DPS. Inserisci danno per pellet, tipo di formula (proiettile, STRIFEDAMAGE o hitscan), numero di pellet, tic per attacco e scegli un mostro dalla lista vanilla di 19 righe (oppure digita un HP personalizzato). La fisarmonica avanzata espone DamageFactor e una sovrascrittura di HP del bersaglio. Il riquadro principale mostra il DPS atteso e gli spari attesi per uccidere; nei card secondari compaiono il tempo fino al kill in secondi, il caso migliore (ogni tiro fa il massimo) e il caso peggiore (ogni tiro fa il minimo).
4. Modalità Tic e velocità. Digita un numero di tic e vedi i secondi corrispondenti, o viceversa. Più in basso, inserisci uno Speed (unità di mappa per tic) e una distanza opzionale in unità di mappa per ottenere la velocità in u.m./s, m/s, km/h e mph, oltre al tempo di volo in tic e secondi.
A mano
1. Range di danno di un proiettile: min = $D$, max = $D \times 8$, atteso = $D \times 4{,}5$. Con +STRIFEDAMAGE: max = $D \times 4$, atteso = $D \times 2{,}5$. La distribuzione è uniforme — ogni moltiplicatore da 1 a 8 (o da 1 a 4) ha la stessa probabilità.
2. Danno hitscan per pellet: pistola / fucile a pompa / mitragliatrice = $5 \times \text{random}(1, 3)$, media 10 per pellet. Pugno / motosega = $2 \times \text{random}(1, 10)$, media 11. Berserk moltiplica per 10 il danno del pugno dopo il tiro. Moltiplica per il numero di pellet: fucile a pompa 7, doppietta (super shotgun) 20, tutto il resto 1.
3. DPS atteso: $\text{DPS} = \frac{\text{danno atteso per colpo} \times 35}{\text{tic per attacco}}$. Il 35 è TICRATE; i tic per attacco sono la somma delle durate degli stati fra due chiamate consecutive ad A_FireProjectile o A_FireBullets nel blocco States dell'actor.
4. Spari per uccidere: $\lceil \frac{\text{HP}}{\text{danno atteso per colpo} \times \text{damageFactor}} \rceil$. Tempo fino al kill: spari per uccidere moltiplicato per tic per attacco e diviso per 35.
5. Tic in secondi: tic diviso per 35. Secondi in tic: round(secondi × 35). Per Delay() in ACS scrivi `Delay(35 * secondi)` direttamente — il compilatore risolve la moltiplicazione in fase di compilazione.
6. Volo del proiettile: tic = $\lceil \frac{\text{distanza}}{\text{Speed}} \rceil$, secondi = tic diviso per 35. Il motore avanza in tic interi, quindi si arrotonda sempre per eccesso. Velocità reale: $\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$.
Riproduzione dello scenario predefinito: palla di fuoco del Diavoletto con Damage 3 contro un Cacodemone (HP 400). Danno atteso per colpo = $3 \times 4{,}5 = 13{,}5$. 400 diviso 13,5 = 29,6, quindi gli spari attesi per uccidere sono 30. Lo stesso Cacodemone cade con 2-4 colpi di doppietta (caso migliore 2, peggiore 4, atteso 2): ogni sparo infligge in media 200 punti di danno con la formula canonica a 20 pellet — una differenza di 15× per colpo che si traduce direttamente in quanti secondi passi davanti a un Cacodemone in base all'arma che hai in mano.

Danno, DPS e tic — le formule del motore

dannomin=Dmmin,dannomax=Dmmax,E[danno]=Dmmin+mmax2DPS=E[danno per colpo]35tattacco,spari=HE[danno per colpo]ftic=round(s35),volo=dv\begin{aligned} \text{danno}_{\min} &= D \cdot m_{\min}, \quad \text{danno}_{\max} = D \cdot m_{\max}, \quad \mathbb{E}[\text{danno}] = D \cdot \tfrac{m_{\min} + m_{\max}}{2} \\ \text{DPS} &= \frac{\mathbb{E}[\text{danno per colpo}] \cdot 35}{t_{\text{attacco}}}, \quad \text{spari} = \left\lceil \frac{H}{\mathbb{E}[\text{danno per colpo}] \cdot f} \right\rceil \\ \text{tic} &= \text{round}(s \cdot 35), \quad \text{volo} = \left\lceil \frac{d}{v} \right\rceil \end{aligned}
  • DD = Proprietà Damage del blocco Default dell'actor in DECORATE o ZScript (un intero)
  • mmin,mmaxm_{\min}, m_{\max} = Limiti del moltiplicatore casuale — 1 e 8 per impostazione predefinita; 1 e 4 con +STRIFEDAMAGE; 1 e 3 per i pellet di pistola/fucile a pompa/mitragliatrice; 1 e 10 per pugno/motosega
  • tattaccot_{\text{attacco}} = Tic per attacco — la durata della macchina a stati fra due chiamate consecutive di sparo nel blocco States dell'actor
  • HH = HP del bersaglio — 20 per lo Zombieman, 60 per il Diavoletto, 400 per il Cacodemone, 1.000 per il Baron of Hell, 3.000 per lo Spider Mastermind, 4.000 per il Cyberdemone
  • ff = Moltiplicatore DamageFactor — 1,0 normale, 0,5 resistenza, 2,0 vulnerabilità, 0,0 invulnerabile
  • ss = Tempo in secondi — moltiplicato per TICRATE = 35 e arrotondato a tic interi per le durate di stato e l'argomento di Delay()
  • d,vd, v = Distanza di volo in unità di mappa e Speed del proiettile in unità di mappa per tic; la divisione con tetto restituisce i tic perché il motore avanza in passi interi
Il 35 al denominatore del DPS è TICRATE, la costante che id Software ha fissato in cima a doomdef.h nel 1993 e che ZDoom, GZDoom e qualunque altro source port di Doom rispettano alla lettera. La stessa costante governa ogni durata di stato in DECORATE e ZScript: uno stato `TNT1 A 24` dura 24 tic, l'intervallo per attacco che finisce al denominatore del DPS. Lo spray della BFG è l'unica eccezione alla regola uniforme random(1, 8) — dentro A_BFGSpray il danno per raggio è calcolato come la somma di 15 random(1, 8) indipendenti, quindi il range per raggio è 15-120 con un valore atteso di 67,5; una palla di BFG rilascia fino a 40 raggi. Il moltiplicatore di Berserk viene applicato dopo il tiro random(1, 10), così un pugno con Berserk cade nel range 20-200 con un valore atteso di 110.

Esempi svolti con tutta la matematica

Palla del Diavoletto contro un Cacodemone — lo scenario predefinito

La palla del Diavoletto (DoomImpBall) ha Damage 3 nel blocco Default dell'actor. Range per colpo = 3-24 (3 × random(1, 8)), atteso = 13,5. HP del Cacodemone = 400 (dalla proprietà Health dell'actor Cacodemon, identico al valore riportato sul Doom Wiki in italiano). Spari attesi per uccidere = $\lceil 400 / 13{,}5 \rceil$ = 30. Caso peggiore (ogni tiro fa il minimo) = $\lceil 400 / 3 \rceil$ = 134. Caso migliore (ogni tiro fa il massimo) = $\lceil 400 / 24 \rceil$ = 17. La forchetta 17-134 sorprende i modder alle prime armi: il moltiplicatore casuale è la variabile dominante, ben più del valore di Damage. Una palla con Damage 6 dimezza la stima attesa (15 spari) ma il caso peggiore scende solo a 67.

DPS della pistola contro uno Zombieman — "ma davvero la pistola è inutile?"

Formula della pistola: $5 \times \text{random}(1, 3)$ per colpo, pellet 1. Range per colpo = 5-15, atteso = 10. A_FirePistol spara circa 150 colpi al minuto nel Doom vanilla (~14 tic per ciclo). DPS = $10 \times 35 / 14$ ≈ 25 punti di danno attesi al secondo. HP dello Zombieman = 20. Spari attesi per uccidere = $\lceil 20 / 10 \rceil$ = 2. Caso migliore = 2 colpi (due 15 di fila), caso peggiore = 4 colpi (quattro 5). Tempo fino al kill con 14 tic per attacco = $2 \times (14/35) = 0{,}8$ secondi attesi, fino a 1,6 nel caso peggiore. La pistola non è inutile — abbatte uno Zombieman in 2 colpi e rosicchia un Diavoletto in 6 — ma il suo DPS è circa un terzo di quello della mitragliatrice (stessa formula per colpo, ~4 tic per attacco invece di 14) e un decimo di quello del lanciarazzi: ecco perché la mitragliatrice la manda in pensione appena salta fuori.

Doppietta contro un Hell Knight — la realtà del cannone a bruciapelo

Formula della doppietta: $5 \times \text{random}(1, 3)$ per pellet, pellet 20. Range per colpo = 100-300, atteso = 200. HP dell'Hell Knight = 500. Spari attesi per uccidere = $\lceil 500 / 200 \rceil$ = 3. Caso peggiore = $\lceil 500 / 100 \rceil$ = 5 spari (ogni pellet fa 1). Caso migliore = $\lceil 500 / 300 \rceil$ = 2 spari (ogni pellet fa 3). A_FireShotgun2 cicla a circa 36,8 colpi/minuto (circa 57 tic per attacco contando carica e ricarica), quindi il tempo fino al kill con 3 colpi = $3 \times (57/35) \approx 4{,}9$ secondi. Coincide con il consenso sui forum: due colpi bastano solo se i dadi sono dalla tua parte, tre è il piano realistico.

Impatto diretto di palla BFG contro un Cyberdemone (senza spray)

La palla di BFG ha Damage 100 nell'actor BFGBall. Range dell'impatto diretto = 100-800, atteso = 450. HP del Cyberdemone = 4.000, senza splash (il Cyberdemone è immune al danno da esplosione, quindi contano solo gli impatti diretti). Impatti diretti attesi = $\lceil 4000 / 450 \rceil$ = 9. Caso migliore = $\lceil 4000 / 800 \rceil$ = 5. Caso peggiore = $\lceil 4000 / 100 \rceil$ = 40 impatti (ogni tiro fa il minimo). Il consiglio classico della wiki «tre o quattro impatti di BFG uccidono il Cyberdemone» presuppone che anche i raggi dello spray colpiscano e che la distanza tenga il bestione dentro il cono. La vera efficienza della BFG la fa lo spray: una palla con copertura completa di 40 raggi somma $450 + 40 \times 67{,}5 = 3150$ punti di danno attesi per colpo, il che mette il Cyberdemone a terra in 2 colpi se becchi sia l'impatto diretto sia il cono.

Aritmetica di ACS Delay — "quanti tic sono 2,5 secondi?"

Tic al secondo = 35. Secondi in tic per 2,5 = $\text{round}(2{,}5 \times 35)$ = round(87,5) = 88 tic. In ACS: scrivi `Delay(35 * 25 / 10)` se vuoi tenere l'aritmetica leggibile, oppure direttamente `Delay(88)`. Le equivalenze più utili da memorizzare: 0,1 s = 4 tic, 0,5 s = 18, 1 s = 35, 1,5 s = 53, 2 s = 70, 3 s = 105, 5 s = 175, 10 s = 350. Lo Speed della palla del Diavoletto = 10 unità di mappa per tic. Volo su 1.024 unità = $\lceil 1024 / 10 \rceil$ = 103 tic ≈ 2,94 secondi, circa 15 mph (10 × 1,49 ≈ 14,9). La palla del fucile al plasma con Speed 25 copre le stesse 1.024 u.m. in 41 tic ≈ 1,17 secondi, circa 60 km/h.

Consigli di danno e bilanciamento in ZDoom per modder, mapper e curiosi

  • Leggi la proprietà Damage del tuo actor in valore atteso, non in valore letterale. Un proiettile con Damage 5 fa in media 22,5 in partita (5 × 4,5), non 5. Se il tuo nuovo mostro deve competere con la palla del Diavoletto (atteso 13,5), metti Damage 3 — non Damage 10. L'errore numero uno nel bilanciare DECORATE è leggere Damage 10 come "colpisce per 10", quando in realtà colpisce fra 10 e 80 con una media di 45.
  • Il flag +STRIFEDAMAGE è il modo più economico per stringere il range di un proiettile. Stesso valore di Damage, moltiplicatore massimo che scende da 8 a 4, valore atteso che scende da 4,5× a 2,5×. Utile quando vuoi un proiettile intermedio prevedibile (per esempio un razzo personalizzato che dovrebbe risultare 60-240 invece di 60-480). Funziona su qualsiasi actor in qualunque mod di ZDoom a prescindere dal gioco base — il nome viene da Strife (il primo IWAD non-Doom del motore) ma il flag è portabile e si usa abitualmente anche nei mod di Doom.
  • Le armi hitscan ignorano completamente la proprietà Damage. Pistola, fucile a pompa, mitragliatrice e doppietta cablano $5 \times \text{random}(1, 3)$ per pellet dentro A_FireBullets / A_FirePistol / A_FireShotgun. Per alzare il danno di un'arma hitscan tocchi il numero di pellet, l'argomento damage di A_CustomBulletAttack oppure la converti a proiettile. Pugno e motosega usano $2 \times \text{random}(1, 10)$; Berserk influisce solo sul pugno e moltiplica per 10 dopo il tiro (cioè 20-200 per pugno, atteso 110).
  • I tic per attacco pesano più del danno per colpo quando confronti DPS. Mitragliatrice e pistola hanno identico danno per colpo (5-15, atteso 10), ma la mitragliatrice spara ogni ~4 tic contro i ~14 della pistola — circa 3,5× di DPS con la stessa matematica per pellet. Quando bilanci un mod, decidi prima il DPS bersaglio (pistola vanilla ~25 DPS, fucile a pompa ~70, doppietta ~150, mitragliatrice ~88, fucile al plasma ~263, impatto diretto del lanciarazzi ~159) e poi ricavi il danno per colpo e i tic per attacco che lo producono.
  • Usa il bigino dei 19 mostri per verificare il design di un combattimento. Zombieman (HP 20), Shotgun Guy (30), Wolfenstein SS (50), Diavoletto/Imp (60), Chaingunner (70), Lost Soul / Commander Keen (100), Demon / Spectre (150), Revenant (300), Pain Elemental / Cacodemone (400), Hell Knight / Arachnotron (500), Mancubus (600), Arch-vile (700), Baron of Hell (1.000), Spider Mastermind (3.000), Cyberdemone (4.000). Un colpo di doppietta (atteso 200, max 300) nel caso migliore abbatte tutto fino al Revenant (HP 300); Pain Elemental e Cacodemone (HP 400) chiedono come minimo due colpi buoni. Un colpo di pistola (atteso 10) ammazza solo lo Zombieman. Sostituire un Demon con un Mancubus nella prima stanza non è un salto di difficoltà 1,5× — è 4×, perché la curva degli HP è geometrica, non lineare.
  • GZDoom v3.2.2 (fine 2017) e versioni successive garantiscono che 35 tic equivalgano esattamente a un secondo di tempo reale. Le versioni precedenti mostravano un intervallo di 28 ms per tic (35 tic apparivano come 0,98 secondi) per via del troncamento intero nel codice del timer. Se la tua aritmetica di ACS Delay() richiede precisione sotto-secondo e punti a utenti con port datati, conta il 2 % di deriva: `Delay(35 * 60)` sul timer legacy fa 58,8 secondi reali, 1,2 secondi in meno di un minuto.
  • Lo spray della BFG è l'unico proiettile che non segue la regola $\text{Damage} \times \text{random}(1, 8)$. Dentro A_BFGSpray il danno per raggio è calcolato come la somma di 15 random(1, 8) indipendenti — range 15-120, atteso 67,5, distribuzione a campana (non uniforme). La palla di BFG rilascia fino a 40 raggi in un cono frontale di 90°, quindi con copertura completa $40 \times 67{,}5 = 2700$ punti di danno attesi si sommano al 100-800 della palla stessa. Per questo un singolo tiro di BFG può abbattere il Cyberdemone in due colpi quando azzeccano sia l'impatto diretto sia il cono.
  • Le unità di mappa hanno due equivalenze, non una. In orizzontale 16 unità = 1 piede (0,3048 m); in verticale solo 10 unità = 1 piede, perché la modalità video originale 320×200 di Doom allungava l'immagine del 20 % in altezza. Per convertire lo Speed il calcolatore usa l'equivalenza orizzontale, perché i proiettili viaggiano sul piano della mappa: Speed 10 (palla del Diavoletto) ≈ 6,67 m/s ≈ 15 mph; Speed 25 (plasma, palla della BFG) ≈ 16,67 m/s ≈ 60 km/h ≈ 37 mph. La velocità di corsa di Doomguy ruota attorno a Speed 16, circa 24 mph — ecco perché a volte un Diavoletto ti acchiappa in corridoio.
  • DamageFactor risolve resistenze e vulnerabilità senza riscrivere il codice del danno. DamageFactor 'Fire', 0.5 su un mostro dimezza il danno di tipo Fire; 2.0 lo raddoppia; 0.0 lo rende immune. La modalità DPS del calcolatore espone un'unica casella scalare DamageFactor che modella il caso resistente senza dover creare un tipo di danno personalizzato — utile quando confronti il TTK dell'arma vanilla contro, per esempio, una variante di Cacodemone con 0,7 di resistenza al plasma.
  • Caso peggiore e forchetta pesano più della media quando disegni combattimenti tirati. "Spari attesi per uccidere = 30" nasconde il fatto che un Cacodemone può sopravvivere a 134 palle del Diavoletto nel caso peggiore patologico. Il calcolatore mostra caso migliore e peggiore accanto all'atteso proprio per questo: quando progetti uno slaughter map e il bestione deve cadere dentro un budget rigido di spari, dimensioni sul caso peggiore. Quando progetti una mappa convenzionale, dimensioni sull'atteso. Le due cifre possono differire di un fattore 5-10 per i proiettili con random(1, 8).
  • Se moddi in italiano, lascia i nomi degli actor e delle proprietà in inglese così come compaiono nel motore (Damage, Speed, Health, +STRIFEDAMAGE, Cacodemon, Cyberdemon). DECORATE e ZScript non accettano identificatori localizzati, quindi anche se il Doom Wiki traduce "Cacodemone" o "Diavoletto" nella prosa, nel codice l'actor resta Cacodemon. Mantenere la nomenclatura inglese nei tuoi PK3 ti risparmia ore di debug quando qualcuno apre il tuo WAD.

Calcolatore danno ZDoom — domande frequenti

Perché il mio proiettile con Damage 10 ogni tanto colpisce per 80?

ZDoom moltiplica la proprietà Damage del proiettile per random(1, 8) a ogni impatto. Damage 10 produce 10, 20, 30, 40, 50, 60, 70 o 80 — tutti i valori sono equiprobabili. La media è 45. Il flag +STRIFEDAMAGE cambia il moltiplicatore in random(1, 4): escono 10, 20, 30 o 40 con una media di 25.

Qual è la formula di danno della pistola nel Doom classico?

La pistola usa $5 \times \text{random}(1, 3)$ per colpo, quindi ogni sparo fa 5, 10 o 15 punti con un valore atteso di 10. Mitragliatrice e fucile a pompa (per pellet) usano la stessa formula. La proprietà Damage su un actor hitscan viene ignorata — la formula è cablata in A_FirePistol, A_FireShotgun e A_FireCGun.

Quanti tic ci sono in un secondo di ZDoom?

35 tic al secondo. TICRATE è fissato a 35 dal lancio originale del 1993. GZDoom v3.2.2 e successivi garantiscono che 35 tic equivalgano esattamente a 1,000 secondi; le versioni precedenti troncavano a 28 ms per tic, quindi 35 tic apparivano come 0,98 secondi — una deriva del 2 % che pesa solo nelle catene lunghe di Delay().

Come si calcola ACS Delay() per X secondi?

Moltiplica i secondi per 35 e arrotonda a intero. 0,5 s = 18 tic, 1 s = 35, 2 s = 70, 5 s = 175, 10 s = 350, 60 s = 2.100. In ACS scrivi `Delay(35 * secondi)` direttamente — il compilatore risolve la moltiplicazione in fase di compilazione.

Cosa fa il flag +STRIFEDAMAGE?

+STRIFEDAMAGE cambia il moltiplicatore del danno di proiettile da random(1, 8) a random(1, 4). Stesso valore di Damage, range più stretto, media più bassa. Funziona su qualsiasi actor in qualunque mod di ZDoom a prescindere dal gioco base — il nome viene da Strife ma il flag è portabile. Utile quando vuoi un proiettile intermedio prevedibile.

Quanti HP ha il Cyberdemone?

4.000 HP. Il Cyberdemone subisce solo danno diretto — lo splash dei razzi e degli spari del Mancubus gli rimbalza addosso. La BFG9000 è il metodo canonico (circa 2-4 colpi contando lo spray); 20 colpi di doppietta a bruciapelo o 45 impatti diretti di lanciarazzi lo abbattono se ti avanzano munizioni. La tabella delle 19 righe sotto il calcolatore mostra tutti gli HP vanilla di Doom.

Perché il danno della BFG è così strano — cos'è quel ciclo di 15 random?

La palla principale della BFG usa la formula standard (Damage 100 × random(1, 8) = 100-800), ma i raggi dello spray no. Ognuno dei massimo 40 raggi somma 15 random(1, 8) indipendenti: range 15-120 per raggio con un valore atteso di 67,5. Il Doom Wiki ricorda che il determinismo della tabella pseudoaleatoria P_Random (256 byte statici) restringe in pratica il range effettivo (rispetto al massimo teorico 15-120 per raggio), ma il massimo teorico per raggio resta 120.

Il calcolatore vale anche per gli actor ZScript?

Sì. ZScript e DECORATE condividono la stessa semantica di Damage / DamageFunction / Speed / Health / +STRIFEDAMAGE — cambia solo la sintassi. Un actor ZScript con `Damage 5;` nel blocco Default tira esattamente la stessa formula $5 \times \text{random}(1, 8)$ di un actor DECORATE con la stessa proprietà. I risultati del calcolatore valgono per entrambi.

Funziona con Brutal Doom o Project Brutality?

Solo per gli actor che mantengono la proprietà Damage standard e le funzioni hitscan vanilla. Brutal Doom e Project Brutality ridefiniscono la maggior parte delle armi con espressioni DamageFunction proprie e routine A_FireCustomMissile personalizzate che non rispettano il moltiplicatore random(1, 8). Per quelle armi il calcolatore mostra il calcolo vanilla equivalente, che dovrai correggere leggendo il codice DECORATE/ZScript dell'actor specifico del mod.

La traduzione italiana di GZDoom influisce sui calcoli?

No. Le traduzioni — comprese le patch italiane non ufficiali fatte girare nella community di Doom Mod Italia — toccano le stringhe del menu, dell'HUD e dei log, ma non sfiorano l'aritmetica del motore. Gli stessi valori di random(1, 8), TICRATE = 35, +STRIFEDAMAGE e HP dei mostri si comportano in modo identico su una build GZDoom inglese e su una con strings italiane caricate via PK3.

Ci sono differenze di danno fra PrBoom+, ZDoom, GZDoom e Zandronum?

No per il Doom e Doom II vanilla. PrBoom+, ZDoom, GZDoom e Zandronum preservano TICRATE 35, le formule random(1, 8) e random(1, 3) e i valori di HP originali alla lettera. Le differenze fra port emergono nelle feature avanzate (fisica, MAPINFO, ZScript, script di mostri MBF21), non nella matematica base del danno. Un Cacodemone con HP 400 muore allo stesso modo con la stessa sequenza di tiri sui quattro motori.

In cosa differiscono ZScript e DECORATE riguardo al danno?

In nulla di matematico, solo nella sintassi. ZScript è un superset di DECORATE: lo stesso `Damage 10` nel blocco Default tira la stessa random(1, 8), e lo stesso flag +STRIFEDAMAGE cambia il moltiplicatore in random(1, 4). DECORATE è marcato come deprecato in GZDoom ma resta compatibile; per i mod nuovi si raccomanda ZScript, ma ai fini del calcolatore di danno è indifferente.

Perché il missile tracciante del Revenant fa 10-80 e non 10-40?

L'actor RevenantTracer ha Damage 10 nel suo blocco ma NON porta il flag +STRIFEDAMAGE — usa il moltiplicatore random(1, 8) per impostazione predefinita. Per questo il suo range è 10-80 con un valore atteso di 45, non 10-40. È una confusione frequente perché i razzi del Revenant sembrano avere matematica da Strife; la realtà è diversa.

La difficoltà (UV / Nightmare) aumenta il danno delle armi?

No. Nightmare raddoppia l'aggressività dei mostri e le munizioni raccolte, ma il danno delle armi è identico nei cinque livelli di difficoltà. L'unico moltiplicatore di danno nel Doom vanilla è il power-up Berserk, che moltiplica per 10 il danno del pugno. La difficoltà cambia chi spara per primo e con quale frequenza, non la potenza dei colpi.

Quanto è precisa la calcolatrice rispetto al gioco reale?

Esatta a livello di motore per il comportamento vanilla di Doom e Doom II sotto ZDoom / GZDoom. La verifica copre tutti i preset di proiettile, tutte le armi hitscan, tutti gli HP dei mostri e il ciclo 15× dello spray della BFG — ogni range di danno, HP e Speed di proiettile coincide alla cifra con le definizioni dell'actor vanilla. Gli actor sostitutivi in DECORATE / ZScript, le espressioni DamageFunction personalizzate e i capitoli moderni (Doom 2016, Eternal, The Dark Ages) usano altra matematica e restano fuori dall'ambito.


Glossario di danno e tempi in ZDoom

Proprietà Damage

Proprietà numerica del blocco Default di un actor DECORATE o ZScript che il motore moltiplica per random(1, 8) a ogni impatto (random(1, 4) con +STRIFEDAMAGE). Scrivere Damage 10 produce in partita un range di 10-80, non un 10 piatto.

+STRIFEDAMAGE

Flag di actor che cambia il moltiplicatore del danno di proiettile da random(1, 8) a random(1, 4). Stesso valore di Damage, range più stretto, media più bassa (Damage × 2,5 invece di Damage × 4,5). Funziona su qualunque actor in qualunque mod di ZDoom indipendentemente dal gioco base.

tic

Unità atomica di tempo del motore di Doom. TICRATE = 35 tic al secondo; 1 tic ≈ 28,5714 ms. Le durate di stato in DECORATE / ZScript e l'argomento di ACS Delay() si esprimono in tic. GZDoom v3.2.2 in poi garantisce che 35 tic = 1,000 secondi esatti; le versioni precedenti troncavano a 28 ms.

Arma hitscan

Arma il cui danno si risolve all'istante lungo una linea retta, senza un actor proiettile di mezzo. Pistola, fucile a pompa, doppietta e mitragliatrice sono hitscan; le loro formule sono cablate nelle action function A_Fire* ($5 \times \text{random}(1, 3)$ per pellet) e la proprietà Damage dell'actor è ignorata.

DamageFactor

Moltiplicatore del danno entrante di un tipo specifico. DamageFactor 'Fire', 0.5 dimezza il danno Fire; 2.0 lo raddoppia; 0.0 rende l'actor immune. La modalità DPS del calcolatore espone un'unica casella scalare DamageFactor che copre il caso resistente o vulnerabile.

Berserk

Power-up che moltiplica per 10 il danno del pugno dopo il tiro random(1, 10), producendo un range di 20-200 con un valore atteso di 110. Solo il pugno riceve il bonus; motosega, hitscan e armi a proiettile restano fuori.

Unità di mappa (map unit)

Unità di coordinate dello spazio di Doom. Per consenso della community, 16 unità orizzontali = 1 piede = 0,3048 m (Doomguy misura 56 unità verticali = 5 piedi e 7 pollici). Il calcolatore converte lo Speed del proiettile (unità per tic) in m/s, km/h e mph con l'equivalenza orizzontale di 16 u.m./piede.

Proprietà Speed

Velocità dell'actor proiettile in unità di mappa per tic. Palla del Diavoletto Speed 10; razzo Speed 20; palla del fucile al plasma e palla di BFG Speed 25. Moltiplica per 35 per ottenere unità al secondo; per 0,667 per metri al secondo; per 1,49 per miglia all'ora.

Spray della BFG

Il cono di 40 raggi che la palla di BFG rilascia all'impatto (lo spray parte dallo stato di morte della palla via A_BFGSpray). Il danno di ogni raggio è calcolato come la somma di 15 random(1, 8) indipendenti: range 15-120 per raggio con un valore atteso di 67,5. La fama della BFG di abbattere il Cyberdemone in un colpo va attribuita allo spray, non alla palla in sé.

TICRATE

Costante del motore che fissa la frequenza di Doom a 35 tic al secondo dal 1993. Dichiarata nel doomdef.h di id Software; rispettata alla lettera da ZDoom, GZDoom, Zandronum, PrBoom+, Boom, MBF21 e da qualunque altro port vanilla-compatibile. Ogni durata di stato, ogni argomento di Delay() e ogni calcolo di tempo di volo del proiettile usa 35 come costante di conversione.

DamageFunction

Alternativa alla proprietà Damage che permette al modder di restituire un intero arbitrario al momento dell'impatto tramite un'espressione ZScript. Salta il moltiplicatore random(1, 8) — restituisce un numero piatto per un danno deterministico oppure lo calcola a partire da inflictor / target / distance per un comportamento sensibile al contesto.

P_Random

Funzione pseudoaleatoria del motore di Doom: un indice scorre una tabella statica di 256 byte con valori rimescolati fra 0 e 255 e ogni chiamata restituisce il byte successivo. Non è uniforme (il valore 1 non compare mai e il 145 appare cinque volte), ma basta per l'aritmetica del combattimento. È usata per tutti i tiri di danno; M_Random tiene il proprio indice per gli effetti non giocabili, in modo da non rompere la sincronizzazione del multiplayer.


Contenuto verificato dal team di Smart Calculators