ffbin @Wiki

解析データ/イベント関連

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
4**判明しているイベントコード

0x0A0000-0x0CE5FF   イベントデータ

●キャライベントと通常イベント(仮称)

イベントデータは、大きく上記の2つに分けることができる。
 ・キャライベント:特定のキャラのパレット変更や移動などに使用
 ・通常イベント:戦闘や会話、画面エフェクトなどキャラを指定しないイベントに使用

データは、このキャライベントと通常イベントがごちゃごちゃに混じり合っている。



●キャライベントの基本構成

キャライベントは、原則として「xx 8y .... FF」のパターンで構成されている。

 xx : キャラ番号の指定
    0x:主人公キャラ(00=ティナ、01=ロック、02=カイエン・・・) 
    10~:イベントキャラ(10+そのMAPのNPC番号) 
    30:カメラ 
    31~34:パーティー内のキャラ

 yy : キャライベントの長さを指定(yy番目に必ずFFが来る)
    FF6では81=+1のような使われ方をすることが多い。
    90(=+16)以降も使用可能
    +80 でこのイベントが終わるまで他イベントを動かさない(非並列処理)になる。

 FF : キャライベントの終了

これら以外が通常イベントになる。
通常イベントとキャライベントで、コードの意味がまったく異なってくる。
例えば、91というコードは通常イベントではウェイトだが、キャライベントでは右に5歩だけ移動という命令になる。



●キャライベントのコード


00~   :キャラクターの画像を変更。(しぐさ)

      00:下歩き右足前、01:下向き直立、
      02:下歩き左足前、03:上歩き左足前、04:上向き、05:上歩き右足前、
      06:左歩き、07:左向き、08:左歩き、09:瀕死座り、0A:構え、0b:ダメージ、
      0c:左歩き、0d:左歩き、0e:左バンザイ、0f:左バンザイ2、10:魔法詠唱1、
      11:魔法詠唱2、12:倒れる、13:両目閉じ、14:ウインク、15:左向いて目閉じ
      16:下向き両手上げ、17:上向き両手上げ、18:キリっと右下睨む
      19:右挙手、1A:額に手、1B:上向き右挙手、1C:上向き耳に?手、1D:笑う、
      1E:笑う2、1F:驚き、20:正面落ち込む、21:上落ち込む、22:左落ち込む、
      23:正面で顔だけ左、24:正面指立て調子に乗る、
      25:正面指立て調子に乗る2、26:消える?、27:テント、28:倒れる
      29:バグ、2A:  2F:チョコボ騎乗ポーズ左

      +40 で左右反転






80~ : キャラの移動

       上 右 下 左
    1歩 80 81 82 83
    2歩 84 85 86 87
    3歩 88 89 8A 8B
    4歩 8C 8D 8E 8F
    5歩 90 91 92 93
    6歩 94 95 96 97
    7歩 98 99 9A 9B
    8歩 9C 9D 9E 9F

       右上 右下 左下 左上
    1歩  A0  A1  A2  A3 
    2歩  A4  A5  A6  A7

    左下下 A8
    左下左 A9
    左上左 AA
    左上上 AB



Cx (x=C~F) : 向きを変える(CC:上 CD:右 CE:下 CF:左)

C0 キャラ移動速度4分の1 (イベント内)
C1 キャラ移動速度半減 (イベント内)
C2 キャラ移動速度通常
C3 キャラ移動速度2倍
C4 キャラ移動速度4倍

C6 キャラ移動時アニメーション動作
C7 キャラ移動時アニメーション停止
C8 xx  00 キャラクターレイヤーへの干渉を通常化させる。(他の数字は不明)
     10 チョコボ化
D1 キャラクターを消す
D5 xx yy キャラをxxyyに移動
DC キャラを小さくジャンプ
DD キャラを大きくジャンプ
E0 xx xxユニット時間ウェイト



●通常イベントのコード

37 xx yy    キャラ番号XXの座標をキャラ番号YYと入れ替える
        (パレットは変わらないので43 xx yyを併用する)

38       画面を固定、操作不可にする(これの後キャライベント30でキャラを動かさずカメラ移動させることができます)

39       画面固定を解除、操作可能にする

3A       イベント中に動作可能

3D xx      xx番のキャラクターを作成
        (画面更新で元に戻ります。3D xx 41 xx でキャラクターを作成できます)

3E xx      キャラ番号XXのキャラを消す(姿が消え、パーティからも外れる)

3F xx yy    xx番のキャラクターをyy番のパーティに加入させる(yy=00で離脱)

40 XX YY   キャラ番号xxのキャラクターデータ(パラメータや戦闘コマンド)を
       キャラ番号YYのものに置き換える。
       (正確にはYY*16h+2D7CA2から22バイト)

42 xx     キャラ番号xxの姿を消す(メニューの開閉などで元に戻る)

43 xx yy  キャラ番号xxのパレットをyy番に変更する。

44 xx yy  xx番のキャラクターをyy番の乗り物に乗せる

45    画面を更新

46 xx   xx番のパーティをアクティブにする


4B YY XX  会話番号XXYYのセリフを呼び出してウインドウに表示

     0yxx … 上部に表示
     2XYY   画面上のウインドウの中に表示
     6XYY   上部に直接表示
     8XYY   画面下のウインドウの中に表示
     CXYY   下部に直接表示(主人公の紹介時など)

4C xx yy     :イベントバトル番号xx番の戦闘をyy番の背景で開始
         (通常、FF6では下の4Dコマンドを使用しています)

4D XX YY   戦闘に入る
       (イベントバトル番号XXの敵パーティになる。YYで戦闘背景指定 FFにするとエンカウント時の演出無しで暗転して戦闘開始)

	イベントバトルの後に B2 9F 5E 00(← A5E9f に飛ぶ)を入れる事により、
	全滅後にゲームオーバーに出来る。これがないと全滅後もゲームオーバーにならない。

4E        :現在のエリアに出現する敵パーティとの戦闘に入る

50 XX   画面の明るさを変える
     XXのbit6がセットされていると明るくなり、されていないと暗くなる。詳細不明。

51 xx yy zz    :背景色変更関係??

52 xx       :xx番のキャラクターの色を濃くする??

53 xx yy zz    :キャラクターの色関係??

54         :制御コードで変更された色を元に戻す

55 XX   画面フラッシュ(回復の泉など)
     XXの値によってフラッシュの色が変化する
     Bit0-Bit3:効果なし?
     Bit4:赤 Bit5:緑 Bit6:青
     Bit4-6は光の3原色に対応しており、例えばBit4と5が同時に立った状態
    (60など)だとフラッシュ時の色は黄色になる。

    ・55 20 … 赤
    ・55 40 … 緑
    ・55 60 … 黄
    ・55 80 … 青
    ・55 A0 … 紫
    ・55 C0 … 水色
    ・55 E0 … 白


58 XX  画面を揺らす(洞窟の入口を開けたときなどに使用) XXは不明

59 xx  画面暗転解除 xx=暗転速度

5A xx  画面暗転 xx=暗転速度

5C    暗転、明転しきるまで画面を固定する

60 xx yy     :レイヤーxxのパレットをyyへと変更する

61 xx yy zz カラーパレットの色のうち(マップでは128色使っている)
        YY番からZZ番まででXXの色成分を強調する。
        XX : 0x01=赤 0x02=緑 0x04=青

62 xx  画面にモザイク効果をかける xx=モザイク速度

6A xx yy aa bb cc      マップyyxxの座標(aa,bb)に移動。cc=00 乗り物なし cc=01 飛空艇 cc=02 チョコボ 

               0y … 移動先で北向き   
               1y … 移動先で東向き   
               2y … 移動先で南向き
               3y … 移動先で西向き


6B xx yy aa bb cc :6A と同じだが、即座に行われる?

74 XX YY AA BB DATA~    座標XX*YYからAA*BB個のタイルをDATA部の
                番号のタイルに置き換える
                隠し通路やギミックなどに使用。(73でもほぼ同じ働き)
                このコードを2回連続で使用すると1回目がレイヤー1、
                2回目がレイヤー2に対して実行される。

75     マップを更新する

77 xx     xx番のキャラクターのレベルを平均化する

78 xx    xx番のオブジェクトの透過指示?(すり抜け出来るようになる)

7E xx yy   自キャラを座標(xx,yy)へと移動させる

7F XX YY   キャラ番号XXのキャラクターの名前をYY*6+478C0から6バイトの
       文字列に置き換える。
       (つまりXX番のキャラ名をYY番のキャラ名に置き換える)

80 XX     アイテム入手(XX=アイテム番号)

84 XX YY   所持金をYYXXギル増やす

85 XX YY   所持金をYYXXギル減らす

86 XX     魔石入手(XX=魔石番号)

87 XX     魔石を手放す(XX=魔石番号)

88 xx yy zz  番号xxのキャラ(31~34がパーティキャラ)のステータスを
        yy zzに従って解除する。
        xx:0x01=暗闇 0x02=ゾンビ 0x04=毒 0x10=透明 
          0x20=カッパ 0x40=石 0x80=戦闘不能
        yy:0x40=レビテト
        各bitが立っていると解除しない。

8A      移動停止

8B xx yy   番号xxのキャラ(31~34がパーティキャラ)のHPを最大HPの
       yy/7Fだけ回復

8C xx yy   番号xxのキャラ(31~34がパーティキャラ)のMPを最大MPの
       yy/7Fだけ回復

8D xx     番号xxのキャラの装備を全て解除する。

8F      カイエンが必殺剣を全て会得

90      マッシュが「夢幻闘舞」を会得


91      15/60秒間ポーズ

92      30/60秒間ポーズ

93      45/60秒間ポーズ

94      60/60秒間ポーズ

95      120/60秒間ポーズ



96      画面を明転させる

97      画面を暗転させる


98 xx     xx番のキャラクタの命名画面へと入る

99 xx yy zz  xx番のパーティ作成画面へと入る
          (yy zz で強制加入メンバーの指定?)

          xx=01 普通のパーティ(通常時、つまりパーティが一組だけの場合がこれ)

9A      コロシアム開始メニューを呼び出す

9B xx     番号xx(店番号)の店の販売画面に入る

9C xx     xx番のキャラクターに「さいきょう」コマンドで装備をさせる

9D      ラストバトル直前のパーティ編成画面に入る


A0 xx yy zz aa bb    時間yyxxのカウントダウン開始(単位は1/60秒)
           60 54なら5460h=21600x1/60秒=360秒=6分
           aa bbは不明(カウントが0になった時のジャンプ先?)
           ちなみにカウント中の時間はメモリの1189-118Aに
           格納される


A1 XX     アドレス1188+XXから6バイトの値を00で埋める(詳細不明)

A6      ラストバトル直前の、ケフカの作るピラミッド型の
       エフェクトを消去する

A7 xx    上記のピラミッド方のエフェクトを、xx番の
       キャラクター上に表示させる

A8      魔大陸浮上シーンを表示する

A9      タイトル画面を表示

AA      オープニングの魔導アーマー行軍シーンを表示する

AB      ゲームのロード画面を表示する

AD      世界崩壊時のシーンを表示する

AE      魔導研究所でトロッコにのるシーンを表示する

AF      コロシアムのバトルを呼び出す

B0 XX ~ B1    繰り返し処理
           ~のコマンドをXX回繰り返す
           B1が繰り返すコマンドの終点

B2 ZZ YY 0X    アドレス A0000+0XYYZZへジャンプ(X=0~3)
          例)8F E4 02(CE48Fでパーティ全員のHP,MPを全回復)

B3 aa xx yy zz   アドレス A0000 + xxyyzz の処理をaa回繰り返す

B4 xx       xx単位時間停止

B5 xx        15 * xx単位時間停止


B6 (可変長)    コマンド【4B】で呼び出された会話の分岐処理。

          (呼び出した会話に分岐が無い場合正しく動作しません)

          例:4B xx yy で呼び出した会話に、はい、いいえの会話の選択肢がある
          場合、その【4B xx yy】のすぐ後に
          B6 00 5F 01 A9 5E 00 と記述する事で、
          「はい」を選んだ場合  … B5F00 へジャンプ
          「いいえ」を選んだ場合 … A5EA9 へジャンプ
          となる。(4B と同様、実際には +A0000 されたアドレスに飛ぶ)

          選択肢が3つ以上の場合は、後ろに
          ジャンプ先のアドレス(3バイトずつ)を足す
          その際は、アドレスから A0000 を減算して記述する。


BD xx yy zz    50%の確率で A0000 + xxyyzz へジャンプする

          メモリアドレス1F6Dの値を1増やした後、1F6Dの値
          +C0FD00の値が80h以上の場合にZZYYXX+A0000に
          ジャンプする
          1F6Dの初期値は乱数で生成されるらしく、ロード
          するたびに異なる
          C0FD00~C0FDFFは乱数テーブル



C0 XX YY AA BB 0C   フラグによる条件分岐処理

             YYXXの下位3ビットをビット番号(BIT0-7)とし、
             上位6ビットの値+1E80のアドレスでそのビットが
             立っていればオフセットCBBAA+A0000にジャンプ
             正確には(YYXXの値 AND 32767)の上位12ビットの
             値+1E80になる
             そのため、メモリのかなり広い範囲に対して使用可能
             である。(理論上は最大で2E7Fまで適用可能)
             YYの上位ビットの8が立っていた場合、アドレスの該
             当ビットがクリアされている場合にジャンプするよう
             になる。


D2 XX    イベントフラグをセットする(1EA0+XX)
       1EA0+(XXの上位5ビット)のbit(XXの下位3ビット)をセット

D3 XX    イベントフラグをクリアする
       1EA0+(XXの上位5ビット)のbit(XXの下位3ビット)をクリアする

D4 XX    イベントフラグをセットする
       1EC0+(XXの上位5ビット)のbit(XXの下位3ビット)をセット
       例 D4 43
         43 = 1000011
         01000 = 8 → 1EC0+8=1EC8
         011 = 3 → bit3(0x08)
         よってアドレス1EC8のbit3がセットされる。

D5 XX    イベントフラグをクリアする
       1EC0+(XXの上位5ビット)のbit(XXの下位3ビット)をクリアする

D6 XX    イベントフラグをセットする(1EE0+XX)

D7 XX    イベントフラグをクリアする
       1EE0+(XXの上位5ビット)のbit(XXの下位3ビット)をクリアする


EA XX YY  フラグXXの値をYYだけ減らす

EB XX YY 00 ** ** 01 xx yy 0z 02 ** **
      フラグチェック
      XXの値*2+7E1FC2がそのフラグのアドレス
      00以下の2バイト不明
      フラグの値がYYなら02以下を実行
      違うなら01以下の3バイト+A0000をアドレスとしてジャンプ



EF xx yy   音楽変更 xx番の曲を音量yyで演奏する

F0 XX   音楽変更(XX=音楽番号)


F2 xx    現在演奏されている曲を、yyという速度でフェードアウトさせる

F3 xx    yyという速度で、フェードアウトさせた曲をフェードインさせる


F4 XX   効果音を鳴らす
      96:スイッチ音
      E9:回復の泉
      BB:洞窟を開く音
      E7:無音

F7     音楽演奏パターン変更(SPCでFC XX YY で指定された先に
     ジャンプする 魔列車などで使用)


FE    イベント終了




会話データについて


0x0CE602-0x0CFE56  会話データオフセット[size:2]

オフセットの値+0D0000 が会話データ文字列のオフセットになる。
会話番号71D以降は、オフセットの値+0E0000になる。
プラスする値(+0D0000と+0E0000)の境目となる会話番号は
0x0CE600-0x0CE601 の2バイトで指定されている。

例)ゲーム開始直後・炭坑都市ナルシェ
 ガード「帝国の魔導アーマー!?とうとうこのナルシェにまで!

この会話番号は00Dであり、会話データオフセットは0CE61Cにある。
その値は 67 02 なので 0267 + 0D0000 = 0D0267 からこの会話
データ文字列がある。
(この事から、会話を含むイベントの格納場所、会話番号、会話オフセット、会話データ文字列のうちどれかが分かれば、全てが逆算で導ける。)
記事メニュー