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.
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).
Distribuzione del danno
random(1, N) è uniforme — ogni moltiplicatore è ugualmente probabile.
| Danno per impatto | 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% |
Riferimento proiettili vanilla
Clicca una riga per caricarla nei campi qui sopra.
| Proiettile | Damage | Moltiplicatore | Min | Max | Media | Speed (um/tic) |
|---|---|---|---|---|---|---|
| Palla di fuoco dell'Imp — DoomImpBall | 3 | × random(1, 8) | 3 | 24 | 13,5 | 10 |
| Palla del Cacodemone — CacodemonBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 10 |
| Plasma dell'Arachnotron — ArachnotronPlasma | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Palla del fucile al plasma — PlasmaBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Palla del Baron of Hell / Hell Knight — BaronBall | 8 | × random(1, 8) | 8 | 64 | 36 | 15 |
| Palla di fuoco del Mancubus — FatShot | 8 | × random(1, 8) | 8 | 64 | 36 | 20 |
| Missile tracciante del Revenant — RevenantTracer | 10 | × random(1, 8) | 10 | 80 | 45 | 10 |
| Razzo (impatto diretto) — Rocket | 20 | × random(1, 8) | 20 | 160 | 90 | 20 |
| Spray della BFG (per raggio) | 67 | × 1..8 loop | 15 | 120 | 67,5 | — |
| Palla della BFG (impatto diretto) — BFGBall | 100 | × random(1, 8) | 100 | 800 | 450 | 25 |
Frammento DECORATE/ZScript che riproduce questi numeri.
ACTOR CustomProjectile : DoomImpBall{ Damage 3 // Min 3 Max 24 Avg 13.5 (× random(1, 8))}Calcolatore danno ZDoom. Range, DPS e tic per i modder di Doom.
Cos'è il calcolatore danno e DPS di ZDoom?
Come calcolare danno, DPS e tic in ZDoom (e come lo fa il calcolatore)
Danno, DPS e tic — le formule del motore
- = Proprietà Damage del blocco Default dell'actor in DECORATE o ZScript (un intero)
- = 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
- = Tic per attacco — la durata della macchina a stati fra due chiamate consecutive di sparo nel blocco States dell'actor
- = 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
- = Moltiplicatore DamageFactor — 1,0 normale, 0,5 resistenza, 2,0 vulnerabilità, 0,0 invulnerabile
- = Tempo in secondi — moltiplicato per TICRATE = 35 e arrotondato a tic interi per le durate di stato e l'argomento di Delay()
- = 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
Esempi svolti con tutta la matematica
Palla del Diavoletto contro un Cacodemone — lo scenario predefinito
DPS della pistola contro uno Zombieman — "ma davvero la pistola è inutile?"
Doppietta contro un Hell Knight — la realtà del cannone a bruciapelo
Impatto diretto di palla BFG contro un Cyberdemone (senza spray)
Aritmetica di ACS Delay — "quanti tic sono 2,5 secondi?"
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