投稿時間:16/05/29(Sun) 23:10 投稿者名:かわず掛け
Eメール: URL :
タイトル:$敵の行動ルーチン&タイプ
敵の行動パターンに関する調査です。 調査には解析データを使用してます。 主に敵の乱数判定の内容についての調査なので難解です、そして長いです。(いつもの事なのですが……) 敵の行動について知ってしまうと、ゲームの面白さを損なうような場合もあるかも知れないので、 知りたくない方は読まないで下さい。 あと、間違いがある可能性もあるんでその辺はお忘れなく‥(^_^;)
§敵の思考ルーチン 敵の行動決定の思考ルーチンの種類は全部で6種類になります。 恐らくラスボス以外の敵でこれ以外のルーチンはないと思います。 判定の順番は下の通りです。
1.優先目標判定 → 2.AB指定 → 3.範囲指定 → 4.使用特技決定 → 5.攻撃目標決定 → 6.SP決定
■各ルーチンの解説 既出情報や他サイトの情報からの引用があったりしますが、一応一通り自分で調査はしてます。 多少調査内容が被ったりしているのは、大目に見てください。
◆1. 優先目標判定 : 優先目標を攻撃するかどうかの判定、基本的にどの敵にもある。(前に存在消費とか言ってたヤツ) ●(乱数 mod 2) = 0 だと優先目標を攻撃、優先目標を持ってない敵の場合でも1個消費です。(その場合は戦闘に影響なし) 優先目標の攻撃は対象が死体でも攻撃してきます。優先目標が複数の場合(HPが全員同じ場合など)はNo.の若いキャラが被弾。 霧隠れで優先目標が消失した場合(クジンシー戦でレオンを隠した場合など)は通常の攻撃目標決定と同じになります。
◆2. AB指定 : 行動Aと行動Bのどちらを使用するかを決める判定。この判定がないタイプもいる。 ●(乱数 mod 8) < 行動A選択値 だと行動A使用 その逆なら行動Bを使用します。 ちなみに、行動Aだと武器1、行動Bだと武器2を使用します。
行動A選択値は遠藤さんのサイトの「rs2monact.txt」に載っている行動パターン1選択率の事です。
◆3. 範囲指定 : 使用する特技の選択可能な範囲の指定、総戦闘回数が増えると攻撃パターンが増えていく敵が持っている判定で、 基本的に総戦闘回数が増えると指定範囲も増えます、敵のルーチンの中で1番難解だと思います。
以下の調査は「みじんこのす」(閉鎖済み)というサイトの調査データです。 誠に勝手ながら、引用させてもらいます。
○範囲指定[7] 引用ここから〜 ///////////////////////////////////////////////////////////////// ●総戦闘回数と技・術の選択範囲 総戦闘回数| R[0] R[1] R[2] R[3] ―――――┼―――――――――― 0 - 15 | 3 3 3 3 16 - 47 | 3 4 4 4 48 - 79 | 3 4 4 5 80 - 143| 3 4 5 5 144 - 207| 3 5 5 6 208 - 303| 3 5 6 6 304 - 399| 3 5 6 7 400 - 463| 3 6 6 7 464 - 655| 3 6 7 7 656 - 911| 3 6 7 8 912 - 975| 3 7 7 8 976 - | 3 7 8 8 R(n) は選択範囲。n = (乱数 mod 4)
●選択範囲の求め方 P | B log2(B+1) ―――――┼――――――――― 7 | 7 3 8 - 15 | 15 4 16 - 31 | 31 5 32 - 63 | 63 6 64 - 127| 127 7 128 - | 255 8
P = int(総戦闘回数÷16)×(乱数 mod 4)+7 表から対応するBの値を見て、範囲R = log2(B+1)
範囲を一発で求めたいなら、 ● R = int[log2(int(総戦闘回数÷16)×(乱数 mod 4)+7)]+1 Rが決まったら 使用特技 = (乱数 mod R)+1 で使用特技を決定する。
※総戦闘回数が1,000回以上の場合は、全て1,000回として計算します。 ///////////////////////////////////////////////////////////////// 〜引用ここまで
範囲指定は上記の方法以外にもあるみたいで、ここからは私の調査です。
--------------------------------------------------------------- ○範囲指定[0] 総戦闘回数| R[0] R[1] R[2] R[3] ―――――┼―――――――――― 0 - 15 | 0 0 0 0 16 - 31 | 0 1 2 2 32 - 47 | 0 2 3 3 48 - 63 | 0 2 3 4 64 - 95 | 0 3 4 4 96 - 127| 0 3 4 5 128 - 175| 0 4 5 5 176 - 255| 0 4 5 6 256 - 351| 0 5 6 6 352 - 511| 0 5 6 7 512 - 687| 0 6 7 7 688 - | 0 6 7 8 R[n] は選択範囲。「n = (乱数 mod 4)」 ※「R = 0」は私が勝手に作った便宜上の値で、実際の処理でどう扱われているかは知りません。(恐らく計算出来ずにエラーが出ている筈)
範囲指定[0]の計算式 ● R = int[log2(int(min(総戦闘回数,1000)÷16)×(乱数 mod 4))]+1
上の式はみじんこロードさんの調査を参考に私が適当に作りました。 ただ、この式だと総戦闘回数15回以下 or「(乱数 mod 4) = 0」の場合の計算結果が変になります。 上の表ではこの計算結果が変になった場合を便宜上「R = 0」としています。 「R = 0」の場合の使用特技決定の判定は少々特殊になります。(詳しくは使用特技決定の項で説明します) 一応簡単に説明すると、行動パターンに通常攻撃が無いのに、通常攻撃をしてくる場合は「R=0」の場合です。 --------------------------------------------------------------- ○範囲指定[1] 総戦闘回数| R[0] R[1] R[2] R[3] ―――――┼―――――――――― 0 - 15 | 1 1 1 1 16 - 31 | 1 2 2 3 32 - 47 | 1 2 3 3 48 - 63 | 1 3 3 4 64 - 79 | 1 3 4 4 80 - 111| 1 3 4 5 112 - 127| 1 4 4 5 128 - 175| 1 4 5 5 176 - 239| 1 4 5 6 240 - 255| 1 5 5 6 256 - 335| 1 5 6 6 336 - 495| 1 5 6 7 496 - 511| 1 6 6 7 512 - 687| 1 6 7 7 688 - | 1 6 7 8 R[n] は選択範囲。「n = (乱数 mod 4)」
範囲指定[1]の計算式 ● R = int[log2(int(min(総戦闘回数,1000)÷16)×(乱数 mod 4)+1)]+1
--------------------------------------------------------------- ○範囲指定[2] 総戦闘回数| R[0] R[1] R[2] R[3] ―――――┼―――――――――― 0 - 15 | 2 2 2 2 16 - 31 | 2 2 3 3 32 - 47 | 2 3 3 4 48 - 79 | 2 3 4 4 80 - 95 | 2 3 4 5 96 - 111| 2 4 4 5 112 - 159| 2 4 5 5 160 - 223| 2 4 5 6 224 - 239| 2 5 5 6 240 - 335| 2 5 6 6 336 - 479| 2 5 6 7 480 - 495| 2 6 6 7 496 - 671| 2 6 7 7 672 - 991| 2 6 7 8 992 - | 2 7 7 8 R[n] は選択範囲。「n = (乱数 mod 4)」
範囲指定[2]の計算式 ● R = int[log2(int(min(総戦闘回数,1000)÷16)×(乱数 mod 4)+2)]+1
---------------------------------------------------------------
○範囲指定[3] 総戦闘回数| R[0] R[1] R[2] R[3] ―――――┼―――――――――― 0 - 15 | 2 2 2 2 16 - 31 | 2 3 3 3 32 - 47 | 2 3 3 4 48 - 79 | 2 3 4 4 80 - 111| 2 4 4 5 112 - 159| 2 4 5 5 160 - 207| 2 4 5 6 208 - 239| 2 5 5 6 240 - 335| 2 5 6 6 336 - 463| 2 5 6 7 464 - 495| 2 6 6 7 496 - 671| 2 6 7 7 672 - 975| 2 6 7 8 976 - | 2 7 7 8 R[n] は選択範囲。「n = (乱数 mod 4)」
範囲指定[3]の計算式 ● R = int[log2(int(min(総戦闘回数,1000)÷16)×(乱数 mod 4)+3)]+1
---------------------------------------------------------------
どの敵がどの範囲指定を使っているかはよくわかりません。 同じ敵でも場所によっては別の範囲指定だったりするので、ますます謎。 とりあえず私が調査に使ったヤツだけですが書いておきます。(結構やっつけで調べたヤツもあるので間違いがあるかも)
範囲指定[0] スービエ2[氷海&沈没船]、氷竜[浮遊城]、火竜、金龍、海の主 ラッフルツリー[エイルネップの塔]、ナイトヘッド[ルドン] 範囲指定[1] 氷竜[大氷原] 範囲指定[2] 黒竜、巨人 範囲指定[3] クィーン、リアルクィーン、雷竜 範囲指定[7] ノエル(怒り)1&2[移動湖]、クジンシー2[ラスダン]、ダンターグ1[子ムー]、2[東]、水龍
範囲指定の右の[ ]の数字は、 ● R = int[log2(int(min(総戦闘回数,1000)÷16)×(乱数 mod 4)+3)]+1 みたいな範囲指定の式の「(乱数 mod 4)+X)」のXの数字です。 ↑この足し算部分の数字です。(これは範囲指定[3]の式) 各計算式の違いはこの足し算部分だけなので、この部分で区別しました。 もしかしたら、上に書いている5個の範囲指定以外の式が使われている敵がいるかも知れませんが、 その場合もこの足し算部分だけが違う計算式である可能性は結構高いと思います。(断言はできませんが……)
◆4. 使用特技決定 : 使用する特技の決定。 範囲指定が有る場合と、無い場合で判定が変化します。
範囲指定がない場合は ●(乱数 mod 8) + 1 = 使用特技 (例外はノエル1後半2) 範囲指定がある場合は ●(乱数 mod R) + 1 = 使用特技 となります。
ただし、 「R=0」の場合は使用特技決定の判定はなく、強制的に装備武器で通常攻撃を使用します。(装備なしだとパンチ) 「R=1」の場合は(乱数 mod 1) + 1 = 1 と固定されるので、消費乱数0になります。(使用するのは行動A(B)の1番目の特技)
あと、1ターン目の行動が固定されている場合など使用特技を決定する必要がない場合もこの判定はありません。
それと装備武器と特技の種類の不一致がある場合は特技の使用ができません。 簡単に言うと、剣を装備している敵が弓技や槍技を選択したとしても使用できないと言う事です。(爪はどの技でも使用可能) 私が知っている限りでこの例に当てはまっている状況は以下の場合です。(他にもあると思いますが……)
例1)ゼラチナスマターは、武器2なし(FE)なのでザンダーボルトを選択しても使用不能。(この場合は防御を使用)
例2)トリトーンの武器1ハルベルトでは、行動Aの斧技は使用不能。(この場合は槍の通常攻撃を使用)
例3)キングがファイナルストライクで武器1ゴブリンソードをなくすと、以後剣技が使用不能。(この場合はパンチを使用)
例4)クィーンがシャッタースタッフで武器1スカルロッドをなくすと、以後棍棒技が使用不能。(この場合はパンチを使用)
ゼラチナスマターはバランス調整の為に意図的にやったのかもしれませんが、(Sボルトが来たらフリーファイトでもヤバそう…) トリトーンは完全に設定ミスだと思います。学会にこの件に関連してそうな記事が有ったので引用させてもらいます。
学会過去ログ:AWJさんの「[382] $ハルベルト・なぎなた」より引用 > ご存知どおり、ロマサガ2では「剣技が使える大剣」と「剣技が使える小剣」という特別な武器がありますね。 > 私のプログラム解析によると、どうやら開発の頃、また2つの特別な種類を入れる予定があったようです。 > それは、「斧技が使える槍」と「大剣技が使える槍」なのです。 > 多分ハルベルトを前者に、なぎなたを後者にする予定だったでしょう。
この設定が生きていれば、トリトーンにハルベルトを持たせても問題は無かったはずなんですが……
◆5. 攻撃対象決定 : 攻撃対象の決定。
NTRさんの乱数理論にも少し載ってますが、基本は『(乱数 mod 100) + 1』の値と陣形ごとの選択率の比較です。 各陣形の選択率は遠藤さんのサイトを参照して下さい、遠藤さんのサイトのインペリアルクロスの選択率を合計すると101になりますが、 これは遠藤さんミスではなく、スタッフの設定ミスだと思われます。(計算上は特に問題ないです)
ラピッドストリームならNo.1:1〜20 、 No.2:21〜40 、 No.3:41〜60 、 No.4:61〜80 、 No.5:81〜100 が選択率で。 (乱数 mod 100) + 1 = 19 ならNo.1、(乱数 mod 100) + 1 = 55 ならNo.3が被弾といった感じです。
インペリアルクロスならNo.1:1〜7 、 No.2:8〜10 、 No.3:11〜76 、 No.4:77〜89 、 No.5:90〜101 が選択率です。
陣形崩れやフリーファイト(2〜5人陣形)などのn人陣形の場合は ●(乱数 mod n) + 1 = 攻撃対象 n = LPのある人数 死体を選択した場合は死体以外を選ぶまで判定をやり直し。 ちなみに、霧隠れを使った場合は隠れたキャラは基本的に死体と同じと考えてください。 隠れると、被弾率の上では陣形崩れと同じ状態になり、隠れキャラを選択した場合は隠れキャラ以外を選ぶまで判定をやり直し。 ただし、隠れキャラは死体と違い優先目標でも攻撃される事は無いです。
優先目標を攻撃する場合と全体攻撃、自分が対象の技(セルフバーニングなど)、1人旅の場合はこの判定はなくなります。 霧隠れで全員消えると攻撃対象を選択できないので『防御』を使用します。(全体攻撃などは除く)
◆6. SP決定 : 行動順の決定。
これも「みじんこのす」の情報です。前に「ラスボスの思考ルーチン考察」の時にも引用させてもらいましたが、 再度引用させてもらいます。(要約してます)
敵が1回行動の時は ●[(素早さ×2)+{乱数 mod (素早さ×2)}+1] = SP (味方キャラのSP決定もこっち) 敵が2回行動の時は ●int(素早さ×1.5) = SP 2回目の攻撃時のSPは int(素早さ×1.5) - 3 = SP ※「SP」の値が高いキャラから順に行動、同じ場合は、敵より味方、味方同士ならNo.の若い方優先 ※『[素早さ×1.5]=SP』の計算式の場合は乱数消費が必要ないので消費乱数0。 ※『[(素早さ×2)+{乱数 mod (素早さ×2)}+1] = SP』で素早さが0の場合も消費乱数0。
◆計算式で使用している関数の意味(よく解らなかったらググって下さい) int --- 文中では「端数切捨て」の意味で使用。int(3.14) = 3 log --- 指定された数を底とする数値の対数を返す。log2(256) = 8 mod --- (X mod Y) X を Y で割った余りを返す。(5 mod 4) = 1 min --- min(X , Y)は X と Y の値の内、小さい方の値を返す。min(10,100) = 10
〜長いので分割します。
|