ZDoom Schaden- und DPS-Rechner
Berechne den exakten Schadensbereich, den erwarteten DPS und die Zeit bis zum Kill für jede Waffe oder jedes Geschoss in ZDoom / GZDoom. Mit random(1,8)-Multiplikator, STRIFEDAMAGE-Flag und Tic-zu-Sekunden-Konverter für ACS-Skripte.
Schadensbereich, DPS und Tic-Konverter für Doom-Modder.
Berechnet Min/Schnitt/Max-Schaden für jedes Geschoss, jede Hitscan-Waffe oder eine eigene DamageFunction.
Schadensformel
Nutzt Damage × random(1, 8) — die Standard-Geschossformel von ZDoom.
Wähle ein Vanilla-Doom-Geschoss, um Damage automatisch zu füllen. Wenn du Damage später änderst, springt das Preset auf Benutzerdefiniert.
dmg
Das N nach Damage in DECORATE/ZScript (z. B. Damage 3 beim Imp-Feuerball).
Schadensverteilung
random(1, N) ist gleichverteilt — jeder Multiplikator ist gleich wahrscheinlich.
| Schaden pro Treffer | Wahrscheinlichkeit |
|---|---|
| 3 | 12,5% |
| 6 | 12,5% |
| 9 | 12,5% |
| 12 | 12,5% |
| 15 | 12,5% |
| 18 | 12,5% |
| 21 | 12,5% |
| 24 | 12,5% |
Vanilla-Geschoss-Referenz
Klicke eine Zeile, um sie in die Felder oben zu laden.
| Geschoss | Damage | Multiplikator | Min | Max | Schnitt | Speed (mu/tic) |
|---|---|---|---|---|---|---|
| Imp-Feuerball — DoomImpBall | 3 | × random(1, 8) | 3 | 24 | 13,5 | 10 |
| Ball des Cacodemon — CacodemonBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 10 |
| Plasma des Arachnotron — ArachnotronPlasma | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Plasma-Ball — PlasmaBall | 5 | × random(1, 8) | 5 | 40 | 22,5 | 25 |
| Ball des Baron of Hell / Hell Knight — BaronBall | 8 | × random(1, 8) | 8 | 64 | 36 | 15 |
| Mancubus-Feuerball — FatShot | 8 | × random(1, 8) | 8 | 64 | 36 | 20 |
| Revenant-Tracer (zielsuchend) — RevenantTracer | 10 | × random(1, 8) | 10 | 80 | 45 | 10 |
| Rakete (Direkttreffer) — Rocket | 20 | × random(1, 8) | 20 | 160 | 90 | 20 |
| BFG-Spray (pro Strahl) | 67 | × 1..8 loop | 15 | 120 | 67,5 | — |
| BFG-Ball (Direkttreffer) — BFGBall | 100 | × random(1, 8) | 100 | 800 | 450 | 25 |
DECORATE/ZScript-Snippet, das diese Zahlen reproduziert.
ACTOR CustomProjectile : DoomImpBall{ Damage 3 // Min 3 Max 24 Avg 13.5 (× random(1, 8))}ZDoom Schadensrechner. Schaden, DPS und Tics für Doom-Modder.
Was ist der ZDoom Schadens- und DPS-Rechner?
So berechnest du Schaden, DPS und Tics in ZDoom (und so macht es der Rechner)
Schaden, DPS und Tics — die Engine-Formeln
- = Damage-Eigenschaft aus dem Default-Block des Actors in DECORATE oder ZScript (eine Ganzzahl)
- = Grenzen des Zufallsmultiplikators — 1 und 8 standardmäßig; 1 und 4 mit +STRIFEDAMAGE; 1 und 3 für Pellets von Pistole/Schrotflinte/Maschinengewehr; 1 und 10 für Faust/Kettensäge
- = Tics pro Angriff — die Dauer der Zustandsmaschine zwischen zwei aufeinanderfolgenden Schussaufrufen im States-Block des Actors
- = HP des Ziels — 20 für Zombieman, 60 für Imp, 400 für Cacodemon, 1.000 für Baron of Hell, 3.000 für Spider Mastermind, 4.000 für Cyberdemon
- = DamageFactor-Multiplikator — 1,0 normal, 0,5 Resistenz, 2,0 Verwundbarkeit, 0,0 unverwundbar
- = Zeit in Sekunden — wird mit TICRATE = 35 multipliziert und für Zustandsdauern und das Delay()-Argument auf ganze Tics gerundet
- = Flugdistanz in Karteneinheiten und Projektil-Speed in Karteneinheiten pro Tic; die Aufrundungsdivision ergibt die Tics, weil die Engine in ganzen Schritten läuft
Durchgerechnete Beispiele mit allen Zahlen
Imp-Feuerball gegen Cacodemon — das Standard-Szenario
Pistolen-DPS gegen einen Zombieman — \"ist die Pistole wirklich nutzlos?\"
Super-Schrotflinte auf einen Hell Knight — Realität auf kurze Distanz
Direkter Treffer mit dem BFG-Ball auf einen Cyberdemon (ohne Spray)
ACS-Delay-Arithmetik — \"wie viele Tics sind 2,5 Sekunden?\"
Tipps zu Schaden und Balance in ZDoom für Modder, Mapper und Neugierige
- Lies die Damage-Eigenschaft deines Actors als Erwartungswert, nicht als Literalwert. Ein Projektil mit Damage 5 macht im Spiel im Mittel 22,5 (5 × 4,5), nicht 5. Wenn dein neues Monster mit dem 13,5er-Feuerball des Imps konkurrieren soll, setze Damage 3 — nicht Damage 10. Der häufigste Balance-Fehler in DECORATE ist, Damage 10 als \"trifft für 10\" zu lesen, obwohl es zwischen 10 und 80 trifft, mit einem Mittel von 45.
- Das Flag +STRIFEDAMAGE ist die billigste Möglichkeit, den Bereich eines Projektils enger zu fassen. Gleiches Damage, der maximale Multiplikator fällt von 8 auf 4, der Erwartungswert von 4,5× auf 2,5×. Sinnvoll, wenn du ein vorhersehbares Mittelklasse-Projektil willst (z. B. eine eigene Rakete, die sich nach 60 bis 240 anfühlen soll statt nach 60 bis 480). Funktioniert in jedem ZDoom-Mod unabhängig vom Basisspiel — der Name kommt von Strife (dem ersten Nicht-Doom-IWAD der Engine), aber das Flag selbst ist portabel und taucht in Doom-Mods regelmäßig auf.
- Hitscan-Waffen ignorieren die Damage-Eigenschaft komplett. Pistole, Schrotflinte, Maschinengewehr und Super-Schrotflinte verdrahten 5 × random(1, 3) pro Pellet fest in A_FireBullets / A_FirePistol / A_FireShotgun. Um den Schaden einer Hitscan-Waffe zu erhöhen, schraubst du an der Pelletanzahl, am damage-Argument von A_CustomBulletAttack oder du baust die Waffe auf Projektil um. Faust und Kettensäge nutzen 2 × random(1, 10); Berserk wirkt nur auf die Faust und multipliziert nach dem Wurf mit 10 (also 20 bis 200 pro Schlag, erwartet 110).
- Die Tics zwischen den Angriffen wiegen für DPS-Vergleiche schwerer als der Schaden pro Schuss. Maschinengewehr und Pistole haben identischen Schaden pro Schuss (5 bis 15, erwartet 10), aber das Maschinengewehr feuert mit ~4 Tics pro Angriff gegen die ~14 der Pistole — rund 3,5× DPS bei gleicher Pellet-Mathematik. Wenn du einen Waffen-Mod balancierst, entscheide zuerst den Ziel-DPS (Vanilla-Pistole ~25 DPS, Schrotflinte ~70, Super-Schrotflinte ~150, Maschinengewehr ~88, Plasmagewehr ~263, Raketenwerfer direkt ~159) und leite daraus den Schaden pro Schuss und die Tics pro Angriff ab.
- Nutze den Spickzettel mit 19 Monstern, um den Begegnungs-Entwurf zu prüfen. 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). Ein Schuss aus der Super-Schrotflinte (erwartet 200, max 300) legt im besten Fall alles bis zum Revenant (HP 300) um; Pain Elemental und Cacodemon (HP 400) brauchen mindestens zwei gute Treffer. Ein Pistolenschuss (erwartet 10) erledigt nur den Zombieman. Den Demon im ersten Raum gegen einen Mancubus zu tauschen, ist kein 1,5-facher Schwierigkeitssprung — es ist 4×, weil die HP-Kurve geometrisch ist, nicht linear.
- GZDoom v3.2.2 (Ende 2017) und neuer garantieren, dass 35 Tics genau einer Sekunde Realzeit entsprechen. Frühere Versionen zeigten das Intervall als 28 ms pro Tic an (35 Tics erschienen als 0,98 Sekunden), weil im Timer-Code eine Ganzzahldivision abgeschnitten wurde. Wenn deine ACS-Delay()-Arithmetik Subsekunden-Präzision braucht und das Publikum auf einem alten Port spielt, rechne mit 2 % Drift: `Delay(35 * 60)` auf dem Legacy-Timer sind 58,8 reale Sekunden, 1,2 Sekunden weniger als eine volle Minute.
- Der BFG-Spray ist das einzige Projektil, das die Regel Damage × random(1, 8) nicht befolgt. Innerhalb von A_BFGSpray wird der Schaden pro Strahl als Summe von 15 unabhängigen random(1, 8) berechnet — Bereich 15 bis 120, erwartet 67,5, glockenförmige Verteilung (nicht gleichmäßig). Der BFG-Ball gibt bis zu 40 Strahlen in einem 90°-Frontkegel ab, also summieren sich bei voller Abdeckung 40 × 67,5 = 2.700 erwartete Schadenspunkte auf die 100 bis 800 des Balls selbst. Genau dieser Spray-Beitrag erklärt den berühmten \"Cyberdemon in zwei Schüssen\"-Effekt — nur dann, wenn sowohl der direkte Treffer als auch der Kegel sitzen.
- Karteneinheiten haben zwei Umrechnungen, nicht eine. Horizontal sind 16 Einheiten = 1 Fuß (0,3048 m); vertikal sind nur 10 Einheiten = 1 Fuß, weil der ursprüngliche 320×200-Modus von Doom das Bild um 20 % in der Höhe streckte. Für Speed nutzt der Rechner das horizontale Verhältnis, weil Projektile in der Kartenebene fliegen: Speed 10 (Imp-Feuerball) ≈ 6,67 m/s ≈ 15 mph; Speed 25 (Plasma, BFG-Ball) ≈ 16,67 m/s ≈ 60 km/h ≈ 37 mph. Doomguys Lauftempo liegt bei rund Speed 16 — etwa 24 mph, weshalb dich ein Imp im Korridor manchmal einholt.
- DamageFactor löst Resistenzen und Verwundbarkeiten, ohne dass du den Schadenscode neu schreiben musst. DamageFactor 'Fire', 0.5 auf einem Monster halbiert allen Schaden vom Typ Fire; 2.0 verdoppelt ihn; 0.0 macht das Monster immun. Im DPS-Modus des Rechners modelliert ein einziges Skalar-Feld DamageFactor den Resistenzfall ohne eigenen Schadenstyp — praktisch, wenn du den TTK einer Vanilla-Waffe gegen, sagen wir, eine Cacodemon-Variante mit 0,7 Plasma-Resistenz vergleichst.
- Schlechtester Fall und Bandbreite zählen für knappes Kampf-Design mehr als der Mittelwert. \"Erwartete Schüsse bis zum Tod = 30\" verbirgt, dass ein Cacodemon im pathologischen schlechtesten Fall 134 Imp-Feuerbälle überleben kann. Der Rechner zeigt den besten und schlechtesten Fall neben dem Erwartungswert genau deshalb: Wenn du eine Slaughter-Map baust und ein Monster innerhalb eines harten Schussbudgets sterben MUSS, dimensionierst du nach dem schlechtesten Fall. Bei einer normalen Map dimensionierst du nach dem Erwartungswert. Beide Zahlen können bei random(1, 8)-Projektilen um Faktor 5 bis 10 auseinanderliegen.
- Wenn du auf Deutsch moddest, behalte die Actor- und Property-Namen genau so auf Englisch, wie sie in der Engine stehen (Damage, Speed, Health, +STRIFEDAMAGE, Cacodemon, Cyberdemon). DECORATE und ZScript akzeptieren keine lokalisierten Bezeichner, also bleibt der Actor auch dann Cacodemon im Code, wenn die deutsche Doom-Wiki ihn in Fließtext mal als \"Kakodämon\" beschreibt. Englische Bezeichner in deinen PK3-Dateien sparen Stunden Debugging, sobald ein anderer Modder dein WAD öffnet.
ZDoom Schadensrechner — häufige Fragen
Warum trifft mein Projektil mit Damage 10 manchmal für 80?
Wie lautet die Schadensformel der Pistole im klassischen Doom?
Wie viele Tics sind eine Sekunde in ZDoom?
Wie rechne ich ACS Delay() für X Sekunden aus?
Was macht das Flag +STRIFEDAMAGE?
Wie viele HP hat der Cyberdemon?
Warum ist der BFG-Schaden so eigen — was soll diese 15er-Schleife mit random?
Funktioniert der Rechner auch für ZScript-Actoren?
Funktioniert der Rechner mit Brutal Doom oder Project Brutality?
Spielt die deutsche GZDoom-Übersetzung eine Rolle?
Gibt es Schadensunterschiede zwischen PrBoom+, ZDoom, GZDoom und Zandronum?
Worin unterscheiden sich ZScript und DECORATE beim Schaden?
Warum trifft der Revenant-Tracker für 10 bis 80 und nicht für 10 bis 40?
Erhöht der Schwierigkeitsgrad (UV / Nightmare) den Waffenschaden?
Wie genau ist der Rechner im Vergleich zum echten Spiel?
Glossar zu Schaden und Zeit in ZDoom
Damage-Eigenschaft
Numerische Eigenschaft im Default-Block eines DECORATE- oder ZScript-Actors, die die Engine bei jedem Treffer mit random(1, 8) multipliziert (random(1, 4) mit +STRIFEDAMAGE). Damage 10 erzeugt im Spiel einen Bereich von 10 bis 80, keine glatten 10.
+STRIFEDAMAGE
Actor-Flag, das den Multiplikator des Projektilschadens von random(1, 8) auf random(1, 4) ändert. Gleicher Damage-Wert, engerer Bereich, niedrigerer Mittelwert (Damage × 2,5 statt Damage × 4,5). Funktioniert auf jedem Actor in jedem ZDoom-Mod unabhängig vom Basisspiel.
Tic
Atomare Zeiteinheit der Doom-Engine. TICRATE = 35 Tics pro Sekunde; 1 Tic ≈ 28,5714 ms. Zustandsdauern in DECORATE / ZScript und das Argument von ACS Delay() werden in Tics ausgedrückt. GZDoom v3.2.2 und neuer garantieren 35 Tics = 1,000 Sekunden exakt; frühere Versionen schnitten auf 28 ms ab.
Hitscan-Waffe
Waffe, deren Schaden sofort entlang einer geraden Linie aufgelöst wird, ohne Projektil-Actor dazwischen. Pistole, Schrotflinte, Super-Schrotflinte und Maschinengewehr sind Hitscans; ihre Formeln sind in den Action-Funktionen A_Fire* fest verdrahtet (5 × random(1, 3) pro Pellet), und die Damage-Eigenschaft des Actors wird ignoriert.
DamageFactor
Multiplikator des eingehenden Schadens eines bestimmten Typs. DamageFactor 'Fire', 0.5 halbiert Fire-Schaden; 2.0 verdoppelt ihn; 0.0 macht den Actor immun. Im DPS-Modus des Rechners deckt ein einzelnes Skalar-Feld DamageFactor den resistenten oder verwundbaren Fall ab.
Berserk
Power-up, das den Faustschaden nach dem random(1, 10)-Wurf mit 10 multipliziert und so einen Bereich von 20 bis 200 mit einem Erwartungswert von 110 erzeugt. Nur die Faust bekommt den Bonus; Kettensäge, Hitscans und Projektilwaffen profitieren nicht.
Karteneinheit (map unit)
Koordinateneinheit des Doom-Raums. Nach Konsens der Community sind 16 horizontale Einheiten = 1 Fuß = 0,3048 m (Doomguy ist 56 vertikale Einheiten groß = 5 Fuß 7 Zoll). Der Rechner wandelt den Projektil-Speed (Karteneinheiten pro Tic) über das horizontale Verhältnis 16 KE/Fuß in m/s, km/h und mph um.
Speed-Eigenschaft
Geschwindigkeit eines Projektil-Actors in Karteneinheiten pro Tic. Imp-Feuerball Speed 10; Rakete Speed 20; Plasmagewehr-Ball und BFG-Ball Speed 25. Mit 35 multiplizieren ergibt Karteneinheiten pro Sekunde; mit 0,667 multiplizieren ergibt Meter pro Sekunde; mit 1,49 multiplizieren ergibt Meilen pro Stunde.
BFG-Spray
Der Kegel aus bis zu 40 Strahlen, den der BFG-Ball beim Aufprall ausstößt (der Spray feuert aus dem Death-State des Balls über A_BFGSpray). Der Schaden jedes Strahls ist die Summe von 15 unabhängigen random(1, 8): Bereich 15 bis 120 pro Strahl mit einem Erwartungswert von 67,5. Der Ruf der BFG, einen Cyberdemon in einem Schuss niederzulegen, geht auf den Spray zurück — nicht auf den Ball selbst.
TICRATE
Engine-Konstante, die die Doom-Frequenz seit 1993 auf 35 Tics pro Sekunde festnagelt. Deklariert in der doomdef.h von id Software; wortwörtlich übernommen von ZDoom, GZDoom, Zandronum, PrBoom+, Boom, MBF21 und jedem anderen vanilla-kompatiblen Source Port. Jede Zustandsdauer, jedes Delay()-Argument und jede Berechnung der Projektilflugzeit nutzt 35 als Umrechnungskonstante.
DamageFunction
Alternative zur Damage-Eigenschaft, mit der ein Modder über einen ZScript-Ausdruck eine beliebige Ganzzahl im Trefferzeitpunkt zurückgeben kann. Umgeht den Multiplikator random(1, 8) — gib eine glatte Zahl für deterministischen Schaden zurück oder berechne ihn aus inflictor / target / distance für kontextabhängiges Verhalten.
P_Random
Pseudozufallsfunktion der Doom-Engine: Ein Index läuft durch eine statische 256-Byte-Tabelle mit gemischten Werten zwischen 0 und 255 und gibt bei jedem Aufruf das nächste Byte zurück. Nicht gleichverteilt (der Wert 1 kommt nie vor, 145 fünfmal), aber ausreichend für Kampf-Arithmetik. Wird in allen Schadenswürfen genutzt; M_Random führt einen eigenen Index für nicht-spielbare Effekte, um die Mehrspieler-Synchronisation nicht zu zerstören.
Quellen und Referenzen
- Die 1996 veröffentlichte DOOM-Quelle von id Software — die Schadensformeln stammen aus dem Code selbst, nicht aus einem Wiki: doomdef.h legt TICRATE auf 35 fest, p_inter.c enthält die Projektilregel (Schaden × random 1..8, mit STRIFEDAMAGE 1..4) und p_pspr.c die Hitscan-Regeln (5 × random 1..3 pro Schrotkugel bei Pistole, Schrotflinte und Kettengewehr; 2 × random 1..10 bei Faust und Kettensäge, mit Berserk ×10).
- GZDoom auf GitHub — die gepflegte Engine, die die ursprünglichen Schadensregeln wortgetreu übernimmt, aber das Timing ändert: ab v3.2.2 sind 35 Tics exakt 1,000 s, während ältere Builds jeden Tic auf 28 ms kürzten und 35 Tics ≈ 0,98 s ergaben. Beide stehen auf dieser Seite zur Wahl, weil Demos und ältere Mods auf dem alten Timing laufen.
- The Doom Wiki — Tic: der atomare Zeitschritt der Engine, 1/35 Sekunde. Er ist auch der Grund, warum die Flugzeit von Projektilen hier aufgerundet wird: Die Engine schreitet in ganzen Tics voran, ein Teilrest wird also zu einem vollen.
- The Level Design Book — Doom-Metriken: die hier verwendete Community-Konvention für die Map-Einheit, 16 horizontale Einheiten je Fuß, also 0,01905 m pro Einheit. Das ist eine Mapping-Konvention, keine Engine-Konstante — Dooms Code kennt kein Meter.