2015年1月30日金曜日

D&D5版 Advantage の効用

D&D5 版から導入されたルールの中で特に目立つのは Advantage/Disadvantage です。ルール上では暗黙的にですが Advantage/Disadvantage は固定値に変換する時は +5/-5 として扱われています。具体的には Passive Perception の値を決める時に、Perception に Advantage/Disadvantage があるならば Passive Perception の値を +5/-5 するという記載が PHB にあります。

実際の所 Advantage/Disadvantage は +5/-5 のボーナスに一意に変換できるわけではありません。Advantage/Disadvantage が無い場合の成功率に応じて効用は増減します。成功率が 50%の時に Advantage/Disadvantage の効用は最大になり、この時が +5/-5 に相当します。成功率が 50%から前後に離れれば離れる程効用は低くなり、成功率 5%或いは 95%の時に効用は最小の 5%程になります。

これらを平均すると約 15%、ボーナスで言うと +3/-3 となります。

以下が成功率に対する Advantage の効用の変化を示した表です。

表: 通常成功率に対する Advantage の効用
成功に必要な
ダイス目
通常の
成功率
Advantage 有
の成功率
成功率
増分
20.9500.9970.047
30.9000.9900.090
40.8500.9770.127
50.8000.9600.160
60.7500.9380.188
70.7000.9100.210
80.6500.8780.228
90.6000.8400.240
100.5500.7980.248
110.5000.7500.250
120.4500.6980.248
130.4000.6390.239
140.3500.5770.227
150.3000.5100.210
160.2500.4380.188
170.2000.3600.160
180.1500.2780.128
190.1000.1910.091
200.0500.0980.048

以下の様な python のスクリプトで確認しました。

#!/usr/bin/env python
# advantage.py
# -*- coding: utf-8 -*-

import sys
import random

# initialize
hit = 0
loop = 500000
target = sys.argv[1]

random.seed()

for i in range(loop):
    ret1 = random.randint(1,20)
    ret2 = random.randint(1,20)

    if ret1 > ret2:
        ret = ret1
    else:
        ret = ret2
    if ret >= int(target):
        hit += 1

normal = (21 - int(target)) * 0.05
advantaged = float(hit) / loop
print "%s, %.3f, %.3f, %.3f" % (target, normal, advantaged, advantaged - normal)

このスクリプトをこんな感じで動かします。

$ for i in $(seq 1 20)
do
  ./advantage.py $i
done

0 件のコメント:

コメントを投稿