まず、このページは攻略記事ではありません。
ブレス2にはまだ未解明、解明不十分な「謎」・「仕様」があります。それらについて調査された経過・結果をまとめたページです。
こちらは「解決編」。「提起編」で挙げた謎について分かったことを記載するページです。副産物的な調査結果が出てきたら、それもまとめて記載しています。当ページの攻略記事に関する事柄で、記事を修正すべき点が見つかった場合は該当記事も修正・追記します。調査の途中でも、進展があれば順次記載・追記されていきます。目標は、いつか全ての項目に「解決済み」マークを付けること!
・・・なんか調査経過文がめちゃ長くなっているので、解決した謎の答えだけまとめた「解答編」ページを用意しました・・・
注意!!
以下の記事の内容は、SFC版ブレス2の仕様という前提の元に記載しています。主に内部データを含む非公開仕様を調査した結果のまとめとなっており、その性格上、文中には改造および解析ツール・エミュレーター・チートコードに関する記述、およびこれらのツールを使用した上での記述がものすごく多くなっています。これらについて良い感情を持っていない方、苦手意識がある方はこれ以降の文を読むのをやめることをお勧めします。
主な使用ツール:SNES9X、LSNES、SNES 65816逆アセンブラ、FavBinEdit(バイナリエディタ)
情報提供者に感謝!!:匿名希望TTさん
「乱数」について・・・ほぼ解決済み!
ブレス2の乱数の仕様について分かったことを記す欄です。
ただ、もし乱数ジェネレータが間違っているとしたら、現在の結果表はすべて無駄になる。新たに作り直すしかない。計算式が簡単に推測できるとは思えないので、乱数の実数を10万フレームほど集めてテキスト出力してしまう力業が一番早いのではなかろうか。10万フレーム=乱数10万個以上もあればさすがに乱数周期は1周しているだろう。
10万フレーム分もの乱数を手作業で回収なんてできないので、出力のためにはエミュレータとlua言語の精通が必要になりそう。誰か作ってくれないかor教えてくれないか・・・
(2020.5.12追記)
電源投入時から数字がバラバラに動くアドレスは2バイト分見つけた。こちらはタイトルロゴの前の「カプコン」ロゴ表示中、始める旅の記録を選択する画面、およびゲーム内各所で暗転してキー入力を受け付けないところ(マップ切り替え、戦闘突入&終了などなど)で動きが止まる。
さらに0〜255まで1フレームごとに1カウント進む場所も1バイト分見つけた。これは上記の変化ストップ箇所でも変わらず動き続け、255の次は0に戻る。
ここらが乱数の肝だとしたら、何か分かるかも・・・と思ったのだが、現在挙げられている計算式に代入しても期待した結果は返ってこない。おそらく乱数ジェネレータが間違っているのだろう。逆アセンブルできる人が行なって、ルーチンが分かればいいのだが・・・ とりあえず怪しい箇所をチートコードで一定値(0とか1とか65535[255・255]とか)に固定した上でプレイしたら何か分かるだろうか?
(2020.6.25追記)
乱数かもしれないアドレスは2つ・・・7E00D6・7E00D7(2バイトとすると07側が上位、06が下位になる)。タイマーっぽい何か・・・7E0091(周期は0〜255:フレーム)
初期値? 乱数かもしれないアドレス・・・7E00D6・7E00D7:ともに15(16進数で0F)、おそらくタイマー・・・7E0091:0。タイマー変数は、乱数変数よりも回っている期間は長いが常に回っているわけではない(暗転部分:ラグ時間では動かない)。詳しく書くと、エミュレータでラグカウンタ(キー入力を受け付けないタイミング)が増えるシーンだと進まない。また、乱数変化にタイマーが絡んでいる様子は見受けられない・・・ような感じ。
で、乱数っぽい2つに0・0を入れて軽く敵を殴ってみた。ランドリザード2体(賢さ0)・ダイナファング(賢さ2)の組にランド[陣形パラレル・3番手]のガダブレダを使ったところ、敵3体は必ず防御し、魔法は必ず必殺になり、ダイナに必ず94、リザードに101ダメージが入った。敵よりランドを先行させると防御は通らず、必ず120・112(防御による魔法ダメージ減少は20%:敵の防御は防御コマンドが実行されてから有効になる)。通常攻撃だとランドは必殺を必ず出さず、リザードに対して防御されないで134、されて66となった(防御による物理ダメージ減少は50%:計算タイミングはダメージ決定後ではないようだ・・・基礎ダメージ決定後50%、そこから低中高ダメージ帯による4乱数? これを調べきるならウォーカバウト1番手に置かないと意味ないけど)。敵行動の固定はほぼ間違いないけど、ランドの必殺魔法についてはより詳しい調査を要す。
では7E00D7だけ固定から開放したらどうなるか。7E00D7は動き出してある程度適当な数字を吐き出した。敵行動はランダム、ダメージもばらばらとなった。ただ「ある程度」と書いたように、乱数の動きに何か変なものを感じた。特にダメージアニメ中に下4ビットが2・Eとなったり一定幅でしか動かなかったり。もっと書くと00になった瞬間動かなくなった。動かなくなった乱数は7E00D6を開放したらまた動くようになった。 また、逆に7E00D6を開放して7E00D7を0に固定したら、16進数で33以下になったら動かなくなった。34〜1ずつ(7E00D7も開放すると0→1に)、67〜で2ずつ(7E00D7も0→2に)、9A〜3ずつ(7E00D7も0→3に)、CD〜4ずつ(7E00D7も0→4に)上がるようになった。もう1フレーム進ませると、7E00D7に0以外の数値が入っているとかなり大きく飛び、0が入っているとやはり規則的に上昇する(まあ当たり前)。
とりあえず分かったことは、ダメージや行動決定、必殺の有無などかなり(もしかしたら全て)の部分で7E00D7の数値が使われている。ここを固定することは、すなわち結果の固定を意味する。「何歩でエンカウントしこの敵が出てきて、こちらの行動で何ポイントのダメージを与えて敵から何の攻撃を受けてどれくらいの被害が出て、ドロップ結果はこうである」まで決まってしまう。逆にこれを固定することで、乱数事象のかなりの部分が分かってくると思われる。
(2020.9.8追記)
新エミュレータ「LSNES」と「SNES 65816逆アセンブラ」を導入し、逆アセンブル環境が少し整った。その結果、乱数処理ルーチンが浮かび上がってきた。以下がそのルーチン部となる。16行と短めだった。SFCの機械語に関しては他のページで調べて欲しいところ・・・ 書いてる自分でもほとんど理解できてない。
C0:63DA 08 PHP ; ここから乱数サブルーチン。まずステータスレジスタの保持。(電源投入時=1周目はアドレス7E00D6〜D7の初期値=0F0F)(2周目の初期値=4B5A)
C0:63DB C2 20 REP #$20 ; A:16 Aレジスタ(一時メモリ。一般プログラム言語で言う「変数」みたいなもの)を16ビットとして使用する宣言
C0:63DD AD D6 00 LDA $00D6 ; 指定アドレスのメモリ中身値をAレジスタに代入。(1周目Aレジスタの中身値=0F0F)(2周目のAレジスタの中身値=4B5A)
C0:63E0 0A ASL A ; Aレジスタ中身値を1ビット左にシフト(=数値的には2倍)。(1周目Aレジスタの中身値=1E1E)(2周目のAレジスタの中身値=2D68)
C0:63E1 0A ASL A ; Aレジスタ中身値を1ビット左にシフト。(1周目Aレジスタの中身値=3C3C)(2周目のAレジスタの中身値=2D68)
C0:63E2 18 CLC ; キャリーフラグ値=0に宣言。16ビットを超える頭は切り捨てられる?
C0:63E3 6D D6 00 ADC $00D6 ; Aレジスタ中身値に、指定アドレスのメモリ中身値とAレジスタ中身値(元)とキャリーフラグ値(1つ上で0と宣言済)を加算。
3行上の処理からここまでで、実質的にAレジスタ中身値を5倍している(その上で65536以上は65536単位で切り捨て)。(16ビット宣言中なのでアドレス7E00D6〜D7の初期値=0F0Fを加算。1周目Aレジスタの中身値=4B4B)(2周目のAレジスタの中身値=78C2)
C0:63E6 EB XBA ; Aレジスタ中身値の上位8ビットと下位8ビットを入れ替え。(1周目Aレジスタの中身値=4B4B)(2周目のAレジスタの中身値=C278)
C0:63E7 E2 20 SEP #$20 ; A:8 Aレジスタを8ビットとして使用する宣言。上位8ビットは切り捨てられる(1周目Aレジスタの中身値=4B)(2周目のAレジスタの中身値=78)
C0:63E9 8D D7 00 STA $00D7 ; Aレジスタ中身値を指定アドレスのメモリ中身値として書き込む。(1周目アドレス7E00D7=4B)(2周目のアドレス7E00D7=78)
C0:63EC 18 CLC ; キャリーフラグ値=0に宣言。8ビットを超える頭は切り捨てられる?
C0:63ED 6D D6 00 ADC $00D6 ; Aレジスタ中身値に、指定アドレスのメモリ中身値とAレジスタ中身値(元)とキャリーフラグ値(1つ上で0と宣言済)を加算。
今回は8ビット宣言済なので8ビットを超える頭は切り捨てられる。(1周目Aレジスタの中身値=アドレス7E00D6初期値=0Fのみ加算となり、4B+0F=5A)(2周目のAレジスタの中身値=アドレス7E00D6初期値=0Fのみ加算となり、78+5A=D2)
C0:63F0 8D D6 00 STA $00D6 ; Aレジスタ中身値を指定アドレスのメモリ中身値として書き込む。(1周目アドレス7E00D6=5A)(2周目のアドレス7E00D6=D2)
C0:63F3 28 PLP ; ステータスレジスタを保持しておいた値に戻す。
C0:63F4 6B RTL ; サブルーチン終わり
・・・というルーチンが出てきた。乱数の種初期値=始めに該当メモリに入っている数値は「10進数で3855(16進数で0F0F)」で、種が初期化されるタイミングは電源投入時、またはリセット直後。乱数が進むタイミングは1フレームごと、あるいは乱数を使用する事象が起きたら使用した分だけ進む(と思う・・・1フレームの進行保証分が入るかどうかがまだ不明瞭)。暗転時などに乱数が進まない箇所もある。実際に計算で使われる乱数値は7E00D7の方だけ(2バイトとすると上位1バイト)で、7E00D6は乱数計算に使われるだけの個所になる。
新ルーチンを、ハンドブックの乱数ジェネレータ風にそれっぽい何かの言語で書き直すとしたら、こんな感じになるか。
BYTE rand( )
/ここから乱数生成アルゴリズム
{
WORD a = seed * 5;//seed=乱数メモリ保持アドレス2バイト分の値(上位8ビットがアドレス7E00D7、下位8ビットがアドレス7E00D6)であり、メモリに保持している数値そのもの。WORD:符号なし16ビット整数として扱い、16ビット以上の数値は切り捨てる
b = (a >> 8) & 0xff;//aの上位8ビットを8ビット数値として個別に保持。乱数として返る値でもある。& 0xff:下位8ビットのみを使用して8ビット符号なし整数として扱う。9ビットより上位は切り捨てる。
a = (a << 8) + b;//aの下位8ビットを上位8ビットに、上位8ビットを下位8ビットに置き換える。
seed = ((seed & 0xff) + b) + (b << 8);//新たなseed=メモリ保持値として、「b」を上位8ビット、「(元のseed下位8ビットにbを加えた数値)から9ビット目を切り捨てた値」を下位8ビットとした数値を代入
return b& 0xff;//bを乱数として返して終わり
}
・・・当初のジェネレータと違うのは計算の最終行だけ。「b=〜」と「a=〜」は返り値を分かりやすくするために敢えて分割しただけで、やってることは当初のジェネレータと同じ。
この新ルーチンから他言語で処理スクリプトを作り、6万回まで回した結果の全リストはこちら(カンマ区切りCSV形式テキスト[Unicode UTF-16]:5620KB OpenOffice Calc書類:4089KB Excel書類:15126KB 表計算ソフト必須、超激重注意! 中身は16進数表記箇所を計算式でやっているかベタ書きしているかの違いだけで、ほぼ同一)。乱数周期は57973個で、計算結果が57974回目から1回目に戻りループしているのが分かる。
上記リストから「返される乱数結果」だけ抜き出したテキストファイルはこちらからどうぞ(269KB)。
乱数の生成式が分かったので、これで一応「ほぼ解決」とする。後はこれを踏み台にして各種課題を突破するのみ。
余談:自作乱数ジェネレータで遊んでみたところ・・・
・初期値を65535にすると乱数返り値が最初の51回も255が続く(この区間は乱数の種が1ずつ減っている)2768周期の表ができた。この乱数列は調査に上手く使いたい。
・初期値0〜51までは種から動かない=1周期。乱数は全て0が返る。
・残りは周期は様々ながらも乱数っぽくバラバラに動く。乱数列に目立った固まりはないようだ。なお、初期値72・103・164・168・361・841で始めると全て網羅できる。
何を、どうやって調べたかった?
提起編で掲げた謎は以下の通り。
(乱数が絡む提起項目)
・ブレス2はエンカウント率が高いと評されることが多いが、具体的なエンカ率はいくつ? どのタイミングで判定している? 詳しい仕様は?
・・・まだ分かっていません。
とりあえずは、現在あちこちのチートコードページで挙げられているチートコード「エンカなし」は、エンカしてからorフィールドを切り替えてからの歩数をカウントアップするアドレスを0に固定している、ということまでは分かった(ブレス2のエンカウントには3歩の歩数保証があるため、歩いた歩数を0にしておけば保証をずっと受けられる=エンカウントしない)。
(2020.6.25追記)
とりあえず乱数っぽいアドレス2つを0・0に固定し、低エンカ:ガンツ付近(フィールド)を歩いたら56歩目でエンカした。高エンカフィールド:アルの洞窟だと16歩目でエンカ。ただ同じ低エンカ帯でも一軒家の武器や周辺だと32歩でエンカする。また、高エンカ帯のはずの無限の塔でTASさんが歩けている歩数よりも明らかに少ない。内部的に少しずつ違うのだろうか?
(2020.9.9追記)
逆アセンブルのやり方が少し分かったので、以下の方法で分かるかもしれない。
・1歩ずつ「歩いた瞬間」にステートセーブを繰り返し、エンカウントするステートを引いたところで「乱数」アドレス:7E00D7(LSNESの場合は「WRAMの7E00D7」)にブレイクポイントを張る。ブレイクフラグは「読み込み時」とする。
・少し進めてエンカウント。無事ブレイクポイントに引っ掛かったら、機械語を1行ずつ読みつつエンカ処理をさせる。
・敵編成パターンの決定機構
・・・まだ分かっていません。ROM内になんかそれらしきものっぽい区画は見つけた・・・ような気がする。
(2020.6.25追記)
とりあえず乱数っぽいアドレス2つを0・0に固定し、低エンカ:ガンツ付近(フィールド)を歩いたら56歩目でエンカしたのだが、必ずガニメデ1体だった。高エンカフィールド:アルの洞窟だと16歩目でエンカしたらスティンガー2体+デックアールバ1体で固定。極端な話、「どのタイミングの乱数を回収するか」だけでも分かれば話が進むのだが。
(2020.9.9追記)
逆アセンブルのやり方が少し分かったので、↑のエンカ処理を更に先に進めれば決定機構までたどり着けるかも。
・各敵のアイテム所持フラグ決定方法のようなもの
・・・まだ分かっていないものの、少し理解が進んだ。
戦闘終了後のアイテムドロップ内容の格納アドレスはチートコードとして挙がっていて、アドレス:7E0F4B・・・ここが戦闘終了時に00でない場合、入っているアイテム番号のアイテムをドロップ品として1つ獲得できる。
また、敵の現HP:アドレス:1体目・・・7E1448、2体目7E14C8。この間にアイテム所持フラグやステータス異常など、色々な何かがありそうとアタリがつく。
で、カペタン村付近のポイズンムーバーを相手に数回戦ったら毒消しが落ちる編成に出会った。巻き戻してドロップ内容のアドレス数値を見ながら戦ったら、1体目では変化せず、2体目を倒したら値が変化した。逆に倒してもドロップ品が消えることはなかった。
バイナリエディタでメモリ内容をじーっと見比べると、HP値の近くに1体目と2体目で値が違う箇所、該当アドレス:7E14DBが発見された。1体目でここに当たるアドレス:7E145Bの値は00、2体目では07となっていた。所持アイテム:毒消しのアイテム番号は07なのでおそらくこれだろうと判断。
チートコードでアドレス:7E145Bの値をノートゥング相当に変えて敵を倒したらノートゥングが落ちてきた。また、1体目をノートゥング、2体目を毒消しのままにして1体目から倒したところ、ドロップ内容アドレス値もノートゥング→毒消しと変化し、毒消しが落ちてきた。つまり、アイテムのレア度や売価などの価値がドロップアイテム優先度に影響を与えているということもない。
次戦、同じアドレスの値を見つつ戦闘突入したが、戦闘開始時に該当アドレスの値は0になっていた。もちろん戦闘ドロップはなし。
よって、「敵のドロップ所持品は戦闘開始時にすでに決定していて、倒した順にドロップが上書きされる(0以外の時のみ)。ドロップフラグは敵のステータス内にアイテム番号そのものが格納されていて、0以外ならドロップあり。獲得乱数は格納されていない」・・・と確定できる。さらに言うと、ごく稀な「2体以上ドロップ所持」の可能性をケアし、目的の敵のドロップを反映させるように、複数種の敵が現れた時は目的のアイテムを持つ敵が混じっていたら、そいつを後に倒すべし。となる。
残す謎は所持ドロップアイテムがいつ、どうやって決まるか。
(2020.6.25追記)
とりあえず乱数っぽいアドレス2つを0・0に固定したエンカだと敵も固定な上にドロップアイテムも必ずレア品で固定・・・ と分かった。これが0・1だと同じ敵(例ではデスブリンガー:所持率2=64分の1)でも落ちない。単純に「乱数がこれ以下」という決め方ではないっぽい? 一番可能性が高いのは1フレームで1個ずつ進む仕様ではなく消化した分だけ進む、かな? いやー、でも乱数は固定して観測したはずだしなぁ・・・ SNES9Xの乱数固定チートは60分の1秒ごとにしか反応しないのか?
(2020.9.9追記)
逆アセンブルのやり方が少し分かったので、以下の方法で分かるかもしれない。ただ、↑↑のエンカ処理の中で何かつかめればいっぺんに調査できる。
・エンカウント前に「敵1のドロップアイテム所持品」アドレス:7E145B(LSNESの場合は「WRAMの00145B」)にブレイクポイントを張る。ブレイクフラグは「書き込み時」とする。
・アトミックグミ・ガンガンヘッドのドロップ率がかなり高いので、これを狙って「巨大生物の島」でエンカウント。
・ブレイクポイントに引っ掛かったら、機械語を前に向かって1行ずつ読む。
・物理攻撃の必殺率
・・・まだ分かっていませんが、かなり怪しい仕様を見つけたかも。
(2020.6.25追記)
陣形をパラレル、乱数っぽいアドレス2つを0・1に固定しエンカ。究極合体ステン(調子255)で攻撃すると2番配置の時は必殺にならなかったが1番配置だと必殺になった。ウォークアバウトだと1番・2番配置共に必殺にならない。0・0にすると陣形によって必殺が出たり出なかったりする。調子がバラバラだからおそらくそれが原因だが、調子がいいキャラで出なくて、ちょっと低いキャラが出たりする。必殺率にキャラの性能差が出る可能性もかなり増してきた・・・?
また、あるキャラが行動する前に乱数の固定数値を0から1に変えると、前ターンでは必殺が出なかったのが必殺になった。ということは、行動結果判定乱数は、行動する瞬間に拾ってくると推測できる。
(2020.9.9追記)
逆アセンブルのやり方が少し分かったので、以下の方法で分かるかもしれない。処理ルーチンが分かれば確率も分かるか?
・4人目のコマンド入力を終える直前にステートセーブを行ない、1フレームずつずらして味方1人目の攻撃が必殺になるステートを引いたところで「1人目の一時ステータス異常」アドレス:7E106C(LSNESの場合は「WRAMの00106C」)にブレイクポイントを張る。ブレイクフラグは「書き込み時」とする(必殺を引いたらここが「80」になるため)。
・少し進めて、機械語を1行ずつ読みつつ必殺処理をさせる。
・魔法攻撃の必殺率
・・・まだ分かっていません。ただ物理攻撃と同じ方法で調査できる可能性あり。
・スターブリンガー獲得確率
・・・まだ分かっていません。ただし床のイベント判定は、戦闘終了メッセージを閉じるタイミング=戦闘から抜けるを1フレームずらすだけで変化した。よって戦闘終了後にランダム判定が行なわれていると推測。
(2020.6.25追記)
まだ試してないが、乱数を固定化できそうなことが分かったので調べやすいかもしれない。判定は戦闘終了後なので、乱数が変化するフレームだけ固定したらどの瞬間で判定するか、分かるかもしれない。検査法は乱数を真ん中くらいに固定して50回施行、結果が変わらなければ飛ばし飛ばしにいくつか試行して挟み撃ち。
(2020.9.9追記)
完全に固定できる乱数は0・0(完全固定)と255・255(50周期程度)だけっぽい。それでも乱数が0・255の時に何が起きるか、については調べられる。おそらくどちらかで呪いがかかるか、スターブリンガーが拾えるはず。それぞれで両方が確認できたらラッキー。
それはそれとして、逆アセンブルのやり方が少し分かったので、もうちょっと直接的に調べられる可能性が出てきた。変な顔で良く起きる「所持金が変化する(+1・−100)」=所持金アドレスに書き込みが起きるタイミング(具体的にはアドレス:7E504A[LSNESの場合は「WRAMの00504A」]、ブレイクフラグは「書き込み時」)でブレイクポイントを張る。張り始めのタイミングは、戦闘終了メッセージが出きった後。成功したら、この行から前に向かって確認する。乱数ルーチンが直前に登場していたらなおよし。
(2021.1.3追記)
処理分岐の直前に乱数が動いており、どうやら1つ動いた結果の乱数を判定に使っているっぽい?と判断できた。判定タイミングもだいぶ絞れてきた。乱数の固定化は、乱数表が手に入ったので「必要な乱数値」の1つ手前の数値に乱数を固定すればいいことになりそう。これで正しいかどうかは、例えば「0・0」と「255・0」・「128・0」などいくつかの「x・0」が同じ結果を示すかどうか、「0・y」や「255・z」が違う結果を示すかどうかで検証できるはず。
・調合システムについて補足調査
・・・まだ調べてません。ただ調査のポイントははっきりしている。調べ始めれば結論は早そうだが・・・?
・アイテム「闇鍋」の効果
・・・まだ調べてません。まぁ、乱数の固定方法が分かって、発動タイミングが確定できたら、あとは乱数を1ずつ上下させるローラー作戦か数点ずらして確認する挟み撃ちでいい。
(乱数が絡まない提起項目)
乱数が絡まない調査項目としては、以下のものが提起されました。
・敵のステータスを格納しているアドレスの調査
・・・まだあまり分かっていません。「現HP・最大HP・現AP・最大AP・所持アイテム(倒すと入手できるアイテム:0orそれ以外)、所持経験値とゼニー」他いくつかの数値、戦闘時に使うアドレス区画と各敵の元々のステータスが格納されているアドレス区画は違う、までは見えた。敵1体・味方1人当たりのアドレス区画の範囲も分かった。これで大体4分の1くらいは解析できたか?
(2020.6.19全般的に修正)
また、戦闘中にパラメータ増減魔法(ST増減魔法)をかけた時の挙動もかなり分かった。「元々のステータス」と「戦闘中のステータス」を格納するアドレスは敵味方ともに別管理で、戦闘時の計算には後者が使われる。ただし元々のステータスを参照する場面はそれなりにあり、例えばギガートをかけた場合、「ギガートがかかったフラグを立て、そのフラグが立っているので、戦闘中ステータスを格納する箇所に元々の攻撃力ステータスを2倍した数値を直接入れる」という操作を行なっている。つまり、補助魔法は変動後倍率を管理しているのではなく、かかっているかどうかのフラグを管理していて、その魔法をかけた結果を計算した数値を「戦闘中ステータス」に格納し、直接使っているのだ。再計算されるタイミングはST増減魔法がかかる、あるいは何かかかった状態から戦闘不能になるといった、「ST増減魔法フラグが変化した時」、それから「戦闘中に装備を変更した時」である。
そして、ギガートとストール、カテクトとデイルは同居する。「この魔法がかかった」というフラグが別に存在し、それぞれ1回ずつ有効になる(一度かかった上下魔法は2度目は「失敗」扱いになる。対象者が倒れるとフラグはまっさらに戻るので1回ずつかけ直し可能)。上下が同時にかかった場合、ステータス増加→ステータス511キャップ判定→減少の順に判定される。「ステータス511キャップ」とは、通常のキャラでは「攻撃力・守備力・行動力は、素のステータス・装備品を加えた結果の最大値を511とする(攻撃力・守備力は減算される装備品がないためこれで確定だが、行動力だけは装備品の特性による行動力加算→511キャップ→鎧の重さ減少・・・の順で判定:鎧の重さ分だけキャップより下回る)仕様のこと。移動中にこの511キャップ判定でキャラのステータスが定まり、更に戦闘中はSTアップ魔法をかけた結果をもう一度キャップ判定にかけて最終結果を得ることになる。・・・はずなのだが、行動力だけは実際は上手く動作していない。
ハサートだけは何故か加算計算が行われるアドレスがおかしく、戦闘時行動力を示すアドレスから右に1つ・下に1つ(アドレス番号にして+11h)ずれている。しかも何故か8ポイント加算処理をしている。この8ポイントがどこから出てきたかはともかく、実際の計算に使われるアドレス=数値は変わらない。加算計算が行なわれない(ように見える)。ただしダールは正しく減算されるし、ハサートも雑魚敵が自身にかけた時は動いている(正しく動いているとは言っていない)ことを確認した。
SFC版においては、ハサートは効果はあるものの正しく動いていない。ではどう動いているかというと、戦闘開始時の値(雑魚敵の素早さは戦闘開始時、素の素早さ+数ポイントの補正が入る。プレイヤー、およびボス敵にこの補正はない)→ハサートがかかると「素の素早さ」になる(数ポイントの補正が消えている)。このわずかな変動が起きるのは行動力補正がつく雑魚敵だけで、つかないプレイヤー・ボス敵においてはハサートは何の意味も持たない魔法となる。
よって、本来(GBA版での仕様である)「100%『分』アップ」になるべきところが、「100%『に』アップ」(つまり現状ほぼ維持)になっている可能性が極めて高い。理由は仕様書の読み違いか、はたまた計算式解釈の間違いか・・・ 「+100%」をどう読んだか知らないが、誤解が生じたというところか。ともかくSFC版においては戦闘時の素早さは正しく変動しておらず、これがハサートが機能しない理由と推測できる。
なお、8ポイント加算されているアドレスは、「かけられたST増減魔法を管理するフラグ」とほぼ判明。
(2020.6.16追記、2016.6.21マップイメージ追加)
既知のチートコードから、戦闘中の敵のパラメータ他アドレス管理は8×16バイトを使用していると推測できる。対して、味方のアドレス管理は10×16バイトを使用していると推測できる。以下ではこれらを行列方式の方眼紙に見立て、8(10)を縦とし「(1〜10)行目」、16を横とし「(1〜16)バイト目」と表現する。なお、SFCはメモリ管理がリトルエンディアンになっているので、2バイト以上の数値は左が下位、右が上位の桁になる。
以下、(不明)となっているところは未調査、あるいは良く分からない箇所。単に「データの切れ目」・「未使用」的に00が入っている箇所もある気はする。グラフィック系で使用していると推測できるところは、システム仕様を調査する観点からは蛇足になるので深い調査はしないつもり。[16進加算]は明示された複数の値を16進数の値として加算することで成り立つ箇所。1バイトを0と1で構成された8ビットとみなしてフラグ「ある・なし」を管理する。該当ビットが1なら有効、0なら無効。
(戦闘中の敵データ)
敵1体目はアドレス:7E1400からスタート。7E147Fまでが敵1体目の管理区画。戦闘に入ったら、出てくる敵のデータをROM内の敵データ格納区画から引っ張ってきて埋めていく。なお、この区画は戦闘中だけではなく他のシーンでも使用されている。もちろん戦闘中ではないので用途は色々で、チートコードをそのまま使いっぱなしにしていると色々と変な動きをする可能性がある。逆に、移動中にしか使わないため戦闘中は意味を持たない、という区画も存在するようだ。以下の内容解析は戦闘中を基準にしているため、そういった区画は(不明確)または(不明)のままになる。
「敵らしさ」の表現は、敵の名前、グラフィック、ステータス、行動パターン(敵AI)で決まってくるが、ブレス2ではこれらはどうやら連動していない。それぞれで独立した格納区画が存在する。以下推測だが、エンカウントが決まると、まず敵IDを拾ってきて、それから該当するデータ(ステータスや行動AIなど)を各所に格納。内部的には、「この敵IDだからこの行動をする」ではなく「この行動AIを持っているからこの行動をする」としているだけらしい。ただ、ボスはボスで特別な判定をしているか?
(2021.1.3追記)海外のフォーラムで解析している人を発見。敵ごとに「いくらかの確率でこの行動、いくらかの確率でこの行動・・・」というリストが作成されていた。参考になるかも?
(簡単なメモリーマップイメージ:灰色は不明、青は判明[グラフィック系]、緑は判明[パラメータ系]、ピンクは当てはついたが不明確)
敵グラ・演出関係? | 敵グラ横軸 | 敵グラ縦軸 | 敵ID | ||||||||||||
アニメCT | |||||||||||||||
敵グラ横軸基準 | 敵グラ縦軸基準 | ||||||||||||||
敵の名前 | 敵現在HP | 敵最大HP | 敵現在AP | 敵最大AP | |||||||||||
特能頻度? | メッセ持ち? | 行動内容? | 敵の行動? | 行動内容? | 花咲きの有無 | 敵所持経験値 | 敵所持ゼニー | 所持品 | 敵の運 | 敵属性 | 持ち感情値 | タイマー? | |||
敵現在攻撃力 | 敵現在守備力 | 敵現在行動力 | 敵賢さ | ST異常 | 行動タゲ | 行動種別 | 行動内容 | ||||||||
敵HPゲージ | 敵へ与ダメ・回復 | ST上下フラグ |
(内容詳細)
(1行目)1〜4バイト目:その敵が今どんな状態かを演出?(ダメージを受けた、攻撃した、などなど・・・ 細かすぎて良く分からない)、7〜8バイト目:敵グラフィックの横軸、10〜11バイト目:敵グラフィックの縦軸、15バイト目:敵ID(ゲーム内部での並び順。ボス・雑魚ひっくるめて管理。雑魚モンスターのIDはSFC版攻略本「ブレスオブファイア2のすべて」の敵データ表の並び順通りになっている。この数値はグラフィックのみに関わる。敵スプライトIDの基準となり、表示面積を決める元ともなる。実際に出ている敵のIDは、多分だが7E0F9A、7E0F9C・・・以降で管理?)
(2行目)[ここからグラフィック・スプライト系の管理区画。どこまでかは不明]5バイト目:アニメーションのためのカウントダウンタイマー[フレーム数]、
(3行目)
(4行目)2〜3バイト目:敵グラフィックの横軸(基準:ダメージアニメーションで後ろにずれた後、この基準値を入れることで前に戻している)、4〜5バイト目:敵グラフィックの縦軸(基準)
(5行目)1〜8バイト目:敵の名前(日本語版では文字は特別なコードで内部定義されている[チートWikiに文字コード掲載あり]、英語版ではおおむね現実のJISコードの1バイトコード[ASCII文字]と同様のコード)、9〜10バイト目:現HP、11〜12バイト目:最大HP、13〜14バイト目:現AP、15〜16バイト目:最大AP
(6行目)1バイト目:通常の敵の場合は「特能を使う頻度」(0〜255、[この数/256]の確率で通常攻撃以外[防御・逃走含む、反撃・連続攻撃含まない]の行動を使うと思われる。おそらくROMのどこかに元数値があるはず。特別な敵の場合は「00」固定)、2バイト目:特別な敵の特別AI設定?(何かメッセージを持つ敵、イベント的に特定の行動パターンを取る敵の場合、ここが00以外になるっぽい。入る数値は会話内容?)、3バイト目:行動パターン?(6行−5バイト目と連動?、反撃・連続攻撃の特性はこちらで定義されている)、4バイト目:敵行動を示している?良く分からない、5バイト目:行動パターン?(6行−3バイト目と連動?)、6バイト目:アスパー「自然」の花咲きの効果(00:受けていない、10:受けている)7〜8バイト目:所持経験値、9〜10バイト目:所持ゼニー、12バイト目:所持アイテム、13バイト目:運の良さ(レベル?)、14バイト目:敵の属性(01:ghost、02:fire、04:water、08:ice、10:fly、20:undead、80:human)、15バイト目:その敵が感情値が上がる敵かどうか(0なら加算されない、1以上ならこの数値だけなら加算される[チートコードを使わない限り0か1しか入らない])、16バイト目:タイマーのようなもの(効果は不明。戦闘開始時からの大体の経過時間[フレーム数]0〜255、ただし初期値は0〜255がランダムで加算されてる、敵行動には関わってない、敵が倒れるか逃げたらカウントも止まる)
(7行目)3〜4バイト目:現攻撃力、5〜6バイト目:現守備力、7〜8バイト目:現行動力、9バイト目:賢さ(0〜7)、13バイト目:一時のステータス異常([16進加算]02:防御、10:行動終了[2回攻撃用にターゲット再指定をしないようにする効果もあるかも?]、20:ペポーパ、40:ため[敵特能ちからため]、80:必殺)、14バイト目:行動ターゲット(「誰に」に当たる。02:味方1、04:味方2、06:味方3、08:味方4、0A:敵1、0C:敵2、0E:敵3、10:敵4、12:敵5、14:敵6、80:敵全体、C0:味方全体)、15バイト目:敵行動内容(「どんな行動を」に当たる。02:通常攻撃、04:特能、08:防御、0A:逃げる?)、16バイト目:使用するもの(「何の技などを」に当たる。たいていは特能ID、一部例外的に、特定の「敵行動内容」との組み合わせで行動を表現している?)
(8行目)2バイト目:そのキャラのHPゲージ残量(0〜64[ドット]。初出で「?」になる敵でもゲージ管理はしている)、3〜4バイト目:このキャラに与えたダメージ(0〜999)またはHP回復量(2の補数:65536−実回復量)、5〜7バイト目:(不明)、8バイト目:かかっているステータス増減魔法([16進加算]パリア:01、ギガート:02、ストール:04、ハサート:08、ダール:10、カテクト:40、デイル:80)
(戦闘中の味方データ)
味方1人目はアドレス:7E1000からスタート。7E109Fまでが味方順列1番目の管理区画。ただしこれとは別に移動中のステータス格納アドレスが存在し、戦闘に入ったらそこからこの区画に必要なデータを移してくる仕組み。なお、この範囲は戦闘中だけではなく他のシーンでも使用されている。もちろん戦闘中ではないので用途は色々で、チートコードをそのまま使いっぱなしにしていると色々と変な動きをする可能性がある。逆に、移動中にしか使わないため戦闘中は意味を持たない、という区画も存在するようだ。以下の内容解析は戦闘中を基準にしているため、そういった区画は(不明)のままになる。
(簡単なメモリーマップイメージ:灰色は不明、青は判明[グラフィック系]、緑は判明[パラメータ系]、ピンクは当てはついたが不明確)
味方グラ・演出関係? | 味方グラ横軸 | 味方グラ縦軸 | 味方ID | 順列順番? | |||||||||||
味方グラ・スプライト関係? | アニメCT | 味方グラ・スプライト関係? | |||||||||||||
移動中のみ? | 移動中のみ? | ||||||||||||||
味方の名前 | 加入状態 | 恒久ST異常 | 味方ID | 味方LV | 味方現在HP | 味方最大HP | 味方現在AP | 味方最大AP | |||||||
グラ基準 | 強さ | スタミナ | 素早さ | 調子 | 装備中武器 | 武器有フラグ | 装備中盾 | 盾有フラグ | 装備中鎧 | 鎧有フラグ | 装備中兜 | 兜有フラグ | 装備中其他1 | 他1有フラグ | |
装備中其他2 | 他2有フラグ | 味方現在攻撃力 | 味方現在守備力 | 味方現在行動力 | 味方賢さ | 味方運 | 感情値 | 根性 | 一時ST異常 | 行動タゲ | 行動種別 | 行動内容 | |||
自HPゲージ | 味方へ与ダメ・回復 | 特技有効T数 | ST上下フラグ | ||||||||||||
陣形補正? | |||||||||||||||
(内容詳細)
(1行目)1〜4バイト目:その味方が今どんな状態かを演出?(ダメージを受けた、攻撃した、竜変身している、などなど・・・ 細かすぎて良く分からない)、7〜8バイト目:味方グラフィックの横軸、10〜11バイト目:味方グラフィックの縦軸、14バイト目:味方ID(リュウ、ボッシュ、ランド、リンプー、ニーナ、ステン、タペタ、アスパー、ディースの順で0〜8)、15バイト目:順列順番?(1〜4人目が順に0〜3)
(2行目)[ここからグラフィック・スプライト系の管理区画。どこまでかは不明]1〜4バイト目:キャラのスプライトID?(良く分からない)、5バイト目:アニメーションのためのカウントダウンタイマー[フレーム数]、6〜10バイト目:キャラのスプライトID?(良く分からない)、
(3行目)1バイト目:移動中のみ?・その味方がどの向きを向いているか(00:上、01:右、02:下、03:左)、12バイト目:移動中のみ?・歩行アニメのためのカウントダウンタイマー
(4行目)
(5行目)1〜4バイト目:味方の名前(日本語版では文字は特別なコードで内部定義されている、英語版ではおおむね現実のJISコードの1バイトコード[ASCII文字]と同様のコード)、5バイト目:仲間の加入状態(00:仲間になっている、40:パーティーから外せない、80:仲間になっていないor一時離脱)、6バイト目:恒久的なステータス異常([16進加算]01:瀕死[HP残量も判定に関わってる]、08:呪い、10:毒、20:ゾンビ、40:完全ゾンビ、80:戦闘不能)、7バイト目:味方ID、8バイト目:レベル、9〜10バイト目:現HP、11〜12バイト目:最大HP、13〜14バイト目:現AP、15〜16バイト目:最大AP
(6行目)1バイト目:味方グラフィック・キャラ基準(ここの値は移動中フィールドのキャラグラ、および戦闘のキャラグラ及びアニメーションの基準になる。各キャラ、細かい合体パターンの数だけ用意されている。00なら合体していない時の普通グラ、01〜45まで)、2バイト目:強さ(0〜255)、2バイト目:スタミナ(0〜255)、4〜5バイト目:素早さ(0〜511)、6バイト目:調子(0〜255)、7バイト目:装備中の武器(アイテムIDを格納。以下装備品2まで同様)、8バイト目:武器を持ってるかフラグ(というよりも装備しているアイテムの「個数or種別」。武器は11固定、防具は21固定、その他装備品と消耗品は個数。この区画は武器を装備していれば11、していなければ00[以下装備品2まで同様])、9バイト目:装備中の盾、10バイト目:盾を持ってるか(装備していれば21)、11バイト目:装備中の鎧、10バイト目:鎧を持ってるか(装備していれば21)、13バイト目:装備中の兜、14バイト目:兜を持ってるか(装備していれば21)、15バイト目:装備中のその他装備品1、16バイト目:装備品1を持ってるか(装備していれば01)
(7行目)1バイト目:装備中のその他装備品2、2バイト目:装備品2を持ってるか(装備していれば01)、3〜4バイト目:現攻撃力、5〜6バイト目:現守備力、7〜8バイト目:現行動力、9バイト目:賢さ、10バイト目:運の良さ、11バイト目:友好度、12バイト目:根性、13バイト目:一時のステータス異常([16進加算]02:防御、04:睡眠、20:ペポーパ、40:ため[究極リンプー・アスパー・タペタ]、80:必殺。アルハメルによる特能忘れは、詳しくは不明だがステータス異常扱いではない)、14バイト目:行動ターゲット(「誰に」。02:味方1、04:味方2、06:味方3、08:味方4、0A:敵1、0C:敵2、0E:敵3、10:敵4、12:敵5、14:敵6、80:敵全体、C0:味方全体)、15バイト目:行動内容(「どんな行動を」。02:通常攻撃、04:特能、06:アイテム、08:防御、10:戦闘中特技[ステンの「死に真似」は通常攻撃+使用するものIDを0Aにして判別])、16バイト目:使用するもの(「何の技などを」。アイテムID、特能IDなど・・・アスパーの自然を使うと、発動する予定の効果に割り当てられた特能IDが入る)
(8行目)2バイト目:そのキャラのHPゲージ残量(0〜64[ドット])、3〜4バイト目:このキャラに与えたダメージ(0〜999)またはHP回復量(2の補数。65536−実回復量)、7バイト目:特技有効ターン数(土アスパーの「花」特技使用ターン=5〜ターン経過ごとに1ずつ減、究極タペタの「切り裂く」使用ターン=1、次行動回ってきたら=0)、8バイト目:かかっているステータス増減魔法([16進加算]パリア:01、ギガート:02、ストール:04、ハサート:08、ダール:10、カテクト:40、デイル:80)
(9行目)14バイト目:陣形補正値?(ウォークアバウト・スクランブル・キープライフ・パラレルの順に1人目:00・02・04・02、2人目:06・02・0A・04、3人目:08・04・0A・08、4人目:0C・06・0C・0A)
(10行目)
・共同体の調査・・・全て解決済み!
(本命調査:ベレッタの商品群変更処理の仕方)
・・・色々調査した結果判明はできた。その途上での副産物として、各住人に加入承認した時のアドレス値の変化は以下の通りと判明。
※チートコードとして使う場合、0を基準としてこれらの数値を足した値を使用する。
(例:ベレッタとウィンとカラシニコフのみを入れ、他の部屋は空欄にする場合、アドレス:7E55ECに4+2+128=134[16進数値:86]、他3アドレスに0[16進数値:00]を入力。ただし部屋4以降を使用するためには共同体が最大まで大きくなっているという条件は無視できないので、任意の住人を仮加入させてさっさと育てた上でこのチートコードを使う)
(建物1)
ヘッケラー(商人系):アドレス:7E55EBが+1
ケイ:7E55EBが+2
プー:7E55EBが+8
バック:7E55EBが+4
ワッツ:7E55EBが+16(16進数表記で+10)
(建物2)
ウィン:7E55ECが+2
レミントン(商人系):7E55EBが+32(16進数表記で+20)
マクリーン:7E55EBが+128(16進数表記で+80)
ボクデン:7E55ECが+1
ペチリ:7E55EBが+64(16進数表記で+40)
(建物3)
ウーピ:7E55ECが+8
マコティー:7E55ECが+32
アズサ:7E55ECが+16
ベレッタ(商人系):7E55ECが+4
アッキー:7E55ECが+64
(建物4)
ラッカー:7E55EDが+4
カラシニコフ(商人系):7E55ECが+128
バロウズ:7E55EDが+2
ガーバー:7E55EDが+1
(建物5)
ハンズ(商人系):7E55EDが+8
マーチン:7E55EDが+16
エル:7E55EDが+64
ヨウゾウ:7E55EDが+32
(建物6)
ダイエ(商人系):7E55EEが+4
サルバドル:7E55EEが+2
サマナー:7E55EEが+1
セーフィ(商人系):7E55EDが+128
・・・アドレスの小さい順に直すと
ヘッケラー:7E55EBが+1
ケイ:7E55EBが+2
バック:7E55EBが+4
プー:7E55EBが+8
ワッツ:7E55EBが+16
レミントン:7E55EBが+32
ペチリ:7E55EBが+64
マクリーン:7E55EBが+128
ボクデン:7E55ECが+1
ウィン:7E55ECが+2
ベレッタ:7E55ECが+4
ウーピ:7E55ECが+8
アズサ:7E55ECが+16
マコティー:7E55ECが+32
アッキー:7E55ECが+64
カラシニコフ:7E55ECが+128
ガーバー:7E55EDが+1
バロウズ:7E55EDが+2
ラッカー:7E55EDが+4
ハンズ:7E55EDが+8
マーチン:7E55EDが+16
ヨウゾウ:7E55EDが+32
エル:7E55EDが+64
セーフィ:7E55EDが+128
サマナー:7E55EEが+1
サルバドル:7E55EEが+2
ダイエ:7E55EEが+4
(以下未使用)
・・・アドレス:7E55EB〜7E55BDまでの4バイトを使用し、2進数表記でフラグ管理している。あるケタが1ならその住人がいる、0ならその住人はいない、となる。これを数値の足し算の観点から見ると上記の書き方になる。数値の足し算だけなので無理やり2人以上を同じ部屋に住まわせるチートも簡単だが、商人系の住人がいるとその住人が優先され、商人系以外の住人は画面に出てこない。ダイエとセーフィはどちらも商人系だがグラフィックがかぶり、セーフィのみ有効=預かり所になる。
同居させた場合の各住人のイベント進行の扱いは、おそらくだが問題にならないと思われる。イベントが進む系の住人はそれぞれの建物で1名のみ(・・・建物5のマーチンとヨウゾウだけが怪しいが片方はティアの色管理、片方は「はい・いいえ」のみだからセーフ?)で、残りはその場で効果を発揮するタイプの住人かイベントがない住人ばかり。これらのフラグは部屋が違えば同時進行の可能性があるので別々に管理されているはず。
ただし各部屋に住人が割り当てられているのではなく、「この住人が入る部屋はこの部屋」とプログラム上で決まっている。ある部屋に入った時、その部屋を使用する住人のチェックフラグ区間(アドレス数値の該当箇所)のうち、どこかが2進数上で「1」になっていれば(=対応する住人がいることになっていれば)、その住人が登場する。だから例えば部屋1にベレッタを入れるという芸当はチートコードを使用しても不可能。
また、ある部屋に住人を加入承認した・していないを管理するフラグは別に存在する(アドレス:7E55EAの8ビットのうち下6ビットを使用した2進数・・・1なら00000001だから部屋1のみ使用中、6なら00000110だから部屋2と部屋3が使用中。全部埋まると63=00111111を取る。使用中の部屋に入るはずの住人はプレイ中には加入承認できない・・・のでチートコードで無理やり入れたり同居させたり)。共同体を大きくするためには部屋1〜3に誰か適当に加入承認する必要、つまり7E55EA=7にする必要がある。
しかし肝心のベレッタは解決できず。上記のリストを見た通り、ベレッタはデータ内に1人しかいない。ベレッタの商品変化はこれをいじるだけでは実現しないということ。どこかに違うフラグが存在する。戦闘数? プレイ時間? それともストーリー進度で変わるフラグがある?
同じ部屋の住人候補「アッキー」も、ストーリー進度によって住人の数が増えるタイプ。これもベレッタと同じ要因で増えるのだろうか? ただ、増えるペースは明らかにベレッタよりは早いように見える。
(2020.5.19追記)
ベレッタの調査を少し進めた。ハイランド城突入直前にベレッタを加入させたところ、名人の笛をもらったところでも品揃えに変化なし。ハンドブックに挙げられている区切りはどうやら固定ラインではなさそう。戦闘回数・プレイ時間をいじるチートも使用してみたが変化なし。あるいは、区切り条件は挙げられた通りだが近すぎるとダメ?
何となくグーグル検索していたら、以下の日記を発見。
参考ページ:http://www.enpitu.ne.jp/usr9/bin/day?id=93405&pg=20060115 から
「共同体の発展状況も関係がある」(ハイランド城クリア前にランク1だったが、そのまま共同体を増築だけ行なったらランク2になった)という内容で、この通りなら、ストーリー進度というよりイベント進行回数が関わっている可能性が高い? しかも「回数」は「共同体増築」も1回とカウントする可能性がある? これだけだとランク2以上にするためには増築が必須である可能性の検証が必要だけど、増築前でもストーリー進度によってランク2になるなら増築必須の可能性は消える上に、「改築したことで増えるフラグ」をチェックすればベレッタのランクアップを実現する機構が詳しく分かるかもしれない。そう、ストーリー進行中、そのフラグを注視していればいい。なお、ハイランド城直前加入のデータでは、ハイランド城突破直後に変化なし、かつ増築しても変化なしだった。
引き続きストーリーを進め、ファマ村:畑耕しイベントを終えてナマンダ寺院に行く直前(ランド母にお使いを頼まれる前:耕し後に話しかけていない)でセーブ→ベレッタを確認したところ、ランク1の品揃えだった。ここで増築を依頼し、増築を終えたところで再確認したらランク2に上がっていた。増築せずに共同体に8回出入りしても変化なし。また、耕し前にも同じことを行なっているが、その時は増築前・後ともに変化していない。よって共同体の増築、および畑を耕すイベントの完遂(あるいはイワオカインを倒す?)が何らかのフラグ要因(ストーリー進度の足し、あるいは進行ポイントの加算)の1つであることは確定。
(2020.5.20追記)
ちょうど、そのすぐ後にナマンダ寺院にお祈りに行くシーンがあった。そこで、寺院でお賽銭を払った後に戻ってみたらランクが上がっていた。ならばと少し戻り、寺院の入り口をふさいでいる(畑を耕し終えないと入れてくれない)人をどかしたらすぐ戻ってみた。そうしたら、こちらもランクが上がっていた。
そこでメモリ内容を見ながら増築を行ない、一度戻して寺院に入る許可をもらうシーンをこなし、と検証。どちらも完了後で同じ値になり、かつ値が増えているポイントを探したら3か所発見した。アドレス:7E56A2、7E56A3、7E56A4が該当。
このポイントをそれぞれ数値を変えてベレッタの品揃えをチェックしたところ、品揃えが変わるアドレス:7E56A4を特定できた。ベレッタの部屋に入った時、このアドレスの値の範囲によって品揃えが確定すると判明した。残りの2アドレスの用途は今のところ不明。アッキー・プーに使うための値の可能性が一番高そうだが結論は出ていない。
(2020.5.28追記)
アドレス:7E56A2は判明。予想通りプーのイベント進行度だった。0〜7:持ち家ゲットを喜ぶ、8〜15:仕事を始めようか悩む、16〜:「あれ」(月のしずく)を1000Zで売ってくれる。ベレッタと違い、「話した瞬間の進行点」で変化。部屋の中でチートコードとして数値をいじったらその場で行動が変化する。進行点はベレッタと共通の進み方をするが、ベレッタよりも後に連れてきた場合、先に連れてきた場合における進行点変化はまだ未調査。
以下、2020.6.1時点での結論。調査完了したので確定とする。誤認が判明次第修正・追記する。
・ストーリー進度に関わる(というよりも特定の行動を終える、特定の敵を倒す、あるいはターゲットに話しかける、など)、ストーリー管理のフラグ値が変化する一部の行動に対し、品揃え進行点(仮称)に+1がついている。そのポイントを通過するごとに進行点がたまっていく。
・このポイントはベレッタ(というよりも3軒目の住人なら誰でも)加入時から累積が有効化される。ベレッタが加入しないとこの進行点は0のまま動かない。そして、ベレッタの商品ランクは品揃え進行点0〜7:ランク1、8〜15:ランク2、16〜23:ランク3、24以上:ランク4・・・と定まる。ベレッタの部屋に入った時、この値の範囲によって品揃えが確定する。この値を24以上、かつ居住人フラグをベレッタがいるようにいじればチートコード(ベレッタ加入&最終装備販売)として使用可能。
・進行点が+1されるストーリー上のポイントは、現時点で判明しているのは以下の通り。ベレッタ加入時に+1があると仮定しても、最低でも+1が23か所、あるいは+2以上されるポイントがあるはず。実際はベレッタ加入で+1されなかったので、最低でも24か所の加算ポイントがあると推測。
調査方法は、特定アドレスの値を見ながらストーリーを進め、値が変化したポイントと上昇値を記録すればOK。基本的に、7E56A2〜A4の3アドレスにそれぞれ+1されるようだ。おそらくはストーリーが進む人だけと話して完全解決する問題ではないと思われるので、どの町もできるだけ全員話しかけてみるのが良さそう。
(2020.6.1追記)進行点が加算されだす条件は特定の住人ではなく、「その部屋に住人が誰か入った時」だった。この「誰か」は加算開始判定に影響せず、普通の商人でも他の住人でも、とにかく部屋に入居していれば加算が始まる(対象住人以外では無意味な管理数値になるだけ)。ただし住人を入れ替えることはできないので、実質的に入居させた住人専用の進行点となる。部屋1つごとに1バイトが当てられていて、アドレス:7E56A2が部屋1(プーが入る部屋)、7E56A3が部屋2(該当住人なし)、7E56A4が部屋3(ベレッタ&アッキー)、7E56A5が部屋4(該当住人なし)、7E56A6が部屋5(マーチン&エル)、部屋6は7E56A7(該当住人なし)が対応する。
(2020.6.1追記完成)進行点が加算されると判明しているポイント:おおよそストーリー順。
(ストーリー上のポイントでない部分:条件を満たせばいつでも獲得できるが自発的に獲得する必要あり)
・共同体の増築完了・スイマー城付近の滝でドラゴンの力を得た瞬間・魔女の塔で水シャーマンを見つけた直後・ファマ村で土シャーマンを見つけた直後(回数が足りず月のしずくを見つける、では加算されない)・バンドオ教会地下で聖シャーマンを見つけた直後(エブライ爆破前・後を問わず)・無限の塔で魔シャーマンを見つけた直後
(ストーリー上のポイント部分:ストーリーを進める上で必ず通過することになるので、獲得を意識する必要はない。逆に、このポイントを過ぎてから加入させてもストーリーは戻れないので、ここに挙げるポイントは獲得し直せない)
・タペタを見張る監獄見張りを倒した直後・偽タペタと料理勝負をすることになった直後・偽王子事件を解決してタペタを再び仲間に加え、陣形を組み直した直後・ゲイト村の事件をレンジャーギルドで聞き終え、仲間4人が集まった瞬間・くじら体内でムンマーを倒した直後・団長を倒しアスパーを仲間に加え、外に出た直後・名人の笛入手後、再びステンと合流した直後・ゲドが音楽の国の女王のダイエットに一度失敗し、手伝いを頼まれた直後・ダイエットを完了させて女王を救い、宝物庫の宝を持っていく許可を得た直後・大賢樹の夢の中でアルハメルを倒した直後・天の塔の入り口を守る海人に塔の調査の許可を得る(塔に潜る必要はなし)・天の塔最上階で風シャーマンを回収した直後・畑を耕し終えてランド宅で一晩休んだ直後・ナマンダ寺院の入院許可を得て、入り口の人が横に退く・ファマ村でランド母がさらわれ、エバ教信者を倒してエバ大教会に行く決意をした直後・翼の証を手に入れる(=ニーナのご先祖様を倒して戦闘から抜ける瞬間)・ミイナが翼の証を使用した瞬間・エブライ初回突入時、クラリスに話しかけ、エブライから出る1歩前・盗人の墓で盗人の証を手に入れた瞬間・ネクロマンサーを倒して戦闘から抜ける瞬間・大教会突入直前の門番の問いに誤答して倒した瞬間(「正答して通過」はダメ。わざと誤答すること)・レイを倒した直後・ランド母がランドの身代わりとなり壁に潰され、ランドが階段を上がる瞬間・エブライを爆破した瞬間(ガナーを倒した場合はエブライから脱出した瞬間、救った場合は共同体にワープした後に話を聞き終わった瞬間)
進行点が加算されない主なポイント:一見、進行点が加算されそうなポイントに見えるが実は加算ポイントではなく、品揃えやイベントは進まない
(非ストーリー上)・ベレッタ筆頭に誰かを共同体住人として連れてくる(:進行点の加算が始まるだけでスタートは0点から)・エバ協会で寄付する、および寄付し続けてエバの書をもらう・エイチチを共同体井戸に招く・ディースを仲間に加える・アルジャーノンたちを倒しアルの実を手に入れる・ウパルパを倒す(逃がすか否かは無関係)・ナマンダ寺院にお賽銭を入れる(初回・リピートを問わず)・共同体を浮遊させる・鐘突きイベントをこなしてド=ブンバ=ラを獲得する
(ストーリー上)・山猫を倒す・山猫にせんぎりを教えてもらう、あるいは料理を振舞ってもらう・ニムフから王家の指輪を回収する・スイマー城地下で大ミミズ・大ゴキブリ・金蝿を倒す・偽王子との料理対決に敗れる・クワドラを倒す・パティを発見し回収する・トラウトに真犯人を引き渡す・トラウトを倒し聞き耳頭巾を取り返す・グランパを叩き起こしくじらベルを手に入れる・団長にショー中止を直談判する・最初に大賢樹と話し、セラピの枕を持ってくるよう頼まれる・シュプケーと面会し、落とし穴に落とされる・トゥルボーと戦う(1回目・2回目ともに)・ステン単独でハイランド城を半分突破し、仲間と合流する・シュプケーを倒し名人の笛を手に入れる・音楽の国のおばばから女王のダイエットを依頼される・ゲドをパーティーに加えて音楽の国に出向く・キノコを回収してジジのかがみを手に入れる・宝物庫の番人からセラピの枕を手に入れる・大賢樹の夢の中でアルハメルを倒し、脱出する・霧の谷で霧が濃すぎて進めないという話を聞く・初めてファマ村に着き、ランド母とランドを会わせる・畑仕事で雑草、石ころ、切り株、イワオカインを倒す・ニーナがウインディア王と話をする・最初にコットの砦に入り、ティガと話をする・盗人の証を入手後砦に戻り、ティガと争いになる(けんかに至るかは無関係)・バンドオ教会で地下への抜け穴を発見する・教会地下の隠しモンスター(エバ教)を倒す・教会地下で護衛を倒す・大教会に乗り込む直前のティガの、エバの教えの問いに答える(正誤問わず)・大教会突入直前の門番の問いに正答してスルーする(誤答して倒せば加算される)・クラリスとティガが共に倒れる・ゲイト村でドラゴンを爆撃した直後・パティがハバルクに捕まり、バレリーに助けられるシーン・ハバルクを倒し、バレリーに封印の扉を開けてもらった直後・ドラグニールに到着し、長老の話を聞いた直後・バレリーの過去話をなぞり終える・アンフィニを獲得する・バルバロイを倒す(多人数で・1人でを問わず)・ラスボスにかけられた呪縛をレバー連打で打ち破る・ラスボスまで走り続け、一閃して正体を現させる・ラスボス第1形態でアンフィニを使い仲間を復活させる・ラスボスを倒す(=クリア後もセーブデータへの反映および特典なし)
・・・これでベレッタの品揃え強化タイミングが分かった。アッキー(今まで「あっきい」だとばっかり思ってた・・・ よくよく確認したら「アッキー」でやんの・・・)などについても分かったし、これで最終解決とする。
(付帯調査:マーチンの役割)
いつまでに入れればいいのか、最大限早くした時(くじら岬クリア直後)と最大限遅くした時(音楽の国の女王のダイエット完了1戦前?)で比べたい。早い時でOK、遅い時でNGが出たら挟み撃ちの要領で最低限のタイミングを計る。もし遅い時でもOKが出たら今度はダイエット直後に加入させて金を払い、ゲームクリアまでちょくちょく様子を見てみる。
ベレッタ調査を含む簡易チャート:
まず共同体の部屋3が空白の状態のまま、クジラを取る。セーブし、AとC:マーチンの進行チェックのためだけのデータ B:ベレッタの進行タイミング調査も兼ねたデータを用意。
A:適当に住人を入れてマーチンを即加入させる(最速加入)。金を払う→音楽の国ダイエットイベントを完遂→マーチンイベントチェック。これで
イベントOKなら・・・Bのデータを進め、マーチンイベントが
NGなら・・・C:加入タイミングを例えば名人の笛ゲット後、マオリ島に行く前、行った後など少しずつターゲットを絞っていく。
OKなら・・・C:加入タイミングをダイエット後にし、ストーリーを進めていく。OKになるタイミングはあるか?
イベントNGなら・・・とにかくストーリークリアまで進めてみる。そのまま何も起きなければガセネタだったと結論。
B:アスパーを助け、大賢樹に話しかけた後(ハイランド城に入る直前)まで進めたらベレッタを加入させる。品ぞろえが第1段階であることを確認。エンカなしのチートを使用し、最低戦闘数(イベント戦1回+ボス3回)でクリア。ベレッタの品ぞろえをチェック。第2段階まで進んでいたらほぼストーリー進度がフラグ。進んでいなければ果たしてどうなるか? どちらにしてもマーチンのイベントのチェックのためにダイエットイベントを途中まで進め、体内から脱出してからマーチンを加入させて金を払う。ダイエット後、イベントが進むか? それでもダメなら(あるいは全く別調査として)、戦闘回数やプレイ時間をチートコードでいじってみて変化するか? も確認すること。
(2020.5.12追記)Aを進め、「イベントNG」だった。そもそも、ソース元記事の記載をグーグル翻訳にかけた時の訳文を誤解釈していたっぽい。「ダイエット前に加入させればダイエット後に5000Zゲットできる」ではなく、「ダイエット完了までに加入させないと5000Zもらえない」という意味だったようだ。仕方ないのでクリア付近まで進めてみる。現在ファマ村:デイジイがさらわれたところまで調査、進展なし。
グーグル訳文:それから彼は戻ってきて、あなたがその男と戦うつもりだと言って、あなたがTunlan(音楽の国)の女王を治す前にあなたが彼を手に入れない限り、何も役に立たない、そして彼はあなたに5,000ゼニーを与える、それはそれほど長くは続かない。
(2020.5.15追記)更にストーリーを進め、バルバロイを倒すまで進行。残りはラスボスだけだがラスボス後はセーブ不可なので実質ここまでで事態が動くはず。しかしマーチンは帰ってこない。ROM内に5000Zに関するメッセージデータは存在しているので、何かあるとは思うのだが・・・ それとも逆に、加入から即解決させなきゃならない、ってことか?
ただ、もう少し海外サイトを検索したところ、気になる文面が。
出典元:https://bof.fandom.com/wiki/Township から
該当箇所のグーグル訳文:彼は「あの男」とだけ呼ばれる不特定の敵を倒すためにあなたとチームを組むことを提案しています。彼はすぐに彼の計画に資金を供給するために3,000ゼニーのローンを要求します。同意すると、彼はメモを残し、彼を探してゲームの残りの部分で消えるように指示します。あなたが拒否した場合、彼は後であなたをごまかそうとしたことを謝罪し、5,000ゼニーの1回限りの贈り物をあなたに与えるでしょう。
・・・もしかして単純に、加入後に金貸しを拒否して(そもそも話しかける必要があるのか?)、いくばくかの間放置してストーリーを進めればいいだけか?
(2020.5.19追記)
・・・イベントの内容はあっさり解決した。最速加入後、借金の申し出に「いいえ」と答え、ハイランド城をクリアして名人の笛をゲットするまで進めて共同体に戻ったところ、マーチンが負けを認め5000ゼニーくれた。
このイベントは、加入承認した後に共同体に戻り、一度は「話しかけて借金を拒否する」必要がある(最速加入後、話しかけずにハイランド城をクリアしても借金を持ち掛けられた=イベントは始まっていない)、というところまで判明。
続く(最後の)謎は、ストーリーをどこまで進めることが許されるか。とりあえず、ハイランド城クリア直後に始めると女王のダイエット成功直後に負けを認めた。一気に飛ばしてエブライ破壊直後まで進めてみる。OKならバルバロイを倒してから加入させ、戦闘数やプレイ時間をいじる。NGなら挟み撃ちでアタリをつけて調べてみる。
(2020.5.20追記)
エブライ破壊直後まで進め、加入させた。もしベレッタと同じような進行点制度だとしたら、進行点がもらえるようなイベントをこなせば先に進めるのではないかと推測。借金を断った後、土のシャーマンと聖のシャーマンを見つけてきて進行点を+2させ、再び話しかけたら5000Zゲットできた。シャーマンを加えなかった場合はいつまでも借金を迫ってきた。
更におまけ的な追加調査を行ない、エルも同様に連れてきてから+2点でイベント発生すると判明した。
・・・これで特定住人のイベント発生システムが分かったので、最終解決とする。
・仲間のドラゴンズティアの色における特能制限・感情の深まり方・・・解決済み!
ティアの色による特能制限は、SFC版でも存在する。ニーナのレベルをバルハラーを覚えるまで上げ、ティアの色を悪くするチートを使用したところバルハラーのみ使用不可になった。色を良くしたら使用可能になった。
ティアの色は通常のフィールド戦闘において、ある条件で勝利=各人に加算。カペタン村付近でレベル60以上にして戦っても増えるので、味方vs敵の強さによる影響は受けない。そのキャラで敵を倒したかどうかも不問。
条件は、敵の種類&数と思われる。カペタン村周辺だとリザードマンを1体倒すと+1、3体編成なら全滅させると+3。ひとでキノコ・キラーゴブリン・ポイズンムーバーを何体倒しても+0。この性質上、増えると決まった戦闘では巻き戻しを使っても結果は変わらない(+1される敵が逃げない限り)。共同体付近ならめだまグミは+1、ガンヘッド・まだらひる・バブルバックは+0。コルセア付近のみなしごデビルも+1。何か共通点がありそうな気もするがなさそうな気もするので、結局ストーリーを1周して全モンスターを調べてリスト化した方が早い感じと結論。
ティアの色が+1される敵を倒すと、そいつを倒したアニメが始まった瞬間(おそらく内部的に「倒した」処理が始まった瞬間)にアドレス:7E0F37が+1される。戦闘終了メッセージが始まる直前に各人のティアの色のアドレスの値にアドレス:7E0F37の値が加算されて、アドレス:7E0F37の値は0に戻る。(チートコード的には、アドレス:7E0F37を200くらい[元々リュウを含めどのキャラも初期値は128]にすると、戦闘終了後にリュウ以外3人の感情値が255になる)。
なお、制限対象の特能を使用するために必要な感情値は、バルハラー・ドメガが175、リフレストが200、リバルラが250となっている。通常はレアケースだがリュウもこの制限対象にかかる。
(2020.6.5追記)
結局全敵調査を行なって、結果がまとまったので掲載。本記事用のページをそのまま転用する。別ページにて。これで全仕様が分かったので最終解決とする。
チェック方法:とどめを刺したとき、特定アドレス:7E0F37が1増えるか否か。
その他のチェック項目・・・
・○の敵をリュウ1人だけで倒したときにどういう反応が出るかも確認しておきたい。・・・答え:7E0F37の値は1増える。実はリュウ自身も初期値は128でみんなと同じように変動してる。
・ステンの「すり替え」で敵を変えると・・・答え:7E0F37が1以上だったとしても0に戻る。
・ド・ブンバ・ラ獲得のためのナマンダ寺院ミニゲームの難易度
・・・まだ調べてません。これが分かったからどうなるのか、という話でもないけどGBA版との難易度の違いが調べられる伏線にはなる。
その他
厳密にはゲームの仕様の話ではないですが、個人的に知識として仕入れたい項目。
(Herb 9.0 Glitchというバグ技について)
・・・まだ理解していません。
(デバッグモードについて)
・・・まだ分かっていません。
余談
いくつかチートコードやら、まだあまりまとまっていない仕様っぽいものが掘り返せたのでまとめておく。
・画面上のドラゴンズティアはどのシーンでも同時に1つだけしか表示されない。で、その色を示すアドレスは7E141Cで、値の範囲は0〜31:指し示す感情値を8で割った整数値。最高の状態:虹色は、感情値で言えば240〜255。なお、感情値を保持するキャラは少なく、プレイヤーキャラ9人の他はおそらくレイ、山猫店主、バロウズ、ヨウゾウだけ。残りは会話ウインドウ上で決まった色に象徴的に変動させるだけ。
・上記4人の感情値は4バイト・1か所に固まっており、全て0〜255を取る。レイの感情値=アドレス:7E5678、山猫店主の感情値=7E5679、バロウズ=7E567A、ヨウゾウ=7E567B。
・エバ協会に寄付した回数はアドレス:7E504D。お金が足りないまま寄付しようとして10Zもらった時は、当然回数には加算されない。また、寄付した回数が20回になった(=累計19回の時に寄付をした)時に限りエバの書をもらえる。なお、これをチートコードとして使って19回に固定すると、寄付をするたびにエバの書が増える(複数持てる)。
・ナマンダ寺院にお賽銭を入れた回数はアドレス:7E502F。ソロ出現イベントに関わる判定タイミングを過ぎている(≒エブライを破壊している)と、ここを変えても結果は変わらない(回数達成状態でエブライを破壊し、その後に回数を減らした上でファマ村に戻ってもソロがいる)。つまり、ソロ出現フラグはどこかに別に1つ確保されている。なお、出現フラグの決定は最初にエブライに入る時ではなく、「クラリスを助けるために大教会に乗り込むところ」以降と判明した。端的に言うと、エブライへの道を手に入れた直後まではセーフ。さらに調査したらもうちょっと先の「ランド母がランドの身代わりとなるシーン」がチェックポイントだった。つまり土のシャーマンはナマンダの神がランド母の生まれ変わり(?)的な存在として巡り会わせた、と妄想できる。
・ゲーム内の昼夜を判定するような時間の変数は、アドレス:7E0CB8で秒数(1フレーム=60分の1秒で1カウント、60で1分)、アドレス:7E0CB9と7E0CBAで分数(0〜127:何故か2アドレスともに同じ値が入る。内部処理的にはきっと違う処理に使っていると思うが詳しくは不明。22〜97が昼の時間帯)。さらにアドレス:7E0CB7で昼夜判定(0なら昼、1なら夜)となっている。ブレス2内の時間を1フレーム1秒、1日24時間と仮定すると、「1時間」当たり60×128÷24=320フレーム=現実の5.3秒ほど。これは、ワールドマップ上で、コマンド画面を開かずにただ動かずじっと待っていても進む(コマンド画面を開いている間は進まない)。なお、リュウの特能「ひと休み」は、時間を43(8時5分ほどに相当)・114(21時20分ほどに相当)のいずれか次に来る方の値にする。
・ブレス2のフラグ管理は、実は結構しっかりしている。例えば大教会。チートコードを使って上の階に先に行ったとしてもハバルクは待ってないし、少し手前の2つ目の壁を壊すシーンでは、ランド母を助ける前に壁を壊してしまってもストーリーは進まない上に、その後にランド母を助けても壁は復活していないのでイベントが進まない。ランド母の涙のシーンは回避不可能。コード的には、1つだけすぐ分かったものがある。ナマンダ寺院へお祈りに行くシーンのフラグ管理値変化は、アドレス:7E55D4が16進数値で07(寺院に入る前)→27(入る許可をもらって入り口の係がどいたシーン)→2F(お賽銭を1回以上入れた)。ここの値=2Fの時、ランド母がさらわれる。ストーリー管理フラグはきっとこの周囲の何十アドレスかで構成されているのだろう。さすがに調べようとは思わないが、メモリ破壊系TASで生きたりするのだろうか。
・アスパーの「自然」のうち、いまだ効果がはっきりしていないのは「ハナガサイタ」。草原フィールドで使用すると花が咲くことがあるが、花が咲く前後でメモリ観察をしてみると、どうやら花が咲くと敵全体の攻撃力・守備力・行動力が大幅減少しているようだ。ラグナライダーに試したところ攻撃力が400→200、守備力が208→104、行動力が230+α(雑魚戦においては敵行動力に各個体ごとに数ポイントの+補正あり)→115(+α補正打ち消し)と、それぞれ50%減少している。これはラグナライダーほどの耐性持ちでも無視して効果発揮するという証左でもある。発動すれば超難敵→ちょっと強敵程度まで能力が落ちる。まぁ、草原=ワールドマップで、ワールドマップにボスはいないから問題ないといえば問題ないのか。
・対して、土アスパーの「花」の効果は、「使用後4ターン(使用ターンを含むと5ターン)ひとり突撃をかます代わりに、次ターンから4ターンの間のみ攻撃力2倍、防御50%、素早さ2倍」となっている。この「攻撃力2倍」は素のステータスにかかるもののギガートが更にかけられる。その上、「ステータス511キャップ」を超過する。このキャップを超過できるのはアスパーの花だけ(「必殺」は単に与ダメが2倍になるだけ[=元々の攻撃力が相手守備力を超えてないとダメージは1〜4]なので攻撃力は変化していない。力ため系の技でも一時的にキャップは突破できるが、ステータス上でも突破しているのは花だけ)。
・ブレス2では俗に「反撃必殺」と呼ばれる現象が起きる。これは「必殺が先に出たキャラの、そのターンの反撃は全て必殺になる」というバグのようなものだが、これが起きる原理はいたって単純。「必殺」は「一時のステータス異常」に区分される特別な状態で、「攻撃をした時、その異常になっていたら必殺扱いで与ダメ(≠攻撃力)2倍」という処理になる。この状態になるのは「通常攻撃を仕掛けた時に一定確率(または確定で必殺魔法になる一部攻撃アイテムを使用した時)」であるものの、その「[必殺]状態を消す」という処理はターン終了時まで行なわれない。おそらくは、単に「0」としてしまうと他の「防御」や「ペポーパ」などの異常も一緒に消してしまうことになるが、代わりの方法である「異常値が16進数で80以上なら、攻撃処理終了後に16進数で80だけ減算する」という処理をしなかった「手抜きなプログラム」の結果だろう。
・サルバドルが仲間の石像を作るのに要する時間は、プレイ時間で10分。これは管理上は「借りた瞬間(「借りますぞ!」という会話ウインドウを閉じて仲間補充のためのメンバー選択に入った瞬間)のプレイ時間」を別アドレスに書き込み、ワールドマップ描画時に10分以上経過していれば、あるキャラの石像が建つフラグを特定アドレスに加えて(コードは既出)、仲間を借りてるフラグを消す・・・という処理をしている。アドレス:7E5029〜2Aまでが借りた時の「時間」、7E502Bが借りた「分」。ちなみに実プレイ時間は別管理されていて、アラビア風の酒場の客から聞けるのは「??時間?分」までだが内部カウントは「??時間?分?秒??フレーム(60フレームで1秒)」までされている。「リアル時間」とほぼ連動しているものの、一部例外あり。エンカウントした時、ワールドマップから街・洞窟などへ入る時やワールドマップに出る時、コマンド画面を開く時・・・ などには画面の暗転が入る。この暗転している間はプレイ時間は進まない。
・カセットROM内の話。敵データの部分はおそらく、
(1行目)敵データの名前1〜8文字目(1文字1バイト。英語版では、おおむね現実の半角JISコードと同様のコード、日本語版ではひらがな・カタカナが特定の文字コードで内部的に定義されている)、最大HP2バイト、最大AP2バイト、運の良さ(敵のレベル?)1バイト、攻撃力基本値2バイト、守備力基本値下位1バイト、
(2行目)守備力基本値上位1バイト、素早さ基本値2バイト、賢さ(ハンドブックのMsが−3=賢さ7、+4=賢さ0)0〜7の1バイト、経験値2バイト、ゼニー2バイト、ドロップパターン0〜62[ハンドブックの順番通り]の1バイト、属性(01:ghost、02:fire、04:water、08:ice、10:fly、20:undead、80:human)。ここまでは確認済で、残り6バイトは??????・・・最初1バイトはトレジャークラス[頭の4ビットで確率0〜7、後ろの4ビットは何なんだろう・・・? レアアイテム出現比率ではなさそうだし、再抽選の確率だったりするのか?]、残り5バイトがAI?(1バイト目と3バイト目で行動パターンが決まっているような・・・?、2バイト目は、何かメッセージを出す敵の場合に00ではなくなってるような、そうでもないような・・・ 残り2バイトが分からない)との情報が。ホントかなぁ。なお、ハンドブックに記載がない「ガニメデ」の運の良さ(敵のレベル?)は55。
・・・の32バイト構成。これが順に並んでおり、ここのデータを戦闘中ステータス管理メモリに読み込んで使用する。
・戦闘時の可変パラメータを管理している区画は、おそらくアドレス:7E0F00から始まっている。例えば7E0F70は「コマンド入力を終えた人数」(プレイヤー4名→敵 の順)、7E0F702〜7E0F7Bまでの10バイトで「行動者」(「コマンド入力順」→全員完了後に「行動力順」に並び替えられる)。戦闘ターンが始まると、7E0F70が0になり、1人行動ごとに1ずつカウントアップ。全員行動を終えたら15(16進数値0E)が入ってターンエンド、となる。7E0F19は経過ターン数(エンカ直後のターンは0ターン目)。敵の数は7E0F24で初期数(なぜか2倍管理)、7E0F24で現在数(なぜか2倍管理:倒した処理をすると倒した数だけ減る)?。
ここからは裏が取れていないので推測ばかりの話。いわゆる「2回攻撃バグ」はここを見ていたら何か分かるかもしれない? また、初出敵か(倒したことがある敵か)どうか、ボスフラグも敵ごとに管理している訳ではなく(敵IDがこれ以上だからボスである、という管理の可能性は残る)、別の何かで管理している。BGM変化とも対応している・・・ 気はする。