FF3(FC) アイテム32超えバグ


§0、アイテム32越えバグとは

戦闘中、コマンドで残り1つのアイテムを使用し、以降のキャラ選択で装備変更して、
アイテム欄の空欄を埋めた状態でコマンドキャンセルしたり、ターンを開始したりすると、
使用したアイテムが消え、キャラのパラメータがいろいろ変化するバグ。


§1、基礎知識

§1−1、戦闘中のアイテムとキャラデータ構造

所持アイテムデータはアイテムの種類、アイテムの個数の順で32個分並んでいる。
アイテムデータ後にはキャラのデータが先頭から順に並んでいる。

以下は、アイテム欄の一番左上のアイテムの種類を記録したメモリを0番地とした場合の
データの内容である。

 番地:内容
○ 0:アイテム1の種類ID
+ 1:アイテム1の数
 (中略)
○ 62:アイテム32の種類ID
+ 63:アイテム32の数
----以下キャラ1のデータ----
○ 64:ジョブ
+ 65:レベル(データ上は表示上の値よりも一つ小さい)
○ 66:状態
+ 67:経験値、1の位
○ 68:経験値、256の位
+ 69:経験値、65536の位
 70-75:名前
○ 76:現在HP、1の位
+ 77:現在HP、256の位
○ 78:最大HP、1の位
+ 79:最大HP、256の位
○ 80:熟練度(データ上は表示上の値よりも一つ小さい)
+ 81:熟練度経験値(100貯めると熟練度がアップする)
 82-91:力、素早さ、体力、知力、精神の元と修正後の値
○ 92:弱点属性
+ 93:魔法回避回数
○ 94:魔法回避率
+ 95:魔法防御
○ 96:右手攻撃属性
+ 97:右手攻撃回数
○ 98:右手命中率
+ 99:右手攻撃力
○100:右手追加効果
+101:左手攻撃属性
○102:左手攻撃回数
+103:左手命中率
○104:左手攻撃力
+105:左手追加効果
○106:防御属性
+107:回避回数
○108:回避率
+109:防御力
○110:ステータス異常耐性
+111:用途不明。基本的に0
○112:レベル1魔法の現在MP
+113:レベル1魔法の最大MP
 (中略)
○126:レベル8魔法の現在MP
+127:レベル8魔法の最大MP
---
 128-191:キャラ2のデータ
 192-255:キャラ3のデータ
...

*○はアイテムIDが入る可能性のあるところ、+は値が+1される可能性があるところ。
*状態、HP、現在MPは移動時のデータ。戦闘中要のデータとは異なる。

注意点として、狙った値を変化させるために複数回アイテム選択、
キャンセルを繰り返す場合があるが、
その際に、キャラのステータスが書き換えられる、
いわゆるウィンドウイレースの影響に注意する必要がある。
具体的には一人目なら92から111番地のデータが対象になる。


§1−2、アイテム選択時の処理

アイテム欄からアイテムを使用すると、
次のキャラのコマンド選択では使用したアイテムが一つ減った状態になる。
その結果0個になった場合はそこは空欄になる。
コマンドをキャンセルした場合は、選択したアイテムがアイテム欄に戻る。
具体的な処理としては、まず、0番地が選択したアイテムIDと一致するか調べ、
一致すれば次の番地(個数)の値を+1して終了。
一致しなければ調べる場所を+2番地して調べる、を繰り返す。
62番地まで調べて、一致しなければ、今度は0番地から順に空欄(ID:0)を探す。
空欄が見つかれば、そこの値をアイテムIDに変え、次の番地(個数)の値を+1して終了。

これらの判定では個数のチェックはしないので、100個以上のアイテムが発生することがある。

キャンセルせずにターンを開始した場合も、選択アイテムは同様の処理でアイテム欄に戻される。
複数のキャラがアイテムを選択した場合は先頭に近いキャラの選択分から順にアイテム欄に戻る。


§2 アイテム32越え

問題となるのは、アイテムを戻そうとするとき、
アイテム欄内に選択アイテムも空欄も無い場合で、
アイテム欄の番地(0-63)を越えて空欄(ID:0)を探そうとする。
この場合、いろいろな変化が発生することがある。


§2−1 キャラデータ変化

キャンセルやターン開始時の処理では、キャラデータの偶数番地の値が0ならば、
そこにアイテムIDが入り、次の番地の値が+1される。
アイテム99個バグによるものと比べて、
アイテムIDが入る番地と1増える番地が1つずれているので、
起こせる現象も異なる。
例えばアイテムデータの後の64番地(1番目のジョブ)が0(玉ねぎ剣士)の場合は
そこにアイテムIDが入り、次の番地(レベル)の値が1増える。
いわゆるバグジョブに変化し、レベルが1上がることになる。

他にも経験値、最大HP、熟練度、最大MPを増やすことができる。

それ以外にも、各種パラメータが存在するが値を変えても基本的に影響しない。
またウィンドウイレースによって、元に戻る値もある。


§2−2 アイテム変化

上記のケースで、3番目のキャラデータまで探しても偶数番地に0が存在しなかった場合、
つまり、0から254の全ての偶数番地の値が0でない場合、
0番地にアイテムIDが入り、1番地の値が増える。
つまり、アイテム欄の一番先頭のアイテムが選択したアイテムに変化し、個数が+1される。
欄の先頭に不要なアイテムを98個置いておけば、選択したアイテムを99個に増やすことができる。


§2−3 ????????消滅

リバイアサン戦直前にアイテム欄に入る?????????は
使うことができるのでアイテム32超えバグでアイテム欄からなくすことができる。
結果、戦闘終了後にリバイアを入手できなくなるが、
ダンジョンを出てもリバイアサンが消えないので再び戦える。
(再戦自体はダンジョンを出なければ何度でもできる)

オーディン戦で同じことをしてもオーディンとは再戦できない様子。
エウレカショップがどうなるかは不明。

ちなみに、????????をアイテム変化で作成して持っていくことや、
戦闘後に手に入るアイテムを99個持っていくことでも、同様のことができる。


§3 まとめ

アイテム32越えバグで可能なことは以下の通り。

・ジョブ変化(玉ねぎ剣士→アイテムIDに対応するジョブ)&レベルアップ(+1)
・経験値アップ(+1)or (+256*アイテムID+65535)
・最大HPアップ(+256+アイテムID)
・熟練度アップ(1→アイテムID+1)&熟練度経験値変化(+1)
・最大MPアップ(+1)
・アイテム変化(実質増殖)
・リバイアサン温存

+1の部分は256になると0に戻る。
ただし、変更できるキャラデータのは3人目まで。

他にも、アイテム99個バグで狙った位置にアイテムIDを埋め込むために、
奇数番地の0のデータを潰す手段として使える。

使用可能なアイテムでIDが一番大きいのは、白の香りの199なので、
基本的に熟練度は200が限度になる。

あと、実行の際にはウィンドウイレースに注意。