HOW IT WORKS
抽選ボタンを押してから 5 枚のカードが決まるまでに、内部で何が起きているかを順に説明します。設定のどの項目がどこで効くのかも合わせて書いてあります。
全体の流れ
- 誰がどのロールを持つかを決める
- ロールごとに、出しうるエージェントの一覧を作る
- エージェント 1 体ずつのウェイトを、抽選率と履歴から計算する
- ロールの偏りぶんだけ、そのウェイトを下げる
- 重みつきで引く。引けない並びだったら、割り当てからやり直す
1 と 2 は候補を絞る段で、3 と 4 が確率をいじる段です。「ただのランダムではない」と言っているのは主に 3 と 4 を指しています。
誰がどのロールを持つかを決める
ロール構成で決めた 5 つの枠を、5 人へ配ります。配り方はランダムですが、等確率ではありません。ありうる配り方をすべて数え上げ、それぞれに重みを付けたうえで 1 つ選んでいます。
重みは、そのプレイヤーがそのロールをどれだけ引きにくくなっているかの積です。内訳は STEP 4 の 2 種類の補正と同じものを使います。ロール NG を付けた人は、そのロールを含む配り方が候補から丸ごと外れます。
反対にロール UP を付けた人は、そのロールが割り当てに入る重みが 2 倍になります。候補から外すわけではないので、必ず当たるわけではありません。
配り方の総数が 5,000 通りを超えると数え上げをあきらめ、重みなしのシャッフルに落とします。5 人固定なら重複ロールを考えても最大 120 通りなので、今の仕様では起きません。人数を可変にしたときの保険です。
抽選後に開ける「なぜこの結果になったのか」のロール確率の表は、ここで計算した確率をそのまま出しています。
出しうるエージェントの一覧を作る
ロールごとに、そのロールのエージェントのうち「有効」で、かつ抽選率が 0 より大きいものを集めます。抽選率を 0 にするのと無効にするのは、どちらもここで候補から外れるという意味では同じです。
フレックス対象に指定したエージェントは、通常ロールの一覧から抜けます。そのぶんフレックス枠の一覧には全ロールのエージェントが入るので、フレックス枠は「通常枠で選ばれなかった体も含めて、何が来るか分からない枠」になります。
プレイヤーごとの NG は、その人の枠にだけ効きます。同じエージェントが他の人には当たります。また、同じ試合で同じエージェントが 2 人に当たることはありません。UP も同じく、その人の枠にだけ効きます。
エージェントのウェイトを計算する
出発点は、設定に入っている基準抽選率そのものです。ここから、履歴を見て「出過ぎている体」だけを下げます。まず、そのエージェントが何回出ているはずかを求めます。
期待回数 = そのロールの過去抽選総数 × 基準ウェイト ÷ 候補全体のウェイト合計
実際に出た回数がこの期待回数を超えていたら、超えている比を 1.5 乗してからウェイトを割ります。乗じない場合より、出過ぎているぶんの下がり方が急になります。
補正後のウェイト = 基準ウェイト ÷ (実際の回数 ÷ 期待回数) ^ 1.5
下がるのは超えているときだけで、期待回数以下なら基準のまま据え置きです。出ていない体を持ち上げると、今度はそちらが不自然に続くためです。どれだけ出過ぎていても、下限は基準の 15% で止まります。「二度と出ない」状態を作らないためです。
この計算はロールごとに独立しています。ソーヴァがイニシエーター枠で出過ぎていても、フレックス枠でのソーヴァの出やすさは別に数えます。
ここまでの計算のあと、そのプレイヤーが UP に指定したエージェントだけ、ウェイトをさらに 2 倍します。UP したエージェントが実際に出過ぎるようになれば、上の出過ぎ補正がそのぶん効いて下がっていくので、基準抽選率そのものを書き換えるわけではありません。
ロールの偏りを補正する
同じ人が同じロールばかり持つのを避けるための補正です。性質の違う 2 つを重ねています。
連続を避ける
いま何連続で同じロールを引いているかだけを見て、連続するたびに重みを掛け算で下げます。
重み = 減衰率 ^ 連続回数
違うロールを 1 回でも挟めば連続は途切れ、重みは元に戻ります。連続がいくら伸びても、下限の 2% は残します。
積み重なった偏りを均す
連続だけを見ていると、デュエリスト → 別 → デュエリスト → 別 のように1 回挟まるたびに補正が消えてしまいます。そこで連続かどうかに関係なく、直近 20 回ぶんの実績が期待より多いプレイヤーの重みを下げます。
係数 = ((期待回数 + 2) ÷ (実際の回数 + 2)) ^ 効き具合
両方に 2 を足しているのは、回数が少ないうちに極端な値を出さないためです。1 回参加して 1 回デュエリストだった人がいきなり大きく下がることはなく、回数が貯まるほど素の比に近づきます。
この補正は、そのプレイヤーが 5 回参加するまでは効きません。数回では偏りと呼べる形が出ないためで、その間の連続は上の連続回避が見ています。下限は基準の 20% です。
ロール NG を付けている人は、引ける枠だけで期待回数を按分します。分母を全枠のままにすると、禁止したせいで残りのロールまで引きにくくなるためです。
強さ設定と実際の数値
設定の「同じロールに偏らないようにする」で、2 つの補正の効き具合が同時に変わります。
| 設定 | 連続の減衰率 | 偏り補正の効き具合 |
|---|---|---|
| OFF | 補正なし | 補正なし |
| 弱 | × 0.65 | 0.5 |
| 中 | × 0.5 | 1 |
| 強 | × 0.35 | 1.5 |
減衰率は小さいほど、1 連続あたりの下がり方が急になります。効き具合は指数なので、大きいほど偏りに強く反応します。OFF にすると両方とも掛からず、ロールの割り当ては完全にランダムになります。
引く。詰んだらやり直す
ここまでで出したウェイトに比例する確率で、枠ごとに 1 体ずつ引きます。引いた体はその試合の候補から外れるので、後の枠ほど選択肢が狭まります。
NG が多いと、途中で候補が尽きて引けなくなることがあります。そのときは STEP 1 のロール割り当てからやり直します。「この人はデュエリストなら引けるがセンチネルだと詰む」という状況があるためで、割り当てを引き直すだけで通ることが多いです。ここは最大 300 回試します。
それでも見つからないときは、運任せをやめて総当たりに切り替えます。成立する並びをすべて集めたうえで、その中からランダムに 1 つ選びます。最初に見つかったものを採ると、その設定では毎回まったく同じ結果になってしまうためです。ここまでやって並びが 1 つも無ければ、はじめて失敗として理由を表示します。
乱数について
乱数はブラウザ標準のものを使っています。暗号用途の強度はありませんが、遊びの抽選には十分です。並べ替えが必要な場面では、偏りの出ない方式を使っています。
抽選ボタンを押したあとの演出は、結果とは無関係にブラウザ側で回しているだけです。結果は押した時点で決まっていて、演出は最後にそこへ着地します。演出中に見えている仮の絵柄は記録されません。
自分の抽選で数字を確かめる
抽選したあとに出る「なぜこの結果になったのか」を開くと、その回に使われた実際の数字が見られます。誰がどのロールになる確率だったか、枠ごとに各エージェントが何 % だったか、期待回数をどれだけ超えていたかまで並びます。このページの説明と突き合わせると、どの補正がどこで効いたのかが追えます。
累計の出現回数と期待回数のずれは統計にまとまっています。マップごとに抽選率をどう変えているかはマップ別ガイドに、値そのものは設定にあります。