ZDoom ダメージ・DPS 計算機
任意の ZDoom / GZDoom 武器・飛び道具について、正確なダメージ範囲、期待 DPS、撃破時間を算出。random(1,8) 倍率、STRIFEDAMAGE フラグ、ACS スクリプト用の tic ↔ 秒コンバータに対応。
Doom モッダー向けのダメージ範囲・DPS・tic コンバータ。
任意の飛び道具・ヒットスキャン武器・カスタム DamageFunction について、最小・平均・最大ダメージを算出。
ダメージ計算式
Damage × random(1, 8) を使用 — ZDoom の標準飛び道具計算式。
バニラ Doom の飛び道具を選ぶと Damage が自動入力されます。後から Damage を編集するとプリセットはカスタムに戻ります。
dmg
DECORATE/ZScript の Damage に書く N の値(例:インプの火の玉なら Damage 3)。
ダメージ分布
random(1, N) は一様分布 — 各倍率はすべて同確率。
| 1 ヒットのダメージ | 確率 |
|---|---|
| 3 | 12.5% |
| 6 | 12.5% |
| 9 | 12.5% |
| 12 | 12.5% |
| 15 | 12.5% |
| 18 | 12.5% |
| 21 | 12.5% |
| 24 | 12.5% |
バニラ飛び道具早見表
行をクリックすると上の入力欄に読み込まれます。
| 飛び道具 | Damage | 倍率 | 最小 | 最大 | 平均 | Speed(mu/tic) |
|---|---|---|---|---|---|---|
| インプの火の玉 — DoomImpBall | 3 | × random(1, 8) | 3 | 24 | 13.5 | 10 |
| カコデーモンのプラズマ弾 — CacodemonBall | 5 | × random(1, 8) | 5 | 40 | 22.5 | 10 |
| アラクノトロンのプラズマ弾 — ArachnotronPlasma | 5 | × random(1, 8) | 5 | 40 | 22.5 | 25 |
| プラズマライフル弾 — PlasmaBall | 5 | × random(1, 8) | 5 | 40 | 22.5 | 25 |
| バロン・オブ・ヘル/ヘルナイトの火球 — BaronBall | 8 | × random(1, 8) | 8 | 64 | 36 | 15 |
| マンキュバスの火球 — FatShot | 8 | × random(1, 8) | 8 | 64 | 36 | 20 |
| レブナントの追尾ミサイル — RevenantTracer | 10 | × random(1, 8) | 10 | 80 | 45 | 10 |
| ロケット(直撃) — Rocket | 20 | × random(1, 8) | 20 | 160 | 90 | 20 |
| BFG スプレイ(1 光線あたり) | 67 | × 1..8 loop | 15 | 120 | 67.5 | — |
| BFG プラズマ弾(直撃) — BFGBall | 100 | × random(1, 8) | 100 | 800 | 450 | 25 |
この数値を再現する DECORATE/ZScript スニペット。
ACTOR CustomProjectile : DoomImpBall{ Damage 3 // Min 3 Max 24 Avg 13.5 (× random(1, 8))}ZDoomダメージ計算機。Doomモッダー向けにダメージ幅・DPS・ticをまとめて算出。
ZDoomダメージ・DPS計算機とは?
ZDoomのダメージ・DPS・ticを計算する方法(この計算機が裏でやっていること)
ダメージ・DPS・ticの計算式(エンジン公式)
- = DECORATEまたはZScriptアクターのDefaultブロックに書かれるDamageプロパティ(整数)
- = 乱数倍率の範囲。デフォルトは1と8、+STRIFEDAMAGEなら1と4、ピストル/ショットガン/チェーンガンのペレットは1と3、パンチ/チェーンソーは1と10
- = 攻撃間隔のtic数。アクターのStatesブロックで、連続する射撃呼び出しの間にあるステートマシンの長さ
- = 対象のHP。ゾンビマンは20、インプは60、カコデーモンは400、バロン・オブ・ヘルは1000、スパイダーマスターマインドは3000、サイバーデーモンは4000
- = DamageFactor倍率。1.0で通常、0.5で耐性、2.0で弱点、0.0で無敵
- = 秒単位の時間。TICRATE = 35を掛けて整数ticに丸めた値が、状態長やDelay()の引数になる
- = 飛翔距離(マップユニット)と飛び道具のSpeed(マップユニット/tic)。エンジンは整数ステップで動くので、切り上げ除算でtic数が出る
実際の数字で追う計算例
インプの火の玉 vs カコデーモン — デフォルトシナリオ
ピストルのDPSでゾンビマンを倒す — 「ピストルは本当に役立たず?」
スーパーショットガンでヘルナイト — 至近距離の現実
BFGプラズマ弾の直撃でサイバーデーモン(スプレイなし)
ACS Delayの算術 — 「2.5秒は何tic?」
モッダー・マッパー・好奇心旺盛なプレイヤー向け、ZDoomダメージとバランスのコツ
- アクターのDamageプロパティは「リテラル値」ではなく「期待値」として読むこと。Damage 5の飛び道具はゲーム内で平均22.5(5 × 4.5)になり、5にはなりません。自作モンスターの火の玉をインプ(期待値13.5)と並ぶレベルにしたいならDamage 3に。Damage 10ではありません。DECORATEバランス調整で最も多い間違いは、Damage 10を「10ダメージ固定」と読むこと。実際は10〜80、平均45です。
- +STRIFEDAMAGEフラグは飛び道具の幅を狭めたいときの最小コスト手段です。Damage値は同じで、最大倍率が8から4に下がり、期待値が4.5×から2.5×に下がります。たとえば60〜480ではなく60〜240の安定したカスタムロケットを作りたいときに便利です。Strife(エンジン初の非Doom IWAD)由来の名前ですが、フラグ自体はベースゲームを問わずどのZDoom MODでも動作し、Doom系MODでも普通に使われます。
- ヒットスキャン武器はDamageプロパティを完全に無視します。ピストル・ショットガン・チェーンガン・スーパーショットガンは、A_FireBullets/A_FirePistol/A_FireShotgunの内部にペレットあたり $5 \times \text{random}(1, 3)$ をベタ書きしています。ヒットスキャン武器の威力を上げるには、ペレット数を増やすか、A_CustomBulletAttackのdamage引数を変えるか、飛び道具方式に作り替えるしかありません。パンチとチェーンソーは $2 \times \text{random}(1, 10)$。バーサークが効くのはパンチだけで、乱数の後に×10倍されます(20〜200、期待値110)。
- 攻撃間隔のtic数は、1発のダメージよりDPS比較で重要です。チェーンガンとピストルは1発の式(5〜15、期待値10)が同じですが、チェーンガンの攻撃間隔は約4 tic、ピストルは約14 tic。同じペレット計算でも約3.5倍のDPSになります。武器MODのバランスを調整するときは、まず目標DPS(バニラ・ピストル約25、ショットガン約70、スーパーショットガン約150、チェーンガン約88、プラズマライフル約263、ロケットランチャー直撃約159)を決めてから、それを生む1発のダメージと攻撃間隔を逆算します。
- 19体ぶんのモンスター早見表で戦闘設計を点検しましょう。ゾンビマン(HP 20)、ショットガン兵(30)、Wolfenstein SS(50)、インプ(60)、チェーンガン兵(70)、ロストソウル/コマンダー・キーン(100)、デーモン/スペクター(150)、レブナント(300)、ペインエレメンタル/カコデーモン(400)、ヘルナイト/アラクノトロン(500)、マンキュバス(600)、アーチバイル(700)、バロン・オブ・ヘル(1000)、スパイダーマスターマインド(3000)、サイバーデーモン(4000)。スーパーショットガン1発(期待200、最大300)はベストケースでレブナント(HP 300)までを1発で落とせます。ペインエレメンタル/カコデーモン(HP 400)には最低でも2発が必要です。ピストル1発(期待10)が1発で倒せるのはゾンビマンだけ。マップ序盤の小部屋にデーモンを置くかマンキュバスを置くかは、難易度1.5倍ではなく4倍の差です。HPカーブは線形ではなく等比的に上がっていきます。
- GZDoom v3.2.2(2017年12月)以降は35 ticがちょうど1秒と保証されます。それ以前のバージョンはtic間隔を28 msと表示していたため、35 ticが0.98秒に見えました。これはタイマーコード内の整数除算切り捨てが原因です。ACS Delay()の算術にサブ秒精度が必要で、なおかつ2017年以前のポートを想定する場合は、2%のドリフトを織り込んでください。`Delay(35 * 60)` はレガシータイマーで実時間58.8秒、フル1分より1.2秒短くなります。
- BFGスプレイは、$\text{Damage} \times \text{random}(1, 8)$ の法則に従わない唯一の飛び道具です。A_BFGSprayの中では、1光線あたりのダメージが独立した15回のrandom(1, 8)の合計として計算されます。範囲15〜120、期待値67.5、分布は一様ではなくベル型です。BFGプラズマ弾は90度の前方コーンに最大40光線を放出するので、フルカバレッジで $40 \times 67{.}5 = 2700$ ダメージ(期待値)がBFG弾本体の100〜800に上乗せされます。BFGの1トリガーでサイバーデーモンを2発沈められる伝説の正体は、このスプレイです。直撃とコーンを同時に当てたときに限って成立します。
- マップユニットの実寸換算は1種類ではなく2種類あります。水平方向は16マップユニット=1フィート(0.3048 m)、垂直方向は10マップユニット=1フィート(オリジナルの320×200モードが縦20%引き伸ばされていたため)。飛び道具は地図平面を飛ぶため、Speed換算では水平比を使います。Speed 10(インプの火の玉)≈ 6.67 m/s ≈ 15 mph、Speed 25(プラズマ、BFGプラズマ弾)≈ 16.67 m/s ≈ 60 km/h ≈ 37 mph。ドゥームガイの走行速度はおよそSpeed 16、約24 mph。廊下で時々インプに追いつかれるのは、この比較からも納得できます。
- DamageFactorは、ダメージコードを書き直さずに耐性と弱点を実装する手段です。モンスターに `DamageFactor 'Fire', 0.5` を書けばFire型ダメージは半減、`2.0` なら倍化、`0.0` なら完全に無効化されます。計算機のDPSモードでは、スカラー値1つでDamageFactorを入力するUIになっています。独自ダメージタイプを宣言しなくても、たとえばカコデーモンのプラズマ耐性0.7のような仮想バリアントに対してバニラ武器のTTKを比較できます。
- 極端ケースとレンジは、平均値より生存判断で効いてきます。「期待撃破回数 = 30」という数字は、運の悪いケースだとカコデーモンがインプの火の玉を134発吸えてしまうことを隠します。計算機が期待値と並べてベスト/ワーストを表示しているのはそのためで、スローター系マップでモンスターを厳密な弾数予算内で倒さなければならない場面では、ワーストケースで設計します。通常マップなら期待値で設計します。random(1, 8)の飛び道具では、両者が5〜10倍乖離することも珍しくありません。
- 日本語でMODを作る場合でも、アクター名やプロパティ名はエンジンに登場する英語表記のまま残します(Damage、Speed、Health、+STRIFEDAMAGE、Cacodemon、Cyberdemonなど)。DECORATEもZScriptもローカライズされた識別子を受け付けません。日本語のDoom解説ページでは「カコデーモン」や「サイバーデーモン」と訳されていても、コード内では `Cacodemon` `Cyberdemon` のままです。PK3に英語表記を維持しておけば、他のモッダーがWADを開いたときのデバッグ時間を何時間も節約できます。
ZDoomダメージ計算機 — よくある質問
Damage 10の飛び道具がたまに80ダメージを出すのはなぜ?
ZDoomはヒットごとに飛び道具のDamageプロパティをrandom(1, 8)倍します。Damage 10なら10、20、30、40、50、60、70、80のどれかが等確率で出ます。平均は45。+STRIFEDAMAGEフラグを付けると倍率がrandom(1, 4)に切り替わり、10、20、30、40のいずれかで平均25になります。
クラシックDoomのピストルのダメージ式は?
ピストルは1発あたり $5 \times \text{random}(1, 3)$、つまり1発5・10・15のどれかで期待値10です。チェーンガンとショットガンも(ペレットごとに)同じ式を使います。ヒットスキャン・アクターのDamageプロパティは無視され、式はA_FirePistol、A_FireShotgun、A_FireCGunの内部にベタ書きされています。
ZDoomで1秒は何tic?
35 ticです。TICRATEは1993年のオリジナルリリースから35に固定されています。GZDoom v3.2.2以降は35 tic = 実時間1.000秒を保証しますが、それ以前のバージョンは1 tic = 28 msに切り捨てていたため、35 tic = 0.98秒と表示されました。長いDelay()の連鎖では約2%のドリフトとして効いてきます。
ACS Delay()でX秒を待たせるには?
秒に35を掛けて整数に丸めます。0.5秒 = 18 tic、1秒 = 35 tic、2秒 = 70 tic、5秒 = 175 tic、10秒 = 350 tic、60秒 = 2100 tic。ACSでは `Delay(35 * seconds)` と直接書けば、エンジン側がコンパイル時に掛け算を解決してくれます。
+STRIFEDAMAGEフラグは何をする?
+STRIFEDAMAGEは飛び道具のダメージ倍率をrandom(1, 8)からrandom(1, 4)に切り替えます。Damage値はそのままで、範囲が狭まり平均値が下がります。Strife由来の名前ですが、ZDoomで動くMODならベースゲームを問わずに使えます。安定した中威力の飛び道具がほしいときに便利です。
サイバーデーモンのHPは?
4000 HPです。サイバーデーモンは爆発スプラッシュを無効化するため、ロケットやマンキュバスの弾の爆風は通りません。BFG9000が定番(スプレイ込みで約2〜4トリガー)、ほかにも至近距離のスーパーショットガン約20発、ロケット直撃を期待値で約45発でも倒せます(弾薬さえ続けば)。計算機下部の19行モンスター表に、すべてのバニラHP値が並んでいます。
BFGダメージが特殊なのはなぜ? 15回ループって何?
BFGプラズマ弾の本体は標準式(Damage 100 × random(1, 8) = 100〜800)に従いますが、スプレイの追尾光線だけ違います。最大40光線の各光線が、15回独立したrandom(1, 8)を合計し、1光線15〜120、期待値67.5になります。Doom Wikiにあるとおり、擬似乱数テーブルP_Random(256バイト固定)の決定論性により実プレイの範囲は理論最大より狭まりますが、1光線あたりの理論上限120は変わりません。
ZScriptアクターでもこの計算機は使える?
使えます。ZScriptとDECORATEは、Damage/DamageFunction/Speed/Health/+STRIFEDAMAGEのセマンティクスを共有しており、違うのは構文だけです。Defaultブロックに `Damage 5;` と書いたZScriptアクターは、同じプロパティを持つDECORATEアクターとまったく同じ $5 \times \text{random}(1, 8)$ をロールします。計算機の出力は両者に共通して有効です。
Brutal DoomやProject Brutalityでも使える?
標準のDamageプロパティとバニラのヒットスキャン関数を維持しているアクターについては有効です。Brutal Doom(Sergeant Mark IV作)とProject Brutalityは、ほとんどの武器を独自のDamageFunction式とカスタムA_FireCustomMissileルーチンで再定義していて、random(1, 8)倍率に従いません。それらの武器については、計算機はバニラの近似値を表示するので、対象MODのDECORATE/ZScriptを読んで個別のアクターで手動補正してください。
GZDoomの日本語翻訳は計算に影響する?
しません。GZDoomの日本語ファイル(公式翻訳スレッドで保守されているもの)が翻訳するのはメニュー・HUD・ログのみで、エンジン算術には触れません。同じrandom(1, 8)、TICRATE = 35、+STRIFEDAMAGE、モンスターHPは、英語ビルドでも日本語言語ファイルを読み込んだビルドでも完全に同じ挙動になります。
PrBoom+・ZDoom・GZDoom・Zandronumでダメージは違う?
バニラDoom/Doom IIに関しては違いません。PrBoom+、ZDoom、GZDoom、Zandronumはどれも、TICRATE 35、random(1, 8)とrandom(1, 3)の式、オリジナルのHP値を一字一句保存しています。ポート間の差は高機能(物理、MAPINFO、ZScript、MBF21モンスタースクリプト)で現れるもので、基本ダメージ算術には現れません。同じ乱数列ならHP 400のカコデーモンは4つのエンジンすべてで同じように沈みます。
ZScriptとDECORATE、ダメージ計算の違いは?
数学的な違いはなく、構文だけが違います。ZScriptはDECORATEの上位互換で、Defaultブロックの `Damage 10` は同じrandom(1, 8)をロールし、+STRIFEDAMAGEフラグも同じくrandom(1, 4)へ切り替わります。GZDoomではDECORATEは非推奨マーク付きですが互換性は維持されており、新規MODはZScript推奨です。この計算機のダメージ算術にとってはどちらでも同じです。
レブナントの追尾ミサイルが10〜40ではなく10〜80なのはなぜ?
アクター `RevenantTracer` はブロック内にDamage 10を持っていますが、+STRIFEDAMAGEフラグは付いていません。デフォルトのrandom(1, 8)倍率を使うので、範囲は10〜80、期待値は45です。10〜40ではありません。レブナントのロケットはStrife系の数学に見えるという誤解が多いですが、実体は標準のrandom(1, 8)です。
難易度(UV/ナイトメア)で武器ダメージは増える?
増えません。ナイトメアはモンスターの攻撃性と弾薬拾得を倍にしますが、武器ダメージは5段階すべての難易度で同一です。バニラDoomで存在するダメージ倍率はバーサーク効果のみで、パンチダメージを×10倍します。難易度が変えるのは「誰が先に・どれだけ撃ってくるか」であって、「1発がどれだけ重いか」ではありません。
実際のゲーム挙動と比べてこの計算機の精度は?
ZDoom/GZDoom上のバニラDoom/Doom IIの挙動については、エンジン正確です。検証範囲はすべての飛び道具プリセット、すべてのヒットスキャン武器、すべてのモンスターHP値、そしてBFGスプレイの15回ループまでカバーしています。ダメージ範囲・モンスターHP・飛び道具Speedはバニラのアクター定義と単位レベルで一致します。DECORATE/ZScriptで差し替えたアクター、独自のDamageFunction式、最新のドゥームシリーズ(Doom 2016、Eternal、The Dark Ages)は別の計算式を使うため対象外です。
このツールはニコニコ生放送やYouTubeのDoom実況用にも使える?
使えます。ゲーム実況や攻略動画で「BFGでサイバーデーモンが何発で落ちる?」「スーパーショットガンでヘルナイトは確定2発?」といったテロップ用の数字を出すのに便利です。期待値・ベスト・ワーストの3つを同時に表示しているので、視聴者向けに「平均と最悪ケースの差」をそのまま見せられます。配信中にメモ用のURLを残しておきたいときは、選んだモードがクエリ文字列(?mode=damage / dps / tics)として反映されるので、ブックマークから再現できます。
ZDoomダメージと時間の用語集
Damageプロパティ
DECORATEまたはZScriptアクターのDefaultブロックに書く数値プロパティで、エンジンがヒットごとにrandom(1, 8)を掛けます(+STRIFEDAMAGEならrandom(1, 4))。Damage 10と書いてもゲーム内では10固定にはならず、10〜80の幅が出ます。
+STRIFEDAMAGE
飛び道具のダメージ倍率をrandom(1, 8)からrandom(1, 4)に切り替えるアクターフラグ。Damage値は同じで、範囲が狭まり平均値が下がります(Damage × 4.5の代わりにDamage × 2.5)。ベースゲームを問わずどのZDoom MODでも動作します。
tic
Doomエンジンの原子的な時間単位。TICRATE = 1秒あたり35 tic、1 tic ≈ 28.5714 ms。DECORATE/ZScriptの状態長、ACS Delay()の引数はticで表されます。GZDoom v3.2.2以降は35 tic = 1.000秒を保証しますが、それ以前は28 msに切り捨てていました。
ヒットスキャン武器
飛び道具アクターを介さず、直線上で即座にダメージが解決される武器。ピストル、ショットガン、スーパーショットガン、チェーンガンがヒットスキャンです。式はアクション関数A_Fire*にベタ書きされており(ペレットあたり $5 \times \text{random}(1, 3)$)、アクターのDamageプロパティは無視されます。
DamageFactor
特定のダメージタイプへの被ダメージ倍率。`DamageFactor 'Fire', 0.5` はFireダメージを半減、2.0で倍化、0.0で完全無効化。計算機のDPSモードでは、耐性または弱点ケースをカバーするスカラーDamageFactor入力欄が出ます。
バーサーク
random(1, 10)のロール後にパンチダメージを×10倍するパワーアップ。範囲は20〜200、期待値110。ボーナスを受け取るのはパンチだけで、チェーンソー、ヒットスキャン、飛び道具は対象外です。
マップユニット(map unit)
Doomの空間座標単位。コミュニティ合意では水平16マップユニット = 1フィート = 0.3048 m(ドゥームガイは垂直56ユニットで5フィート7インチ)。計算機は水平比16 mu/フィートを使って、飛び道具のSpeed(マップユニット/tic)をm/s・km/h・mphに変換します。
Speedプロパティ
飛び道具アクターの速度(マップユニット/tic)。インプの火の玉Speed 10、ロケットSpeed 20、プラズマライフル弾とBFGプラズマ弾はSpeed 25。35を掛けるとマップユニット/秒、0.667を掛けるとm/s、1.49を掛けるとmphになります。
BFGスプレイ
BFGプラズマ弾が着弾時に放出する最大40光線のコーン(BFGプラズマ弾のDeathステートからA_BFGSprayが発射します)。各光線のダメージは独立した15回のrandom(1, 8)の合計で、1光線あたり15〜120、期待値67.5。BFGがサイバーデーモンを1ショットで倒すという伝説はスプレイの貢献で、本体プラズマ弾だけでは届きません。
TICRATE
Doomのフレームレートを1993年から35 tic/秒に固定しているエンジン定数。id Softwareの `doomdef.h` で宣言されており、ZDoom、GZDoom、Zandronum、PrBoom+、Boom、MBF21その他すべてのバニラ互換ソースポートが一字一句そのまま継承しています。すべての状態長、Delay()引数、飛び道具の飛翔時間計算で、変換定数として35が使われます。
DamageFunction
Damageプロパティの代替で、モッダーがヒット時にZScript式から任意の整数を返せる仕組み。random(1, 8)倍率を回避できるため、固定値を返して決定論的ダメージを出すか、inflictor/target/distanceから計算してコンテキスト感応的な挙動を作るかを選べます。
P_Random
Doomエンジンの擬似乱数関数。0〜255のシャッフル済み256バイト固定テーブルをインデックスが順に進み、呼び出しごとに次のバイトを返します。均一分布ではありませんが(値1は1回も出てこず、145は5回出る)、戦闘算術には十分です。すべてのダメージロールに使われています。M_Randomは非ゲーム効果用に別インデックスを持ち、マルチプレイの同期を壊さないようになっています。
Smart Calculators チームによる検証済みコンテンツ