Dungeon Savior解析してみた(ドロップアイテム)
※文章ばかりで長くなってしまったので、結論だけ見たい人は「解析結果」を見てください。
はじめに
著者が昔はまったDungeon Savior というGBCのゲームについて、謎だったものを解析していきます。
前回は ヤミギツネ の出現条件について調査しました。
今回は、特定のキャラのクラスチェンジに必須の、「クラスチェンジアイテム」は、どのぐらいの確率でドロップするのか?
というのを調査してみました。
クラスチェンジアイテムとは
この記事を見に来る人が知らないはずはないと思いますが、一応…
クラスチェンジアイテムは、その名の通り 特定のキャラクターをクラスチェンジさせるもので、各キャラ毎に違うアイテムが存在します。
このアイテムが必要なキャラは9体おり、それぞれ敵として出現したクラスチェンジ後のキャラを倒し、確率でドロップします。
攻略本には ドロップ率1% と書かれており、中々骨が折れそうな確率になっています。
ただ、私の知る限り(ネット情報)ドロップしたという話を聞いたことがありません。
マイナーなタイトルとはいえ、発売して24年前経ってもドロップした人がいないのでしょうか?(ドロップしても態々ネットに書き込まない人もいると思いますが)
そんな訳で、どのぐらいの確率でドロップするのか、内部処理を見ていきます。
ドロップ処理
まず肝心の、敵がアイテムドロップする確率を見ていきます。
「攻略本にクラスチェンジアイテムがドロップする確率は1%と書いてある」と先述いたしましたが、それはあくまで「その敵がドロップした場合にそのアイテムが選択される確率」になります。
攻略本を持っている方なら、「ポーション1のドロップ確率が100%って書いてるのに毎回ドロップしない!」という経験より理解しているかと思います。
敵がドロップするか判別する処理は下記の通り。
(ちょっと専門的な話になります)
要約すると、ランダムな値(0~127)が 0~9、
10/128 の確率でドロップアイテム選択処理を実行します。
パーセントに直すと約7.8% です。
この時点で、クラスチェンジアイテム(選択率1%)のドロップ確率は、
7.8% * 1% で 0.078% です!
期待値でいうと、890回ぐらい敵を倒すと50%ぐらいでドロップするみたいです。
という訳で、極端に確率が低いのでドロップした人がいない!ということですかね?
一応、その後のドロップアイテム抽選処理についても見ていきましょう。
ドロップアイテム抽選処理
ドロップアイテムは各キャラ毎に”武器”、”防具”、”装飾品”、”使用アイテム”の4種類のアイテムが設定されていて、それぞれに確率が設定されています。
キャラによっては、武器や防具等が設定されていなかったりします。
攻略本を参考にすると、そのキャラのドロップアイテムの確率を合算しても100%未満のものがあったりします。
まず、ドロップアイテムの設定値を見ていきます。
エルフ のドロップアイテムについて、攻略本の記述は、
ショートボウ(10%)、エルフのふく(10%)、Mポーション1(80%)
設定値を見ると、こんな感じ。
00 50 51 5A 5B 64 00 00 00 00 04 0A 10 02 1E 00
後半(04 0A 10 02 1E)をアイテムコードと照らし合わせると、
04 0A: Mポーション1
10 02: エルフのふく
1E 00: ショートボウ
となっており、攻略本と情報が一致します。
前半(00 50 51 5A 5B 64)を見ると、
16進数:10進数
00~50:0~80
51~5A:81~90
5B~64:91~100
となっています。
前後半合わせると、
Mポーション1:0~80
エルフのふく:81~90
ショートボウ:91~100
となり、攻略本の確率(80%, 10%, 10%)と一致するので確率と見て間違いないでしょう。
次に、ドロップアイテム抽選処理を見ていきます。
内容は下記の通りです。
※先程のエルフを例とします。
1. 乱数を取得する(00~FF)
2. 乱数の最上位ビットを0にする
3. 確率の値を取得する。(00):値A とする
4. 次の値を取得する。(50):値Bとする
5. 乱数が値Aと値Bの間(値A ≦ 乱数 < 値B)ならアイテムドロップ
6. 乱数が確率の範囲外なら、確率の値を次にずらして3から繰り返し
(値A=51,値 B=5A)
7. 値Bが64になったら、アイテムドロップ抽選処理を終わり、次のキャラのドロップ抽選
ややこしいので要約すると、生成された乱数(0~127)が、先述の確率値
Mポーション1:0~80
エルフのふく:81~90
ショートボウ:91~100
の範囲内にあれば、そのアイテムをドロップするということです。
ここで、生成される乱数(0~127)に対して、確率値は 100 までしかないことに気づきます。
つまり、7.8% ドロップ処理を抜けても、アイテム抽選時の乱数が 100 ~ 127 であれば、アイテムはドロップしません!
なので、実際のアイテムドロップ確率は、10/128 * 100/128 = 6.1% になります。
これだけで済めば良かったのですが、実は更に確率は下がります。
先程の処理、
> 5. 乱数が値Aと値Bの間(値A ≦ 乱数 < 値B)ならアイテムドロップ
について、乱数が 80 だった場合、
Mポーション1の抽選は 0 ≦ 80 < 80 になり、 0 ≦ 80 はOKですが、 80 < 80 は NG になります
エルフのふく の抽選は 81 ≦ 80 < 90 になり、81 ≦ 80 が NGになります
ショートボウの抽選は 91 ≦ 80 < 100 になり、91 ≦ 80 がNGになります
そうです。乱数が80だった場合もアイテムはドロップしません!
これにより、アイテムのドロップ率は攻略本に記載の値より 1% 低い計算になります。
Mポーション1:0~80
エルフのふく:80~90
ショートボウ:90~100
だったら、問題なかったんですがね…
これはざっと見た限り、全キャラが同じように、次の値A = 値B+1 になっています。
なんか嫌な予感がしてきました。
クラスチェンジアイテムをドロップする、オベロン の値を見てみましょう。
攻略本に記載の値は、
おうのまゆ(1%)
設定値は、
00 63 64 64 00 00 00 00 00 00 00 00 27 0A
です。
わかりやすく書き直すと、こうなります。
おうのまゆ(27 0A):100~100(64~64)
ドロップ抽選は通せたとして、ドロップアイテム抽選を受けるとします。
乱数が 99, 100, 101 だった場合について 書くと、
乱数99の場合
おうのまゆ の抽選は 100 ≦ 99 < 100 になり、 100 ≦ 99 はNG になります。乱数100の場合
おうのまゆ の抽選は 100 ≦ 100 < 100 になり、 100 ≦ 100 はOKですが、 100 < 100 はNG になります。乱数101の場合
おうのまゆ の抽選は 100 ≦ 100 < 100 になり、 100 ≦ 101 はOKですが、 101 < 100 はNG になります。
こうなって、どの乱数を選択してもNGになります。
つまり、ドロップ確率 1% のアイテム(クラスチェンジアイテム含む)は、
ドロップしません!!!
これもバグでしょうね…
こういうのは境界値バグといって、初心者プログラマがチェック漏れで良く指摘されるやつですね。
解析結果
「クラスチェンジアイテムはバグによってドロップしない」です。
長時間粘った子供時代の時間を返してくれ。。。
補足(ボスドロップ)
同じように低確率のドロップアイテムである、ボスドロップアイテムですが、こちらはちゃんとドロップします。
乱数が 60~64、つまり乱数が 60, 61, 62, 63 の4通りなので、
ドロップする確率は 10/128 * 4/128 = 0.24% になります。
290回程度戦えば、期待値が50%を超えます。
難易度は関係なくドロップするので、クラスチェンジアイテムよりは多少マシですね。
補足2(盗む)
盗むの場合は、アイテム選択確率とアイテムがずれます。
例:エルフの場合
ドロップアイテム
Mポーション1:0~80(80%)
エルフのふく:81~90(10%)
ショートボウ:91~100(10%)
盗むアイテム
Mポーション1:81~90(10%)
エルフのふく:91~100(10%)
ドロップアイテムの設定値は、基本的にドロップ確率が高い順になっています。
なので、そのキャラが持っている一番レアなアイテム以外を盗むことが出来る。と思います。(詳しく処理を見ていないので、憶測も入っています)
アイテム抽選処理自体はドロップ時と同じなので、1% のアイテムはどうあがいても取得できません…
蛇足
ドロップしません。
で終わると寝覚めが悪いので、チートでドロップさせました。
マイナーゲームでスクリーンショットも全然ないので、エビデンスとして。
※ボス戦ではボスを倒すと戦闘終了しますが、ドロップ抽選は全キャラ分実行います。
クラスチェンジアイテムは使ったらなくなったので、複数体欲しい場合はその数分用意する必要があるみたいです。