Smart Calculators

Smart

Calculators

Calculadora de daño y DPS de ZDoom

Calcula el rango exacto de daño, el DPS esperado y el tiempo hasta matar de cualquier arma o proyectil de ZDoom / GZDoom. Incluye el multiplicador random(1,8), el flag STRIFEDAMAGE y un convertidor de tics a segundos para scripts ACS.

ZS>Daño y DPS de ZDoom

Rango de daño, DPS y convertidor de tics para modders de Doom.

Calcula daño mín/medio/máx para cualquier proyectil, arma hitscan o DamageFunction personalizada.

Fórmula de daño

Usa Damage × random(1, 8) — la fórmula estándar de proyectil de ZDoom.

Elige un proyectil vanilla de Doom para autorrellenar Damage. Si editas Damage después, el preset vuelve a Personalizado.

dmg

El N que pones tras Damage en DECORATE/ZScript (p. ej. Damage 3 en la bola de fuego del Imp).

Multiplicador estilo Strife: damage × random(1, 4) en vez de × random(1, 8). Funciona con cualquier actor en cualquier mod de ZDoom independientemente del juego base.

Daño esperado por impacto
13,5
3–24 por impacto, media 13,5
Damage 3 × random(1, 8)
Daño mínimo por impacto
3
Daño máximo por impacto
24

Distribución del daño

random(1, N) es uniforme — cada multiplicador es igual de probable.

Distribución del daño3691215182124Daño por impactoProbabilidadMedia (13,5)
Tabla de distribución del daño para lectores de pantalla.
Daño por impactoProbabilidad
312,5%
612,5%
912,5%
1212,5%
1512,5%
1812,5%
2112,5%
2412,5%

Referencia de proyectiles vanilla

Pulsa una fila para cargarla en los inputs de arriba.

ProyectilDamageMultiplicadorMínMáxMediaSpeed (u/tic)
Bola de fuego del Imp — DoomImpBall3× random(1, 8)32413,510
Bola del Cacodemon — CacodemonBall5× random(1, 8)54022,510
Plasma del Arachnotron — ArachnotronPlasma5× random(1, 8)54022,525
Bola del fusil de plasma — PlasmaBall5× random(1, 8)54022,525
Bola del Barón / Hell Knight — BaronBall8× random(1, 8)8643615
Bola de fuego del Mancubus — FatShot8× random(1, 8)8643620
Tracer del Revenant (con guiado) — RevenantTracer10× random(1, 8)10804510
Cohete (impacto directo) — Rocket20× random(1, 8)201609020
Spray del BFG (por rayo)67× 1..8 loop1512067,5
Bola del BFG (impacto directo) — BFGBall100× random(1, 8)10080045025

Fragmento de DECORATE/ZScript que reproduce estos números.

ACTOR CustomProjectile : DoomImpBall
{
Damage 3
// Min 3 Max 24 Avg 13.5 (× random(1, 8))
}
Actualizado 11 may 2026
Calculadora trade-up CS2Calculadora de Pity de Arknights: Endfield

Calculadora de daño ZDoom. Rango, DPS y tics para modders de Doom.

Una calculadora de daño ZDoom convierte un valor Damage en el mínimo, promedio y máximo por impacto, el DPS esperado y los tics para ACS Delay(). Reúne el multiplicador aleatorio, el flag +STRIFEDAMAGE, los presets vanilla de proyectiles e hitscans, una tabla de HP con los 19 monstruos y el conversor de tics a segundos en una sola página.

¿Qué es la calculadora de daño y DPS de ZDoom?

La calculadora de daño y DPS de ZDoom es una herramienta web que, a partir de una propiedad Damage, un preset de arma o proyectil y un ritmo de ataque, devuelve el rango exacto de daño, el DPS esperado, los disparos necesarios para matar a cualquier monstruo vanilla de Doom o Doom II y el número de tics que debe llevar una llamada a ACS Delay(). Está dirigida a ZDoom y GZDoom — los ports en los que viven los actores DECORATE y ZScript —, reproduce la misma aritmética del motor que id Software publicó en el código fuente de 1997 y resuelve en tres modos en una sola página las tres preguntas que más se repiten entre modders.
La confusión principal que despeja la calculadora es el multiplicador aleatorio. Por defecto, un proyectil con Damage 3 no impacta en partida por 3: impacta por 3 multiplicado por un entero aleatorio entre 1 y 8, así que la bola de fuego del Imp cae en el rango de 3 a 24 con un valor esperado de 13,5 por impacto. Un proyectil propio escrito con Damage 10 en el bloque Default reparte 10, 20, 30, 40, 50, 60, 70 u 80 — nunca exactamente 10. El flag +STRIFEDAMAGE cambia el multiplicador a random(1, 4): el mismo Damage 10 cae ahora en 10, 20, 30 o 40. Las armas hitscan siguen otro camino: la pistola, la escopeta y la ametralladora usan 5 multiplicado por random(1, 3) por cada pellet (5, 10 o 15), y el puño y la motosierra usan 2 multiplicado por random(1, 10). La propiedad Damage en un actor hitscan se ignora — la fórmula está cableada dentro de la función de disparo del arma. El potenciador Berserker multiplica el daño del puño por 10 después de la tirada aleatoria; ninguna otra arma se beneficia.
El segundo modo convierte ese rango por disparo en DPS esperado. Introduce el daño por pellet, el número de pellets, los tics entre ataques (la duración de los estados entre dos llamadas consecutivas a A_FireProjectile o A_FireBullets) y elige un objetivo: Zombieman con 20 HP, Cacodemon con 400, Spider Mastermind con 3000, Cyberdemon con 4000 o cualquiera de los 19 monstruos vanilla extraídos de las definiciones ZScript. La calculadora devuelve el daño esperado por disparo, el DPS esperado, los disparos esperados hasta matar, el tiempo hasta la muerte en segundos y los recuentos en el mejor y el peor caso para que veas todo el abanico, no solo el promedio. La casilla DamageFactor cubre el caso de resistencias y vulnerabilidades (0,5 reduce el daño a la mitad, 2,0 lo dobla, 0 hace al objetivo invulnerable).
El tercer modo cubre dos conversores que un modder de Doom necesita cada vez que toca un script ACS o equilibra el tiempo de vuelo de un proyectil. El primero convierte tics en segundos usando TICRATE = 35: Delay(35 * 2) son exactamente dos segundos en el GZDoom moderno (v3.2.2 en adelante); hace 35 tics se mostraba como 0,98 segundos por un truncamiento de división entera en el código del temporizador. El segundo convierte la propiedad Speed de un proyectil (unidades de mapa por tic) en unidades de mapa por segundo, metros por segundo, km/h y mph, aplicando la equivalencia canónica de 16 unidades de mapa horizontales = 1 pie. Si añades una distancia objetivo junto al Speed, obtienes también el tiempo de vuelo redondeado hacia arriba al siguiente tic — exactamente como pasa el motor de un fotograma al siguiente.

Cómo calcular daño, DPS y tics en ZDoom (y cómo lo hace la calculadora)

Aquí conviven tres cálculos independientes, porque tres preguntas se repiten en cualquier hilo de DECORATE, ZScript o ACS. La calculadora de arriba ejecuta los tres cada vez que cambia un input; la versión manual de abajo es la que llevas al papel para revisar un proyectil antes de volver a cargar el WAD.
Con la herramienta
1. Elige modo arriba: Rango de daño, DPS y tiempo hasta matar, o Conversor de tics y velocidad. Cada modo conserva sus propios inputs al cambiar.
2. Modo Rango de daño. Elige el submodo que coincide con tu actor. El submodo Proyectil acepta un valor Damage y el interruptor opcional +STRIFEDAMAGE y devuelve Damage × 1 (mínimo), Damage × 4,5 (promedio) y Damage × 8 (máximo). El submodo Hitscan acepta un preset de arma y un número de pellets — la fórmula por pellet está cableada. El submodo Personalizado acepta un mínimo y un máximo libres, útil si trabajas con una expresión DamageFunction. Elige un preset de proyectil (bola del Imp, bola del Cacodemon, bola del fusil de plasma, cohete, bola de la BFG, rayo del spray de la BFG y otros seis) para autocompletar el Damage desde el bloque Default del actor vanilla.
3. Modo DPS. Introduce daño por pellet, tipo de fórmula (proyectil, STRIFEDAMAGE o hitscan), número de pellets, tics entre ataques y elige monstruo en la lista de 19 presets vanilla (o teclea un HP personalizado). El acordeón avanzado expone DamageFactor y una sobreescritura de HP del objetivo. La fila destacada muestra DPS esperado y disparos esperados hasta matar; en las tarjetas secundarias salen el tiempo hasta la muerte en segundos, el mejor caso (cada tirada saca el máximo) y el peor caso (cada tirada saca el mínimo).
4. Modo Tics y velocidad. Teclea tics y verás los segundos, o al revés. Más abajo, introduce un Speed (unidades de mapa por tic) y una distancia opcional en unidades de mapa para obtener la velocidad en u.m./s, m/s, km/h y mph, además del tiempo de vuelo en tics y segundos.
A mano
1. Rango de daño de un proyectil: mín = $D$, máx = $D \times 8$, esperado = $D \times 4{,}5$. Con +STRIFEDAMAGE: máx = $D \times 4$, esperado = $D \times 2{,}5$. La distribución es uniforme — cada multiplicador del 1 al 8 (o del 1 al 4) es igualmente probable.
2. Daño hitscan por pellet: pistola / escopeta / ametralladora = $5 \times \text{random}(1, 3)$, promedio 10 por pellet. Puño / motosierra = $2 \times \text{random}(1, 10)$, promedio 11. Berserker multiplica por 10 el daño del puño después de la tirada. Multiplica por el número de pellets: escopeta 7, súper escopeta 20, el resto 1.
3. DPS esperado: $\text{DPS} = \frac{\text{daño esperado por disparo} \times 35}{\text{tics por ataque}}$. El 35 es TICRATE; los tics por ataque son la suma de las duraciones de los estados entre dos llamadas consecutivas a A_FireProjectile o A_FireBullets en el bloque States del actor.
4. Disparos hasta matar: $\lceil \frac{\text{HP}}{\text{daño esperado por disparo} \times \text{damageFactor}} \rceil$. Tiempo hasta la muerte: disparos hasta matar multiplicado por tics por ataque y dividido entre 35.
5. Tics a segundos: tics dividido entre 35. Segundos a tics: round(segundos × 35). Para Delay() en ACS escribe `Delay(35 * segundos)` directamente — el compilador resuelve la multiplicación.
6. Vuelo de un proyectil: tics = $\lceil \frac{\text{distancia}}{\text{Speed}} \rceil$, segundos = tics dividido entre 35. El motor avanza en tics enteros, así que siempre se redondea hacia arriba. Velocidad 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$.
Reproducción del escenario por defecto: bola de fuego del Imp con Damage 3 contra un Cacodemon (HP 400). Daño esperado por disparo = $3 \times 4{,}5 = 13{,}5$. 400 dividido entre 13,5 = 29,6, así que los disparos esperados hasta matar son 30. El mismo Cacodemon cae con 2 a 4 disparos de súper escopeta (mejor caso 2, peor 4, esperado 2): cada disparo promedia 200 puntos de daño con la fórmula canónica de 20 pellets — una diferencia de 15× por disparo que se traduce directamente en cuántos segundos pasas con un Cacodemon delante según el arma que lleves.

Daño, DPS y tics — las fórmulas del motor

dan˜omin=Dmmin,dan˜omax=Dmmax,E[dan˜o]=Dmmin+mmax2DPS=E[dan˜o por disparo]35tataque,disparos=HE[dan˜o por disparo]ftics=round(s35),vuelo=dv\begin{aligned} \text{daño}_{\min} &= D \cdot m_{\min}, \quad \text{daño}_{\max} = D \cdot m_{\max}, \quad \mathbb{E}[\text{daño}] = D \cdot \tfrac{m_{\min} + m_{\max}}{2} \\ \text{DPS} &= \frac{\mathbb{E}[\text{daño por disparo}] \cdot 35}{t_{\text{ataque}}}, \quad \text{disparos} = \left\lceil \frac{H}{\mathbb{E}[\text{daño por disparo}] \cdot f} \right\rceil \\ \text{tics} &= \text{round}(s \cdot 35), \quad \text{vuelo} = \left\lceil \frac{d}{v} \right\rceil \end{aligned}
  • DD = Propiedad Damage del bloque Default del actor en DECORATE o ZScript (un entero)
  • mmin,mmaxm_{\min}, m_{\max} = Cotas del multiplicador aleatorio — 1 y 8 por defecto; 1 y 4 con +STRIFEDAMAGE; 1 y 3 para los pellets de pistola/escopeta/ametralladora; 1 y 10 para puño/motosierra
  • tataquet_{\text{ataque}} = Tics por ataque — la duración de la máquina de estados entre dos llamadas consecutivas de disparo en el bloque States del actor
  • HH = HP del objetivo — 20 para el Zombieman, 60 para el Imp, 400 para el Cacodemon, 1000 para el Baron of Hell, 3000 para el Spider Mastermind, 4000 para el Cyberdemon
  • ff = Multiplicador DamageFactor — 1,0 normal, 0,5 resistencia, 2,0 vulnerabilidad, 0,0 invulnerable
  • ss = Tiempo en segundos — se multiplica por TICRATE = 35 y se redondea a tics enteros para las duraciones de estado y el argumento de Delay()
  • d,vd, v = Distancia de vuelo en unidades de mapa y Speed del proyectil en unidades de mapa por tic; la división con techo da los tics porque el motor avanza en pasos enteros
El 35 del denominador del DPS es TICRATE, la constante que id Software fijó en lo alto de doomdef.h en 1993 y que ZDoom, GZDoom y cualquier otro source port de Doom respetan al pie de la letra. La misma constante gobierna cada duración de estado en DECORATE y ZScript: un estado `TNT1 A 24` dura 24 tics, justamente el número que va al denominador del DPS. El spray de la BFG es la única excepción a la regla uniforme random(1, 8) — dentro de A_BFGSpray el daño por rayo se calcula como la suma de 15 random(1, 8) independientes, así que el rango por rayo es 15 a 120 con un valor esperado de 67,5; una bola de BFG suelta hasta 40 rayos. El multiplicador de Berserker se aplica después de la tirada random(1, 10), de modo que un puñetazo con Berserker cae en el rango 20 a 200 con un valor esperado de 110.

Ejemplos resueltos con todos los cálculos

Bola del Imp contra un Cacodemon — el escenario por defecto

La bola del Imp tiene Damage 3 en el bloque Default del actor DoomImpBall. Rango por disparo = 3 a 24 (3 × random(1, 8)), esperado = 13,5. HP del Cacodemon = 400 (de la propiedad Health del actor Cacodemon, idéntico al valor del Doom Wiki en español). Disparos esperados hasta matar = $\lceil 400 / 13{,}5 \rceil$ = 30. Peor caso (cada tirada saca el mínimo) = $\lceil 400 / 3 \rceil$ = 134. Mejor caso (cada tirada saca el máximo) = $\lceil 400 / 24 \rceil$ = 17. Esa horquilla 17 a 134 sorprende a los modders nuevos: el multiplicador aleatorio es la variable dominante, mucho más que el propio valor de Damage. Una bola con Damage 6 reduce la cifra esperada a la mitad (15 disparos), pero el peor caso solo baja a 67.

DPS de la pistola contra un Zombieman — "¿de verdad es inútil la pistola?"

Fórmula de la pistola: $5 \times \text{random}(1, 3)$ por disparo, pellets 1. Rango por disparo = 5 a 15, esperado = 10. A_FirePistol dispara unas 150 veces por minuto en el Doom vanilla (~14 tics por ciclo). DPS = $10 \times 35 / 14$ ≈ 25 puntos de daño esperados por segundo. HP del Zombieman = 20. Disparos esperados hasta matar = $\lceil 20 / 10 \rceil$ = 2. Mejor caso = 2 (dos quinces seguidos), peor caso = 4 (cuatro cincos). Tiempo hasta la muerte con 14 tics por ataque = $2 \times (14/35) = 0{,}8$ segundos esperados, hasta 1,6 en el peor caso. La pistola no es inútil — tumba a un Zombieman en 2 tiros y mordisquea a un Imp en 6 — pero su DPS ronda un tercio del de la ametralladora (misma fórmula por disparo, ~4 tics por ataque en lugar de 14) y un décimo del lanzacohetes. Por eso la ametralladora la jubila en cuanto cae la primera.

Súper escopeta contra un Hell Knight — la realidad del cañón a quemarropa

Fórmula de la súper escopeta: $5 \times \text{random}(1, 3)$ por pellet, pellets 20. Rango por disparo = 100 a 300, esperado = 200. HP del Hell Knight = 500. Disparos esperados hasta matar = $\lceil 500 / 200 \rceil$ = 3. Peor caso = $\lceil 500 / 100 \rceil$ = 5 disparos (cada pellet saca un 1). Mejor caso = $\lceil 500 / 300 \rceil$ = 2 disparos (cada pellet saca un 3). A_FireShotgun2 cicla a ~36,8 disparos/minuto (unos 57 tics por ataque contando carga y recarga), así que el tiempo hasta la muerte con 3 disparos = $3 \times (57/35) \approx 4{,}9$ segundos. Coincide con el consenso de los foros: dos disparos solo bastan si los dados sonríen; tres es el plan realista.

Impacto directo de bola de BFG contra un Cyberdemon (sin spray)

La bola de BFG tiene Damage 100 en el actor BFGBall. Rango del impacto directo = 100 a 800, esperado = 450. HP del Cyberdemon = 4000, sin splash (el Cyberdemon es inmune al daño por explosión, así que solo cuentan los impactos directos). Impactos directos esperados = $\lceil 4000 / 450 \rceil$ = 9. Mejor caso = $\lceil 4000 / 800 \rceil$ = 5. Peor caso = $\lceil 4000 / 100 \rceil$ = 40 impactos (cada tirada saca el mínimo). El consejo clásico del wiki de "de tres a cuatro impactos de BFG matan al Cyberdemon" asume que los rayos del spray también conectan y que la distancia mantiene al bicho dentro del cono. La eficiencia real de la BFG la pone el spray: una bola con cobertura completa de 40 rayos suma 450 + 40 × 67,5 = 3150 puntos de daño esperados por gatillazo, lo que tumba al Cyberdemon en 2 disparos si clavas a la vez el impacto directo y el cono.

Aritmética de ACS Delay — "¿cuántos tics son 2,5 segundos?"

Tics por segundo = 35. Segundos a tics para 2,5 = $\text{round}(2{,}5 \times 35)$ = round(87,5) = 88 tics. En ACS: escribe `Delay(35 * 25 / 10)` si quieres mantener la aritmética legible, o directamente `Delay(88)`. Las equivalencias más comunes que conviene memorizar: 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. El Speed de la bola del Imp = 10 unidades de mapa por tic. Vuelo sobre 1024 unidades = $\lceil 1024 / 10 \rceil$ = 103 tics ≈ 2,94 segundos, unas 15 mph (10 × 1,49 ≈ 14,9). La bola del fusil de plasma con Speed 25 cubre las mismas 1024 u.m. en 41 tics ≈ 1,17 segundos, unos 60 km/h.

Consejos de daño y balance en ZDoom para modders, mappers y curiosos

  • Lee la propiedad Damage de tu actor en valor esperado, no en valor literal. Un proyectil con Damage 5 promedia 22,5 en partida (5 × 4,5), no 5. Si tu nuevo monstruo debe rivalizar con la bola del Imp (esperado 13,5), pon Damage 3 — no Damage 10. El error número uno al equilibrar DECORATE es leer Damage 10 como \"pega 10\", cuando en realidad pega entre 10 y 80 con un promedio de 45.
  • El flag +STRIFEDAMAGE es la forma más barata de estrechar el rango de un proyectil. Mismo Damage, multiplicador máximo cae de 8 a 4, valor esperado cae de 4,5× a 2,5×. Útil cuando quieres un proyectil intermedio predecible (por ejemplo, un cohete personalizado que debería sentirse como 60 a 240 en vez de 60 a 480). Funciona en cualquier mod de ZDoom independientemente del juego base — el nombre viene de Strife (el primer IWAD no-Doom del motor) pero el flag es portable y se usa habitualmente en mods de Doom.
  • Las armas hitscan ignoran por completo la propiedad Damage. Pistola, escopeta, ametralladora y súper escopeta cablean $5 \times \text{random}(1, 3)$ por pellet dentro de A_FireBullets / A_FirePistol / A_FireShotgun. Para subir el daño de un arma hitscan toca el número de pellets, el argumento damage de A_CustomBulletAttack o pásala a proyectil. El puño y la motosierra usan $2 \times \text{random}(1, 10)$; Berserker solo afecta al puño y multiplica por 10 después de la tirada (es decir, 20 a 200 por puñetazo, esperado 110).
  • Los tics entre ataques pesan más que el daño por disparo cuando comparas DPS. La ametralladora y la pistola tienen idéntico daño por disparo (5 a 15, esperado 10), pero la ametralladora dispara cada ~4 tics frente a los ~14 de la pistola — unas 3,5× de DPS con la misma matemática por pellet. Cuando balancees un mod, decide primero el DPS objetivo (pistola vanilla ~25 DPS, escopeta ~70, súper escopeta ~150, ametralladora ~88, fusil de plasma ~263, impacto directo de cohete ~159) y desde ahí deduce el daño por disparo y los tics por ataque que lo producen.
  • Usa la chuleta de 19 monstruos para validar el diseño 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 (1000), Spider Mastermind (3000), Cyberdemon (4000). Un disparo de súper escopeta (esperado 200, máximo 300) tumba en el mejor caso a todo hasta el Revenant (HP 300); Pain Elemental y Cacodemon (HP 400) piden mínimo dos disparos buenos. Un disparo de pistola (esperado 10) solo mata al Zombieman. Cambiar al Demon de la primera sala por un Mancubus no es un salto de dificultad 1,5× — es 4×, porque la curva de HP es geométrica, no lineal.
  • GZDoom v3.2.2 (finales de 2017) y posteriores garantizan que 35 tics equivalen exactamente a un segundo de tiempo real. Las versiones anteriores mostraban un intervalo de 28 ms por tic (35 tics se veían como 0,98 segundos) por el truncamiento entero en el código del temporizador. Si tu aritmética de ACS Delay() necesita precisión sub-segundo y apuntas a usuarios con ports antiguos, asume el 2 % de deriva: `Delay(35 * 60)` en el temporizador legacy son 58,8 segundos reales, 1,2 segundos menos que un minuto real.
  • El spray de la BFG es el único proyectil que no sigue la regla $\text{Damage} \times \text{random}(1, 8)$. Dentro de A_BFGSpray, el daño por rayo se calcula como la suma de 15 random(1, 8) independientes — rango 15 a 120, esperado 67,5, distribución en campana (no uniforme). La bola de BFG suelta hasta 40 rayos en un cono frontal de 90°, así que con cobertura completa 40 × 67,5 = 2700 puntos de daño esperados se suman al 100 a 800 propio de la bola. Por eso un solo gatillazo de BFG puede tumbar al Cyberdemon en dos disparos cuando aciertan tanto el impacto directo como el cono.
  • Las unidades de mapa tienen dos equivalencias, no una. En horizontal, 16 unidades = 1 pie (0,3048 m); en vertical solo 10 unidades = 1 pie, porque el modo 320×200 original de Doom estiraba la imagen un 20 % en altura. Para convertir Speed la calculadora usa la equivalencia horizontal, porque los proyectiles viajan por el plano del mapa: Speed 10 (bola del Imp) ≈ 6,67 m/s ≈ 15 mph; Speed 25 (plasma, bola de BFG) ≈ 16,67 m/s ≈ 60 km/h ≈ 37 mph. La velocidad de carrera de Doomguy ronda Speed 16, unas 24 mph — por eso a veces un Imp te alcanza en un pasillo.
  • DamageFactor resuelve resistencias y vulnerabilidades sin reescribir el código de daño. DamageFactor 'Fire', 0.5 en un monstruo divide a la mitad el daño de tipo Fire; 2.0 lo dobla; 0.0 lo hace inmune. El modo DPS de la calculadora expone una única casilla escalar DamageFactor que modela el caso resistente sin tener que crear un tipo de daño personalizado — útil cuando comparas el TTK del arma vanilla contra, por ejemplo, una variante de Cacodemon con 0,7 de resistencia al plasma.
  • El peor caso y la horquilla pesan más que el promedio cuando diseñas combate ajustado. "Disparos esperados hasta matar = 30" oculta que un Cacodemon puede sobrevivir a 134 bolas de Imp en el peor caso patológico. La calculadora muestra el mejor y el peor caso al lado del esperado precisamente para esto: cuando diseñas un slaughter map y el bicho debe morir dentro de un presupuesto estricto de disparos, dimensiona por el peor caso. Cuando diseñas un mapa convencional, dimensiona por el esperado. Las dos cifras pueden diferir entre 5× y 10× para proyectiles con random(1, 8).
  • Si moddeas en castellano, conserva los nombres de actor y de propiedad en inglés tal como aparecen en el motor (Damage, Speed, Health, +STRIFEDAMAGE, Cacodemon, Cyberdemon). DECORATE y ZScript no aceptan identificadores localizados, así que aunque la wiki de Doom en español traduzca \"Cacodemonio\" en prosa, el actor se sigue llamando Cacodemon en el código. Mantener la nomenclatura inglesa en tus PK3 ahorra horas de depuración cuando un tercero abre tu WAD.

Calculadora de daño ZDoom — preguntas frecuentes

¿Por qué mi proyectil con Damage 10 a veces pega por 80?

ZDoom multiplica la propiedad Damage del proyectil por random(1, 8) en cada impacto. Damage 10 produce 10, 20, 30, 40, 50, 60, 70 u 80 — todos los valores son igual de probables. El promedio es 45. El flag +STRIFEDAMAGE cambia el multiplicador a random(1, 4): salen 10, 20, 30 o 40 con un promedio de 25.

¿Cuál es la fórmula de daño de la pistola en el Doom clásico?

La pistola usa $5 \times \text{random}(1, 3)$ por disparo, así que cada tiro hace 5, 10 o 15 puntos con un valor esperado de 10. La ametralladora y la escopeta (por pellet) usan la misma fórmula. La propiedad Damage en un actor hitscan se ignora — la fórmula está cableada en A_FirePistol, A_FireShotgun y A_FireCGun.

¿Cuántos tics hay en un segundo de ZDoom?

35 tics por segundo. TICRATE está fijado en 35 desde el lanzamiento original de 1993. GZDoom v3.2.2 y posteriores garantizan que 35 tics equivalen a 1,000 segundos exactos; las versiones anteriores truncaban a 28 ms por tic, así que 35 tics se mostraban como 0,98 segundos — una deriva del 2 % que solo importa en cadenas largas de Delay().

¿Cómo se calcula ACS Delay() para X segundos?

Multiplica los segundos por 35 y redondea a entero. 0,5 s = 18 tics, 1 s = 35, 2 s = 70, 5 s = 175, 10 s = 350, 60 s = 2100. En ACS escribe `Delay(35 * segundos)` directamente — el compilador resuelve la multiplicación en tiempo de compilación.

¿Qué hace el flag +STRIFEDAMAGE?

+STRIFEDAMAGE cambia el multiplicador del daño de proyectil de random(1, 8) a random(1, 4). Mismo valor Damage, rango más estrecho, promedio más bajo. Funciona en cualquier actor de cualquier mod de ZDoom independientemente del juego base — el nombre viene de Strife pero el flag es portable. Útil cuando quieres un proyectil intermedio predecible.

¿Cuánto HP tiene el Cyberdemon?

4000 HP. El Cyberdemon solo recibe daño directo — el splash de los cohetes y de los disparos del Mancubus le rebota. La BFG9000 es el método canónico de derribo (unos 2 a 4 gatillazos contando el spray); unos 20 disparos de súper escopeta a quemarropa o 45 impactos directos de cohete también lo tumban si te sobra munición. La tabla de 19 filas bajo la calculadora muestra todos los HP vanilla de Doom.

¿Por qué el daño de la BFG es tan raro — qué es ese bucle de 15 random?

La bola principal de la BFG usa la fórmula estándar (Damage 100 × random(1, 8) = 100 a 800), pero los rayos del spray no. Cada uno de los hasta 40 rayos suma 15 random(1, 8) independientes: rango 15 a 120 por rayo con un valor esperado de 67,5. El Doom Wiki señala que el determinismo de la tabla pseudoaleatoria P_Random (256 bytes estáticos) reduce el rango práctico a 49 a 87, pero el máximo teórico por rayo sigue siendo 120.

¿La calculadora también vale para actores ZScript?

Sí. ZScript y DECORATE comparten la misma semántica de Damage / DamageFunction / Speed / Health / +STRIFEDAMAGE — solo cambian de sintaxis. Un actor ZScript con `Damage 5;` en el bloque Default tira exactamente la misma fórmula $5 \times \text{random}(1, 8)$ que un actor DECORATE con la misma propiedad. Los resultados de la calculadora se aplican a ambos.

¿Funciona la calculadora con Brutal Doom o Project Brutality?

Solo para los actores que conservan la propiedad Damage estándar y las funciones hitscan vanilla. Brutal Doom y Project Brutality redefinen la mayoría de sus armas con expresiones DamageFunction propias y rutinas A_FireCustomMissile personalizadas que no respetan el multiplicador random(1, 8). Para esas armas, la calculadora muestra el cálculo vanilla equivalente, que tendrás que ajustar leyendo el código DECORATE/ZScript del actor concreto del mod.

¿Sirve la traducción al español de GZDoom (o las del Russian Doom / International Doom) para los cálculos?

Sí. Las traducciones — incluida la del proyecto de GZDoom al español publicado en Doomworld — afectan a las cadenas del menú, del HUD y de los logs, pero no tocan la aritmética del motor. Los mismos valores de random(1, 8), TICRATE = 35, +STRIFEDAMAGE y HP de monstruos se comportan igual en una build GZDoom inglesa, en una con el parche castellano o en el port Russian Doom / International Doom.

¿Hay diferencia de daño entre PrBoom+, ZDoom, GZDoom y Zandronum?

No para el Doom y Doom II vanilla. PrBoom+, ZDoom, GZDoom y Zandronum preservan TICRATE 35, las fórmulas random(1, 8) y random(1, 3) y los valores de HP originales al pie de la letra. Las diferencias entre ports aparecen en features avanzadas (físicas, MAPINFO, ZScript, scripts de monstruos en MBF21), no en la matemática base de daño. Un Cacodemon con HP 400 muere igual con la misma secuencia de tiradas en los cuatro motores.

¿En qué se diferencian ZScript y DECORATE en cuanto al daño?

En nada matemático, solo en sintaxis. ZScript es un superconjunto de DECORATE: el mismo `Damage 10` en el bloque Default tira la misma random(1, 8), y el mismo flag +STRIFEDAMAGE cambia el multiplicador a random(1, 4). DECORATE está marcado como obsoleto en GZDoom pero se mantiene compatible; para mods nuevos se recomienda ZScript, pero a efectos de la calculadora de daño es indiferente.

¿Por qué el rastreador del Revenant pega 10 a 80 y no 10 a 40?

El actor RevenantTracer tiene Damage 10 en su bloque, pero NO lleva el flag +STRIFEDAMAGE — usa el multiplicador random(1, 8) por defecto. Por eso su rango es 10 a 80 con un valor esperado de 45, no 10 a 40. Es una confusión habitual porque los cohetes del Revenant suenan a matemática Strife; la realidad es otra.

¿La dificultad (UV / Nightmare) sube el daño de las armas?

No. Nightmare dobla la agresividad de los monstruos y la munición que recogen, pero el daño del arma es idéntico en los cinco niveles de dificultad. El único multiplicador de daño en el Doom vanilla es el potenciador Berserker, que multiplica por 10 el daño del puño. La dificultad cambia quién dispara primero y con qué frecuencia, no la fuerza del impacto.

¿Qué tan precisa es la calculadora frente al juego real?

Exacta a nivel de motor para el comportamiento vanilla de Doom y Doom II bajo ZDoom / GZDoom. La verificación cubre todos los presets de proyectil, todas las armas hitscan, todos los HP de monstruo y el bucle 15× del spray de la BFG — cada rango de daño, HP y Speed de proyectil coincide hasta la unidad con las definiciones del actor vanilla. Los actores de reemplazo en DECORATE / ZScript, las expresiones DamageFunction personalizadas y las entregas modernas (Doom 2016, Eternal, The Dark Ages) usan otra matemática y quedan fuera del alcance.


Glosario de daño y tiempos en ZDoom

Propiedad Damage

Propiedad numérica del bloque Default de un actor DECORATE o ZScript que el motor multiplica por random(1, 8) en cada impacto (random(1, 4) con +STRIFEDAMAGE). Escribir Damage 10 produce en partida un rango de 10 a 80, no un 10 plano.

+STRIFEDAMAGE

Flag de actor que cambia el multiplicador de daño del proyectil de random(1, 8) a random(1, 4). Mismo valor Damage, rango más estrecho, promedio más bajo (Damage × 2,5 en lugar de Damage × 4,5). Funciona en cualquier actor de cualquier mod de ZDoom sin importar el juego base.

tic

Unidad atómica de tiempo del motor de Doom. TICRATE = 35 tics por segundo; 1 tic ≈ 28,5714 ms. Las duraciones de estado en DECORATE / ZScript y el argumento de ACS Delay() se expresan en tics. GZDoom v3.2.2 en adelante garantiza que 35 tics = 1,000 segundos exactos; las versiones anteriores truncaban a 28 ms.

Arma hitscan

Arma cuyo daño se resuelve al instante a lo largo de una línea recta, sin actor proyectil de por medio. Pistola, escopeta, súper escopeta y ametralladora son hitscan; sus fórmulas están cableadas en las action functions A_Fire* ($5 \times \text{random}(1, 3)$ por pellet) y la propiedad Damage del actor se ignora.

DamageFactor

Multiplicador del daño entrante de un tipo concreto. DamageFactor 'Fire', 0.5 divide a la mitad el daño Fire; 2.0 lo dobla; 0.0 hace al actor inmune. El modo DPS de la calculadora expone una única casilla escalar DamageFactor que cubre el caso resistente o vulnerable.

Berserker

Potenciador que multiplica por 10 el daño del puño después de la tirada random(1, 10), produciendo un rango de 20 a 200 con un valor esperado de 110. Solo el puño recibe el bono; la motosierra, los hitscan y las armas de proyectil quedan al margen.

Unidad de mapa (map unit)

Unidad de coordenadas del espacio de Doom. Por consenso de la comunidad, 16 unidades horizontales = 1 pie = 0,3048 m (Doomguy mide 56 unidades verticales = 5 pies 7 pulgadas). La calculadora convierte el Speed del proyectil (unidades por tic) a m/s, km/h y mph con la equivalencia horizontal de 16 u.m./pie.

Propiedad Speed

Velocidad del actor proyectil en unidades de mapa por tic. Bola del Imp Speed 10; cohete Speed 20; bola del fusil de plasma y bola de BFG Speed 25. Multiplica por 35 para obtener unidades por segundo; por 0,667 para metros por segundo; por 1,49 para millas por hora.

Spray de BFG

El cono de 40 rayos que la bola de BFG suelta al impactar (el spray se dispara desde el estado de muerte de la bola vía A_BFGSpray). El daño de cada rayo se calcula como la suma de 15 random(1, 8) independientes: rango 15 a 120 por rayo con un valor esperado de 67,5. La fama de la BFG de tumbar a un Cyberdemon de un disparo se la lleva el spray, no la bola en sí.

TICRATE

Constante del motor que fija la frecuencia de Doom en 35 tics por segundo desde 1993. Declarada en el doomdef.h de id Software; respetada al pie de la letra por ZDoom, GZDoom, Zandronum, PrBoom+, Boom, MBF21 y cualquier otro port vanilla-compatible. Cada duración de estado, cada argumento de Delay() y cada cálculo de tiempo de vuelo de proyectil usa 35 como constante de conversión.

DamageFunction

Alternativa a la propiedad Damage que permite a un modder devolver un entero arbitrario en el momento del impacto mediante una expresión ZScript. Salta el multiplicador random(1, 8) — devuelve un número plano para daño determinista o calcúlalo a partir de inflictor / target / distance para un comportamiento dependiente del contexto.

P_Random

Función pseudoaleatoria del motor de Doom: un índice recorre una tabla estática de 256 bytes con valores barajados entre 0 y 255 y cada llamada devuelve el siguiente byte. No es uniforme (el valor 1 no aparece nunca y el 145 aparece cinco veces), pero es suficiente para la aritmética de combate. Se usa en todas las tiradas de daño; M_Random mantiene su propio índice para los efectos no jugables, para no romper la sincronización del multijugador.


Contenido verificado por el equipo de Smart Calculators