二千三百五十五年

"Making peace to build our future, Strong, united, working 'till we fall."

CoC7版におけるボーナス/ペナルティダイスの影響評価【2023-08-08】

1から6の整数を等確率で出力する古典的な機械式乱数生成器

*1

イントロダクション

 決定論的に駆動する古典計算機が執り行うゲームは、しかしその設計の中にしばしば乱数生成を組み込まれている。ともすれば容易に最適戦略を確定できる完全情報ゲームになりかねないコンピュータゲームにおいて、ランダム性が果たす効果は絶大なものだ。例えば賭けの要素を持ち込むことで、完全に避けることはできない、しかし不可避だと甘受することもできない不確定のリスクを作り出してドキドキ・ハラハラを演出する。あるいは今後の展開を乱数に左右させることで将来を不透明なものにし、プレイヤーに、多くの可能性を視野に入れた複雑な最適化計算を強制する。極めて高いランダム性とリプレイ性を特徴とするローグライク*2のゲームをプレイしたことがあるなら、ランダム性が、新鮮で心躍る動的なゲーム体験の提供にどれだけ大きな役割を果たしうるか容易に理解できるだろう。
 ところで乱数が大きな効果を持つのは、人間の主体的な関与と自由裁量の上に形成されるTRPGのプレイ体験においてもそうである。典型的な例として、『クトゥルフ神話TRPG』(CoC)での技能判定が挙げられる。CoCではキャラクターにあらかじめ一定の技能値が1~100の範囲で割り振られており、これが彼ないし彼女ないし"それ"の能力を象徴する。判定においては、1d100の数値が技能値を下回れば成功、上回れば失敗、となる。

100面対称のダイスを用意するのは簡単ではないので、1d100は2つの10面ダイスにそれぞれ10の位、1の位を割り当てて振られることが多い。画像のような結果になった場合、出目は46

 例えば探索者T・A・アンダーソンのコンピュータ技能が70だったとしよう。この場合、Mr.アンダーソンはコンピュータ技能が必要な何らかのタスクについて、70%の確率で成功することになる。非常にシンプルでわかりやすいシステムだ。カルト教団員のPCをハッキングして情報を集めたい?70%の賭けに勝て。いかにも怪しげな暗号化ファイルを解読したい?70%の賭けに勝て。たっぷりのCSSで装飾された見栄えのいいブログ記事を書きたい?70%。とてもシンプルだ。
 これのおかげで非建設的な細部をすっ飛ばせる──Mr.アンダーソンによるハッキングの成否をダイスを使わずに決めるなら、彼のハッカーとしてのバックグラウンドからカルト教団員の情報リテラシーまでを議論しなければならないだろう──だけでなく、ダイスがどう転がるかはキーパーにも判断できないので一定の中立性も担保されるというメリットがある。上述したような"賭け"の楽しみももちろんあるだろう。
 とはいえこの方式に欠点が無いわけでもない。乱数は融通が利かない。ダイスの女神はプレイヤーの顔色を窺ったりしない──キーパー相手はなおさらだ!だが、CoCには乱数に融通を利かせるためのシステムが用意されている。ボーナス/ペナルティダイスだ。

ボーナスダイスを1つ加えて1d100を振るときは10の位を担当するダイスを2つに増やし、そのうちの最小値を10の位の値とする。画像の場合、出目は32。ペナルティダイスの場合は逆に最大値を選ぶので、出目は72になる

 上の場合はボーナス/ペナルティダイスが1つの場合について説明しているが、2つ、3つと増やしてもいい。数が増えれば増えるほど選択肢も増えるので、より効果が大きくなるのも何となくわかるだろう。
 これによってキーパーが1d100の出力に介入できるようになる。例えば同じ「カルト教団員のPCハッキング」というタスクについても、教団施設に侵入する前にあらかじめハッキング用のデバイスを準備していた、といったプレイヤーの工夫に応じてボーナスダイスをつけるとか。留守を狙って施設に侵入したはいいものの、すぐに持ち主が帰ってくるのでハッキングに十分な時間が取れない、といった状況でペナルティダイスをつけるとか。あるいは、探索者モーフィアスも探索者トリニティも情報収集に失敗し、もはや探索者アンダーソンがハッキングに失敗すればシナリオが詰みかねない、といったときに「二人が失敗する様子を後ろで見ていたので、あなたは目的のファイルの場所にある程度の目星がつけられます。ボーナスダイスを+2してください」と救いの手を差し伸べるとか。そういった具合に、ダイスに融通を利かせることができるのだ。
 前置きが長くなったが、ここで本題に移る。
 こんなふうに便利なボーナス/ペナルティダイスだが、その追加個数と影響の間の関係は当然に非線形だし、どのような特性を持っているのかは直感的には理解しづらい。本稿では、その特性について、先行研究の内容を一部なぞりつつ定量的な評価を行う。本稿の内容がより合理的かつ意図に沿うシナリオ設計・運営の一助となれば幸いである。

長ったらしい数学的説明

 まずボーナスダイスの場合に話題を絞って議論する。
 CoCの1d100では出目が00と0の場合が100として扱われる、つまり1の位が0のときだけ0が10になるとかいうクッソ汚い処理*3が行われているため、一旦1の位が1~9である場合についてのみ考えることにする。

(i) 1の位が1~9のとき
 1の位の値の確率分布は追加のダイスによって影響されないので、ひとまず10の位の値についてのみ考えよう。
 n-1個のボーナスダイスが加えられ、10の位としてn個のダイスを振ることになったとき、その最小値がkである確率をP_n(k)と書くことにする。最小値が9になるのはn個のダイスの出目がすべて9のときのみであるから、明らかに以下が成り立つ。

P_n(9) = (\frac{1}{10})^n

 最小値が8になる場合についてはどうだろうか。最小値が8以上になるのはすべてのダイスの出目が8、9のいずれかのときで、そうなる確率は(\frac{2}{10})^nである。最小値が8であるという事象と9であるという事象は排反なので、ここから最小値が9である確率を引けば求める確率が得られる。つまり以下の通り。
P_n(8) = (\frac{2}{10})^n - (\frac{1}{10}) ^ n

 同様にして、最小値がkになる場合についても考えよう。最小値がk以上になるのはすべてのダイスの出目がk、k+1、k+2、… 、9のいずれかのときで、そうなる確率は(\frac{10-k}{10})^nである。最小値がkであるという事象とk+1以上であるという事象は排反なので、ここから最小値がk+1以上である確率、つまり(\frac{10-(k+1)}{10})^n = (\frac{9-k}{10})^nを引けば求める確率が得られる。まとめると以下の通り。
P_n(k) = (\frac{10-k}{10})^n - (\frac{9-k}{10})^n

 上式はkが9のときも成り立つ。第二項が0になるため。
 1の位については単純である。1の位の値はボーナスの如何に関わらず1個の10面ダイスによって決定されるので、それが0、1、2、… 、9のうちいずれの値をとる確率も\frac{1}{10}で一定であるため。
 話を具体的にしよう。例えば2個のボーナスダイスを加えて1d100を振ったとき、出目がちょうど74である確率がどうなるか考えよう。10の位の出目と1の位の出目は相互に独立であるので、10の位が7になる確率と1の位が4になる確率を乗じれば求める確率が得られる。2個のボーナスダイスを追加しているとき、10の位のために振るダイスの数は3個なので前者はP_3(7)、後者は\frac{1}{10}である。よって、最終的に出目が74になる確率は以下の通り。
P_3(7)\cdot\frac{1}{10} = ((\frac{3}{10})^3-(\frac{2}{10})^3)\cdot\frac{1}{10} = \frac{19}{10000}

 一般の場合についても同様で、s個のボーナスダイスを加えて1d100を行ったときに出目がtである確率は、床関数を用いて以下のように表せる。
\frac{1}{10}P_{s+1}(\lfloor\frac{t}{10}\rfloor)


(ii)1の位が0のとき
 私の手元にあるCoC7版初版87p.には「ボーナス・ダイスでは、良いほう(小さい数字の)結果をもたらす『10の位』のダイスを使うだろう」とある。ので、1の位が0のときも、ボーナスダイスの出目は「良い方の結果」をもたらすように選択されるものと解釈する。つまり何が言いたいのかというと、ダイスの表面に書かれている数字が小さいからと言って、10の位として0(出目が100になる)と1(出目が10になる)が出たときに前者を選択するようなルールではない、というふうに理解しているというわけである。
 しかしこれは話を多少複雑にする。場合(i)のときは10の位の出目は0、1、2、3、…、9の順で並べられたが、(ii)については1、2、3、4、…、9、10の順に並ぶことになるからだ。なので、(i)と同様の議論を適用すると、10の位としてn個のダイスを振ることになったときに出目として10が選択される確率はP_n(9)、9が選択される確率はP_n(8)となり、一つずつズレる。
 そのため、s個のボーナスダイスを加えて1d100を行ったときに出目がtになる一般の確率は、床関数を用いて以下のように表される。

\frac{1}{10}P_{s+1}(\lfloor\frac{t}{10}\rfloor-1)


 以上をまとめると、ボーナスダイスがs個加えられたときに出目がxになる確率分布Q_s(x)は、合同式を用いて以下のように表せる。

P_n(k) = (\frac{10-k}{10})^n - (\frac{9-k}{10})^n

Q_s(x) = 
\left\{ \begin{array}{}
\frac{1}{10}P_{s+1}(\lfloor\frac{x}{10}\rfloor-1)\quad(x≡0 \mod 10)\\
\frac{1}{10}P_{s+1}(\lfloor\frac{x}{10}\rfloor)\quad(x≢0 \mod 10)
\end{array} \right.


 汚い。
 発展して、s個のボーナスダイスがあり、目標値がrであるときにロールが成功する確率についても考えよう。これはつまり出目がr以下の値(1、2、3、... 、r)のいずれかになる確率と同義であり、出目が1になる場合、2になる場合、3になる場合……はすべて排反事象であるので、それらの和が求める確率となる。よって、総和記号を用いて以下のように表せる。

\sum_{t=1}^r Q_s(t) = Q_s(1)+Q_s(2)+Q_s(3)+…+Q_s(r)


 ペナルティダイスがs個加えられたときに出目がxになる確率分布R_s(x)については以下の通り。大小を反転させて同様の議論を繰り返すだけなので証明は略する。

R_s(x) = 
\left\{ \begin{array}{}
\frac{1}{10}P_{s+1}(10-\lfloor\frac{x}{10}\rfloor)\quad(x≡0 \mod 10)\\
\frac{1}{10}P_{s+1}(9-\lfloor\frac{x}{10}\rfloor)\quad(x≢0 \mod 10)
\end{array} \right.

計算結果の可視化

a (左上) 補正ごとの出目の確率分布
b (右上) 補正ごとの各目標値に対する成功率
c (左下) 絶対的影響(補正がない場合に比べて何%成功しやすくなるか)
d (右下) 相対的影響(補正がない場合に比べて何倍成功しやすくなるか)

 以上の議論を元に、ボーナスダイスとペナルティダイスが結果にどのような影響を与えるのか数値計算した結果が上図である。凡例上の+nはn個のボーナスダイスを加えた場合、-nはペナルティダイスの場合を、±0は補正無しの1d100についての場合を表している。
 追加したダイスの個数が多い方がより強い補正が掛かっている一方で、ダイスの個数が多いほど追加一つあたりの補正量は小さくなっている。また、補正の絶対的影響はおおむね目標値50前後で最大化され、±1だけでも20%強の補正がかかっているが、両端においては数%もない。成功確率が元から低ければボーナスの恩恵も大きくはならないし、十分に技能値が高ければペナルティの影響を抑えられるということだ。興味深いのは出目が極端に小さいときの挙動で、ペナルティダイスは1つでもイクストリーム成功の可能性を大きく下げるが、ペナルティを3重に食らってもファンブルの可能性はたかだか3.5倍程度にしかならない。ボーナスの場合は逆が成り立つ。

他の補正手法との比較

e (左) 手法ごとの各目標値に対する成功率の比較
f (右) 相対的影響の手法ごとの比較

 ついで、ボーナスダイス+1と1回の振り直し(つまりはプッシュだ)、1d100-10の出目への固定ボーナスの影響を比較しよう。
 ボーナスダイス+1と1回の振り直しはほぼ同じような挙動を示していることがわかる。ボーナスダイスは10の位のダイスを振り直しているのと同等なので当たり前と言えば当たり前だが。
 固定値でのボーナスは目標値に関わらず一定のボーナスを与えるし、影響の程度も見積もりやすいが、補正を加えた方向に極端な出目が出やすくなるという特徴がある。ボーナスダイス/振り直しでは01クリティカルの発生確率はたかだか2倍程度にしかならないが、+10の補正では11倍にまで膨れ上がっている(目標値が10以上の場合はボーナスダイスに劣る程度の小さな補正であるにもかかわらず!)

議論

 以上の結果をもとに、ボーナス/ペナルティダイスの性質をどのように利用できるだろうか。

PL視点

  • ボーナスは50前後で最大化されるので、ボーナスが受け取りやすそうな技能はそのくらいの技能値にしておくのが経済的だろう。
    • 例えばRPによるカバーが比較的入れやすい対人交渉系の技能など。
    • ペナルティの影響も相応に大きくなるので、発言に気を使う必要はある。
  • 元から技能値が低いとボーナスがあっても焼け石に水
  • 技能値を十分高くしておけば、多少のペナルティは無視できる。
    • 例えば射撃(拳銃)*4など、ペナルティダイスを受け取ることが想定される技能は高めに振っておくといいかもしれない。

KP視点

  • ボーナス/ペナルティはどちらに転がるかわからない分水嶺上のものを意図した方向に転がすのには役に立つが、番狂わせはあまり期待できない。
    • 低い技能値を強引に誤魔化すような救済措置を作りたいなら、ボーナスダイスよりいい方法があるかもしれない。
    • ボーナス1つでファンブルの可能性はぐっと下げられるので事故防止にはなる。
    • とはいえ、3つボーナスダイスを積めば20以上の出目が出る確率を60%まで押し上げられるので、数を増やしまくればどうにかなる話ではある。

*1:https://commons.wikimedia.org/wiki/File:Dice_%28504524747%29.jpgより、CC-BY-SA-2.0に基づく

*2:セーブはできずに死んだら最初からやり直し、しかしマップやアイテムが毎回ランダムに自動生成されるのでプレイ体験は新鮮、1プレイのスパンも短いのでどんどん未知に突っ込める、などといった当時としてはかなり革新的な特徴を持つ1980年のRPGRogue』に似ているゲームがローグライク(Roguelike)。最近の有名どころで言うと『Noita』、『Darkest Dungeon』など。『トルネコの大冒険』『風来のシレン』『ポケモン不思議のダンジョン』のようなゲーム、と言った方がピンと来る人もいるかもしれない。

*3:これが無ければ出目の配列が0から1、2……と始まることになるので技能値の数字がそのまま成功確率を表すようにはならず(例えばコンピュータ技能が70なら成功確率は71%になってズレる。成功条件を技能値"未満"にすれば一致させられるが、ちょっとしっくりこない)、汚くなるという問題はあるが、0から始めてくれた方がだいぶ扱いやすくはなると思う。今日日どこも配列の数字は0からじゃないですか。Matlab主義者か?

*4:連射力の高い自動拳銃はペナルティダイス≒命中精度と引き換えに連射することができ、その場合は1ラウンドに複数回攻撃できる。