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.
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).
Distribución del daño
random(1, N) es uniforme — cada multiplicador es igual de probable.
| Daño por impacto | Probabilidad |
|---|---|
| 3 | 12,5% |
| 6 | 12,5% |
| 9 | 12,5% |
| 12 | 12,5% |
| 15 | 12,5% |
| 18 | 12,5% |
| 21 | 12,5% |
| 24 | 12,5% |
Referencia de proyectiles vanilla
Pulsa una fila para cargarla en los inputs de arriba.
| Proyectil | Damage | Multiplicador | Mín | Máx | Media | Speed (u/tic) |
|---|---|---|---|---|---|---|
| Bola de fuego del Imp — DoomImpBall | 3 | × random(1, 8) | 3 | 24 | 13,5 | 10 |
| Bola del Cacodemon — CacodemonBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 10 |
| Plasma del Arachnotron — ArachnotronPlasma | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Bola del fusil de plasma — PlasmaBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Bola del Barón / Hell Knight — BaronBall | 8 | × random(1, 8) | 8 | 64 | 36 | 15 |
| Bola de fuego del Mancubus — FatShot | 8 | × random(1, 8) | 8 | 64 | 36 | 20 |
| Tracer del Revenant (con guiado) — RevenantTracer | 10 | × random(1, 8) | 10 | 80 | 45 | 10 |
| Cohete (impacto directo) — Rocket | 20 | × random(1, 8) | 20 | 160 | 90 | 20 |
| Spray del BFG (por rayo) | 67 | × 1..8 loop | 15 | 120 | 67,5 | — |
| Bola del BFG (impacto directo) — BFGBall | 100 | × random(1, 8) | 100 | 800 | 450 | 25 |
Fragmento de DECORATE/ZScript que reproduce estos números.
ACTOR CustomProjectile : DoomImpBall{ Damage 3 // Min 3 Max 24 Avg 13.5 (× random(1, 8))}Calculadora de daño ZDoom. Rango, DPS y tics para modders de Doom.
¿Qué es la calculadora de daño y DPS de ZDoom?
Cómo calcular daño, DPS y tics en ZDoom (y cómo lo hace la calculadora)
Daño, DPS y tics — las fórmulas del motor
- = Propiedad Damage del bloque Default del actor en DECORATE o ZScript (un entero)
- = 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
- = Tics por ataque — la duración de la máquina de estados entre dos llamadas consecutivas de disparo en el bloque States del actor
- = 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
- = Multiplicador DamageFactor — 1,0 normal, 0,5 resistencia, 2,0 vulnerabilidad, 0,0 invulnerable
- = Tiempo en segundos — se multiplica por TICRATE = 35 y se redondea a tics enteros para las duraciones de estado y el argumento de Delay()
- = 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
Ejemplos resueltos con todos los cálculos
Bola del Imp contra un Cacodemon — el escenario por defecto
DPS de la pistola contra un Zombieman — "¿de verdad es inútil la pistola?"
Súper escopeta contra un Hell Knight — la realidad del cañón a quemarropa
Impacto directo de bola de BFG contra un Cyberdemon (sin spray)
Aritmética de ACS Delay — "¿cuántos tics son 2,5 segundos?"
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