peacemayの日記

 

2010-07-04

[][][]モンスターの思考

いずれちゃんとHTMLにまとめるつもりだけど、とりあえず現時点でのまとめをここで書いておきます。わかりにくいとか、抜けがあるとか、気づいたことがあれば指摘していただければ幸いです。

今のところ、解析が中途半端なのは以下のとおり。

注意事項

  • すべてが解析済みというわけではないので、未知の仕様バグによって下記と異なる挙動をする可能性もあります。
  • 値を 1/2 や 1/4 にする場合、その時点で端数は切り捨てられます。

判断力

モンスターには行動決定に関わる隠しパラメータ存在し、「行動決定のタイミング」「行動を選択する確率」「呪文を使うかどうかの判定」等に影響します。ここではそのパラメータを「判断力」と呼びます。判断力は 0〜3 の4段階で表されます。

行動決定のタイミング

モンスターの行動決定のタイミングは、判断力の値により異なります。判断力 0〜2 のモンスターは、プレイヤーと同様、戦闘ターンの開始時に行動を決定しますが、判断力が 3 のモンスターは、自分の順番が回ってきたときに行動を決定します。

決め直しの制限

モンスターの行動決定は、「設定された行動からひとつを選択」→「行動をキャンセルするかどうかを判定」の繰り返しで行われます。

ただし、100回目の選択 (=99回キャンセルされた場合) は強制的に「通常攻撃」となります。無限ループ回避のためにこのような処理になっていると思われますが、通常のプレイにおいてこの条件で「通常攻撃」が選択されるかどうかはわかりません。

行動選択

モンスターには8つの行動が設定されており、判断力と乱数によってどれかひとつが選択されます。

知性行動0行動1行動2行動3行動4行動5行動6行動7
032/25632/25632/25632/25632/25632/25632/25632/256
138/25639/25633/25634/25630/25630/25626/25626/256
246/25645/25638/25634/25630/25626/25622/25618/256
3100/25650/25628/25624/25619/25615/25612/2568/256

選択された行動をするかどうかの判定

選択された行動が不可能だったり無意味だったりした場合、判断力によってキャンセルされ、選択し直しとなります。

メガンテ

現在HPが最大HPの 1/4(端数切捨て) 以上の場合メガンテを使用しません。この判定は、判断力とは無関係に行われます。

メガンテ以外の呪文

判断力が 2 以上であれば、呪文を使うかどうかの判定が行われます。

マホトーンがかかっている場合、あらゆる呪文を使用しません。また、呪文を唱える意味がない場合、その呪文を使用しません。

行動説明
ホイミベホイミベホマ現在HPが最大HPの 1/2(端数切捨て) 以上であればキャンセル
ザオリク死亡したモンスターがいなければキャンセル
ラリホーキャラクター全員が眠っていればキャンセル
マホトーンキャラクター全員にマホトーンがかかっていればキャンセル
マヌーサキャラクター全員にマヌーサがかかっていればキャンセル
逃げる

判断力が 1 以上の場合、状況によって逃げるかどうかを判定します。

モンスターの攻撃力が、ローレシアの王子の「ちから」の 1/2(端数切捨て) 以上であれば逃げません。

攻撃対象の選択

行動7に「集中攻撃」が設定されている場合、攻撃対象が決まっていれば、そのキャラクターを攻撃対象にします。

それ以外の場合、攻撃対象はランダムに選択されます。

判断力と思考のまとめ

判断力逃走判定呪文判定行動時に決定
0×××
1××
2×
3

プオーンプオーン 2011/05/03 03:14 行動選択の項目で 行動パターンの優先順位が、自分では 不明だったので、知性のからみも合わせて 参考に なりました。 ありがとうございます。
あと 質問ですが、モンスター出現地域マップ 10424辺りに 03 01 05 とあったので、スライム(モンスターID:01)かと思い よろいムカデ(ID:0F)なので、03 0F 05と変更したら タホドラキー(ID:0E)と リザードフライ(ID:11)が 、同時に出現するようになりました。
出現場所は ローレシア〜南下して一つ目の橋の間で、確認です。
値を01→0Fに変えてみたものの なぜ タホドラキーと リザードフライが 出現モンスターとして選択されたのか 全然解りません。
自力で解析出来ない素人ですが、どの様に処理されているのか お答え出来るでしょうか。 宜しくお願いします。

peacemaypeacemay 2011/05/03 11:22 それはモンスターIDではなく、テーブルのインデックス値ですね。
下記の遭遇表・固定遭遇表の数値がモンスターIDです。

103D7: 遭遇表インデックス (フィールド) 上位2ビット…海 下位6ビット…陸
104D7: 遭遇表インデックス (ダンジョン)
10519: $40 (海上にいる場合の遭遇表インデックスへの加算値)
1051A: 遭遇表 (最上位ビットは↓の固定遭遇表のインデックス)
106B2: 固定遭遇表
(名称は適当)

遭遇表は6バイト、固定遭遇表は4バイトのデータです。
設定する位置によって出現数が変わります。

プオーンプオーン 2011/05/08 16:01 速い 回答ありがとうございます。
自分は 遭遇表インデックスを書き換えてた訳すね。
今も インデックスを構造を理解できませんが、自分が
何のデータを書き換えてたのか 分かっただけでも 助かります。
モンスターデータを 2匹差し替える改造を考えていたので、
それに伴う遭遇表のモンスターIDも 変更したかったので、問合せた次第です。
あと 遭遇表・固定遭遇表の構造は だいたい解かったので、満足してます。
遭遇表 陸上6bx60 海・川6bx4 固定遭遇表 4bx19
6b・4b毎に 出現エリアをつけて 自分用の管理票を作成してたので、返事が遅くなりました。 すいません。

又 別件で 問合せ・きずいた事が あるのですが、長文になる事もあるので、
次回にしたいと思います。 今後とも 宜しくお願いします。

2009-02-03

[][][]移動中のベホイミ

先日のやつ。

http://www2.ucatv.ne.jp/~pen.snow/dq/dq2-22.html

が証拠となりそう。

・回復量が一定(ホイミ:22、ベホイミ:34、やくそう:34、力の盾:未調査)

乱数が固定されていて回復量が同じということは、回復量を決める基準値が同じということ。

遭遇率0の状態では、乱数は F5 AF に固定されているらしいので、以前 (http://d.hatena.ne.jp/peacemay/20071012#p3) 書いた通り、回復量を決める乱数値は 88。基準値が 100 なら、100 * 88 / 256 で回復量は 34 となる。

ザイルザイル 2009/06/13 04:00 DQ2に関する記事を一通り読ませて頂きました。
そこで質問なのですが、敵のルカナン・スクルトの威力値はどこに格納されてるのでしょうか?
味方は判明したのですが、敵の場合がわかりません。
あと敵にパルプンテを使わせることは不可能ですか?
それと、味方のパルプンテで「恐ろしい魔物呼び」はアトラスなどの固定敵も撃退出来てしまうので、行動の中から「恐ろしい魔物呼び」だけ選択しない方法などありますか?

peacemaypeacemay 2009/06/15 04:43 敵のルカナンは$12C6B、スクルトは$12BC0あたりから、守備力を取得して1/4にする処理が入っています。
敵のパルプンテは全部プログラムすれば可能でしょうが、容量的に言って無理でしょうね。
恐ろしいものは単に削るだけなら$133DAの7を6にすれば行けませんかね? アトラス以降だけ、とかだと条件分岐を入れなければならないので難しいですが。

ザイルザイル 2009/07/17 19:06 レスありがとうございます。
敵のスクルト・ルカナン威力値いまいち場所が難しくてわからなかったです。
戦闘中に既存の呪文を削ってそこにザオリクを入れることって出来ますか?要はSFCの2みたいに戦闘中にもザオリク使用みたいな感じです

peacemaypeacemay 2009/07/18 04:14 スクルト・ルカナンの威力は固定値ではなくプログラムで求められているので難しいですね。例えばルカナンの場合、守備力を取得→それを半分にしてメモリに格納(あとで守備力低下の限界値として使用)→さらに半分にしたものが威力の基準値、というプログラムになっています。
ザオリクの件ですが、できるかできないかで言えば「できる」でしょうが、スクルト・ルカナンの比ではなく難しいです。FC版DQ2では戦闘中の呪文と移動中の呪文はまったく別の場所で管理されていて(たとえ同じ呪文でも)、戦闘時に移動中の呪文のルーチンを呼ぶことはできないようになっています。なので、ザオリクを戦闘中に唱えるためには、ザオリクのルーチン自体を戦闘用プログラムのどこかに書く必要があると思います。

2009-01-31

[][][]眠りの効果

しばらく前に気づいたのだが、すっかり忘れていたので今更メモ

こちらが眠っている場合、敵の通常攻撃で受けるダメージが5/4倍になっているようだ。こちらからの攻撃には、おそらくそういった補正はないと思う。

この辺ももう少し調べないとなぁ。

2009-01-27

[][][]ベホイミ回復量

最近、移動中のイベントやコマンド処理を調べていて気づいたのだが、移動中と戦闘中とでベホイミの回復量が違うっぽい。移動中はたぶん薬草とまったく同じ回復量。もう少し調べて確証が得られたら、解析情報まとめたページを更新しておこう。

2007-10-12

[][][]エンカウント0

http://www2.ucatv.ne.jp/~pen.snow/dq/dq2-22.html

ドラゴンクエスト2では、敵との遭遇をなくす復活の呪文が知られている。僕個人としてはあまり興味のないトピックだったので今まで気にしていなかったのだが、http://www2.ucatv.ne.jp/~pen.snow/dq/dq2-12.html によると、乱数が固定された状態で起こる現象らしい。その値、F5 AF (0xAFF5)。

乱数が関わっているということなら、考察しないわけにはいかない。

http://peacemay.net/analysis/dq2_randomizer.html

なるほど、確かにこの値だと、乱数を更新しようと思っても同じ値に戻ってしまうみたいだ。呪文や道具の威力も、乱数が 5 * 16 + 8 = 88 に固定されるから、かなり低い値で固定されてしまう。フリーズはたぶん「乱数の振り直し」で (何度求め直しても値が変わらないため) 無限ループに陥っているんだろうけど、「フリーズすることがある」ってのはちょっと気になるなぁ。あとで詳しく調べてみよう。


(via http://game.g.hatena.ne.jp/Nao_u/20071012)

2006-10-29

[][][]ドラゴンクエスト2解析

乱数生成とダメージ等の算出についてまとめました。色々確認し切れてないことだらけなので問題があるかもしれませんが……。

http://peacemay.net/analysis/dq2_randomizer.html

JavaApplet を使ってみたけど、僕の使っているブラウザ (fub) では実行できない……。そろそろ自宅でも Opera にしようかなぁ。一応、IE と Opera では動作確認しました。

とらくえとらくえ 2008/04/25 19:44 FC版は乱数の幅が広いので、これをSFC版にするにはどこを弄れば良いでしょう?

2006-10-28

[][][]ドラゴンクエスト2解析

威力の範囲ちがってた。やっぱ http://peacemay.net/analysis/dq2_memo.txt に書いたのであってたっぽい。乱数の周期が(まだ解析できてない部分に細工がなければ)32767だから、0〜65535のすべてが出るわけじゃないんだよな……。

というわけで、最大値と平均値が若干下がるはず。


この週末中に、乱数の出し方も含めて、もう少しちゃんとまとめようと思います。

2006-10-22

[][][]ドラゴンクエスト2解析

久しぶりにDQ2の解析。ダメージや回復値の範囲と平均値。……と言っても、今まで解析した結果から、計算で求めただけだが。

平均値は今まで基準値の半分になると思っていたけど、実際はどうもそれより0.5点ほど低いっぽい。端数が切り捨てられるためか。実際に「いかづちのつえ」で300回ほど敵にダメージを与えてみたが、平均は24.5程度で間違いないようだ。

基準値範囲平均行動
245〜1811.5157(モンスターの)ギラ・炎(弱)
408〜3119.5157(サマルトリアの王子の)ギラ・まどうしのつえ
5010〜3924.5101ベギラマ・バギ・炎(中)・いかづちのつえ
5511〜4327いなずまのけん
13027〜10264.5101イオナズン
14029〜11069.5102炎(強)
6413〜5031.626ホイミ・パルプンテによる全員回復
10021〜7849.5102くそ
12827〜10163.75ベホイミ
449〜3421.5102いのりのゆびわ

なお、実際に最小値や最大値を拝むことはほとんどないと思う(確率0.003%とか、とにかく出にくい)。上の実験のあと、さらに200回(計500回)「いかづちのつえ」のダメージを取ってみたが、下は15、上は37までしか確認できなかった。


……しかし、これだと「どのあたりのダメージがどのくらい出やすいのか」がわからんな。グラフによる視覚化とかも考えてみるか。

2006-01-22

[][][]ドラゴンクエスト2

http://peacemay.net/analysis/dq2_memo.txt の威力算出法ですが……

乱数生成ルーチンを調べなおしてみたら、威力算出時の乱数幅が間違っていたことに気づいた。54〜197は間違いで、54〜202が正解だと思われます。そのうちおよそ98%が、86〜170に集中しています(それより上と下が各1%ずつ)。ちなみに、ドラゴンクエスト2では、乱数にはCRC値をそのまま使っているようです(←と言いつつ、CRCってよく知らないんだけど)。

ところで、「DQ2は乱数幅が大きいので戦術を立てにくい」とよく言われますが、「乱数幅が大きい」と言うことを理解していれば戦術は立てられるはずです。例えばバギや雷の杖は平均25ダメージですが、それで「HP50の敵を2発で倒せる」と考えるのは確率50%の分の悪い賭けであって、戦術とは呼べません。重要なのは「ほぼ確実に与えられる(あるいはそれ以上は受けない)ダメージ」をつかむことでしょう。大雑把に言って、こちらが攻撃するときは平均値の3/4、相手から攻撃を受けるときは平均値の5/4程度を目安に戦術を考えると良いでしょう(確実を期すのなら、それぞれ2/3、4/3で考えればよいけど、全滅ゼロを目指すのでもなければ、そこまで慎重になることもないかと……)。

2005-06-26

[][][]ドラゴンクエスト2

http://peacemay.net/analysis/dq2.html

モンスターの最大HPの上位4bitを有効にします。もともとパッチを公開するつもりはなかったけど、まあ、解析結果の検証のひとつとして……。