ポストエフェクトとルートプール:ひとつのチェストを成す二つの側面
ルートプールの重みがドロップ内容を決め、/posteffect コマンドがその見え方を決めます。どちらもデータパックを書く前に確認できる数値です。
重み付きルートプールと /posteffect コマンドは、たいてい別々のファイルに別々の人間が書き、そして同じように失敗します。データパックを出す前に数値を確認しないのです。どちらも先に検証するのは簡単です。
ルートプールは雰囲気ではなく算数
プールのエントリには weight があり、各エントリの確率はその重みをプール内の全重みの合計で割ったものです。隠れた正規化も下限もありません。重みが 0 ならそのエントリは決して抽選されず、重みの合計がいくつであってもプールの挙動は同じです。罠なのは抽選回数の混同です。rolls: 2 を持つプールは 2 回サンプリングするので、重みが 4 分の 1 のエントリは全チェストのおよそ 4 分の 1 ではなく、およそ半分に現れます。
| エントリ | 重み | 1 回の抽選での割合 |
|---|---|---|
| 鉄インゴット | 20 | 20 ÷ 40 = 50% |
| 金インゴット | 12 | 30% |
| ダイヤモンド | 8 | 20% |
重み 40 の 4 番目のエントリを追加すると、上の数値はすべて半分になります。これがバランス調整のすべてであり、「ダイヤモンドの排出率がおかしい」と感じるのはほぼ常に、スケールし忘れた重みのせいです。
ルートテーブルはゲーム内でも特に大きなレジストリ群のひとつで、このサイトが計測している 26.2 のデータでは 1355 個が登録されています。つまり、数値的に理解できないプールは、手作業で調整し終えることのないプールです。
/posteffect はスナップショット時代のコマンド
Java の /posteffect はスナップショット時代のコマンドで、現在のリリースビルドには存在せず、Bedrock に相当するものも一切ありません。Bedrock では画面の色調はリソースパックとカメラシェイクのシステムで処理されるため、ここにある Java 向けチュートリアルはそのままでは移植できません。
このコマンドはエフェクト識別子と強度を受け取り、強度はパーセントではなく浮動小数点数です。エフェクトは小さなレジストリで、26.2 のデータでは 40 個しかないため、識別子の一覧は推測せず手で確認できる程度の短さです。存在しないエフェクトを指定すると、一部のスナップショットビルドでは無言で失敗します。これがコミット前に確認すべき第二の理由です。
二つが出会う場所
レアアイテムを落とすチェストとよくあるアイテムを落とすチェストは、同じ見た目であるべきではありません。まずプールを抽選して実際の分布を求め、次にプレイヤーがそれを実際に目にする頻度に合ったポストエフェクトの強度を選びます。逆の順でやると、常時発動する派手なエフェクトになり、ノイズとして受け取られます。
街の建築なら、通常はよくあるプールに低強度のエフェクトを、最も重みの小さいエントリに強度の高いものを割り当てます。すでに計算したのと同じ比率です。
/posteffect コマンドを組み立て、重み付きプールを Post Effect & Loot Tools で抽選しましょう。