This post is also available in:
ソロ特化ダンジョンクロール専用TRPG『Ker Nethalas』で、
「ビルドの参考にするのに命中率の一覧が欲しい」
と思ったので、Pythonでシミュレーションしてみた。
シミュレーションの条件
- 攻撃側、防御側のWeaponSkill,又はCombatの値をもとに、100万回ずつシミュレーションをした。
- 攻撃側の+10ボーナスは算入済みとした。
- 表は攻撃側をA、防御側をDとし、それぞれのスキルの値を表している。
シミュレーション結果
単位は全てパーセント。小数点第二位以下切り捨て。
| A30 | A40 | A50 | A60 | A70 | A80 | A90 | A100 | |
| D10 | 29.6 | 39.5 | 49.5 | 59.5 | 69.5 | 79.5 | 89.5 | 99.5 |
| D20 | 28.0 | 38.1 | 48.1 | 57.9 | 68.0 | 78.1 | 88.1 | 98.1 |
| D30 | 25.3 | 35.64 | 45.6 | 55.6 | 65.7 | 75.6 | 85.5 | 95.6 |
| D40 | 22.2 | 31.8 | 42.1 | 52.1 | 62.2 | 72.1 | 82.1 | 92.1 |
| D50 | 19.35 | 27.8 | 37.2 | 47.7 | 57.7 | 67.7 | 77.8 | 87.7 |
| D60 | 16.3 | 23.7 | 32.3 | 41.7 | 52.2 | 62.4 | 72.2 | 82.2 |
| D70 | 13.3 | 19.8 | 27.2 | 35.6 | 45.1 | 55.8 | 65.7 | 75.8 |
| D80 | 10.3 | 15.7 | 22.1 | 29.3 | 38.1 | 47.5 | 58.3 | 68.4 |
| D90 | 7.3 | 11.7 | 17.2 | 23.7 | 31.1 | 39.5 | 49.0 | 59.9 |
| D100 | 4.3 | 7.8 | 12.2 | 17.7 | 24.1 | 31.5 | 40.1 | 49.5 |
シミュレーションから言えること
対抗判定よりも先に個々の成功判定が入るので、特に攻撃側のスキルが低い時は命中率が顕著に下がることに注意。
初期状態での命中率目安
初期作成の武器スキル60+攻撃時ボーナスでは、おおむね50~60%の確率で当たる。Simple特性を持つ武器やWeapon MasterのPassiveスキルでスキルを上昇させると、おおむねスキル10につき命中率が10%加算される。
強い相手を前にした時ほど、スキルを盛る効果が大きい
「スキル上昇は命中率を乗算するのではなく加算するのに近い」という性質上、Combatが高い相手(=PCの命中率が低くなる相手)ほど、相対的に命中率を盛る効果は大きくなる。
Combat40の相手に対し、武器スキルを70から90に上げると1.31倍の命中率アップとなる。
Combat70の相手に対し、武器スキルを70から90に上げるならば、1.456倍の命中率アップとなる。
初期状態の回避率目安
初期状態のDodge10でも、レベル1なら半分近くの攻撃は避けられる。Dodge40まで上げることによる恩恵は、少なくとも被ダメージ軽減の観点からは大きくない。(Dodgeは逃走成功率や罠回避率に大きくかかわるので、どちらかと言えばそちらの恩恵が大きいと思われる)
パリィ武器装備は全身にArmor装備と同程度のダメージ軽減期待値
1D6の攻撃をArmor1で防ぐことによる軽減率期待値は
なので、攻撃スキル60の敵が放つ攻撃を回避やパリィによって同程度無力化するには、Dodge10からDodge60まで上げることが必要になる。これはDodgeでは困難なものの、パリィ武器を用いれば初期作成キャラでも達成可能な数値である。
パリィ武器を持ち、Weapon Master + Tracherのビルドで、レベル2でHunter’s Markを取得した場合、Combat70の相手の攻撃ですら、6割以上は回避できる。この軽減率をArmorで換算すると、
により、全身をArmor2の防具で固めるのと同程度であるといえる。
命中率確保の困難さ
命中率80%以上を確保するには、相手のCombatが低かろうとも、武器スキルが補正込みで90必要。
また、補正込みの武器スキル100になっても、Overseerの影響でCombatの値が80となった敵に対しては、命中率が7割を切る。
シミュレーションに使ったコード(Python)
#Attackは、攻撃側の+10ボーナス適用済みの値とする!
#振りなおしは攻撃失敗とみなしているので、攻撃側がDefenseと同値だと命中率が50%を切る
#防御側のクリティカル成功の影響により、防御が上がると露骨に命中下がる!
Attack = 70
Defense =100
Double = [11,22,33,44,55,66,77,88,99,100]
HitCount =0
for i in range(1,1000000):
AttackCritical = False
DefenseCritical = False
AttackFumble = False
DefenseFumble = False
AttackSuccess = False
DefenseSuccess = False
AttackWin =False
DefenseWin =False
Attackroll = random.randint(1,100)
if Attack >= Attackroll:
AttackSuccess = True
if AttackSuccess == True and Attackroll in Double:
AttackCritical =True
if AttackSuccess == False and Attackroll in Double:
AttackFumble = True
Defenseroll = random.randint(1,100)
if Defense >= Defenseroll:
DefenseSuccess =True
if DefenseSuccess == True and Defenseroll in Double:
DefenseCritical =True
if DefenseSuccess == False and Defenseroll in Double:
DefenseFumble = True
if AttackSuccess == True and DefenseSuccess == False:
AttackWin = True
if AttackSuccess == False and DefenseSuccess == True:
DefenseWin = True
if AttackCritical ==True and DefenseCritical == False:
AttackWin = True
DefenseWin = False
if DefenseCritical == True and AttackCritical == False:
AttackWin = False
DefenseWin = True
if AttackSuccess == True and DefenseSuccess == True:
if Attackroll > Defenseroll:
AttackWin = True
DefenseWin = False
elif Defenseroll > Attackroll:
AttackWin = False
Defensewin = True
elif Attackroll == Defenseroll:
if Attack > Defense:
AttackWin = True
DefenseWin = False
elif Defense > Attack:
AttackWin = False
DefenseWin = True
if DefenseFumble ==True and AttackFumble == False:
AttackWin = True
DefenseWin = False
if AttackFumble == True and DefenseFumble == False:
AttackWin = False
DefenseWin = True
if AttackWin == True:
HitCount +=1
HitRate =100 * HitCount /1000000
print(HitRate)
終わりに
ああ……シミュレーションはいい!!
心が洗われるようだ。
つまり、風呂キャンしてもシミュレーションすれば実質入浴と同じ効果が得られるということですね。
知らんけど。
ということで、よきゲーマーライフを!!
最後までお読みいただき、ありがとうございました!
Xでは、記事更新の告知や、プレイ中の感想、ゲームを作ってみている様子等を叫び散らかしています。
ブログ記事の1.3倍くらいうるさいです(当社比)
