「解析データ/イベント関連」の編集履歴(バックアップ)一覧に戻る

解析データ/イベント関連 - (2023/10/27 (金) 23:44:19) の編集履歴(バックアップ)


4**判明しているイベントコード

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

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

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

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



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

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

 xx : キャラ番号の指定
    0x:主人公キャラ
      00=ティナ 01=ロック 02=カイエン 03=シャドウ 04=エドガー 05=マッシュ
      06=セリス 07=ストラゴス 08=リルム 09=セッツァー 0A=モグ
      0B=ガウ 0C=ゴゴ 0D=ウーマロ 0E~0F=サブキャラ
    10~:イベントキャラ(10+そのMAPのNPC番号) 
    30:カメラ 
    31~34:パーティー内のキャラ

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

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

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

※ワールドマップでは上記の構成は無視され、キャライベントが可変の長さでそのまま使われる構成となっている。



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

※乗り物に乗っている場合と乗っていない場合で00~CFまでのコードは仕様が異なる。

+ 通常
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 チョコボ化

+ 乗り物に乗っている場合
01~7F xx 下記のbitの組み合わせに基づいて乗り物をxxの時間、動かす
Bit0=01 旋回倍速
Bit1=02 停止
Bit2=04 前進(停止させないと時間経過後も前進したまま)
Bit3=08 右旋回
Bit4=10 左旋回
Bit5=20 浮上
Bit6=40 降下
(例:29 40 = 飛空艇を時間40の間、浮上させながら倍速で右旋回させる)
(旋回などの動きが反対になるビットが重なった場合、小さいbitが優先される。例えば18 40だと、右旋回はするが左旋回はしない)

80~87 (xx yy) aa bb cc フラグによる条件分岐処理
            通常イベントのC0~C7コードと仕様は同じ

88~8F (xx yy) aa bb cc(フラグによる条件分岐処理・フラグクリア版?)
            通常イベントのC8~CFコードと仕様は同じ

C0 XX   向き固定のまま移動を有効?(20固定?)

C1 xx yy  飛空艇が向いてる角度をyyxxに変更

C2 xx yy  向き固定のまま進む角度をyyxxに変更

C6 xx yy  飛空艇が向きを固定したまま動く速度を変更
       xx=フラグ(基本は80? 速度を落とすときは00?) yy=速さ


D1 キャラクターを消す
D2 aa bb xx yy zz マップ番号bbaaの座標xxyyに移動 zz=フラグ指定? 通常は80
         bbのビットフラグ(08=マップ名表示 10=右向き 20=下向き 30=左向き 40=上向き)
D5 xx yy キャラをxxyyに移動
D7 戦闘パーティに加わるキャラを指定?
D8 暗転解除
D9 暗転
DC キャラを小さくジャンプ
DD キャラを大きくジャンプ
E0 xx ユニットをxxの時間ウェイト
F7 飛空艇が伝書バトに変化
F8 世界崩壊の爆発ドーム表示
FB 飛空艇が煙を吹く
FC 飛空艇が墜落するアングルを表示
FD 飛空艇がトランスティナに変化
FE 飛空艇がベクタに向かうムービーを表示



●通常イベントのコード

35 XX      (詳細不明)

36 XX      キャラ番号XXのキャラを動かす?(詳細不明)

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

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

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

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

3B       (詳細不明)

3C XX XX XX XX(詳細不明)

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

3E xx      キャラ番号XXのキャラを消す(姿が消え、パーティからも外れる)
         戦闘のパーティからは外れないので、下記の3Fを使って完全離脱させる必要あり

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

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

41 XX    xx番のキャラクターを表示。↑を参照。

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

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

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

45    画面を更新

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

47     パーティ編成の更新?(キャラを加えた後に画面内にいる該当番号のキャラを消したりする)

48 YY XX  他のイベントと並列処理可能な会話ウィンドウとセリフXXYYを表示

49     メッセージ表示中、Aボタン無効(普通は使用しない)

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

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

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

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

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

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

4F        町からワールドマップに直接移動

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

51 xx yy zz    :背景色変更?(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=モザイク速度

63 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 と同じだが、即座に行われる?

6C aa bb xx yy zz 前回訪れたワールドマップの出入り口の位置と向きを変更?
             bbaa=マップ番号 xx=X座標 yy=Y座標 zz=XY座標から配置される位置と向き(0=下 1=左 2=上 3=右)

72 XX YY   レイヤー3を横方向にXX、縦方向にYYの速さで移動させる。(例:水位を変えるなど)
        00で停止させないとずっと動いたまま。
        00を基準に、01~7FがXXは左に、YYは上に動く。
        80~FFはマイナス方向に動く。

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

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だけ回復
       yyが80~87の場合、HPが減る。80で1減り、それ以降は2倍ずつ増えていく。最大で128減る。

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 aa bb cc    時間yyxxのカウントダウン開始(単位は1/60秒)
           60 54なら5460h=21600x1/60秒=360秒=6分
           aa bb はカウントが0になった時のジャンプ先(A0000+0c+bbaa)
           ccのBit0-Bit1はジャンプ先のアドレスの先頭の値(例:A9 5E 83 = ジャンプ先は0D5EA9)
           Bit2-3(何番目のタイマーのアドレスを使うか指定。同時に別のタイマーを使う時などに利用。
           上の例ならbit2-3は立っていないので0番目を指定。両方立つと最後の3番目を指定。
           Bit4(メニュー画面・戦闘中にカウントダウン表示)
           Bit5(時間切れでメニュー画面・戦闘を強制終了)
           Bit6(移動中にカウントダウン表示)
           Bit7(移動中のみ時間が減る)
           0番目のカウントダウン設定のアドレス格納先は7E1188-7E118Dまで6バイト使用。以降、+6hずつ。

A1 XX     アドレス1188+XXから6バイトの値を00で埋める(タイマー設定を完全にリセットする時に使う)

A2 XX     (キャラの動きを指定? 詳細不明)

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

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

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

A9      タイトル画面を表示

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

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

AC      選択されたセーブデータをロードする

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 を減算して記述する。

B7 aa xx yy 0z  フラグによる条件分岐処理
          1DC9+(aaの上位5ビット)のアドレスの、bit(aaの下位3ビット)がクリアされていると0zyyxxのアドレスにジャンプ
          バトル後のゲームオーバー分岐もこれで行う 例:7E1DD1(00:勝ち 01:負け 10:逃走)

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

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

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

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

BE aa (xx yy zz)   (可変長のジャンプ。詳細不明。EBの命令などと組み合わせ?)
             aa=ジャンプ先アドレス()の数。
             02だと()の内容がaaの後に2つ必要。

BF          (エンディング終了直前の地上から浮上するファルコンを表示)

C0~C7 (XX YY) AA BB 0C   フラグによる条件分岐処理(OR形式)
                YYXXの下位3ビットをビット番号(BIT0-7)とし、
                上位6ビットの値+1E80のアドレスでそのビットが
                クリアされていればオフセットCBBAA+A0000にジャンプ
                正確には(YYXXの値 AND 7FFF)の上位12ビットの
                値+1E80になる
                そのため、メモリのかなり広い範囲に対して使用可能
                である。(理論上は最大で2E7Fまで適用可能)
                YYの上位ビットの80が立っていた場合、アドレスの該
                当ビットがセットされている場合にジャンプするよう
                になる。
                コードC1以降は分岐に必要なフラグが増え、(XX YY)をアドレスジャンプ先の記述の前に追加する。
                追加したフラグのいずれか1つでも合っていればジャンプする。
                最大で8つまでフラグを同時にチェック可能。

C8~CF (XX YY) AA BB 0C   フラグによる条件分岐処理(AND形式)
                C0~C7と違い、こちらは設定した全てのフラグが合っている場合のみジャンプする。

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

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

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)
       1EE0+(XXの上位5ビット)のbit(XXの下位3ビット)をセットする

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

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

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

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

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

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

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

DE   詳細不明

E1       詳細不明

E4       詳細不明

E9 XX YY ZZ  フラグXXの値をZZYYだけ増やす
        XXの値*2+7E1FC2がそのフラグのアドレス

EA XX YY ZZ  フラグXXの値をZZYYだけ減らす
        XXの値*2+7E1FC2がそのフラグのアドレス

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


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

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

F1 XX YY フェードインで曲を演奏(XX=音楽番号 YY=フェードインの長さ)

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

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


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

F5 XX YY ZZ 効果音を流す(XX=効果音番号 YY ZZ=左・右スピーカーの音量?)

F6 XX YY ZZ 効果音・曲を演奏(XX=フラグ、組み合わせで変更 YY=効果音・音楽番号 zz=音量)

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

FA オペラ関係

FB 詳細不明

FE    イベント終了




会話データについて


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

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

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

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