この記事はRoguelike Advent Calendar 2024 の3日目の記事です
前日はagrathさんの「JNetHack近況報告」でした
こんにちは、Hourierです
あっという間に年の瀬ですね
今年からは、スポイラー系の変愚蛮怒固有な話はブログ、プログラミングなど技術系の話はQiitaにでも投稿しようと思います
そっちの方がエンタメとしてではなく実利需要もありそうだと判断しました
詳細は公開の時が来たらこっちにもリンクを貼ります
といっても、愚痴に近いような「今年の変愚蛮怒リファクタリングはここがクソだったぜ!!」みたいなのはこっちに投稿します
さて本題に参りましょう
「フロアに自然生成される or 財宝ドロップ持ちのモンスターを倒した時のドロップ」についてです
クリーピングコインがシンボルに応じた財宝を落とすのは、このブログをご覧の方なら周知の事実かと思いますが、その辺りのルーチンは技術的すぎるためこの記事では省略します
また本記事の情報はv3.0.1.21-Beta 時点でのものです
v3.0.1.22-Beta では早速とばかりにルーチンが色々変わっているのでご注意下さい
(その内説明しようと思います)
まず、財宝には「財宝グレード」と呼ぶべき情報が含まれています (※1)
現在、グレード番号は以下の通りです (※2)
今のところ「グレードが高い=金額も高い」が成立しています (※3)
銅貨:0、1、2
銀貨:3、4、5
ガーネット:6、7
金貨:8、9、10
オパール:11
サファイア:12
ルビー:13
ダイヤモンド:14
エメラルド:15
ミスリル:16
アダマンタイト:17
で、このグレード情報をどうするかというと、以下のように計算します
小数点未満切り捨て、かつ18以上ならば17 (最大値)に固定です
通常グレード = (1d(基準階層 + 2) + 2) / 2 -1
強化グレード = グレード + 1d(基準階層 + 1)
基準階層の計算は以下の通りです
- 床落ち:そのフロアレベル (10Fなら10)
- モンスターのドロップ:(モンスターのレベル + フロアレベル) / 2
計算結果は、例えば以下のようになります
ここでは1dXの平均値と最大値を取ってみます (最低は常に0:銅貨なので考える必要なし)
1Fでの平均通常グレード = (1d3 + 2) / 2 - 1 = (2 + 2) / 2 - 1 = 1
1Fでの最大通常グレード = (3 + 2) / 2 - 1 = 1.5 → 1
1Fでの平均強化グレード = 1 + 1d2 = 2.5 → 2
1Fでの最大強化グレード = 1 + 2 = 3
10Fでの平均通常グレード = (1d12 + 2) / 2 - 1 = (6.5 + 2) / 2 - 1 = 3.25 → 3
10Fでの最大通常グレード = (12 + 2) / 2 - 1 = 6
10Fでの平均強化グレード = 3 + 1d11 = 3 + 6 = 9
10Fでの最大強化グレード = 6 + 11 = 17
以上より、「1Fでも低確率で銀貨は落ちている」「10Fなら銀貨が普通になってきて、通常グレードでも運次第でガーネットまでは見かけることができ、理論上アダマンタイトすらあり得る」となります
但し確率は1/120 (しかも財宝アイテムの1/120、武器とか巻物とか床落ちアイテムは他にもあるので更に低確率)です
ちなみに逆算もできます
ここでは通常グレードで試算してみます、強化グレードについては各自電卓を叩いてみて下さい
アダマンタイトが手に入る最低階層は:
17 = (1dX + 2) / 2 - 1となるXを求めれば良いです
18 = (1dX + 2) / 2
36 = 1dX + 2
34 = 1dX
よってX = 34の時、アダマンタイトが手に入る可能性があります
更に、67~68F以降のフロアならば、床落ち財宝は半分以上がアダマンタイトであると言えます
なお、この計算は財宝アイテムが増えれば増えるほど変な計算になります
仮にグレード番号が30まであったとすると、上記の計算より「60Fまで行ってやっと財宝の1/60、平均的にグレード30の財宝を拾いたければ120Fまで行け」となってしまいます
(これではバランスが悪いので、v3.0.1.22-Beta ではもっと柔軟な計算式になりました)
そんなところで今回の記事をおしまいにします
また次回お会いしましょう!
明日の記事はdis- さんの「クエスト:宝物庫を色統一してみた」です
お楽しみに!
※1 ソースコード上では「オフセット」と呼んでいました
※2 同じ番号が複数あるのは、例えば銅貨なら金額レンジの微妙に違う銅貨が3つあるということを意味しています。BaseitemDefinitions.jsonc のID480~482をご覧下さい
※3 やろうと思えば「最高グレード銅貨の金額>最低グレード銀貨の金額」を満たすアイテムを追加できます。v3.0正式リリース後にはそういうのもやってみたいです








