FF3(FC) アイテム消費バグ


§0、アイテム消費バグとは

戦闘中、消費アイテムを使用時に、アイテム欄に該当のアイテムが存在しないときに発生するバグ。
通常はそのようなケースにはなりえないが、
アイテム32超えバグや、バグジョブの熟練度変換によって装備した消費アイテムを使用することで発生する。


§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番地が選択したアイテムIDと一致するか調べ、
一致すれば次の番地(個数)の値を-1する。
その結果、個数の値が1以上ならばそのまま、
0になれば、アイテムIDの番地の値も0して終了する。
一致しなければ、調べる場所を+2番地して調べる、を繰り返す。


§2 アイテム消費バグ

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


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

偶数番地の値が使用したアイテムIDを一致した場合、
その次の番地の値が-1される。
-1された結果、0になる場合は、前の番地(アイテムIDを一致した番地)の値も0になる。
元々0の場合は255になる。

例えば、最大HPが199(白の香りIDと一致)の時に白の香りを消費すれば、
最大HPが65479にできる。
ただし、それ以前の偶数番地のデータに199が存在しないことが条件になる。
ターン開始時に偶数番地の一番最初の0値のところに199が書き込まれるので、
その前段階で、偶数番地に0があってもいけない。


§2−2 アイテム数変化

254番地までの偶数番地にアイテムIDが存在しなかった場合、1番地の値が減る。
つまりアイテム欄先頭のアイテムの数が減る。

アイテム欄の先頭が空欄(0個)ならば空欄(255個)になる。
もう一度すれば空欄(254個)になり、
この状態で、アイテム欄にないアイテムを落としたり、盗んだり、
一つしかない武器やアイテムを使用選択してキャンセルすると、
そのアイテムを255個に増やすことができる。

アイテムIDが存在しないような状態となるのは、手に装備した消費アイテムを使うか、
アイテム32超えバグを使って、攻撃防御パラメータに消費アイテムIDをセットし、
消費武器を使いきったことによって、IDをパラメータがリセットされたターン内に
消費アイテムを使うという方法がある。



§3 まとめ

アイテム消費バグで可能なことは以下の通り。

・ジョブリセット(アイテムIDに対応するジョブ→玉ねぎ剣士)
・レベルダウン(-1)
・経験値ダウン(-1)or (-65535)
・最大HPダウン(-256)
・最大HPリセット(256+アイテムID→0)
・熟練度リセット(アイテムID+1→1)
・熟練度経験値変化(-1)
・アイテム増殖

-1の部分は、元が0だと255に増える。
変更できるキャラデータは3人目まで。

予期せぬ場所(名前、攻撃力など)に
アイテムIDと同じデータが潜んでいる場合があるので注意。