Smart Calculators

Smart

Calculators

Kalkulator obrażeń i DPS ZDoom

Policz dokładny zakres obrażeń, oczekiwany DPS i czas do zabicia dla dowolnej broni lub pocisku ZDoom / GZDoom. Obsługuje mnożnik random(1,8), flagę STRIFEDAMAGE i konwerter tików na sekundy dla skryptów ACS.

ZS>Obrażenia i DPS ZDoom

Zakres obrażeń, DPS i konwerter tików dla modderów Dooma.

Liczy min/średnie/maks obrażeń dla dowolnego pocisku, broni hitskanowej lub własnej DamageFunction.

Formuła obrażeń

Używa Damage × random(1, 8) — standardowej formuły pocisku ZDoom.

Wybierz pocisk vanilla z Dooma, aby automatycznie wypełnić Damage. Edycja Damage potem cofa preset do Własnego.

dmg

Liczba N po Damage w DECORATE/ZScript (np. Damage 3 dla kuli ognia Impa).

Mnożnik w stylu Strife: damage × random(1, 4) zamiast × random(1, 8). Działa z dowolnym aktorem w dowolnym modzie ZDoom, niezależnie od bazowej gry.

Oczekiwane obrażenia za trafienie
13,5
3–24 za trafienie, średnio 13,5
Damage 3 × random(1, 8)
Minimalne obrażenia za trafienie
3
Maksymalne obrażenia za trafienie
24

Rozkład obrażeń

random(1, N) jest jednostajne — każdy mnożnik tak samo prawdopodobny.

Rozkład obrażeń3691215182124Obrażenia za trafieniePrawdopodobieństwoŚrednio (13,5)
Tabela rozkładu obrażeń dla czytników ekranu.
Obrażenia za trafieniePrawdopodobieństwo
312,5%
612,5%
912,5%
1212,5%
1512,5%
1812,5%
2112,5%
2412,5%

Pociski vanilla

Kliknij wiersz, aby załadować do pól wyżej.

PociskDamageMnożnikMinMaksŚrednioSpeed (j/tik)
Kula ognia Impa — DoomImpBall3× random(1, 8)32413,510
Kula Cacodemona — CacodemonBall5× random(1, 8)54022,510
Plazma Arachnotrona — ArachnotronPlasma5× random(1, 8)54022,525
Kula karabinu plazmowego — PlasmaBall5× random(1, 8)54022,525
Kula Barona Piekła / Hell Knighta — BaronBall8× random(1, 8)8643615
Kula ognia Mancubusa — FatShot8× random(1, 8)8643620
Naprowadzająca rakieta Revenanta — RevenantTracer10× random(1, 8)10804510
Rakieta (trafienie bezpośrednie) — Rocket20× random(1, 8)201609020
Spray BFG (na promień)67× 1..8 loop1512067,5
Kula BFG (trafienie bezpośrednie) — BFGBall100× random(1, 8)10080045025

Fragment DECORATE/ZScript odtwarzający te liczby.

ACTOR CustomProjectile : DoomImpBall
{
Damage 3
// Min 3 Max 24 Avg 13.5 (× random(1, 8))
}
Zaktualizowano 11 maj 2026
Kalkulator przychodu z ładunku OpenTTDKalkulator pity Arknights: Endfield

Kalkulator obrażeń ZDoom. Zakres, DPS i tiki dla moderów Doom.

Kalkulator obrażeń ZDoom zamienia wartość Damage na minimum, średnią i maksimum za trafienie, oczekiwany DPS oraz tiki do arytmetyki ACS Delay(). Skupia na jednej stronie losowy mnożnik, flagę +STRIFEDAMAGE, presety pocisków i hitskanów vanilla, tabelę HP dla 19 potworów i konwerter tików na sekundy.

Czym jest kalkulator obrażeń i DPS ZDoom?

Kalkulator obrażeń i DPS ZDoom to narzędzie internetowe, które na podstawie właściwości Damage aktora, presetu broni lub pocisku oraz tempa ataku zwraca dokładny zakres obrażeń, oczekiwany DPS, liczbę strzałów potrzebną do zabicia dowolnego potwora vanilla z Doom albo Doom II i liczbę tików, którą powinno nieść wywołanie ACS Delay(). Celuje w ZDoom i GZDoom — czyli source porty, w których żyją aktorzy DECORATE i ZScript — odtwarza tę samą arytmetykę silnika, którą id Software opublikowało w kodzie źródłowym z 1997 roku, i rozwiązuje na jednej stronie w trzech trybach trzy pytania najczęściej powtarzane na polskich forach modderskich.
Główne zamieszanie, które ten kalkulator usuwa, to losowy mnożnik. Domyślnie pocisk z Damage 3 nie trafia w grze za 3 — trafia za 3 pomnożone przez losową liczbę całkowitą od 1 do 8, więc kula ognia Impa wpada w zakres 3–24 z wartością oczekiwaną 13,5 za trafienie. Własny pocisk napisany z Damage 10 w bloku Default zadaje 10, 20, 30, 40, 50, 60, 70 albo 80 — nigdy dokładnie 10. Flaga +STRIFEDAMAGE wymienia mnożnik na random(1, 4): to samo Damage 10 wpada teraz w 10, 20, 30 albo 40. Broń hitskanowa idzie inną drogą: pistolet, strzelba i karabin maszynowy używają 5 razy random(1, 3) na każdy pellet (5, 10 albo 15), a pięść i piła łańcuchowa — 2 razy random(1, 10). Właściwość Damage na aktorze hitskanowym jest ignorowana — wzór jest wbity na sztywno w funkcję strzału. Power-up Berserk po losowym rzucie mnoży obrażenia pięści przez 10; nic innego nie zyskuje.
Drugi tryb zamienia ten zakres za strzał w oczekiwany DPS. Wpisz obrażenia za pellet, liczbę pelletów, tiki między atakami (długość stanów między dwoma kolejnymi wywołaniami A_FireProjectile albo A_FireBullets) i wybierz cel — Zombieman z 20 HP, Cacodemon z 400, Spider Mastermind z 3000, Cyberdemon z 4000 albo dowolnego z 19 potworów vanilla z definicji ZScript. Kalkulator zwraca oczekiwane obrażenia za strzał, oczekiwany DPS, oczekiwaną liczbę strzałów do zabicia, czas do zabicia w sekundach oraz wartości w najlepszym i najgorszym przypadku, żebyś widział cały rozrzut, a nie tylko średnią. Pole DamageFactor obsługuje przypadek odporności i podatności (0,5 połowi obrażenia, 2,0 podwaja, 0 czyni cel niewrażliwym).
Trzeci tryb to dwa konwertery, które każdy moder Doom potrzebuje za każdym razem, gdy rusza skrypt ACS albo balansuje czas lotu pocisku. Pierwszy zamienia tiki na sekundy po stałej TICRATE = 35: Delay(35 * 2) to dokładnie dwie sekundy w nowoczesnym GZDoom (v3.2.2 i nowsze), a przed v3.2.2 te same 35 tików wyświetlało się jako 0,98 sekundy przez obcięcie dzielenia całkowitego w kodzie timera. Drugi zamienia właściwość Speed pocisku (jednostki mapy na tik) na jednostki mapy na sekundę, metry na sekundę, km/h oraz mph — według utrwalonej w społeczności równości 16 poziomych jednostek mapy = 1 stopa. Jeśli obok Speed podasz dystans docelowy, dostaniesz też czas lotu zaokrąglony w górę do następnego tika — tak jak silnik przesuwa się klatka po klatce.

Jak policzyć obrażenia, DPS i tiki w ZDoom (i jak robi to kalkulator)

Współistnieją tu trzy niezależne obliczenia, bo trzy pytania wracają w każdym wątku o DECORATE, ZScript albo ACS. Kalkulator powyżej przelicza wszystkie trzy przy każdej zmianie inputu; wersja ręczna poniżej to ta, którą bierzesz na papier, zanim zaczniesz przeładowywać WAD.
Z narzędziem
1. Wybierz tryb u góry: Zakres obrażeń, DPS i czas do zabicia albo Konwerter tików i prędkości. Każdy tryb zachowuje własne inputy przy przełączeniu.
2. Tryb Zakres obrażeń. Wybierz podtryb pasujący do twojego aktora. Podtryb Pocisk przyjmuje wartość Damage i opcjonalny przełącznik +STRIFEDAMAGE i zwraca Damage × 1 (minimum), Damage × 4,5 (średnia) oraz Damage × 8 (maksimum). Podtryb Hitskan przyjmuje preset broni i liczbę pelletów — wzór za pellet jest wbity. Podtryb Niestandardowy przyjmuje dowolne min i max, jeśli pracujesz z wyrażeniem DamageFunction. Wybranie presetu pocisku (kula ognia Impa, kula Cacodemona, kula karabinu plazmowego, rakieta, kula BFG, promień spreja BFG i jeszcze sześć) automatycznie podstawia Damage z bloku Default aktora vanilla.
3. Tryb DPS. Wpisz obrażenia za pellet, typ wzoru (pocisk, STRIFEDAMAGE albo hitskan), liczbę pelletów, tiki między atakami i wybierz potwora z listy 19 presetów vanilla (albo wpisz własne HP). Rozwinięty panel zaawansowany odsłania DamageFactor i nadpisanie HP celu. Główna karta pokazuje oczekiwany DPS i oczekiwaną liczbę strzałów do zabicia; w bocznych kartach widać czas do zabicia w sekundach, najlepszy przypadek (każdy rzut wpada w maksimum) i najgorszy (każdy rzut wpada w minimum).
4. Tryb Tiki i prędkość. Wpisz liczbę tików i od razu zobaczysz sekundy, albo na odwrót. Niżej wpisz Speed (jednostki mapy na tik) i opcjonalnie dystans w jednostkach mapy — dostaniesz prędkość w j.m./s, m/s, km/h i mph oraz czas lotu w tikach i sekundach.
Ręcznie
1. Zakres obrażeń pocisku: min = $D$, max = $D \times 8$, średnia = $D \times 4{,}5$. Z +STRIFEDAMAGE: max = $D \times 4$, średnia = $D \times 2{,}5$. Rozkład jest jednostajny — każdy mnożnik od 1 do 8 (albo od 1 do 4) jest równie prawdopodobny.
2. Obrażenia hitskana za pellet: pistolet / strzelba / karabin maszynowy = $5 \times \text{random}(1, 3)$, średnia 10 za pellet. Pięść / piła łańcuchowa = $2 \times \text{random}(1, 10)$, średnia 11. Berserk po rzucie mnoży obrażenia pięści przez 10. Pomnóż przez liczbę pelletów: strzelba 7, super strzelba 20, reszta 1.
3. Oczekiwany DPS: $\text{DPS} = \frac{\text{oczekiwane obrażenia za strzał} \times 35}{\text{tiki między atakami}}$. 35 to TICRATE; tiki między atakami to suma długości stanów między dwoma kolejnymi wywołaniami A_FireProjectile albo A_FireBullets w bloku States aktora.
4. Strzałów do zabicia: $\lceil \frac{\text{HP}}{\text{oczekiwane obrażenia za strzał} \times \text{damageFactor}} \rceil$. Czas do zabicia: liczba strzałów do zabicia pomnożona przez tiki między atakami i podzielona przez 35.
5. Tiki na sekundy: tiki podzielone przez 35. Sekundy na tiki: round(sekundy × 35). Dla Delay() w ACS pisz `Delay(35 * sekundy)` wprost — kompilator załatwi mnożenie podczas budowania skryptu.
6. Lot pocisku: tiki = $\lceil \frac{\text{dystans}}{\text{Speed}} \rceil$, sekundy = tiki podzielone przez 35. Silnik chodzi w pełnych tikach, więc zawsze zaokrąglasz w górę. Prędkość rzeczywista: $\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$.
Kontrolny przelicz scenariusza domyślnego: kula ognia Impa (Damage 3) trafia Cacodemona (HP 400). Oczekiwane obrażenia za strzał = $3 \times 4{,}5 = 13{,}5$. 400 podzielone przez 13,5 = 29,6, więc oczekiwana liczba strzałów do zabicia to 30. Ten sam Cacodemon pada od 2 do 4 strzałów super strzelby (najlepszy 2, najgorszy 4, oczekiwany 2): jeden strzał daje średnio 200 obrażeń po kanonicznym wzorze na 20 pelletów — piętnastokrotna różnica za strzał, która wprost przekłada się na to, ile sekund spędzasz przed jednym Cacodemonem w zależności od broni, którą trzymasz.

Obrażenia, DPS i tiki — wzory silnika

obraz˙eniamin=Dmmin,obraz˙eniamax=Dmmax,E[obraz˙enia]=Dmmin+mmax2DPS=E[obraz˙enia za strzał]35tatak,strzały=HE[obraz˙enia za strzał]ftiki=round(s35),lot=dv\begin{aligned} \text{obrażenia}_{\min} &= D \cdot m_{\min}, \quad \text{obrażenia}_{\max} = D \cdot m_{\max}, \quad \mathbb{E}[\text{obrażenia}] = D \cdot \tfrac{m_{\min} + m_{\max}}{2} \\ \text{DPS} &= \frac{\mathbb{E}[\text{obrażenia za strzał}] \cdot 35}{t_{\text{atak}}}, \quad \text{strzały} = \left\lceil \frac{H}{\mathbb{E}[\text{obrażenia za strzał}] \cdot f} \right\rceil \\ \text{tiki} &= \text{round}(s \cdot 35), \quad \text{lot} = \left\lceil \frac{d}{v} \right\rceil \end{aligned}
  • DD = Właściwość Damage z bloku Default aktora w DECORATE albo ZScript (liczba całkowita)
  • mmin,mmaxm_{\min}, m_{\max} = Granice losowego mnożnika — 1 i 8 domyślnie; 1 i 4 z +STRIFEDAMAGE; 1 i 3 dla pelletów pistoletu/strzelby/karabinu maszynowego; 1 i 10 dla pięści/piły łańcuchowej
  • tatakt_{\text{atak}} = Tiki między atakami — długość maszyny stanów między dwoma kolejnymi wywołaniami strzału w bloku States aktora
  • HH = HP celu — 20 dla Zombiemana, 60 dla Impa, 400 dla Cacodemona, 1000 dla Barona Piekła, 3000 dla Spider Mastermind, 4000 dla Cyberdemona
  • ff = Mnożnik DamageFactor — 1,0 normalny, 0,5 odporność, 2,0 podatność, 0,0 niewrażliwość
  • ss = Czas w sekundach — mnożony przez TICRATE = 35 i zaokrąglany do pełnych tików dla długości stanów i argumentu Delay()
  • d,vd, v = Dystans lotu w jednostkach mapy oraz Speed pocisku w jednostkach mapy na tik; dzielenie z zaokrągleniem w górę daje tiki, bo silnik chodzi pełnymi krokami
35 w mianowniku DPS to TICRATE, stała, którą id Software wbiło na samej górze doomdef.h w 1993 roku i którą ZDoom, GZDoom oraz dowolny inny source port Doom respektują co do litery. Ta sama stała steruje każdą długością stanu w DECORATE i ZScript: stan `TNT1 A 24` trwa 24 tiki — i to właśnie ta liczba ląduje w mianowniku DPS. Sprej BFG to jedyny wyjątek od jednostajnej reguły random(1, 8): wewnątrz A_BFGSpray obrażenia za promień liczone są jako suma 15 niezależnych random(1, 8), więc zakres na promień to 15…120 z wartością oczekiwaną 67,5; jedna kula BFG wypuszcza do 40 promieni. Mnożnik Berserka jest aplikowany po rzucie random(1, 10), więc cios pięścią z aktywnym Berserkiem wpada w zakres 20…200 z wartością oczekiwaną 110.

Rozpisane przykłady z całą arytmetyką

Kula ognia Impa przeciw Cacodemonowi — scenariusz domyślny

Kula ognia Impa ma Damage 3 w bloku Default aktora DoomImpBall. Zakres za strzał = 3…24 (3 × random(1, 8)), oczekiwane = 13,5. HP Cacodemona = 400 (z właściwości Health aktora Cacodemon, ta sama wartość, którą podaje polskie Doom Wiki na Fandomie). Oczekiwana liczba strzałów do zabicia = $\lceil 400 / 13{,}5 \rceil$ = 30. Najgorszy przypadek (każdy rzut wpada w minimum) = $\lceil 400 / 3 \rceil$ = 134. Najlepszy przypadek (każdy rzut wpada w maksimum) = $\lceil 400 / 24 \rceil$ = 17. Ten rozrzut 17…134 zaskakuje początkujących moderów: losowy mnożnik to dominująca zmienna, dużo silniejsza niż samo skalowanie Damage. Kula z Damage 6 zmniejszy oczekiwaną liczbę o połowę (15 strzałów), ale najgorszy przypadek spada tylko do 67.

DPS pistoletu przeciw Zombiemanowi — „czy pistolet naprawdę jest bezużyteczny”

Wzór pistoletu: $5 \times \text{random}(1, 3)$ za strzał, pellety 1. Zakres za strzał = 5…15, oczekiwane = 10. A_FirePistol w vanilla strzela około 150 razy na minutę (~14 tików na cykl). DPS = $10 \times 35 / 14$ ≈ 25 oczekiwanych obrażeń na sekundę. HP Zombiemana = 20. Oczekiwana liczba strzałów do zabicia = $\lceil 20 / 10 \rceil$ = 2. Najlepszy przypadek = 2 (dwie piętnastki z rzędu), najgorszy = 4 (cztery piątki). Czas do zabicia przy 14 tikach na atak = $2 \times (14/35) = 0{,}8$ sekundy oczekiwane, do 1,6 w najgorszym przypadku. Pistolet nie jest bezużyteczny — wali Zombiemana w 2 strzały i obgryza Impa w 6 — ale jego DPS to mniej więcej jedna trzecia DPS karabinu maszynowego (ten sam wzór za strzał, ale ~4 tiki na atak zamiast 14) i jedna dziesiąta wyrzutni rakiet. Dlatego karabin maszynowy emerytuje go w sekundzie, w której wpada pierwszy.

Super strzelba na Hell Knighta — realia strzału w upór

Wzór super strzelby: $5 \times \text{random}(1, 3)$ za pellet, pellety 20. Zakres za strzał = 100…300, oczekiwane = 200. HP Hell Knighta = 500. Oczekiwana liczba strzałów do zabicia = $\lceil 500 / 200 \rceil$ = 3. Najgorszy przypadek = $\lceil 500 / 100 \rceil$ = 5 strzałów (każdy pellet wypada na 1). Najlepszy przypadek = $\lceil 500 / 300 \rceil$ = 2 strzały (każdy pellet wypada na 3). A_FireShotgun2 cyklicznie strzela około 36,8 razy na minutę (jakieś 57 tików na atak razem z przeładowaniem), więc czas do zabicia przy 3 strzałach = $3 \times (57/35) \approx 4{,}9$ sekundy. Pokrywa się to z konsensusem polskich forów modderskich: dwa strzały kładą Hell Knighta tylko wtedy, gdy rzuty się powiodą; trzy to realistyczny plan w runie na UV.

Bezpośrednie trafienie kulą BFG w Cyberdemona (bez spreja)

Kula BFG ma Damage 100 w aktorze BFGBall. Zakres trafienia bezpośredniego = 100…800, oczekiwane = 450. HP Cyberdemona = 4000, bez splash (Cyberdemon jest odporny na obrażenia od wybuchu — liczą się tylko trafienia bezpośrednie, co potwierdza Doom Wiki). Oczekiwana liczba trafień bezpośrednich = $\lceil 4000 / 450 \rceil$ = 9. Najlepszy przypadek = $\lceil 4000 / 800 \rceil$ = 5. Najgorszy = $\lceil 4000 / 100 \rceil$ = 40 trafień (każdy rzut wpada w minimum). Klasyczna porada z Doom Wiki „trzy do czterech trafień BFG kładzie Cyberdemona” zakłada, że promienie spreja też trafiają i że dystans utrzymuje cel wewnątrz stożka. Realna skuteczność BFG bierze się ze spreja: jedna kula z pełnym pokryciem 40 promieni sumuje 450 + 40 × 67,5 = 3150 oczekiwanych obrażeń na jedno pociągnięcie spustu — co kładzie Cyberdemona w 2 strzałach, jeśli przykleisz jednocześnie trafienie bezpośrednie i stożek.

Arytmetyka ACS Delay — „ile tików to 2,5 sekundy”

Tików na sekundę = 35. Sekundy na tiki dla 2,5 = $\text{round}(2{,}5 \times 35)$ = round(87,5) = 88 tików. W ACS: pisz `Delay(35 * 25 / 10)`, jeśli chcesz zachować czytelność arytmetyki, albo wprost `Delay(88)`. Najczęstsze wartości, które warto pamiętać: 0,1 s = 4 tiki, 0,5 s = 18, 1 s = 35, 1,5 s = 53, 2 s = 70, 3 s = 105, 5 s = 175, 10 s = 350. Speed kuli ognia Impa = 10 jednostek mapy na tik. Lot przez 1024 jednostek mapy = $\lceil 1024 / 10 \rceil$ = 103 tiki ≈ 2,94 sekundy, albo około 15 mph (10 × 1,49 ≈ 14,9). Kula plazmagunu ze Speed 25 pokonuje te same 1024 j.m. w 41 tików ≈ 1,17 sekundy, około 60 km/h.

Wskazówki dotyczące obrażeń i balansu ZDoom dla moderów, mapperów i ciekawskich graczy

  • Czytaj właściwość Damage swojego aktora w wartościach oczekiwanych, a nie literalnych. Pocisk z Damage 5 bije w grze średnio za 22,5 (5 × 4,5), nie za 5. Jeśli twój nowy potwór ma rywalizować z kulą ognia Impa (oczekiwane 13,5), ustaw Damage 3 — nie Damage 10. Błąd numer jeden przy balansowaniu DECORATE to czytanie Damage 10 jako „bije za 10”, podczas gdy bije od 10 do 80 ze średnią 45.
  • Flaga +STRIFEDAMAGE to najtańszy sposób na zaciśnięcie zakresu pocisku. To samo Damage, maksymalny mnożnik spada z 8 do 4, wartość oczekiwana z 4,5× na 2,5×. Przydaje się, gdy chcesz przewidywalny pocisk średniego zasięgu (na przykład custom rakietę, która powinna ciążyć jak 60…240, a nie jak 60…480). Działa w każdym modzie ZDoom niezależnie od bazowej gry — nazwa pochodzi od Strife (pierwszego nie-Doomowego IWAD-a silnika), ale sama flaga jest przenośna i regularnie pojawia się w modach Doom.
  • Broń hitskanowa zupełnie ignoruje właściwość Damage. Pistolet, strzelba, karabin maszynowy i super strzelba wbijają $5 \times \text{random}(1, 3)$ za pellet w A_FireBullets / A_FirePistol / A_FireShotgun. Żeby podnieść obrażenia broni hitskanowej, zmieniasz liczbę pelletów, argument damage w A_CustomBulletAttack, albo konwertujesz broń na pociskową. Pięść i piła łańcuchowa używają $2 \times \text{random}(1, 10)$; Berserk wpływa tylko na pięść i po rzucie mnoży przez 10 (czyli 20…200 za cios, oczekiwane 110).
  • Tiki między atakami ważą więcej niż obrażenia za strzał, gdy porównujesz DPS. Karabin maszynowy i pistolet mają identyczne obrażenia za strzał (5…15, oczekiwane 10), ale karabin strzela co ~4 tiki na atak, a pistolet co ~14 — to mniej więcej 3,5× DPS przy tej samej matematyce na pellet. Gdy balansujesz mod, najpierw zdecyduj o docelowym DPS (pistolet vanilla ~25 DPS, strzelba ~70, super strzelba ~150, karabin maszynowy ~88, karabin plazmowy ~263, bezpośrednia rakieta ~159), a z tego wyprowadź obrażenia za strzał i tiki na atak, które dadzą tę liczbę.
  • Trzymaj ściągę 19 potworów pod ręką, żeby walidować projekt walki. 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). Strzał z super strzelby (oczekiwane 200, maks 300) w najlepszym przypadku kładzie wszystko do Revenanta (HP 300); Pain Elemental i Cacodemon (HP 400) potrzebują minimum dwóch udanych strzałów. Strzał z pistoletu (oczekiwane 10) zabija tylko Zombiemana. Zamiana Demona z pierwszego pokoju na Mancubusa to nie skok trudności 1,5× — to 4×, bo krzywa HP jest geometryczna, a nie liniowa.
  • GZDoom v3.2.2 (koniec 2017) i nowsze gwarantują, że 35 tików to dokładnie jedna sekunda czasu rzeczywistego. Wcześniejsze wersje pokazywały interwał 28 ms na tik (czyli 35 tików wyświetlało się jako 0,98 sekundy) przez obcięcie dzielenia całkowitego w kodzie timera. Jeśli twoja arytmetyka ACS Delay() wymaga precyzji poniżej sekundy, a celujesz w odbiorcę grającego na starym porcie, doliczaj 2% dryftu: `Delay(35 * 60)` na legacy timerze daje 58,8 sekundy rzeczywistej, 1,2 sekundy mniej niż pełna minuta.
  • Sprej BFG to jedyny pocisk, który nie idzie po regule $\text{Damage} \times \text{random}(1, 8)$. Wewnątrz A_BFGSpray obrażenia za promień liczone są jako suma 15 niezależnych random(1, 8) — zakres 15…120, oczekiwane 67,5, rozkład w kształcie dzwonu (nie jednostajny). Kula BFG wypuszcza do 40 promieni w przednim stożku 90°, więc przy pełnym pokryciu 40 × 67,5 = 2700 oczekiwanych obrażeń dochodzi na wierzch do 100…800 samej kuli. Dlatego pojedyncze pociągnięcie spustu BFG potrafi położyć Cyberdemona w dwóch strzałach — pod warunkiem, że trafia zarówno bezpośrednie uderzenie, jak i stożek.
  • Jednostki mapy mają dwa przeliczniki, nie jeden. Poziomo 16 jednostek = 1 stopa (0,3048 m); pionowo tylko 10 jednostek = 1 stopa, bo oryginalny tryb 320×200 Doom rozciągał obraz o 20% na wysokość. Do konwersji Speed kalkulator używa przelicznika poziomego, bo pociski lecą w płaszczyźnie mapy: Speed 10 (kula Impa) ≈ 6,67 m/s ≈ 15 mph; Speed 25 (plazma, kula BFG) ≈ 16,67 m/s ≈ 60 km/h ≈ 37 mph. Tempo biegu Doomguya to mniej więcej Speed 16 — jakieś 24 mph, i dlatego Imp w korytarzu czasem cię dogania.
  • DamageFactor obsługuje odporności i podatności bez przepisywania kodu obrażeń. DamageFactor 'Fire', 0.5 na potworze połowi cały obrażenia typu Fire; 2.0 podwaja; 0.0 czyni potwora niewrażliwym. W trybie DPS kalkulatora jedno skalarne pole DamageFactor modeluje przypadek odpornościowy bez tworzenia własnego typu obrażeń — przydaje się, gdy porównujesz TTK broni vanilla z, powiedzmy, wariantem Cacodemona z 0,7 odporności na plazmę.
  • Najgorszy przypadek i rozrzut ważą więcej niż średnia, gdy projektujesz ciasną walkę. „Oczekiwana liczba strzałów do zabicia = 30” ukrywa fakt, że Cacodemon w patologicznym najgorszym scenariuszu przeżyje 134 kule ognia Impa. Kalkulator pokazuje najlepszy i najgorszy przypadek obok oczekiwanego właśnie dla tego: gdy budujesz slaughter mapę i potwór MUSI paść w ramach sztywnego budżetu strzałów, dobieraj rozmiar pod najgorszy przypadek. Gdy budujesz mapę zwykłą, dobieraj pod oczekiwany. Te dwie liczby potrafią różnić się 5–10 razy dla pocisków z random(1, 8).
  • Jeśli moddujesz po polsku, zachowuj nazwy aktorów i właściwości po angielsku tak, jak pojawiają się w silniku (Damage, Speed, Health, +STRIFEDAMAGE, Cacodemon, Cyberdemon). DECORATE i ZScript nie akceptują zlokalizowanych identyfikatorów, więc nawet jeśli polska Doom Wiki tłumaczy Cacodemona w prozie jako „Kakodemona”, aktor wciąż nazywa się Cacodemon w kodzie. Trzymanie angielskiej nomenklatury w plikach PK3 oszczędza godziny debugowania, gdy inny moder otwiera twój WAD.

Kalkulator obrażeń ZDoom — najczęstsze pytania

Dlaczego mój pocisk z Damage 10 czasem bije za 80?

ZDoom przy każdym trafieniu mnoży właściwość Damage pocisku przez random(1, 8). Damage 10 daje 10, 20, 30, 40, 50, 60, 70 albo 80 — każda wartość jest równie prawdopodobna. Średnia wynosi 45. Flaga +STRIFEDAMAGE wymienia mnożnik na random(1, 4): wychodzi 10, 20, 30 albo 40 ze średnią 25.

Jaki jest wzór obrażeń pistoletu w klasycznym Doom?

Pistolet używa $5 \times \text{random}(1, 3)$ za strzał, więc każdy strzał zadaje 5, 10 albo 15 punktów z wartością oczekiwaną 10. Karabin maszynowy i strzelba (za pellet) używają tego samego wzoru. Właściwość Damage na aktorze hitskanowym jest ignorowana — wzór jest wbity na sztywno w A_FirePistol, A_FireShotgun i A_FireCGun. Tę samą formułę opisuje Doom2.net (Weapon FAQ) jako `d3 × 5`.

Ile tików ma jedna sekunda w ZDoom?

35 tików na sekundę. TICRATE jest zafiksowany na 35 od oryginalnego wydania w 1993 roku. GZDoom v3.2.2 i nowsze gwarantują, że 35 tików to dokładnie 1,000 sekundy czasu rzeczywistego; wcześniejsze wersje obcinały do 28 ms na tik, więc 35 tików wyświetlało się jako 0,98 sekundy — dryft 2%, który ma znaczenie tylko w długich łańcuchach Delay().

Jak policzyć ACS Delay() dla X sekund?

Pomnóż sekundy przez 35 i zaokrąglij do liczby całkowitej. 0,5 s = 18 tików, 1 s = 35, 2 s = 70, 5 s = 175, 10 s = 350, 60 s = 2100. W ACS pisz `Delay(35 * sekundy)` wprost — kompilator rozwiąże mnożenie podczas budowania skryptu.

Co robi flaga +STRIFEDAMAGE?

+STRIFEDAMAGE wymienia mnożnik obrażeń pocisku z random(1, 8) na random(1, 4). Ta sama wartość Damage, węższy zakres, niższa średnia. Działa na każdym aktorze w każdym modzie ZDoom niezależnie od bazowej gry — nazwa pochodzi od Strife, ale flaga jest przenośna. Przydaje się, gdy chcesz przewidywalnego pocisku średniego zasięgu.

Ile HP ma Cyberdemon?

4000 HP. Cyberdemon przyjmuje tylko obrażenia bezpośrednie — splash od rakiet i pocisków Mancubusa po nim spływa. BFG9000 to kanoniczna metoda zabicia (około 2–4 pociągnięć spustu razem ze sprejem); jakieś 20 strzałów z super strzelby w upór albo ~45 oczekiwanych trafień bezpośrednich rakietą też załatwią sprawę, jeśli wystarczy amunicji. Tabela 19 wierszy pod kalkulatorem pokazuje wszystkie wartości HP z vanilla Doom.

Dlaczego obrażenia BFG są takie dziwne — co to za pętla 15 razy random?

Główna kula BFG używa standardowego wzoru (Damage 100 × random(1, 8) = 100…800), ale promienie spreja nie. Każdy z maksymalnie 40 promieni sumuje 15 niezależnych random(1, 8): zakres 15…120 za promień z wartością oczekiwaną 67,5. Doom Wiki zwraca uwagę, że determinizm pseudolosowej tabeli P_Random (256 stałych bajtów) zawęża praktyczny zakres do 49…87, ale teoretyczne maksimum za promień to wciąż 120.

Czy kalkulator działa też dla aktorów ZScript?

Tak. ZScript i DECORATE dzielą tę samą semantykę Damage / DamageFunction / Speed / Health / +STRIFEDAMAGE — różnią się tylko składnią. Aktor ZScript z `Damage 5;` w bloku Default rzuca dokładnie ten sam wzór $5 \times \text{random}(1, 8)$, co aktor DECORATE z tą samą właściwością. Wyniki kalkulatora stosują się do obu.

Czy kalkulator działa z Brutal Doom albo Project Brutality?

Tylko dla aktorów, które zachowują standardową właściwość Damage i vanillowe funkcje hitskan. Brutal Doom autorstwa Sergeanta Marka IV oraz Project Brutality redefiniują większość broni własnymi wyrażeniami DamageFunction i niestandardowymi rutynami A_FireCustomMissile, które nie respektują mnożnika random(1, 8). Dla tych broni kalkulator pokaże vanillowy odpowiednik, który będziesz musiał skorygować ręcznie po przeczytaniu kodu DECORATE/ZScript konkretnego aktora moda. To istotne dla polskiej sceny — Brutal Doom jest u nas wciąż jednym z najpopularniejszych modów, opisywany w przewodnikach LepszySerwis.pl i G4G.pl.

Czy polska lokalizacja interfejsu GZDoom wpływa na obliczenia?

Nie. Polskie tłumaczenia interfejsu, menu i HUD-a — także te dystrybuowane jako patche społecznościowe na forach typu doomgra.prv.pl czy MiastoGier — zmieniają tylko stringi tekstowe, nie ruszają arytmetyki silnika. Te same losowania random(1, 8), TICRATE = 35, +STRIFEDAMAGE i HP potworów zachowują się identycznie na angielskiej buildzie GZDoom i z dowolnym polskim patchem językowym.

Czy są różnice w obrażeniach między PrBoom+, ZDoom, GZDoom i Zandronum?

Dla vanilla Doom i Doom II — nie. PrBoom+, ZDoom, GZDoom i Zandronum zachowują co do litery TICRATE 35, wzory random(1, 8) i random(1, 3) oraz oryginalne wartości HP. Różnice między portami pojawiają się dopiero w zaawansowanych funkcjach (fizyka, MAPINFO, ZScript, skrypty potworów w MBF21), nie w bazowej matematyce obrażeń. Cacodemon z HP 400 pada tak samo z tą samą sekwencją rzutów w każdym z czterech silników.

Czym różnią się ZScript i DECORATE pod kątem obrażeń?

Niczym matematycznie, tylko składnią. ZScript jest nadzbiorem DECORATE: to samo `Damage 10` w bloku Default rzuca to samo random(1, 8), i ta sama flaga +STRIFEDAMAGE wymienia mnożnik na random(1, 4). DECORATE jest oznaczony jako przestarzały w GZDoom, ale pozostaje kompatybilny; dla nowych modów rekomenduje się ZScript, ale z punktu widzenia kalkulatora obrażeń jest to obojętne.

Dlaczego trasujący Revenanta bije 10…80, a nie 10…40?

Aktor RevenantTracer ma Damage 10 w bloku, ale NIE nosi flagi +STRIFEDAMAGE — używa domyślnego mnożnika random(1, 8). Dlatego zakres wynosi 10…80 ze średnią 45, a nie 10…40. To klasyczna pomyłka, bo rakiety Revenanta brzmią jak matematyka Strife; w praktyce to inna formuła.

Czy poziom trudności (UV / Nightmare) zwiększa obrażenia broni?

Nie. Nightmare podwaja agresję potworów i zbierane naboje, ale obrażenia broni są identyczne na wszystkich pięciu poziomach trudności. Jedyny mnożnik obrażeń w vanilla Doom to power-up Berserk, który mnoży obrażenia pięści przez 10. Trudność zmienia, kto strzela pierwszy i jak często — nie siłę pojedynczego trafienia.

Jak dokładny jest kalkulator wobec prawdziwej gry?

Co do bita zgodny z zachowaniem vanilla Doom i Doom II pod ZDoom / GZDoom. Weryfikacja pokrywa wszystkie presety pocisków, każdą broń hitskanową, wszystkie wartości HP potworów i pętlę 15× spreja BFG — każdy zakres obrażeń, HP i Speed pocisku zgadza się co do jedności z definicjami aktora vanilla. Aktorzy zastępczy w DECORATE / ZScript, własne wyrażenia DamageFunction oraz nowoczesne odsłony Doom (2016, Eternal, The Dark Ages) używają innej matematyki i nie są modelowane.


Glosariusz obrażeń i czasu w ZDoom

Właściwość Damage

Numeryczna właściwość w bloku Default aktora DECORATE albo ZScript, którą silnik mnoży przy każdym trafieniu przez random(1, 8) (random(1, 4) z +STRIFEDAMAGE). Damage 10 daje w grze zakres 10…80, nie płaskie 10.

+STRIFEDAMAGE

Flaga aktora zmieniająca mnożnik obrażeń pocisku z random(1, 8) na random(1, 4). Ta sama wartość Damage, węższy zakres, niższa średnia (Damage × 2,5 zamiast Damage × 4,5). Działa na każdym aktorze w każdym modzie ZDoom niezależnie od bazowej gry.

tik

Atomowa jednostka czasu silnika Doom. TICRATE = 35 tików na sekundę; 1 tik ≈ 28,5714 ms. Długości stanów w DECORATE / ZScript i argument ACS Delay() wyrażone są w tikach. GZDoom v3.2.2 i nowsze gwarantują 35 tików = dokładnie 1,000 sekundy; wcześniejsze wersje obcinały do 28 ms.

Broń hitskanowa

Broń, której obrażenia rozstrzygają się natychmiast wzdłuż prostej linii, bez aktora-pocisku w środku. Pistolet, strzelba, super strzelba i karabin maszynowy są hitskanami; ich wzory są wbite na sztywno w action functions A_Fire* ($5 \times \text{random}(1, 3)$ za pellet), a właściwość Damage samego aktora jest ignorowana.

DamageFactor

Mnożnik nadchodzących obrażeń konkretnego typu. DamageFactor 'Fire', 0.5 połowi obrażenia Fire; 2.0 podwaja; 0.0 czyni aktora niewrażliwym. Tryb DPS kalkulatora wystawia jedno skalarne pole DamageFactor pokrywające przypadek odpornościowy albo podatnościowy.

Berserk

Power-up mnożący obrażenia pięści przez 10 po rzucie random(1, 10), co daje zakres 20…200 z wartością oczekiwaną 110. Bonus dostaje tylko pięść; piła łańcuchowa, hitskany i broń pociskowa są poza zasięgiem efektu.

Jednostka mapy (map unit)

Jednostka współrzędnych przestrzeni Doom. Według konsensusu społeczności 16 jednostek poziomych = 1 stopa = 0,3048 m (Doomguy mierzy 56 jednostek pionowych = 5 stóp 7 cali). Kalkulator zamienia Speed pocisku (jednostki na tik) na m/s, km/h i mph po przeliczniku poziomym 16 j.m./stopa.

Właściwość Speed

Prędkość aktora-pocisku w jednostkach mapy na tik. Kula Impa Speed 10; rakieta Speed 20; kula karabinu plazmowego i kula BFG Speed 25. Pomnóż przez 35, żeby dostać jednostki na sekundę; przez 0,667, żeby dostać metry na sekundę; przez 1,49, żeby dostać mile na godzinę.

Sprej BFG (BFG spray)

Stożek do 40 promieni, który kula BFG wypuszcza przy uderzeniu (sprej odpala się ze stanu śmierci kuli przez A_BFGSpray). Obrażenia każdego promienia liczone są jako suma 15 niezależnych random(1, 8): zakres 15…120 za promień z wartością oczekiwaną 67,5. Sławę BFG jako „zabójcy Cyberdemona z jednego strzału” tworzy właśnie sprej, nie sama kula.

TICRATE

Stała silnika ustalająca częstotliwość Doom na 35 tików na sekundę od 1993 roku. Zadeklarowana w doomdef.h id Software; respektowana co do litery przez ZDoom, GZDoom, Zandronum, PrBoom+, Boom, MBF21 i każdy inny vanilla-kompatybilny source port. Każda długość stanu, każdy argument Delay() i każde liczenie czasu lotu pocisku używa 35 jako stałej konwersji.

DamageFunction

Alternatywa dla właściwości Damage, która pozwala moderowi zwrócić dowolną liczbę całkowitą w momencie trafienia przez wyrażenie ZScript. Pomija mnożnik random(1, 8) — zwróć płaską liczbę dla obrażeń deterministycznych albo policz ją na podstawie inflictor / target / distance, żeby uzyskać zachowanie kontekstowe.

P_Random

Funkcja pseudolosowa silnika Doom: indeks przebiega statyczną 256-bajtową tabelę z poprzestawianymi wartościami 0–255 i przy każdym wywołaniu zwraca kolejny bajt. Nie jest jednostajna (wartość 1 nie pojawia się ani razu, a 145 pięć razy), ale jest wystarczająca do arytmetyki walki. Używana we wszystkich rzutach obrażeń; M_Random ma własny indeks do efektów niegrywalnych, żeby nie psuć synchronizacji multiplayera.


Tresc zweryfikowana przez zespol Smart Calculators