乱数理論

 ハマリについて 乱数理論 戦闘パターンとアイテム入手確率 帝大目次に戻る 大学院目次に戻る


この記事は、NTR様が調査発表した内容に対して、追記・編集したものです。
本記事は調査結果の範囲から推測したものですので、これに反することが起こることは十分にあり得ることを、最初にお断りしておきます。
なお調査には、通常のSFC本体とRS2カセットのみを使っています。(ROM解析ネタではありません)
(2代目書記官注記:参考情報の中に解析系の内容もありますが、データとしての使用かと思います)
 
乱数表
戦闘とアイテム入手判定には同一の乱数表が使われています。
乱数表の長さは255で、254番地の次が0番地のループになっていて、各番地には0〜254の整数値が格納されています。

下の表がその乱数表です。
(乱数表の0番地がどこかは知りようがないので、この表の0番地は勝手に決めた便宜的なものです)

番地
000〜009 : 000 229 059 208 152 012 182 037 102 028
010〜019 : 020 210 034 017 034 066 223 104 046 137
020〜029 : 124 236 168 176 088 177 200 184 104 086
030〜039 : 017 228 113 111 236 124 108 052 072 133
040〜049 : 239 070 085 181 155 182 228 141 090 156
050〜059 : 008 229 009 223 215 223 068 148 033 122
060〜069 : 240 248 205 074 204 127 074 008 011 249
070〜079 : 192 122 078 060 102 244 144 226 058 096
080〜089 : 056 006 105 150 115 003 067 001 030 052
090〜099 : 226 188 193 174 135 188 246 106 182 043
100〜109 : 188 231 165 254 135 183 134 134 157 118
110〜119 : 177 100 130 165 204 049 010 110 101 205
120〜129 : 083 056 163 147 188 039 131 227 031 094
130〜139 : 193 089 215 037 103 137 238 205 032 030
140〜149 : 106 238 071 191 143 088 086 135 041 086
150〜159 : 101 090 123 244 071 014 170 071 159 057
160〜169 : 155 090 227 177 132 141 238 114 128 084
170〜179 : 052 051 024 121 169 210 228 035 025 034
180〜189 : 097 009 215 093 202 003 040 220 043 094
190〜199 : 179 201 232 039 102 102 248 080 158 048
200〜209 : 013 100 242 235 220 046 132 231 103 007
210〜219 : 035 122 191 174 048 147 206 096 142 226
220〜229 : 152 145 012 097 236 252 137 209 020 115
230〜239 : 216 245 222 144 145 147 043 077 080 010
240〜244 : 068 142 040 010 045 166 182 185 191 241
250〜254 : 030 209 051 246 096

ここで、0、70、168番地の3個の乱数が64で割り切れ、それに加えて79、138、217、254番地の4個の乱数が32で割り切れます。
これらの乱数がアイテム入手判定に関係しています。

戦闘やアイテム入手判定等、ランダム性が必要となる場面では、この乱数表の乱数が番地の順に連続的に取得・使用されていきます。
これから取得される乱数の番地を指し示している変数を以降ポインタと呼ぶことにします。
 
戦闘における乱数使用
戦闘の各ターンでは次の順で乱数が使われていると考えられます。

・ターン開始時
ターン開始時、ラピッドストリーム、ムーフェンス、龍陣、稲妻以外の陣形では、パーティーの各キャラごとに、行動順を決めるための乱数が1個ずつ取得されます。
また、龍陣では皇帝のみ、稲妻では皇帝と(入力順が)2番目のキャラについて行動順を決めるための乱数が1個ずつ取得されます。
(稲妻における皇帝の乱数取得は無効になりますが)

なお、ラピッドストリーム及びムーフェンスの場合は、乱数は取得されません。
また、瞬速の矢、エイミング等を使った場合、及び、これらのコマンドにカーソルを合わせて防御した場合は、この乱数は取得されません。
(防御する場合のカーソル位置は戦闘内容に影響するということになります)

「コマンド選択」、「対象決定」という2回Aボタンを押すタイプのコマンドで、「コマンド選択」の後Bキャンセルすると、取得した乱数が捨てられ、次に入力するコマンドでは、その次にある新しい乱数が(必要ならば)取得されます。
(生命の水等の回復術、ウィンドカッター、太陽光線、剣素振りについて確認済)

つまり、瞬速の矢等以外のコマンドにカーソルを合わせてA、Bと押すと、ポインタがひとつ先に進みます。
(これがBキャンセルで戦闘内容が変化する理由です)

・敵モンスターの行動決定
次に敵モンスターの行動決定のために、おそらく敵モンスターの番号順に(アイテム入手判定の箇所で後述)、乱数がいくつかずつ取得されます。
取得される乱数の個数は、当のモンスターの使用する技等の要素によって変化します。

なおここでは、すでに倒されてしまっているモンスターについても、それぞれ 1個ずつの乱数が取得されているようです。
(このため、例えばデュラハンの場合、お供を倒してデュラハン1体にしてからループを調べると、最初にいたお供の数に応じて異なるループに到達するということが起きます)

例えば、ラピッドストリームorムーフェンス+全員ソードバリアで巨人と戦った場合、1ターンにつき8個の乱数が取得され、前の4個が最初の攻撃、後ろの4個が2回目の攻撃内容を決定しています。
攻撃対象がひとりのキャラである場合、この4個うちの最後の乱数が攻撃対象を決定します。
この攻撃対象は、ラピッドストリーム、ムーフェンスの行動順に、キャラを1、2、3、4、5とすると、以下の式で計算されます。

攻撃対象 = (乱数 mod 100) / 20 + 1 (端数切捨て)
(X mod Y は X を Y で割った余り)
(上記の式はこの例のように陣形による補正が無く、攻撃対象選定が(リザードロード等の様に)特殊な敵では無い場合のものです)

また、皇帝一人でソードバリア+ヒドラスーツorラビットアーマー装備で守護者と戦った場合は、3個の乱数が取得され、その2番目の乱数が8で割って7が余る数のときに毒霧攻撃、それ以外は通常攻撃です。

これ以降は、敵、味方問わず、キャラの行動順に、行動結果を決めるために乱数が使用されていきます。
敵が全滅して戦闘終了した場合、まだ行動していないキャラの乱数使用はスキップされます。
(即ち、敵を含む各キャラの行動時に、必要数の乱数が取得されます)
味方と敵にわけて判明していることを書いていきます。

・味方の行動結果
味方の行動結果を決めるのに使われる乱数の個数の一例を、次に示します。

 防御 : 0

 集気法、ソードバリア : 1
 生命の水、月光、アースヒール : 2

 分子分解、瞬速の矢 : 1
 音速剣、光速剣、無明剣、エイミング、咬竜剣 : 2
 二段斬り : 3
 短冊斬り : 4
 線斬り : 5

見てわかる通り、剣の多段攻撃は「攻撃の段数+1」個の乱数が使われています。

なお、上の数値には多くの例外があります。

音速剣の場合、例外が起こる場合のうちの一つとして、「光速剣ひらめき能力のあるキャラが、光速剣をひらめいていない状態で音速剣を使う場合に、乱数使用個数が2から3に変化する」というものがあることがわかっています。
(光速剣ひらめき判定のために乱数が1個取得されるためと思われます)

武器による攻撃では、ここで取得された乱数のうち、攻撃の段数個ぶんの後ろの乱数(音速剣では2個のうちの後ろの1個、線切りでは5個のうちの後ろの4個)がダメージの誤差の計算に使われます。

盾回避のない場合のダメージは次のように計算されます。
(この式は、ほとんどの場合に成り立ちますが、この式が成り立たない若干の例外があるようです)

防御していないときのダメージ = 誤差のないダメージ + 誤差
防御時のダメージ = 防御していないときのダメージ / 2
(端数切捨て)

「誤差のないダメージ」は技、武器の種類、レベル、腕力(または器用さ)、攻撃された側の防御力等によって決まっている値です。

誤差は攻撃の段数ぶん連続した乱数を使って計算された値の合計という形になっています。
例えば、4段攻撃の線斬りの場合、以下の通りとなります。

 誤差 = 誤差1 + 誤差2 + 誤差3 + 誤差4

ここで、誤差1〜誤差4はそれぞれ、以下の式で表すことが出来ます。

 乱数 mod (レベル × 3)
 (ただし、レベル=0の時は0)

例えば、剣レベル30のキャラが線斬りを使った場合、その結果を決めるための5個の乱数が0〜4番地のものだとすると、誤差計算には1〜4番地の4個の乱数(値は229、59、208、152)が使用され、誤差は以下の通りとなります。

 誤差 = 229 mod 90 + 59 mod 90 + 208 mod 90 + 152 mod 90
    = 49 + 59 + 28 + 62
    = 198

同様に、集気法の回復量は、取得された1個の乱数を使って、以下の通りとなります。

 誤差のない回復量 + 3 × (乱数 mod 魔力)

ここで、誤差のない回復量はHP、体術レベル、魔力に依存する値です。


まとめると、味方の行動において、乱数を使用するものとして分かっている(もしくは推定される)ものは、以下の通りです。
 ひらめきの判定(ひらめく可能性のある技の個数分)
 防御術の発動の判定
 命中の判定
 盾・ガーダー回避の判定
 ダメージ(または回復量)の誤差計算(段数分)
 追加効果の発動有無
 術使用時の場の属性変化
(なお、ひらめきについては、技欄に空欄が無い場合は判定自体がありません)
(効果対象が複数の場合、場の属性を除き、各対象に対して判定が入るものと思われます)


・敵の行動結果
巨人の場合(ラピッドストリームまたはムーフェンス、ソードバリア全員使用)、ここでの乱数使用個数は2回の攻撃それぞれについて次のようになっています。

 ダンシングソード : 0
 通常攻撃 : 1
 みね打ち、強撃、流し斬り、水鳥剣(見切りが技欄にある場合) : 0
 みね打ち、強撃、流し斬り(見切りが技道場に登録されていて、技欄にはない場合) : 1
 水鳥剣(見切りが技道場に登録されていて、技欄にはない場合) : 5
 流し斬り(見切っていない場合) : 2

 水鳥剣(見切り状態は全員同じ状態に揃えてあります)の乱数使用個数がみね打ちなどの5倍なのは、5人全体が攻撃されるためでしょう。

これからわかるとおり、一般に、技の見切り状態は乱数の使用個数、そして、その後の戦闘内容に影響します。
(アイテム入手パターンを確立する際には、このことに注意が必要です)

守護者の場合(皇帝のみ、ソードバリア使用、ヒドラスーツまたはラビットアーマー装備)、乱数使用個数は次のようになっています。

 毒霧 : 0
 通常攻撃 : 1

毒霧の乱数使用個数が0なのは、ダメージにランダム性がないためでしょう。
同じことは、パイロヒドラの火炎攻撃にも言えます。

その他まとめると、敵の行動において、乱数を使用するものとして分かっている(もしくは推定される)ものは、以下の通りです。
 見切りひらめきの判定
 カウンター技・防御技ひらめきの判定(ひらめく可能性のある技の個数分)
 カウンター技・防御技発動の判定
 防御術の発動の判定
 命中の判定
 盾・ガーダー回避の判定
 ダメージ(または回復量)の誤差計算(段数分)
 追加効果の発動有無
 術使用時の場の属性変化
(効果対象が複数の場合、場の属性を除き、各対象に対して判定が入るものと思われます)
(なお、こちらに示しているように、判定が行われる前に無効となれば、乱数は消費されません)
 
戦闘終了後の乱数使用

戦闘終了後は乱数表の乱数が引き続いて取得され、HP上昇値の計算の後にアイテム入手判定が行なわれます。

・HP上昇値の計算
HPがアップしたキャラの人数分だけ乱数が取得され、HP上昇値が計算されます。
これに引き続いてアイテム入手判定が行なわれるため、HPがアップするか否かは、アイテム入手に影響します。

・アイテム入手判定
敵は親玉+お供何体かという編隊で出現します。
編隊を構成しているモンスターには、親玉が1、お供には順に2、3、4... と番号が振られています。
以下、番号 n が振られているモンスターを「モンスターn」と書きます。

この番号は、通常、画面の上から下の順に振られています。
(敵の陣形については、外道王さんのサイト「外道王の部屋」に調査結果があります)

例えば、ドクターが親玉の場合は、ドクターがモンスター1、左上がモンスター2、左下がモンスター3です。
ギャロン(生者)の場合は、ギャロンがモンスター1、(存在すれば)左下、右上、右下の順に、モンスター2、3、4です。
単体出現の敵では当然そいつがモンスター1です。

入手確率の高いアイテムを通常アイテム、低いアイテムをレアアイテムとすると、アイテム入手判定は次のように行なわれます。

モンスター1、2、3...の通常アイテム、モンスター1、2、3...のレアアイテムの順に連続して乱数1個ずつを取得して判定を行なう。
(当のモンスターが該当するアイテムを持っていなくても判定します。結果、最大で「モンスターの数×2」回の判定が行なわれます)
取得した乱数がアイテム入手条件を満たしていて、かつ、当のモンスターが該当するアイテムを持っている場合、入手アイテムが決定され、以降の判定は行なわれない。

通常アイテムの入手条件は「取得した乱数が32で割り切れる」こと、レアアイテムの入手条件は「取得した乱数が64で割り切れる」ことである。

例として、デュラハン(レアアイテム:スペクターソード、通常アイテム:白手袋)+お供1体でアイテム入手判定開始時のポインタが253番地を指している場合を考えます。

253番地の乱数246を取得してデュラハン(モンスター1)の通常アイテム判定、254番地の乱数96を取得してお供(モンスター2)の通常アイテム判定、0番地の乱数0を取得してデュラハンのレアアイテム判定、1番地の乱数229を取得してお供のレアアイテム判定という順で判定が行なわれることになります。 (実際には途中で入手アイテムが決定するので後のほうの判定は行なわれません)
ここで、お供がナイトシェード(通常アイテム:霊酒)の場合、2番目の判定で、254番地の乱数96が32で割り切れ、霊酒が入手アイテムとして決定します。
お供がソニック(通常アイテム:なし)の場合、2番目の判定で、254番地の乱数96は32で割り切れますが、ソニックが該当するアイテムを持っていないため、3番目の判定に進みます。
3番目の判定で、0番地の乱数0が64で割り切れ、デュラハンのレアアイテム、スペクターソードが入手アイテムとして決定します。
(お供が通常アイテムを持っていると、スペクターソードの入手確率が下がることになります)

このアイテム入手判定法と乱数表から、例えば、巨人(レアアイテム:トリプルソード、通常アイテム:超銅金の盾)やダンターグ4(レアアイテム:デストロイヤー、通常アイテム:超銅金の盾)がレアアイテムを落とす確率は 2/255。
守護者(レアアイテム:オートクレール、通常アイテム:なし)がオートクレールを落とす確率は 3/255であることがわかります。


一般的に言うとこうなります。
ある特定の敵が通常アイテムを落とす確率は7/255で、レアアイテムを落とす確率は3/255である。
ただし、一つ前のモンスターが通常アイテムを保持している場合、次のモンスターが通常アイテムを落とす確率は6/255となる。
最後の番号を振られているモンスターが通常アイテムを保持している場合は、親玉がレアアイテムを落とす確率は2/255となる。
(敵が1体の場合は、最後の番号=1となるため、通常アイテムを持っている敵はレアアイテムを落とし難くなります)
 
参考情報
最後になりましたが、今回の調査をするにあたって以下のものを参考にさせていただきました。
この場を借りてお礼いたします。
・ロマサガ2学会内の記事
 サイネ氏、龍風氏をはじめとする方々のアイテム回収パターンに関する各記事
 ただびと氏(解析系)、ヌッキー氏の記事
・HP
 アバロン宮殿、Technical Note(閉鎖)、楽人氏のHP(解析系)(閉鎖)、外道王の部屋
 RPG実機解析をしているスルメ氏のHP(春風邪のスルメ
 
実際の適用について(2代目書記官追記)
乱数を制御するということは、アイテム入手に限らず、全てのランダム要素を制御できてしまうことを意味します。
ゲームの楽しみ方は人それぞれですが、結果を重視するのか、過程を重視するのか、それとも調査用なのか。
御自身の目的を考えた上で、有効活用していきましょう。

 ハマリについて 乱数理論 戦闘パターンとアイテム入手確率 帝大目次に戻る 大学院目次に戻る

/情報提供/
NTR様

/編集責任者/
激弱軍師白王