Calculadora de dano e DPS do ZDoom
Calcule a faixa exata de dano, o DPS esperado e o tempo até matar de qualquer arma ou projétil do ZDoom / GZDoom. Inclui o multiplicador random(1,8), a flag STRIFEDAMAGE e um conversor de tics para segundos para scripts ACS.
Faixa de dano, DPS e conversor de tic para modders de Doom.
Calcula dano mín/médio/máx para qualquer projétil, arma hitscan ou DamageFunction personalizada.
Fórmula de dano
Usa Damage × random(1, 8) — a fórmula padrão de projétil do ZDoom.
Escolha um projétil vanilla do Doom para preencher Damage automaticamente. Editar Damage depois volta o preset para Personalizado.
dmg
O N que você coloca depois de Damage no DECORATE/ZScript (ex.: Damage 3 na bola de fogo do Imp).
Distribuição do dano
random(1, N) é uniforme — todos os multiplicadores são igualmente prováveis.
| Dano por acerto | Probabilidade |
|---|---|
| 3 | 12,5% |
| 6 | 12,5% |
| 9 | 12,5% |
| 12 | 12,5% |
| 15 | 12,5% |
| 18 | 12,5% |
| 21 | 12,5% |
| 24 | 12,5% |
Referência de projéteis vanilla
Clique numa linha para carregar nos inputs acima.
| Projétil | Damage | Multiplicador | Mín | Máx | Média | Speed (u/tic) |
|---|---|---|---|---|---|---|
| Bola de fogo do Imp — DoomImpBall | 3 | × random(1, 8) | 3 | 24 | 13,5 | 10 |
| Bola do Cacodemon — CacodemonBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 10 |
| Plasma do Arachnotron — ArachnotronPlasma | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Bola do fuzil de plasma — PlasmaBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Bola do Baron of Hell / Hell Knight — BaronBall | 8 | × random(1, 8) | 8 | 64 | 36 | 15 |
| Bola de fogo do Mancubus — FatShot | 8 | × random(1, 8) | 8 | 64 | 36 | 20 |
| Tracer do Revenant (com guiagem) — RevenantTracer | 10 | × random(1, 8) | 10 | 80 | 45 | 10 |
| Foguete (acerto direto) — Rocket | 20 | × random(1, 8) | 20 | 160 | 90 | 20 |
| Spray do BFG (por raio) | 67 | × 1..8 loop | 15 | 120 | 67,5 | — |
| Bola do BFG (acerto direto) — BFGBall | 100 | × random(1, 8) | 100 | 800 | 450 | 25 |
Trecho de DECORATE/ZScript que reproduz esses números.
ACTOR CustomProjectile : DoomImpBall{ Damage 3 // Min 3 Max 24 Avg 13.5 (× random(1, 8))}Calculadora de dano ZDoom. Faixa, DPS e tics para modders de Doom.
O que é a calculadora de dano e DPS do ZDoom?
Como calcular dano, DPS e tics no ZDoom (e como a calculadora faz)
Dano, DPS e tics — as fórmulas do motor
- = Propriedade Damage do bloco Default do ator em DECORATE ou ZScript (um inteiro)
- = Limites do multiplicador aleatório — 1 e 8 por padrão; 1 e 4 com +STRIFEDAMAGE; 1 e 3 para os pellets de pistola/espingarda/metralhadora; 1 e 10 para soco/motosserra
- = Tics por ataque — a duração da máquina de estados entre duas chamadas consecutivas de disparo no bloco States do ator
- = HP do alvo — 20 para Zombieman, 60 para Imp, 400 para Cacodemon, 1.000 para Baron of Hell, 3.000 para Spider Mastermind, 4.000 para Cyberdemon
- = Multiplicador DamageFactor — 1,0 normal, 0,5 resistência, 2,0 vulnerabilidade, 0,0 invulnerável
- = Tempo em segundos — multiplicado por TICRATE = 35 e arredondado para tics inteiros nas durações de estado e no argumento de Delay()
- = Distância de voo em unidades de mapa e Speed do projétil em unidades de mapa por tic; a divisão com teto dá os tics porque o motor anda em passos inteiros
Exemplos resolvidos com toda a conta
Bola do Imp contra o Cacodemon — o cenário padrão
DPS da pistola contra um Zombieman — "a pistola é mesmo inútil?"
Super espingarda no Hell Knight — a realidade do tiro à queima-roupa
Acerto direto da bola da BFG no Cyberdemon (sem spray)
Aritmética do ACS Delay — "quantos tics são 2,5 segundos?"
Dicas de dano e balanceamento no ZDoom para modders, mappers e curiosos
- Leia a propriedade Damage do seu ator em valor esperado, não em valor literal. Um projétil com Damage 5 dá em média 22,5 em jogo (5 × 4,5), não 5. Se o novo monstro precisa rivalizar com a bola do Imp (esperado 13,5), use Damage 3 — não Damage 10. O erro número um ao balancear DECORATE é ler Damage 10 como \"bate 10\", quando na verdade ele bate de 10 a 80 com média 45.
- O flag +STRIFEDAMAGE é a forma mais barata de apertar a faixa de um projétil. Mesmo Damage, o multiplicador máximo cai de 8 para 4 e o valor esperado cai de 4,5× para 2,5×. Útil quando você quer um projétil intermediário previsível (por exemplo, um foguete custom que deveria parecer 60 a 240 em vez de 60 a 480). Funciona em qualquer mod de ZDoom independente do jogo base — o nome vem do Strife (o primeiro IWAD não-Doom do motor), mas o flag em si é portável e aparece em mods de Doom o tempo todo.
- As armas hitscan ignoram a propriedade Damage por completo. Pistola, espingarda, metralhadora e super espingarda cravam $5 \times \text{random}(1, 3)$ por pellet dentro de A_FireBullets / A_FirePistol / A_FireShotgun. Para subir o dano de uma arma hitscan, mexa no número de pellets, no argumento damage do A_CustomBulletAttack ou converta a arma para projétil. O soco e a motosserra usam $2 \times \text{random}(1, 10)$; o Berserker só afeta o soco e multiplica por 10 depois da tirada (ou seja, 20 a 200 por murro, esperado 110).
- Os tics entre ataques pesam mais que o dano por disparo quando você compara DPS. Metralhadora e pistola têm dano por disparo idêntico (5 a 15, esperado 10), mas a metralhadora atira a ~4 tics por ataque contra os ~14 da pistola — algo como 3,5× de DPS com a mesma matemática por pellet. Quando balancear um mod, defina primeiro o DPS-alvo (pistola vanilla ~25 DPS, espingarda ~70, super espingarda ~150, metralhadora ~88, fuzil de plasma ~263, foguete direto ~159) e a partir daí deduza o dano por disparo e os tics por ataque que produzem aquele número.
- Use a cola dos 19 monstros para validar o desenho de combate. Zombieman (HP 20), Shotgun Guy (30), Wolfenstein SS (50), Imp (60), Chaingunner (70), Lost Soul / Commander Keen (100), Demon / Spectre (150), Revenant (300), Pain Elemental / Cacodemon (400), Hell Knight / Arachnotron (500), Mancubus (600), Arch-vile (700), Baron of Hell (1.000), Spider Mastermind (3.000), Cyberdemon (4.000). Um tiro de super espingarda (esperado 200, máximo 300) derruba no melhor caso tudo até o Revenant (HP 300); Pain Elemental e Cacodemon (HP 400) pedem no mínimo dois tiros bons. Um tiro de pistola (esperado 10) só mata o Zombieman. Trocar o Demon da primeira sala por um Mancubus não é um pulo de dificuldade de 1,5× — é 4×, porque a curva de HP é geométrica, não linear.
- O GZDoom v3.2.2 (fim de 2017) em diante garante que 35 tics são exatamente um segundo de tempo real. As versões anteriores mostravam o intervalo como 28 ms por tic (35 tics apareciam como 0,98 segundo) por causa do truncamento inteiro no código do timer. Se sua aritmética de ACS Delay() precisa de precisão sub-segundo e o público joga em port antigo, conte com 2% de desvio: `Delay(35 * 60)` no timer legacy são 58,8 segundos reais, 1,2 segundo a menos que um minuto cheio.
- O spray da BFG é o único projétil que não segue a regra $\text{Damage} \times \text{random}(1, 8)$. Dentro de A_BFGSpray o dano por raio é a soma de 15 random(1, 8) independentes — faixa 15 a 120, esperado 67,5, distribuição em sino (não uniforme). A bola da BFG solta até 40 raios num cone frontal de 90°, então com cobertura total 40 × 67,5 = 2.700 pontos de dano esperados se somam aos 100 a 800 da própria bola. É essa contribuição do spray que sustenta o famoso \"matar um Cyberdemon em dois disparos\" descrito nos guias brasileiros como o do GamingRoom — só vale quando tanto a bola quanto o cone cravam o alvo de perto.
- As unidades de mapa têm duas equivalências, não uma. Na horizontal, 16 unidades = 1 pé (0,3048 m); na vertical, só 10 unidades = 1 pé, porque o modo 320×200 original do Doom esticava a imagem em 20% na altura. Para converter Speed a calculadora usa a equivalência horizontal, porque os projéteis viajam no plano do mapa: Speed 10 (bola do Imp) ≈ 6,67 m/s ≈ 15 mph; Speed 25 (plasma, bola da BFG) ≈ 16,67 m/s ≈ 60 km/h ≈ 37 mph. A velocidade de corrida do Doomguy ronda Speed 16 — uns 24 mph, que é a razão pela qual um Imp pode te alcançar num corredor.
- O DamageFactor resolve resistências e vulnerabilidades sem reescrever o código de dano. DamageFactor 'Fire', 0.5 num monstro divide o dano de tipo Fire pela metade; 2.0 dobra; 0.0 deixa imune. No modo DPS da calculadora, um único campo escalar DamageFactor modela o caso resistente sem precisar criar um tipo de dano personalizado — útil quando você está comparando o TTK de uma arma vanilla contra, por exemplo, uma variante de Cacodemon com 0,7 de resistência ao plasma.
- Pior caso e faixa importam mais que a média quando você desenha combate apertado. \"Disparos esperados até matar = 30\" esconde o fato de que um Cacodemon pode sobreviver a 134 bolas de Imp no pior cenário possível. A calculadora mostra o melhor e o pior caso ao lado do esperado exatamente por isso: quando você projeta um slaughter map e o monstro PRECISA morrer dentro de um orçamento estrito de disparos, dimensione pelo pior. Quando projeta um mapa convencional, dimensione pelo esperado. As duas cifras podem diferir em 5× a 10× para projéteis com random(1, 8).
- Se você está moddando em português, mantenha os nomes de ator e propriedade em inglês como aparecem no motor (Damage, Speed, Health, +STRIFEDAMAGE, Cacodemon, Cyberdemon). DECORATE e ZScript não aceitam identificadores localizados, então mesmo que o Doom Wiki PT traduza prosa para \"Cacodemônio\", o ator continua sendo Cacodemon dentro do código. Manter o vocabulário inglês nos seus PK3 economiza horas de depuração quando outro modder abre o seu WAD.
Calculadora de dano ZDoom — perguntas frequentes
Por que meu projétil com Damage 10 às vezes bate 80?
O ZDoom multiplica a propriedade Damage do projétil por random(1, 8) a cada acerto. Damage 10 dá 10, 20, 30, 40, 50, 60, 70 ou 80 — todos os valores são equiprováveis. A média é 45. O flag +STRIFEDAMAGE troca o multiplicador por random(1, 4): saem 10, 20, 30 ou 40 com média 25.
Qual é a fórmula de dano da pistola no Doom clássico?
A pistola usa $5 \times \text{random}(1, 3)$ por disparo, então cada tiro causa 5, 10 ou 15 pontos com valor esperado de 10. A metralhadora e a espingarda (por pellet) usam a mesma fórmula. A propriedade Damage de um ator hitscan é ignorada — a fórmula está cravada em A_FirePistol, A_FireShotgun e A_FireCGun.
Quantos tics tem um segundo no ZDoom?
35 tics por segundo. O TICRATE está fixado em 35 desde o lançamento original de 1993. O GZDoom v3.2.2 em diante garante que 35 tics = 1,000 segundo exato; nas versões anteriores o timer truncava em 28 ms por tic, então 35 tics apareciam como 0,98 segundo — um desvio de 2% que só importa em cadeias longas de Delay().
Como calcular ACS Delay() para X segundos?
Multiplique os segundos por 35 e arredonde para inteiro. 0,5 s = 18 tics, 1 s = 35, 2 s = 70, 5 s = 175, 10 s = 350, 60 s = 2.100. Em ACS, escreva `Delay(35 * segundos)` direto — o compilador resolve a multiplicação na hora de gerar o script.
O que o flag +STRIFEDAMAGE faz?
O +STRIFEDAMAGE troca o multiplicador do dano de projétil de random(1, 8) por random(1, 4). Mesmo valor Damage, faixa mais apertada, média mais baixa. Funciona em qualquer ator de qualquer mod de ZDoom independente do jogo base — o nome vem do Strife, mas o flag é portável. Útil quando você precisa de um projétil intermediário previsível.
Quantos HP tem o Cyberdemon?
4.000 HP. O Cyberdemon só recebe dano direto — o splash de foguetes e dos tiros do Mancubus não funciona nele. A BFG9000 é o método canônico para derrubar o bicho (de 2 a 4 gatilhadas contando o spray); cerca de 20 tiros de super espingarda à queima-roupa ou ~45 acertos diretos de foguete também resolvem se sobrar munição. A tabela de 19 linhas embaixo da calculadora mostra todos os valores de HP do Doom vanilla.
Por que o dano da BFG é tão estranho — o que é esse loop de 15 random?
A bola principal da BFG usa a fórmula padrão (Damage 100 × random(1, 8) = 100 a 800), mas os raios do spray não. Cada um dos até 40 raios soma 15 random(1, 8) independentes: faixa 15 a 120 por raio com valor esperado de 67,5. O Doom Wiki aponta que o determinismo da tabela pseudoaleatória P_Random (256 bytes fixos) reduz a faixa prática para 49 a 87, mas o máximo teórico por raio continua sendo 120.
A calculadora também serve para atores em ZScript?
Sim. ZScript e DECORATE compartilham a mesma semântica de Damage / DamageFunction / Speed / Health / +STRIFEDAMAGE — só muda a sintaxe. Um ator ZScript com `Damage 5;` no bloco Default roda exatamente a mesma fórmula $5 \times \text{random}(1, 8)$ que um ator DECORATE com a mesma propriedade. Os resultados da calculadora valem para os dois.
Funciona com Brutal Doom ou Project Brutality?
Só para os atores que mantêm a propriedade Damage padrão e as funções hitscan vanilla. O Brutal Doom do Sergeant Mark IV e o Project Brutality redefinem a maioria das armas com expressões DamageFunction próprias e rotinas A_FireCustomMissile personalizadas que não respeitam o multiplicador random(1, 8). Para essas armas, a calculadora mostra o equivalente vanilla, que você terá de ajustar lendo o DECORATE/ZScript do ator específico do mod.
Tem diferença de dano entre PrBoom+, ZDoom, GZDoom e Zandronum?
Não para o Doom e Doom II vanilla. PrBoom+, ZDoom, GZDoom e Zandronum preservam ao pé da letra o TICRATE 35, as fórmulas random(1, 8) e random(1, 3) e os valores originais de HP. As diferenças entre os ports aparecem em features avançadas (física, MAPINFO, ZScript, scripts de monstros em MBF21), não na matemática base do dano. Um Cacodemon com HP 400 cai do mesmo jeito com a mesma sequência de tiradas nos quatro motores.
Vale a tradução PT-BR do ZDoom v2.7.1 ou do GZDoom para os cálculos?
Vale, e sem ressalvas. As traduções comunitárias — incluindo a do executável do ZDoom v2.7.1 publicada no fórum do ZDoom, o WAD traduzido PT-BR (Spet001 no GitHub) e a dublagem PT-BR do Doom 3 no ModDB — mexem em strings de menu, HUD e legenda, mas nunca tocam a aritmética do motor. Os mesmos random(1, 8), TICRATE = 35, +STRIFEDAMAGE e HP de monstro se comportam idênticos numa build em inglês ou com qualquer patch de tradução em português.
Qual é a diferença entre ZScript e DECORATE no quesito dano?
Nenhuma na matemática, só na sintaxe. ZScript é um superconjunto de DECORATE: o mesmo `Damage 10` no bloco Default roda a mesma random(1, 8), e o mesmo flag +STRIFEDAMAGE troca o multiplicador por random(1, 4). DECORATE está marcado como obsoleto no GZDoom mas segue compatível; para mods novos a recomendação é ZScript, mas, do ponto de vista da calculadora de dano, é indiferente.
Por que o rastreador do Revenant bate 10 a 80, e não 10 a 40?
O ator RevenantTracer tem Damage 10 no bloco, mas NÃO carrega o flag +STRIFEDAMAGE — ele usa o multiplicador padrão random(1, 8). Por isso a faixa é 10 a 80 com média 45, não 10 a 40. É uma confusão clássica porque os foguetes do Revenant soam à matemática Strife; na prática, não são.
A dificuldade (UV / Nightmare) aumenta o dano das armas?
Não. O Nightmare dobra a agressividade dos monstros e a munição encontrada, mas o dano da arma é idêntico nos cinco níveis de dificuldade. O único multiplicador de dano no Doom vanilla é o Berserker, que multiplica o soco por 10. A dificuldade muda quem dispara primeiro e com que frequência, não a força do impacto.
Quão precisa é a calculadora em relação ao jogo real?
Exata em nível de motor para o comportamento vanilla de Doom e Doom II rodando sob ZDoom / GZDoom. A verificação cobre todos os presets de projétil, todas as armas hitscan, todos os HPs de monstro e o loop de 15× do spray da BFG — cada faixa de dano, HP e Speed de projétil bate até a unidade com as definições do ator vanilla. Atores de substituição em DECORATE / ZScript, expressões DamageFunction personalizadas e os títulos modernos (Doom 2016, Eternal, The Dark Ages) usam outra matemática e ficam fora do escopo.
Glossário de dano e tempo no ZDoom
Propriedade Damage
Propriedade numérica do bloco Default de um ator DECORATE ou ZScript que o motor multiplica por random(1, 8) a cada acerto (random(1, 4) com +STRIFEDAMAGE). Escrever Damage 10 produz em jogo uma faixa de 10 a 80, e não um 10 cravado.
+STRIFEDAMAGE
Flag de ator que troca o multiplicador do dano de projétil de random(1, 8) por random(1, 4). Mesmo valor Damage, faixa mais apertada, média mais baixa (Damage × 2,5 em vez de Damage × 4,5). Funciona em qualquer ator de qualquer mod de ZDoom independente do jogo base.
tic
Unidade atômica de tempo do motor do Doom. TICRATE = 35 tics por segundo; 1 tic ≈ 28,5714 ms. As durações de estado em DECORATE / ZScript e o argumento de ACS Delay() são expressos em tics. O GZDoom v3.2.2 em diante garante 35 tics = 1,000 segundo exato; as versões anteriores truncavam em 28 ms.
Arma hitscan
Arma cujo dano é resolvido instantaneamente ao longo de uma linha reta, sem ator-projétil de permeio. Pistola, espingarda, super espingarda e metralhadora são hitscan; as fórmulas estão cravadas nas action functions A_Fire* ($5 \times \text{random}(1, 3)$ por pellet) e a propriedade Damage do ator é ignorada.
DamageFactor
Multiplicador do dano recebido de um tipo específico. DamageFactor 'Fire', 0.5 divide o dano Fire pela metade; 2.0 dobra; 0.0 deixa o ator imune. O modo DPS da calculadora expõe um único campo escalar DamageFactor que cobre o caso resistente ou vulnerável.
Berserker
Power-up que multiplica o dano do soco por 10 depois da tirada random(1, 10), produzindo uma faixa de 20 a 200 com valor esperado de 110. Só o soco ganha o bônus; motosserra, hitscans e armas de projétil ficam de fora.
Unidade de mapa (map unit)
Unidade de coordenada do espaço do Doom. Por consenso da comunidade, 16 unidades horizontais = 1 pé = 0,3048 m (o Doomguy mede 56 unidades verticais = 5 pés e 7 polegadas). A calculadora converte o Speed do projétil (unidades por tic) para m/s, km/h e mph pela equivalência horizontal de 16 u.m./pé.
Propriedade Speed
Velocidade do ator-projétil em unidades de mapa por tic. Bola do Imp Speed 10; foguete Speed 20; bola do fuzil de plasma e da BFG Speed 25. Multiplique por 35 para obter unidades por segundo; por 0,667 para metros por segundo; por 1,49 para milhas por hora.
Spray da BFG
Cone de até 40 raios que a bola da BFG solta ao bater (o spray dispara do estado de morte da bola via A_BFGSpray). O dano de cada raio é a soma de 15 random(1, 8) independentes: faixa 15 a 120 por raio com valor esperado de 67,5. A fama da BFG de derrubar Cyberdemon em um disparo se deve ao spray, não à bola em si — o guia BR \"Como a BFG 9000 funciona\" descreve o mesmo cone de 45° com 40 disparos hitscan.
TICRATE
Constante do motor que fixa a frequência do Doom em 35 tics por segundo desde 1993. Declarada no doomdef.h da id Software; respeitada ao pé da letra por ZDoom, GZDoom, Zandronum, PrBoom+, Boom, MBF21 e qualquer outro source port vanilla-compatível. Cada duração de estado, cada argumento de Delay() e cada cálculo de tempo de voo de projétil usa 35 como constante de conversão.
DamageFunction
Alternativa à propriedade Damage que permite ao modder devolver um inteiro arbitrário no momento do acerto via uma expressão ZScript. Pula o multiplicador random(1, 8) — devolva um número fixo para dano determinístico ou calcule-o a partir de inflictor / target / distance para um comportamento sensível ao contexto.
P_Random
Função pseudoaleatória do motor do Doom: um índice percorre uma tabela estática de 256 bytes com valores embaralhados entre 0 e 255 e devolve, a cada chamada, o próximo byte. Não é uniforme (o valor 1 nunca aparece e o 145 aparece cinco vezes), mas é o suficiente para a aritmética de combate. Usada em todas as tiradas de dano; o M_Random mantém o próprio índice para efeitos não-jogáveis, para não quebrar a sincronização do multijogador.
Conteudo verificado pela equipe Smart Calculators