ファイナルファンタジー3のTASの詳細

FF3 のゲーム開始前

ルールとして許可されているなら address 0x00f9 へ data 0xdd を仕込むことができます. 簡単な調査で見つかったのは address 0x00f9 を 1P のキー入力として使えるのは(superがない)魂斗羅と F1 センセーションの2本でした.

data 0xdd は上下右スタートBAをすべて押すため、ジョイカードを併用してください. ボタンをおしたままカセットを抜いて、電源をいれたまま FF3 をさしてリセットボタンを押してください.

address 0x00f9 を 2P のキー入力として使っているソフトはコナミの中ではかなり多いのですが, 1P は2本だけでした.

祭壇の洞窟 (1回目)

フロアその1

最初のゴブリン戦で3匹のゴブリンからポーションを2つ拾います. 理論上3つのポーションが落ちるようですが、最速プレイとしては利用できる条件ではありませんでした.

宝箱からポーションとかわのたてを拾います. かわのたては2個目のみです. もう1個のかわのたては購入したほうが早いです.

フロアその2

宝箱からポーションを拾います. 一見6歩無駄ですが、戦闘中のアイテム交換を 1回(177 frame)削減できます. 宝箱のための往復での6歩は 96 frame なのでとります.

なんきょくのかぜは遠く時間削減ができないので取りませんでした.

ランドタートル戦は TAS submission #2992 と同じ総和(詳細は後述)で倒しました. 手動操作では運が必要です.

祭壇の洞窟 (2回目)

ウルの村で大量の物資を購入するため 2000 ギルを拾得します.

ウルの村

スクリプトポインタの初期化

前回の TAS ではピアノを弾いてスクリプトポインタを初期化していたのですが、その代わりにそこらへんの人と会話します. ボタン操作の簡略化のため、買い物前に会話するほうがいいです.

買い物

基本方針は下記です.

  • 戦闘中の武器交換回数をへらすためにアイテム欄はできるだけ埋める.
  • アイテムの名称より数量とXの有無のほうが重要.

道具屋は X がつかないアイテムが3種類売ってるのですが、往復に 177 x2 frame 以上かかるので採用していません. 防具屋も実はいかなくても条件を満たせるのですが、アイテム欄を埋める時間の節約と消費金額が少なさ(装備できるかわのたてが安い)の2つの理由で行きます.

TAS では歩数の都合でウルの村で敵と遭う都合とアイテム整理の操作削減のため「防具屋->魔法屋->武器屋->村内の敵が出る場所」の順番に行きます. 歩数の制限と村民たちの妨害がなければ、「武器屋->防具屋->魔法屋->祭壇の洞窟(3回目)」のほうがアイテム整理は楽です.

アイテム整理

TAS では戦闘前に下記の並びにしています.

 右手:かわのたて: 1
 左手:かわのたて: 1
  0:ダガー          :12  1:かわのたて      :11
  2:(空欄)          : 0  3:(空欄)          : 0
  4:(空欄)          : 0  5:(空欄)          : 0
  6:(空欄)          : 0  7:ロングソード    : 1
  8:(空欄)          : 0  9:(空欄)          : 0
 10:ポーション      : 1 11:(空欄)          : 0
 12:(空欄)          : 0 13:(空欄)          : 0
 14:(空欄)          : 0 15:(空欄)          : 0
 16:ふく            : 3 17:かわよろい      : 1
 18:(空欄)          : 0 19:どうのうでわ    : 4
 20:かわのぼうし    : 5 21:(空欄)          : 0
 22:ヌンチャク      : 2 23:ポイゾナ        : 4
 24:つえ            : 7 25:(空欄)          : 0
 (以下すべて空欄)

戦闘中にアイテム欄を下記にすると必要な変数をうまく操作できます. 条件を守れば上記の並びと同じにしなくていいです.

 右手:Y     : 1 
 左手:Y     : 1
 0から15: Y : 1
 16:X       :3+ 17:N       : 1
 18:N       : 1 19:N       :3+
 20:N       :3+ 21:N       : 1
 22:N       : 2 23:ポイゾナ:3+
 24:N       : 7 25:N       : 1
 26:W       : 1 27:N       : 1
 28から31:N : 1
アイテム種類の見方
  • Y: X がつかないもの
    • 装備できる手につける装備品, または消耗品
  • X: X がつくもの
    • 装備できない手につける装備品, 手につけない装備品, 魔法のオーブ
  • N: どれでも可能
  • E: ID の bit7 == 0 && bit1 == 1 のもの
    • 序盤で手に入るものは下記.
    • ヌンチャク,つえ,ナイフ,ダガー,かわのぼうし,ふく,かわよろい
    • 戦闘強制終了フラグを書き込む
  • W: ID で 0x20 から 0x5f ではないもの. (文字として濁音か半濁音ではないもの)
    • 序盤で手に入るものはかわのたてをいれてはいけないので注意
    • FF3 のゲーム前に RAM を初期化しているのなら条件外
  • ポイゾナ: ポイゾナのみ可
数量の見方
  • 0,1,2: 指定通りの数量をいれてください.
  • 3+: 3個以上. 4個だと早く買えます.
  • 7: TAS では 7 個. FF3 のゲーム前に RAM を初期化しているのなら 8 個.
    • ポインタの上位バイトを書き込む
TAS での並びの解説
  • ダガーとかわのたてはアイテム交換を早くすませるためです.
  • 右手左手両方に装備をしてください. (数量は1が必須)
  • X がつかないアイテムは位置の制限が緩いので、ポーションとロングソードは位置交換の過程でそのままにしてます. もしほかに消耗品があれば同様の処置で構いません.
  • 16番のふくはかならず X がつくものをおいてください.
  • 17番以降は X の有無は関係ありません.
    • 17番では E の条件をみたすかわよろいをおいていますが、アイテム交換の過程でうまくいくならダガーで構いません.
  • ダガーとかわのたては12個ずつ買います. アイテム購入操作回数をへらすために 4 個単位で3回買っています. そのため残金がわずかです.
  • かわのたてのかわりにロングソードを交換品にすることも一応可能です. 10単位での買い物を組み合わせた上に、複数人から装備品を外す必要があり、早くありませんでした.

敵に遭う

今回の方法は外では成功しません. 村の中かダンジョンで遭ってください.

FF3 のゲーム前に RAM を初期化していない場合は "上下右スタートBA" を押して敵に遭ってください. この組み合わせで移動できる方向は右だけです. ウル内部の敵がでてくる場所はせまく、右に移動しづらいです.

FF3 のゲーム前に RAM を初期化している場合は移動前のボタン入力の制限はありません.

戦闘では下記の行動です.

  • 1人目(1度目): アイテムでナイフを使う
  • 2人目:
    • アイテム欄をすべて埋めるために武器を交換し続ける
    • 終わったら B ボタンで戻る
  • 1人目(2度目): B ボタンで一旦キャンセルし、コマンド欄に不正な文字列を出す
  • 1人目(3度目): 4番目のコマンドを選び戦闘強制終了
    • (前回のTASでは2度不正な文字列を出してましたが、今回は1度でいいです)

戦闘後

FF3 のゲーム前に RAM を初期化していない場合は 30 秒程度待つとエンディングが始まります. これは pointer が 0x07f8 から 0x0821 まで順番に村内の人をゆっくり動かしているのが原因です.

FF3 のゲーム前に RAM を初期化している場合はすぐにエンディングが始まります. こちらは pointer が 0x08f8 から 0x08f9 で読み込み数が少ないためです.

戦闘時の乱数

基本的に FF2 での説明と同じです.

Zeropage 総和

移動画面から戦闘画面に切り替わるときにプログラムは address $0000-$00ff の zeropage の carry 込みの総和を保存します. 総和は戦闘時の乱数 table への index となり、敵の数や行動の結果が決まります.

総和とパーティのパラメータが同じであれば、経過時間は関係なしに容易に結果が確定できます. 乱数 table の中身は総和の bit1 で 2 通り用意されています.

ゴブリン戦とランドタートル戦は戦闘直前にボタンを複数押すのは総和の調整のためです. (キラービー戦は別の理由)

乱数 index

乱数 index は memory address $0015, $0016, $0017 に利用され、初期値は総和で、乱数計算後に都度加算されていきます. FF3 では変数が3つに増えましたが、基本は $0016 を利用しているようです.

ゴブリン3匹では総和 bit1 = 0 で、戦闘終了時に address $0016 が data 0xfd の場合3個のポーションが落ちることがわかっています. 戦闘中の行動次第で調整できるはずですが、最速ではその実現は不可能でした.

その他見つかったが実用化されなかったもの

会話の省略

ウルの東西の細い道にある程度入った状態で敵を出せれば会話は省略できました. 歩数調整や徒歩時間の都合で使えませんでした.

別のアイテムの並び

未記載分は X 以前は Y:1, X 以後は N:1

 14:EY      : 1 15:Y       : 1
 16:Y       : 1 17:X       : 1
 18:N       :3+ 19:N       :3+
 20:N       : 1 21:N       : 2
 22:ポイゾナ:3+ 23:N       : 7
 24:N       : 1 25:W       : 1
  • EY は E と Y を同時に満たすもの. 実質ダガーのみ.
  • 13:Y:3+ がロングソードのみで必要金額が厳しい.
  • アイテム欄の並びが1つ手前に来るのが特徴. 実際に使ってみたところは手数が多いらしく早くなかった.
  6:Y       : 1  7:Y       :3+
  8:EY      : 1  9:Y       : 1
 16:Y       :3+ 17:Y       :3+
 18:Y       : 1 19:X       : 2
 20:ポイゾナ:3+ 21:N       : 7
 22:N       : 1 23:W       : 1
  • アイテム欄がかなり手前に来るのだが、 Y:3+ が3種類いるので道具屋に行くことが必須となったので不採用.
  • おそらく金額の制限にもひっかかる.

バグの詳細

続きは TASvideos に説明を書きましたのでご覧ください.
http://tasvideos.org/7197S.html