Raal's Tome of Destruction

主にroguelikeのことを書くブログです

launcherを用いた射撃のダメージ

飛び道具全般まとめようと思ったけど気力が尽きたのでとりあえず射撃武器だけでも。
やはり煩雑なので読む気のある人だけどうぞ。読む気がない人は結論だけどうぞ。

武器の性能について

を参照のこと。

ダメージ計算

上から処理されます。
行が変わるごとに整数に丸められます。端数切捨て。
random2avg(x,y)は0~x-1の値をとって分散はyに依存する乱数。平均は(x-1)/2。

  • 変数定義
    • ammoHitBonus = 弾の修正値
    • ammoDamBonus = 弾の修正値
    • lnchHitBonus = 弓の命中修正
    • lnchDamBonus = 弓のダメージ修正
    • skill = 対応するスキルの値
    • lnch_base_hit = 弓の基礎命中
    • lnch_base_dam = 弓の基礎ダメージ
    • ammo_base_hit = 弾の基礎命中
    • ammo_base_dam = 弾の基礎ダメージ
    • dice_mult = 倍率
  • baseの初期値
    • baseHit = lnch_base_hit
    • baseDam = lnch_base_dam + 1d(1 + ammo_base_dam) - 1
      • slingはbaseDam = ammo_base_dam
      • 属性付きblowgunはbaseDam = 4
  • 種族一致でbaseHit++,baseDam++
    • エルフで種族一致ならさらにbaseHit++
  • netに絡まっているときbaseHit--
  • exDamBonusの初期値
    • exDamBonus = lnchDamBonus + 1d(1 + ammoDamBonus)-1
  • exDamBonusはもう一度ダイスで減る
    • exDamBonus = 1d(exDamBonus + 1) -1 (exDamBonus > 0)
    • exDamBonus = -1d(-exDamBonus + 1) + 1(exDamBonus < 0)

  • exHitBonusの初期値
    • exHitBonus = 1d(lnchHitBonus + 1) -1 (lnchHitBonus > 0)
    • exHitBonus = -1d(-lnchHitBonus + 1) +1 (lnchHitBonus < 0)
  • 器用さの半分が足される
    • exHitBonus += dex / 2
  • sling
    • slingbullet使用時 baseHit+= 4
    • exHitBonus += skill * 1.5
    • strbonusの計算
      • strbonus = (str - 10) * 10 / 9
      • strbonus = strbonus * (2 * baseDam + ammoDamBonus) / 20
      • strbonus = min(lnchDamBonus + 1, strbonus)
    • exDamBonus += strbonus
    • dice_mult = 100 * (13 + 1d(1 + skill)) / 14
    • lnchDamBonus = min(0, lnchDamBonus)
    • exHitBonus += throwingスキル / 5
  • browgun
    • baseHit -= 2
    • exHitBonus += skill * 1.5 + dex / 2
    • lnchDamBonus = min(0, lnchDamBonus)
    • ammoDamBonus = min(0, ammoDamBonus)
    • dice_mult=100
    • exHitBonus += throwingスキル / 5
  • bow
    • baseHit -= 3
    • exHitBonus += skill * 2
    • strbonusの計算
      • strbonus = 10 * (str - 10)/4
      • strbonus = strbonus * (2 * baseDam + ammoDamBonus) / 20
      • strbonus = min(lnchDamBonus + 1, strbonus)
    • exDamBonus += strbonus
    • dice_mult = 100 * (16 + 1d(1 + skill)) / 17
    • lnchDamBonus = min(0, lnchDamBonus)
  • crossbow
    • baseHit++
    • exHitBonus += skill*1.5+6
    • dice_mult = 100 * (21 + 1d(1 + skill)) / 22
    • hand crossbowのとき
      • exHitBonus -= 2
      • dice_mult = dice_mult * 26 / 30
  • 弓がVORPALエゴのとき
    • dice_mult = dice_mult * 130 / 100
  • 矢がSTEEL/FLAME/FROST/CHAOSのとき
    • dice_mult = dice_mult * 150 / 100
  • exHitBonusをbaseHitに足す
    • hit = baseHit + random2avg(exHitBonus + 1, 2) (exHitBonus>=0)
    • hit = baseHit - random2avg(-exHitBonus + 1, 2) (exHitBonus<0)
  • 最終的な命中
    • hit += ammoHitBonus + lnchHitBonus*1
  • exDamBonusをbaseDamに足す
    • dam = 1d(baseDam + 1d(exDamBonus + 1) - 1) (exDamBonus>=0)
    • dam = 1d(baseDam - 1d(-exDamBonus + 1) + 1) (exDamBonus<0)
  • 倍率がかかる
    • dam *= dice_mult / 100
  • 最終的なダメージ
    • dam += ammoDamBonus + lnchDamBonus*2

具体的な例

わかりにくーいので幾つか例を出す

sling(+x,+y)でslingbullet(+z)を撃つ場合
  • baseHit = 2+4=6
  • baseDam = 6
  • exDamBonus = 1d(y + 1d(z + 1)) - 1
    • strbonus =(str - 10)*10/9
    • strbonus = strbonus * (12 + z) / 20
    • exDamBonus += strbonus
  • exHitBonus = 1d(x + 1) - 1 + dex / 2 + skill * 1.5 + throwing_skill / 5
  • dice_mult = 100 * (13 + 1d(1 + skill)) / 14
  • hit = 6 + random2avg(exHitBonus + 1, 2) + x + z
  • dam = dice_mult / 100 * 1d(5 + 1d(exDamBonus + 1)) + z
longbow(+x,+y)でarrow(+z)を撃つ場合
  • baseHit = 0 - 3 = -3
  • baseDam = 6 + 1d(1 + 7) - 1 = 5 + 1d8
  • exDamBonus = 1d(y + 1d(z + 1)) - 1
    • strbonus = 2.5 * (str - 10)
    • strbonus = strbonus * (10 + 2d8 + z) /20
    • exDamBonus += min(y+1,strbonus)
  • exHitBonus = 1d(x + 1) - 1 + dex / 2 + skill * 2
  • dice_mult = 100 * (16 + 1d(1+skill)) / 17
  • hit = -3 + random2avg(exHitBonus+1,2) + x + z
  • dam = dice_mult / 100 * 1d(4 + 1d8 + 1d(exDamBonus + 1)) + z
crossbow(+x,+y)でbolt(+z)を撃つ場合
  • baseHit = 5
  • baseDam = 5 + 1d(1 + 9) - 1 = 4 + 1d10
  • exDamBonus = 1d(y + 1d(z + 1)) - 1
  • exHitBonus = 1d(x + 1) + 5 + dex / 2 + skill * 1.5
  • dice_mult = 100 * (21 + 1d(1 + skill)) / 22
  • hit = 5 + random2avg(exHitBonus + 1,2)
  • dam = dice_mult / 100 * 1d(3 + 1d10 + 1d(exDamBonus + 1)) + y + z

結論

  • スリングは伸びしろが少ないので頑張ってスキルを鍛えても旨みが少ない
  • longbowは命中の初期値が少なくskillの伸びが大きい
    • ある程度伸ばさないと全然当たらない
  • longbowは弓ではなく矢を鍛えろ
    • ダメージを見るとzは17/16倍で効いてくるがyは3/8倍程度
  • crossbowはスキルがなくてもそこそこ当たる
  • crossbowは弓を鍛えるほうが効率が良い
    • ただしyが9/8倍程度に対してzが17/16倍程度なので優劣はそこまで大きくない
  • 以上より、dcssで射撃をするなら矢をきっちり鍛えることをオススメする
    • 手に持ってenchant weapon。1でも2でも効く。3は矢に使うのは損なので武器に使おう。
    • 矢を強化すると撃ったとき壊れにくくなるというメリットもある。
      • 通常arrow,bolt,slingbulletは1/4で壊れるが、(強化値)/(強化値+1)で破壊を免れる。
      • (強化値)/(強化値+3)で破壊を免れる(0.9現在)
      • +0で25%, +1で12.5%, +3で6.25%, +5で4.17%, +7で3.125%で壊れる。
      • +0で25%, +1で18.75%, +3で12.5%, +5で9.375%, +7で7.5%, +9で6.25%

*1:browgunのlnchHitBonusは0以下になっていることに留意すること

*2:sling,browgun,bowはlnchDamBonusが0以下になっていることに留意すること