Smart Calculators

Smart

Calculators

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.

ZS>Dano e DPS do ZDoom

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

Multiplicador estilo Strife: damage × random(1, 4) em vez de × random(1, 8). Funciona com qualquer ator em qualquer mod de ZDoom, independentemente do jogo base.

Dano esperado por acerto
13,5
3–24 por acerto, média 13,5
Damage 3 × random(1, 8)
Dano mínimo por acerto
3
Dano máximo por acerto
24

Distribuição do dano

random(1, N) é uniforme — todos os multiplicadores são igualmente prováveis.

Distribuição do dano3691215182124Dano por acertoProbabilidadeMédia (13,5)
Tabela de distribuição do dano para leitores de tela.
Dano por acertoProbabilidade
312,5%
612,5%
912,5%
1212,5%
1512,5%
1812,5%
2112,5%
2412,5%

Referência de projéteis vanilla

Clique numa linha para carregar nos inputs acima.

ProjétilDamageMultiplicadorMínMáxMédiaSpeed (u/tic)
Bola de fogo do Imp — DoomImpBall3× random(1, 8)32413,510
Bola do Cacodemon — CacodemonBall5× random(1, 8)54022,510
Plasma do Arachnotron — ArachnotronPlasma5× random(1, 8)54022,525
Bola do fuzil de plasma — PlasmaBall5× random(1, 8)54022,525
Bola do Baron of Hell / Hell Knight — BaronBall8× random(1, 8)8643615
Bola de fogo do Mancubus — FatShot8× random(1, 8)8643620
Tracer do Revenant (com guiagem) — RevenantTracer10× random(1, 8)10804510
Foguete (acerto direto) — Rocket20× random(1, 8)201609020
Spray do BFG (por raio)67× 1..8 loop1512067,5
Bola do BFG (acerto direto) — BFGBall100× random(1, 8)10080045025

Trecho de DECORATE/ZScript que reproduz esses números.

ACTOR CustomProjectile : DoomImpBall
{
Damage 3
// Min 3 Max 24 Avg 13.5 (× random(1, 8))
}
Atualizado em 11 de mai. de 2026
Calculadora trade-up CS2Calculadora de Pity do Genshin

Calculadora de dano ZDoom. Faixa, DPS e tics para modders de Doom.

Uma calculadora de dano ZDoom converte um valor Damage no mínimo, médio e máximo por acerto, no DPS esperado e nos tics para ACS Delay(). Reúne o multiplicador aleatório, o flag +STRIFEDAMAGE, presets vanilla de projétil e hitscan, uma tabela de HP com os 19 monstros e o conversor de tics para segundos em uma única página.

O que é a calculadora de dano e DPS do ZDoom?

A calculadora de dano e DPS do ZDoom é uma ferramenta web que, a partir da propriedade Damage de um ator, de um preset de arma ou projétil e de um ritmo de ataque, devolve a faixa exata de dano, o DPS esperado, os disparos necessários para matar qualquer monstro vanilla de Doom ou Doom II e o número de tics que uma chamada a ACS Delay() deve carregar. Ela é voltada para ZDoom e GZDoom — os source ports onde vivem os atores DECORATE e ZScript —, reproduz a mesma aritmética do motor que a id Software liberou no código-fonte de 1997 e resolve em três modos numa só página as três dúvidas que mais aparecem entre modders brasileiros.
A confusão central que a calculadora resolve é o multiplicador aleatório. Por padrão, um projétil com Damage 3 não bate em jogo por 3: bate por 3 multiplicado por um inteiro aleatório entre 1 e 8, então a bola de fogo do Imp cai numa faixa de 3 a 24 com valor esperado de 13,5 por acerto. Um projétil próprio escrito com Damage 10 no bloco Default causa 10, 20, 30, 40, 50, 60, 70 ou 80 — nunca exatamente 10. O flag +STRIFEDAMAGE troca o multiplicador por random(1, 4): o mesmo Damage 10 agora cai em 10, 20, 30 ou 40. As armas hitscan seguem outro caminho: pistola, espingarda e metralhadora usam 5 multiplicado por random(1, 3) por pellet (5, 10 ou 15), e o soco e a motosserra usam 2 multiplicado por random(1, 10). A propriedade Damage num ator hitscan é ignorada — a fórmula está cravada dentro da função de disparo da arma. O power-up Berserker multiplica o dano do soco por 10 depois da tirada aleatória; nenhuma outra arma se beneficia.
O segundo modo converte essa faixa por disparo em DPS esperado. Digite o dano por pellet, o número de pellets, os tics entre ataques (a duração dos estados entre duas chamadas consecutivas a A_FireProjectile ou A_FireBullets) e escolha um alvo: Zombieman com 20 HP, Cacodemon com 400, Spider Mastermind com 3.000, Cyberdemon com 4.000 ou qualquer um dos 19 monstros vanilla extraídos das definições ZScript do GZDoom. A calculadora devolve o dano esperado por disparo, o DPS esperado, os disparos esperados até matar, o tempo até a morte em segundos e os totais no melhor e pior caso, para você ver a horquilha inteira e não só a média. O campo DamageFactor cobre o caso de resistências e vulnerabilidades (0,5 corta o dano pela metade, 2,0 dobra e 0 deixa o alvo invulnerável).
O terceiro modo cobre dois conversores que todo modder de Doom precisa toda vez que mexe num script ACS ou equilibra o tempo de voo de um projétil. O primeiro converte tics em segundos pela constante TICRATE = 35: Delay(35 * 2) são exatamente dois segundos no GZDoom moderno (v3.2.2 em diante), enquanto antes da v3.2.2 os mesmos 35 tics apareciam como 0,98 segundo por causa de um arredondamento de divisão inteira no código do timer. O segundo converte a propriedade Speed do projétil (unidades de mapa por tic) em unidades de mapa por segundo, metros por segundo, km/h e mph, usando a equivalência consagrada na comunidade de 16 unidades de mapa horizontais = 1 pé. Se você juntar Speed e uma distância-alvo, ganha também o tempo de voo arredondado para cima ao próximo tic — exatamente como o motor caminha de quadro em quadro.

Como calcular dano, DPS e tics no ZDoom (e como a calculadora faz)

Aqui convivem três cálculos independentes, porque três perguntas se repetem em qualquer thread sobre DECORATE, ZScript ou ACS. A calculadora acima roda os três a cada mudança de input; a versão manual abaixo é a que você leva para o papel quando quer conferir um projétil antes de recompilar o WAD.
Com a ferramenta
1. Escolha o modo no topo: Faixa de dano, DPS e tempo até matar ou Conversor de tics e velocidade. Cada modo guarda os próprios inputs ao alternar.
2. Modo Faixa de dano. Escolha o submodo que combina com o seu ator. O submodo Projétil aceita um valor Damage e o interruptor opcional +STRIFEDAMAGE e devolve Damage × 1 (mínimo), Damage × 4,5 (médio) e Damage × 8 (máximo). O submodo Hitscan aceita um preset de arma e um número de pellets — a fórmula por pellet já está cravada. O submodo Personalizado aceita um mínimo e um máximo livres, útil quando você usa uma expressão DamageFunction. Escolher um preset de projétil (bola do Imp, bola do Cacodemon, plasma do fuzil, foguete, bola da BFG, raio do spray da BFG e mais seis) preenche o Damage automaticamente a partir do bloco Default do ator vanilla.
3. Modo DPS. Digite o dano por pellet, o tipo de fórmula (projétil, STRIFEDAMAGE ou hitscan), o número de pellets, os tics entre ataques e escolha o monstro na lista de 19 presets vanilla (ou informe um HP personalizado). O acordeão avançado libera o DamageFactor e a sobreposição de HP do alvo. A linha em destaque mostra o DPS esperado e os disparos esperados até matar; nos cards secundários aparecem o tempo até a morte em segundos, o melhor caso (cada tirada cai no máximo) e o pior caso (cada tirada cai no mínimo).
4. Modo Tics e velocidade. Digite a quantidade de tics e veja os segundos, ou o contrário. Mais abaixo, informe um Speed (unidades de mapa por tic) e uma distância opcional em unidades de mapa para obter a velocidade em u.m./s, m/s, km/h e mph, além do tempo de voo em tics e segundos.
Na mão
1. Faixa de dano do projétil: mín = $D$, máx = $D \times 8$, esperado = $D \times 4{,}5$. Com +STRIFEDAMAGE: máx = $D \times 4$, esperado = $D \times 2{,}5$. A distribuição é uniforme — cada multiplicador de 1 a 8 (ou de 1 a 4) tem a mesma probabilidade.
2. Dano hitscan por pellet: pistola / espingarda / metralhadora = $5 \times \text{random}(1, 3)$, média 10 por pellet. Soco / motosserra = $2 \times \text{random}(1, 10)$, média 11. O Berserker multiplica o dano do soco por 10 depois da tirada. Multiplique pelo número de pellets: espingarda 7, super espingarda 20, todas as outras 1.
3. DPS esperado: $\text{DPS} = \frac{\text{dano esperado por disparo} \times 35}{\text{tics por ataque}}$. O 35 é o TICRATE; os tics por ataque são a soma das durações dos estados entre duas chamadas consecutivas a A_FireProjectile ou A_FireBullets no bloco States do ator.
4. Disparos até matar: $\lceil \frac{\text{HP}}{\text{dano esperado por disparo} \times \text{damageFactor}} \rceil$. Tempo até a morte: disparos até matar multiplicado por tics por ataque e dividido por 35.
5. Tics para segundos: tics divididos por 35. Segundos para tics: round(segundos × 35). Para Delay() em ACS escreva `Delay(35 * segundos)` direto — o compilador resolve a multiplicação na hora de montar o script.
6. Voo do projétil: tics = $\lceil \frac{\text{distância}}{\text{Speed}} \rceil$, segundos = tics divididos por 35. O motor anda em tics inteiros, então é sempre arredondamento para cima. Velocidade real: $\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$.
Reprodução do cenário padrão: bola de fogo do Imp com Damage 3 contra um Cacodemon (HP 400). Dano esperado por disparo = $3 \times 4{,}5 = 13{,}5$. 400 dividido por 13,5 = 29,6 — então os disparos esperados até matar são 30. O mesmo Cacodemon cai com 2 a 4 tiros de super espingarda (melhor caso 2, pior 4, esperado 2): cada tiro entrega em média 200 pontos de dano pela fórmula canônica de 20 pellets — uma diferença de 15× por disparo que se traduz diretamente em quantos segundos você passa de frente para o bicho dependendo da arma na mão.

Dano, DPS e tics — as fórmulas do motor

danomin=Dmmin,danomax=Dmmax,E[dano]=Dmmin+mmax2DPS=E[dano por disparo]35tataque,disparos=HE[dano por disparo]ftics=round(s35),voo=dv\begin{aligned} \text{dano}_{\min} &= D \cdot m_{\min}, \quad \text{dano}_{\max} = D \cdot m_{\max}, \quad \mathbb{E}[\text{dano}] = D \cdot \tfrac{m_{\min} + m_{\max}}{2} \\ \text{DPS} &= \frac{\mathbb{E}[\text{dano por disparo}] \cdot 35}{t_{\text{ataque}}}, \quad \text{disparos} = \left\lceil \frac{H}{\mathbb{E}[\text{dano por disparo}] \cdot f} \right\rceil \\ \text{tics} &= \text{round}(s \cdot 35), \quad \text{voo} = \left\lceil \frac{d}{v} \right\rceil \end{aligned}
  • DD = Propriedade Damage do bloco Default do ator em DECORATE ou ZScript (um inteiro)
  • mmin,mmaxm_{\min}, m_{\max} = 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
  • tataquet_{\text{ataque}} = Tics por ataque — a duração da máquina de estados entre duas chamadas consecutivas de disparo no bloco States do ator
  • HH = 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
  • ff = Multiplicador DamageFactor — 1,0 normal, 0,5 resistência, 2,0 vulnerabilidade, 0,0 invulnerável
  • ss = Tempo em segundos — multiplicado por TICRATE = 35 e arredondado para tics inteiros nas durações de estado e no argumento de Delay()
  • d,vd, v = 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
O 35 do denominador do DPS é o TICRATE, a constante que a id Software cravou no topo do doomdef.h em 1993 e que ZDoom, GZDoom e qualquer source port de Doom respeitam ao pé da letra. A mesma constante rege qualquer duração de estado em DECORATE e ZScript: um estado `TNT1 A 24` dura 24 tics — justamente o número que vai parar no denominador do DPS. O spray da BFG é a única exceção à regra uniforme random(1, 8): dentro de A_BFGSpray o dano por raio é a soma de 15 random(1, 8) independentes, então a faixa por raio é 15 a 120 com valor esperado de 67,5; uma bola de BFG solta até 40 raios no cone frontal. O multiplicador do Berserker entra depois da tirada random(1, 10), então um soco com Berserker ativo cai na faixa de 20 a 200 com valor esperado de 110.

Exemplos resolvidos com toda a conta

Bola do Imp contra o Cacodemon — o cenário padrão

A bola do Imp tem Damage 3 no bloco Default do ator DoomImpBall. Faixa por disparo = 3 a 24 (3 × random(1, 8)), esperado = 13,5. HP do Cacodemon = 400 (lido direto da propriedade Health do ator Cacodemon, o mesmo valor citado no Doom Wiki). Disparos esperados até matar = $\lceil 400 / 13{,}5 \rceil$ = 30. Pior caso (cada tirada cai no mínimo) = $\lceil 400 / 3 \rceil$ = 134. Melhor caso (cada tirada cai no máximo) = $\lceil 400 / 24 \rceil$ = 17. Essa diferença de 17 a 134 costuma surpreender os modders iniciantes: o multiplicador aleatório é a variável dominante, muito mais do que o próprio Damage. Uma bola com Damage 6 corta a contagem esperada pela metade (15 disparos), mas o pior caso só cai para 67.

DPS da pistola contra um Zombieman — "a pistola é mesmo inútil?"

Fórmula da pistola: $5 \times \text{random}(1, 3)$ por disparo, pellets 1. Faixa por disparo = 5 a 15, esperado = 10. A_FirePistol dispara cerca de 150 vezes por minuto no Doom vanilla (~14 tics por ciclo). DPS = $10 \times 35 / 14$ ≈ 25 pontos de dano esperados por segundo. HP do Zombieman = 20. Disparos esperados até matar = $\lceil 20 / 10 \rceil$ = 2. Melhor caso = 2 (dois 15 seguidos), pior caso = 4 (quatro 5). Tempo até a morte com 14 tics por ataque = $2 \times (14/35) = 0{,}8$ segundo esperado, até 1,6 no pior caso. A pistola não é inútil — derruba um Zombieman em 2 tiros e mastiga um Imp em 6 — mas o DPS dela é cerca de um terço do da metralhadora (mesma fórmula por disparo, mas ~4 tics por ataque em vez de 14) e um décimo do lança-foguetes. Por isso a metralhadora aposenta a pistola assim que cai a primeira.

Super espingarda no Hell Knight — a realidade do tiro à queima-roupa

Fórmula da super espingarda: $5 \times \text{random}(1, 3)$ por pellet, pellets 20. Faixa por disparo = 100 a 300, esperado = 200. HP do Hell Knight = 500. Disparos esperados até matar = $\lceil 500 / 200 \rceil$ = 3. Pior caso = $\lceil 500 / 100 \rceil$ = 5 disparos (cada pellet caindo em 1). Melhor caso = $\lceil 500 / 300 \rceil$ = 2 disparos (cada pellet caindo em 3). A_FireShotgun2 cicla a ~36,8 disparos/minuto (uns 57 tics por ataque contando o engatilhar e recarregar), então o tempo até a morte com 3 disparos = $3 \times (57/35) \approx 4{,}9$ segundos. Bate com o consenso dos fóruns: dois tiros só caem se a sorte for boa nas tiradas; três é o plano realista que você usa em runs de UV.

Acerto direto da bola da BFG no Cyberdemon (sem spray)

A bola da BFG tem Damage 100 no ator BFGBall. Faixa do acerto direto = 100 a 800, esperado = 450. HP do Cyberdemon = 4.000, sem splash (o Cyberdemon é imune ao dano por explosão, então só contam os impactos diretos). Acertos diretos esperados = $\lceil 4000 / 450 \rceil$ = 9. Melhor caso = $\lceil 4000 / 800 \rceil$ = 5. Pior caso = $\lceil 4000 / 100 \rceil$ = 40 acertos (cada tirada caindo no mínimo). O conselho clássico do Doom Wiki de "3 a 4 BFG matam um Cyberdemon" parte do princípio de que os raios do spray também batem e que a distância mantém o bicho dentro do cone. A eficiência real da BFG é o spray: uma bola com cobertura total de 40 raios soma 450 + 40 × 67,5 = 3.150 pontos de dano esperados por gatilhada, derrubando o Cyberdemon em 2 disparos se você cravar simultaneamente o acerto direto e o cone — exatamente o que o guia BR "Como a BFG 9000 funciona" descreve como cenário ideal.

Aritmética do ACS Delay — "quantos tics são 2,5 segundos?"

Tics por segundo = 35. Segundos para tics em 2,5 = $\text{round}(2{,}5 \times 35)$ = round(87,5) = 88 tics. Em ACS: escreva `Delay(35 * 25 / 10)` se quiser manter a aritmética legível, ou direto `Delay(88)`. Os valores que todo modder decora: 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 da bola do Imp = 10 unidades de mapa por tic. Voo de 1.024 unidades = $\lceil 1024 / 10 \rceil$ = 103 tics ≈ 2,94 segundos, ou cerca de 15 mph (10 × 1,49 ≈ 14,9). A bola do fuzil de plasma com Speed 25 cobre as mesmas 1.024 u.m. em 41 tics ≈ 1,17 segundo, ou uns 60 km/h.

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