イベント処理
イベントに関わる処理については、個別処理とは別に専用のページを設けることにしました。
概要
イベントとは、ゲーム中の各場面でのキャラとの会話等を進行させるまとまりを指します。
特定の部屋に入ってキャラの救出を行うのが典型的ですが、単純に通路に死体が横たわっているだけのような状況もイベントになります。また、プロローグやエピローグでストーリーが進行するのもイベントとして管理されています。
イベントの中で、Xボタンによって話しかけることによって発生する会話(メッセージ)も重要な構成要素ですが、自動でのメッセージの進行そのものは、チャンクとしてイベントとは別管理になっています。
特定の部屋に入ってキャラの救出を行うのが典型的ですが、単純に通路に死体が横たわっているだけのような状況もイベントになります。また、プロローグやエピローグでストーリーが進行するのもイベントとして管理されています。
イベントの中で、Xボタンによって話しかけることによって発生する会話(メッセージ)も重要な構成要素ですが、自動でのメッセージの進行そのものは、チャンクとしてイベントとは別管理になっています。
イベントは0~254のIDで管理されており、その管理データは主に、登場キャラとその座標、イベント開始時に割り当てられているチャンク(自動で発動するチャンク/キャラに話しかけて発動するチャンク)と、メッセージが発現した時に実行する各種コマンド群から構成されます。詳細はデータ構造のページをご覧ください。
イベントの呼び出し
イベントの呼び出しは、ルーチン 0x9feaae(同一バンクからは0x9feab1) が担当しますが、その呼び出し契機は幾つかあります。
選択されるイベントのIDについては、イベント基礎情報をご覧ください。
選択されるイベントのIDについては、イベント基礎情報をご覧ください。
- サブルーチン0x81c440 (イベント処理トップレベルルーチン) 由来
- ゲーム開始時
0x81c5e4の分岐が該当し、主人公キャラに応じたイベントIDをロードし、イベント呼び出しが行われます。 - プロローグスキップ時
0x81cc57の分岐が該当し、プロローグ自動進行中にselect+startでスキップした時に、主人公キャラに応じたイベントIDをロードし、イベント呼び出しが行われます。 - ゴール時
0x81cb7aの分岐が該当し、ボイラー室の脱出口に入った時に呼び出しが行われます。
この時点ではイベントIDは指定されず、サブルーチン中の部屋ID63の特殊処理としてエンディング分岐が判断されます。判断基準に関しては、個別処理の「エンディング選択」をご覧ください。
実際にロードされるイベントIDは、エンディング分岐判断で決定したエンディングIDを基に行われます。 - 場面転換時
0x81cdfbの分岐が該当し、進行度・主人公キャラ・場所(部屋IDや表エリアでのブロックID)を基にイベントIDを決定します。
こちらがゲームプレイ中のメインのイベント呼び出しになります。
- ゲーム開始時
- サブルーチン0x9ff53c由来
- イベントチェイン
0x9ff758の分岐が該当し、$0408にチェイン先のイベントIDが設定されている場合に、イベント呼び出しが行われます。
その際、イベントIDパラメータには0x8000が加算された状態で呼び出しが行われます。
- イベントチェイン
イベントの無効化
一般のイベントの場合、進行度・主人公・場所(部屋ID/ブロックID)でイベントが決定しますが、様々な要因によってイベントが無効化されます。
- 水没状態
各場所につき水位数値の許容値が設定されており、ボイラー爆発後にその数値を超えた水位になると、イベント自体が発生しなくなります。
実用上影響があるのはルークの救出イベントで、爆発後6分弱で許容値を超過します。 - 水平限定
各主人公には、それぞれ特定の1イベントが水平限定と指定されています。これは、0x80c845 からのバイト配列にIDが保存されており、キャプリスがID2(ラットラー救出)、レドウィンがID32(無効イベント)、ルークがID66(イスメイ救出)、ジェフリーがID100(ネルソン救出)です。
これらのイベントでは、船の傾きが水平でない場合無効扱いになります。( 180°反転の転覆前と同じ傾きでも無効です ) - 完了済みイベント
ID127以下のイベントの場合、0x7e1320~の完了済みフラグが立っているイベントは無効扱いとなります。
フラグが立つ契機は、コマンド192番(イベントチェインと同じコマンドですが、この場合フラグを立てる用途)、コマンド193番(キャラ救出)のいずれかです。 - 救出者枠超過
同行者数、ロスト状態キャラ数と、イベントに設定された救助可能人数の合計が8以上となる場合、つまり救助に成功すると上限7人を超えるような状況だとイベントが無効化されます。 - 傾きカテゴリ対象外
傾きのカテゴリ4種類に応じて登場キャラの座標設定が分かれていますが、先頭キャラのx,y座標が共に0の場合、イベントが無効化されます。
なお似た設定として、x,y座標が16px単位で(1,0)となっている場合がありますが、こちらはキャラとコミュニケーションできないという意味で無効化に似ているものの、イベントとしては有効になります。( 例えば、揺れがキャンセルされるイベントなら、キャラと会えなくてもやはり揺れが来ないという状況は同じになります ) - 4番コマンドによるイベントキャンセル
一部4番コマンドが設定されているイベントでは、イベントキャンセルとなることがあります。詳細は、以下の「コマンド詳細」のコマンド4番の説明をご覧ください。
なお、爆発後のボイラー室前で3人以上連れて行かないとユーサーが出現しませんが、こちらはイベント自体は無効となっていません。( 条件を満たすのを待っている状態でイベントが有効になっています )
イベントの進行
イベントの進行は、イベント処理の大本である 0x81c440 から呼ばれる 0x9ff53c のルーチンで、状態変数 $040e を基に進行を管理します。このルーチンは 1bf(2f) 毎に呼ばれます。大まかに次のような段階がありますが、最初は上記「イベントの呼び出し」でイベントが決定されるところから始まります。
なお、$040e の値が 0 の場合はイベント無しという扱いでイベントの進行はありません。
なお、$040e の値が 0 の場合はイベント無しという扱いでイベントの進行はありません。
- イベントの呼び出し
上記「イベントの呼び出し」をご覧ください。この処理ではイベントIDが決定され、圧縮形式の場合はRAMへの伸長も行われます。圧縮形式の詳細はデータ構造の「イベントデータ」の項目をご覧ください。
この処理により $040e に 0x8000 が設定され、ルーチン 0x9ff53c での状態管理が始まります。
上記「イベント無効化」の「水平限定」「完了済みイベント」に該当する場合、$040e に 0 がセットされ、これ以上のイベント処理進行はありません。 - フレームスキップ($040e==0x8000)
イベント呼び出しの直後は、$040e を 0x8001 に変更するだけで、単純に 1bf スキップします。 - イベント情報のロード($040e==0x8001)
0x9ff401 のサブルーチンを呼ぶことでイベント情報を読み込んで、登場キャラの配置等イベントに関わるパラメータの初期設定を行います。その後 $040e を 0x8002 に変更し、次の段階へ移ります。
この際、上記「イベント無効化」の「救出者枠超過」「傾きカテゴリ対象外」に該当する場合、$040e に 0 がセットされ、これ以上のイベント処理進行はありません。 - 初期コマンドの実行($040e==0x8002)
イベントデータのコマンド群の先頭(オフセット0x30)のコマンドが自動実行され、その後 $040e が 0x8003 に変更されます。
このコマンド実行に先駆けて $0422 に2をセットすることで、次の段階で最低 2bf の待ちが予約されます。
また
こちらにコマンド4番が含まれキャンセル条件に該当する場合、コマンド4番の処理によりイベントが無効化されます。( イベントID自体がクリアされます ) - フレームスキップ($040e==0x8003)
$0422 の値が0になるまでカウントダウンを行った後、$040e の値を 0x8004 に変更します。 - 開始チャンクの発動($040e==0x8004)
プロローグ等の自動進行イベント(イベントID200以上)限定で、$0416に設定された開始チャンクを $02de にセットします。その後 $040e を 1 に変更します。
他のイベントの場合、$0416 の値を $02de に転写はするものの、$02dc の値を更新しないため、この段階で自動発動にはなりません。 - メッセージ処理($040e==1)
- コマンド実行
チャンク発動中は、チャンク内のメッセージに対応したコマンドの実行を行います。
発動後 $040e を 2 に更新します。
なお、このコマンド実行は主人公のアクション状態によっては保留されます。典型的には、ジャンプ中にXボタンで応答しても、着地まで進行が止まってるように見える事例は、この保留によるものです。
保留対象となる状態は、空中の各種状態(状態1~3)、掴まり(状態4)、ミス(状態8,16)、号令中(状態9)、水中(状態10)、店頭(状態13)、Yボタン補助(状態14)です。例外的に、イベント200番以降の階段上状態のみ、保留がありません。これは主にキャプリスのプロローグの進行のためと推測しています。
逆に保留とならないのは、立ち・歩き(状態0)、しゃがみ関係(状態5,6)、はしご掴まり(状態10)と、コマンドに起因する64以上の状態です。 - 自動発動チャンク発現
チャンク未発動で、自動発動チャンクが$0416に設定されており、かつ主人公がいずれかの登場キャラ(管理データAオフセット0xeが8のキャラを除く)に近接している場合、当該チャンクを発動します。
つまりこれは、自動的に会話が始まる仕組みを指しています。
なお、近接条件は表エリアならマップ上x座標160px,y座標32px未満、表エリア以外ならx,y座標152px未満です。
また、この自動発動チャンクは4bfおきに判定されます。つまりタイミングが合わない場合は次bfにスキップされます。 - 補足1:話しかけによるチャンクの発動について
Xボタン、場合によってはYボタンでの会話の発動は、別途0x81bd31のサブルーチンで処理します。
キャラにXボタンで話しかけた時に、管理データCのオフセット0xaに設定されたIDのチャンクが発現します。管理データ上の低位アドレスのキャラの方が優先です。
このチャンクの初期設定はイベントデータに含まれますが、その後の会話の進行でチャンク設定が切り替わる仕組みはコマンド3番によって実現されます。
Xボタンを押さない場合、communication? のプロンプト表示が行われます。
また、$0428にYボタン操作対象キャラが設定されている場合、Yボタンによっても$0426にあるチャンクが発現します。これは129番のコマンドでY操作対象・発現チャンクが設定された場合に限ります。
なお、対象キャラとは近接している必要がありますが、Xボタン操作の場合はx/y座標24px未満、Yボタン操作の場合は人間キャラ(ID63以外)で24px未満、ID63番でプロローグ時8px未満、プロローグ以外で32px未満となります。 - 補足2:メッセージ進行/チャンク間移行
一旦チャンクが発現すると、それに含まれるメッセージの進行、あるいは次のチャンクへの自動移行(設定されている場合、応答/無視の判断含む)はチャンク管理の一環で行われます。
- コマンド実行
- メッセージ終了待ち($040e==2)
$0422に設定された継続bf数をカウントダウンしながら、0になるのを待ちます。
0になれば $040e を 3 に更新します。
ただし、$0422 だけでなく、各進行管理データで保持しているコマンド持続時間が残っている場合は、移行が保留されます。 - 救助完了およびイベントチェイン準備($040e==3)
- 救助完了
コマンドの中に193番(救助完了)がある場合、このフェーズで処理を行い、同行者に組み込みます。 - イベントチェイン準備
上記救助完了処理後、$0408(移行先イベント)が非ゼロの場合、イベントチェインのための準備処理を行います。
行った場合は $040eを4に更新し、行わなかった場合は 1 に戻します。
$0408の設定が正の数の場合は、実際に設定された数値のIDのイベント呼び出しを行います。(呼び出し処理での$0408への0x8000の設定は4で上書きされることになります)
- 救助完了
- イベントチェイン($040e==4)
この状態はイベントチェイン処理専用です。処理の実体はサブルーチン0x9fed1eにあります。
$0408が正の数の場合は、$040eを0x8000に設定し、状態管理を最初から行う形になります。
$0408が負の場合は実際のイベントに移行するわけではなく、イベントIDが-1にリセットされます。$040eも0に更新されるため、イベント無しの扱いになります。
なお、コマンド実行の際は、イベントデータ内の対応するコマンド1~4が、一旦$042c~のイベント進行管理データに転写されてから行われます。その際、コマンド順とアドレス順は逆転しますが、コマンド実行も高位アドレスから行われるため、結局実行されるコマンドはコマンド1が最初でコマンド4が最後になります。
各コマンドが4バイトデータなのに対し、進行管理データは8バイト(×4)でサイズが違います。このサイズが異なる部分は、作業データ保存用に使用されます。進行管理データの内訳は次の通りです。
各コマンドが4バイトデータなのに対し、進行管理データは8バイト(×4)でサイズが違います。このサイズが異なる部分は、作業データ保存用に使用されます。進行管理データの内訳は次の通りです。
| オフセット | サイズ | 内容 | 備考 |
|---|---|---|---|
| 0 | 1 | コマンド番号 | イベント内コマンドデータからの転写 |
| 1 | 1 | パラメータx | イベント内コマンドデータからの転写 |
| 2 | 1 | パラメータy | イベント内コマンドデータからの転写 |
| 3 | 1 | パラメータz | イベント内コマンドデータからの転写 |
| 4 | 2 | 持続時間(bf) | コマンドによって一定時間効果がある場合のbf単位の時間を保存し、カウントダウンに使います |
| 6 | 2 | 不明 | おそらくコマンドの遅延解釈時に使うデータと推測しています |
コマンド詳細
コマンドの解釈は、0x9fed72のルーチンの各分岐で行います。その後、一部は 0x818dcb のルーチンで継続的に処理が行われるものもあります。また、救出成功の193番に関しては、0x81c440 の中で救出処理実施の 0x9ff53c を呼ぶことで実現します。
以下にコマンドの4バイトを低位側からw,x,y,zとした場合の、効果をまとめます。
※それぞれのバイトは、コード中 $042c+off、$042d+off、$042e+off、$042f+off ( offは進行管理データ内の8バイト単位オフセット ) でアクセスされます。
コマンドの種類を示すのは w になります。
以下にコマンドの4バイトを低位側からw,x,y,zとした場合の、効果をまとめます。
※それぞれのバイトは、コード中 $042c+off、$042d+off、$042e+off、$042f+off ( offは進行管理データ内の8バイト単位オフセット ) でアクセスされます。
コマンドの種類を示すのは w になります。
なお、コマンドのパラメータの中でキャラIDを指定するものがありますが、エピローグにおいては一部の値が異なる意味を持ちます。それは、55,56,57,60,61,62で、それぞれイベント参加者の2,3,4,1人目、同行者の1人目,末尾を表します。
- コマンド0番(メッセージ継続時間設定)
- 0x9fed85の分岐で処理されます。
- yの値を $0422 に保存することで、メッセージの継続時間(bf単位)を設定します。
- 他のパラメータは使用しません。
- コマンド0以外も含め、継続時間を設定するコマンドが複数あった場合、最大値のみが有効となります。
- 他に実行するコマンドがない場合にNOP代わりに設置するコマンドでもあります。
- コマンド1番(キャラ接触)
- 0x9fed9eの分岐で処理されます。
- x,yの値をそれぞれキャラIDと見て、前者のキャラを後者のキャラの近接位置に移動させます。
- zの値はの効果は近接と判定する距離(px単位)の指定に用います。
- コマンド2番(指定時間キャラ移動)
- 0x9fee2eの分岐で処理されます。
- x,yの値をそれぞれキャラIDと見て、前者のキャラに後者のキャラの方に指定時間移動させます。
時間ゼロの場合は単に振り向かせる効果となります。 - yの値の0x80のビットが1の場合、キャラと逆方向への移動となります。
- zの値は移動時間(bf数)として使用します。
- コマンド3番(キャラ別チャンクID設定)
- 0x9fee94の分岐で処理されます。
- xの値をキャラIDと見て、yの値を該当のキャラに話しかけた時に発現するチャンクのIDオフセットとして設定します。
- チャンクIDオフセットは、該当するキャラに対応する管理領域C上のオフセット0xaの位置に保存します。
該当するキャラが存在しない場合は無効となります。 - 実際に発現するチャンクIDは $0424 のベース値を加算したものとなります。
- zの値は、コマンド0と同様、メッセージ継続時間設定に使用されます。
- コマンド4(同行者条件による話の切り替え)
- 0x9feec8の分岐で処理されます。zの値は使われません。
- 同行者条件に応じて、話の進行を切り替える効果を持ちます。主に、コマンド194と対になってキャラコラボイベントの実現に使われます。
- 同行者条件には2種類あります。キャラID指定条件と同行者人数条件です。
- キャラID指定条件
- xの0x40のビットが0の場合、キャラID指定条件になります
- xの下位6ビットをキャラIDとして、同行者の存在と同室判定(管理データCのオフセット0のワード値の0x800のビットが0であること)を行います
- キャラID 8 (ステラ) が対象の場合、同時に 9 (ハリー)の判定も行います。つまり、2人揃って初めて判定成功扱いになります
- なお、実際は同行者だけでなくロスト状態のキャラも対象になります。更にはロスト上書きで消滅扱いになったキャラもメモリ上にデータが残って判定対象にカウントされるため、同室状態のままロスト上書きしたキャラでも判定成功扱いになります(ゴースト化)
- 同行者人数条件
- xの下位3bitを人数と解釈し、同行者がその人数以上かどうかを判定します。
※この同行者にロスト状態のキャラは含みません - また、同行者の末尾のキャラが同室かどうかも判定します。
※通常は全員が室内に入ったことで成立するように見えますが、末尾のキャラだけ同室でも条件を満たします。 - もちろん、ボイラー室前のユーサー論戦のイベント限定です。
※没イベントのチェルマーソンのイベント(ルーク版)も実は同行者人数条件が、後述の距離判定有効で設定されています。
- xの下位3bitを人数と解釈し、同行者がその人数以上かどうかを判定します。
- 上記2種類のいずれでも、xの0x80のビットが0の場合、イベント登場キャラ(先頭)との距離判定も行います。
とは言え、同行者人数条件の場合ビット1で使われるため、実質キャラID指定限定です。
表エリアならマップ上の横方向96px以内、縦方向32px以内、それ以外なら縦横128px以内という条件です。 - 効果は主に2種類あり、チャンクIDの割り込み設定とイベントキャンセルです。
- チャンクIDの割り込み
- 詳細は割愛しますが、$0416による自動開始チャンクをyの値に書き換える、あるいは現在進行中のチャンクを終了扱いにして次チャンクをyの値に書き換えるといった方法のいずれかで、話の流れを変えます。
- イベントキャンセル
- 初期実行コマンド限定で、条件によってイベントをキャンセルします
- 1つは、このコマンドで条件を満たせず、始められる会話($0416の自動開始着および登場キャラの初期チャンク)がない状況になる場合です。
これはレドウィンでのホール(2F)のステラ・ハリーの母との邂逅イベントのみ該当します。
つまり、ステラ・ハリーが同室にいなければイベント自体が無かった扱いになります。 - もう1つは同行者条件を満たす場合にイベントをキャンセルするというものです。
これはyの値が255の場合に発現します。
なおこれは、アランがいるとエイカーズが現れないという制御にのみ使用されています。
- コマンド5,6(発言キャラ決定)
- 0x9ff01cの分岐で処理されます。
- xの値をキャラIDと見て、該当するキャラを発言中のモーションに設定します。
- モーションに対応する姿勢IDは、キャラの状況(足場の傾き、あるいはハシゴ掴まり)によって自動で調整します。
- コマンド5,6で、設定する姿勢IDの範囲が168~175か、176~183かの違いが出ます。
※後者の方が感情的なモーションになっています。 - このコマンドによるポーズ制御のみ特殊で、1つの姿勢IDのまま、交互に異なるポーズを行ったり来たりする調整がされます。
- 管理データCの該当するキャラのオフセット8の値を更新します。
- yの値は、向きや位置調整のための「誰に対して話しているか」のキャラIDの指定です。
- yの下位6bitで指定したキャラの方を向くように調整されますが、yの0x80のbitが立っている場合、逆にキャラから顔を背けるようになります。
- yの下位6bitで指定したキャラに近接している場合、少し距離をとるように動きます。この挙動は、yの0x40のbitが立っている場合は無効かされます。
- zの値は $0430,y に保存され、おそらく $0422 と同様継続時間に使用されます。
※詳細未検証
- コマンド128(キー操作自動設定)
- 0x9ff0b2の分岐で処理されます。
- 指定のキャラに対し、キー入力を自動設定します。これによりしゃがみや歩きといった演出を行います。
- 対象のキャラIDは、x の下6bitで指定します。上位2bitは使用しません。
- キー入力内容は yの値で指定します。1/0になっているビットの分、キー入力が有効/無効になっている扱いです。下4bitが十字キー(udlr)に相当します。上位4bit(BYsS)のうち、start,Selectは効果がありません。Bについてはジャンプの効果はありませんが、透過する床を下りるといった効果は発揮されます。
- yの値が0で、かつ対象キャラが0~3(主人公たち)の場合、副次効果としてコマンド129によるロックが解除されます。
- zの値はコマンドの継続時間として使用されます。(bf単位)
- コマンド129(複数効果コマンド)
- 0x9ff100の分岐で処理されます。
- 条件に応じて複数の効果を持ちます。yの値としては0もしくは128しか使用されません。
- yが128の場合(Yボタン操作対象設定)
- xをキャラID、zをチャンクIDオフセットとして、Yボタン操作対象に設定します。
つまり、当該キャラをYボタン操作すると、$0424+zのIDのチャンクが発現するようになります。 - 各値は$0428, $0426に保存されます。
- xをキャラID、zをチャンクIDオフセットとして、Yボタン操作対象に設定します。
- yが0、xの下位6bitが非ゼロの場合(個別処理)
- xの値(1~19)に応じて、非定型の個別処理を指定するものです。
具体的な処理は ($8188ae,x)の間接アドレスサブルーチンコールで行われます。(ここでの ,x はxレジスタの意味)
※範囲外は未対応 - zの値をキャラIDとして、対象のキャラをコマンド実行中扱いとします。キャラがいない場合はコマンドが無効となります。
- 持続時間(bf)は、c849+x に保持されたバイト値を使用します。
- x=1: キャラの表示・非表示の切り替えです。キャラがドアを出入りする演出等で用いられます。
処理としては、当該キャラの姿勢情報に 0x1000 または 0x2000 のビットをON/OFFすることで、スプライトの優先順位を変更しています。
※多くの場合は、姿勢情報のこのビットにより表示対象から外れます - x=2: キャラが揺すられる演出です。フランソワの救出イベント(ジェフリー編除く)でしか用いられません。
処理としては、4bf毎にキャラの位置を1pxずらすというものです。 - x=3: ミッシェルのバイオリン演奏を行う処理です。
BGMの切り替えから復帰、演奏ポーズの制御を行います。 - x=4: ラットラー落下の処理です。
掴まり状態のラットラーの落下状態への移行と、着地後の尻もちのポーズの設定を行います。 - x=5: キャプリスがラットラーを受け止めようとする処理です。
構えるポーズから、落下してきたラットラーと接触して転倒状態になる制御を行います。 - x=6: 打撃音を繰り返し鳴らす処理です。
各エピローグで船底を叩く際の音の演出として使用されています。16bf毎にSE 21番を鳴らします。 - x=7: エントランスの受付嬢から案内図を貰う処理です。
案内図所持フラグである $042a をセットします。
なお、指定されたキャラIDは特に処理に影響ありません。 - x=8: 未使用
- x=9: キャラを死亡状態にし、汎用のミスのポーズをとらせる処理です。
主に各イベントの初期処理で、死亡キャラクターに施す処理となっています。 - x=10: キャラを起き上がらせる処理です。
- x=11: 同行者を一斉移動させる処理です。そのために、対象のキャラの地点にマーカーを設置します。
ユーサーとの論戦時や一部エピローグで使用されます。 - x=12: 同行者を消滅させます。
ユーサーの論戦に負けて同行者が連れ去られる処理や、エピローグで同行者の枠を空にするために使用されます。
単に管理データの枠を繰り上げるだけなので、残った管理データはゴースト化状態となりますし、ロスト者がいる場合そちらが優先して削除される形になります。
なお、指定されたキャラIDは特に処理に影響ありません。 - x=13: 未使用
- x=14: モザイク処理を行います。レドウィンの重要人物無し高得点EDでの場面転換時にのみ使われます。
同時に画面暗転も行われ、暗転からの復帰に次のx=15の処理も併用されます。
なお、指定されたキャラIDは特に処理に影響ありません。 - x=15: 画面の暗転あるいは暗転からの復帰処理を行います。
各種エピローグで、画面を暗転させるために用いられます。
また、既に暗転状態の時は暗転から復帰します。
なお、指定されたキャラIDは特に処理に影響ありません。 - x=16: キャプリスベストEDのエピローグでのキャプリスの動作制御用です。
落ちるエイミーにかけより、支えるポーズをとるところまでの動きを実現します。 - x=17: キャプリスベストEDのエピローグでのエイミーの動作制御用です。
足場から落下して、駆け寄ってきたキャプリスに支えられて宙ぶらりになるまでの動きを実現します。 - x=18: ジェフリーの重要人物無しEDエピローグでの、救助スタッフの動作制御用です。
救助スタッフ2人が引きずって移動する演出を行います。このコマンドは、救助スタッフ2人それぞれ個別にコマンドが発行されます。 - x=19: ジェフリーの重要人物無しEDエピローグでの、ジェフリーの動作制御用です。
引きずられていく演出を実現します。
- xの値(1~19)に応じて、非定型の個別処理を指定するものです。
- yが0、xの下位6bitがゼロ、zがゼロの場合(主人公のロックに関わる機能)
- xの値が$0404に保存され、判定に用いられます。
- xが64の場合、ロックが解除されない状態で場所移動すると同行者が0になる効果を持ちます。
※ユーサーのイベントの最初で効果を発揮するものです - xが128の場合、主人公の操作が無効化されます。
- xが0の場合、上記ロック効果が解消されます。
- yが0、xの下位6bitがゼロ、zが1~127の場合
効果音に関わる機能です- zが64以上の場合、チャンネル7が停止されます。ただし、実際には使用されていません。
- zが1~63の場合、zの値のIDのSEが鳴らされます。
プロローグ中はチャンネル7、それ以外では4~6のうちの空きチャンネルが使われます
- yが0、xの下位6bitがゼロ、zが128以上の場合
- zが128~131の場合、ルークのプロローグのごく一部で、2.8秒周期の微小振動の揺れ幅を調整するために使われます
- zが132~191の場合(実際は132~135のみ)、転覆前の予兆のような、船の小刻みな上下振動のON/OFFに用います。キャプリスのエピローグ限定です
- zが192~の場合、フレーム数の単位 ( 通常 1bf=2f ) を変更する機能がありますが、実用されていません。
- コマンド130(場面転換)
- 0x9ff220の分岐で処理されます。
- xが59の場合は、エピローグの最後からエンディング(船底を背景に表示)に移行する効果を持ちます。
- xが59以外の場合は、プロローグ・エピローグでのイベントチェインでの場所移動として、コマンド192と併用されます。
- xが59以外の場合、xを次の部屋ID(表エリアの場合は0を指定)、y,zを16ピクセル単位のx座標/y座標として、移動先を指定します。
- コマンド131(主人公キー操作自動設定)
- 0x9ff045の分岐で処理されます。
- コマンド128類似ですが、対象は主人公となります。
こちらは、十字キー下でのしゃがみや、キー入力なしでの棒立ちの演出でしか使用されません。 - コマンド128と異なり、コマンド実行の最初で指定キャラの方向を向く処理が実行されます。対象のキャラIDは x の値の下位6bitで指定します。(上位2bitは無関係です)
なお、指定キャラがその場に存在しない場合、コマンド自体が無効となります。 - y(キー入力内容)およびz(継続時間)については、コマンド128と同様です。yの値が0の場合のロック解除もあります。
- コマンド192(イベント移行/イベント完了)
- 0x9ff255の分岐で処理されます。
- プロローグ・エピローグでのイベントチェインのため、次のイベントIDを設定する用途で用いられます。
- あるいは、127番以下のイベントを対象として、イベント完了フラグを立てる用途で用います。
※完了というよりは、やり直し不可と表現した方が合っています。 - イベントチェインの用途の場合、xに次のイベントID、yに0を指定します。
- 完了フラグを立てる用途の場合、x,y に共に0あるいは255を指定します。
- また、エピローグ最後からエンディングに映る際にも使用されます。その場合x,yに共に255を指定します。
- zの値は$0422に保存され、コマンド0と同じ効果を持ちます。
- x,yの値はワード値として$0408に保存されます。
- コマンド193(救出完了)
- 0x9ff280の分岐で処理されます。
- xの値をキャラIDとして、救出完了とする効果を持ちます。
- zの値は$0422に保存され、コマンド0と同じ効果を持ちます。
- 救出処理のコア部分はこのルーチンでは実行されず、また別途0x9ff53cのルーチンから呼び出される0x9ff315のルーチンで実行されます。
- なお、このコマンドもイベント完了フラグを立てる効果があります。
- コマンド194(コラボキャラ移行)
- 0x9ff297の分岐で処理されます。
- このコマンドは、指定されたキャラが同行者として存在する場合、参加者枠に移動させる効果を持ちます。
例えば、マリーと再会した時の母フランソワが典型例となります。 - キャラの指定は、xの下位6ビットで行います。
xの0x80のビットにも効果が設定されているのですが、使用されていません。 - zの値は$0422に保存され、コマンド0と同じ効果を持ちます。yの値は使用されません。
- 効果が発動した場合、指定のキャラの分同行者が1人減って、イベント参加者がその分増えます。
一旦同行者でなくなるため、そのイベントで改めて救出できなければ、そのまま別れることになります。 - 指定のキャラがロスト状態かつ同室の場合でも効果を発揮しますが、色々と問題のある挙動を引き起こすため、注意が必要です。
- コマンド64(ポーズ変更)
- wの値64~127のコマンドをまとめて64とします。
- 0x9ff2ebの分岐で処理されます。
- w-64の値をキャラIDとして、当該キャラのポーズを変更します。
- xの値はどのキャラIDのいる方を向くかの制御用です。0x80のbitが立っている場合は、逆方向を向きます。
※自キャラを指定している場合は標準(通常は左向き)のポーズをとります - yの値は姿勢IDのベース値を設定します。実際に設定される姿勢IDは、傾き状況とバリエーションに応じて補正が入ります。
- zの値の上位2bitはバリエーションを示します。上位2bitが01ならバリエーション1、00もしくは10ならバリエーション2、11ならバリエーション3です。00の場合はバリエーションをループ的に切り替える動作、それ以外は1周で終了となります。
- 実際に姿勢IDは、傾き水平・上り22.5°・45°・下り22.5°・45°に応じて0~4の係数をバリエーション数にかけて補正をかけます。例えばベースが129で下り22.5°、バリエーション2の場合、129+2×3=135により、ID135,136のポーズを使う挙動となります。
- zの値の下位6bitはポーズの切り替えの時間(bf)を表します。これが0の場合は、瞬時に切り替えが発生し、そのままポーズが固定されます。
- メッセージ終了後、別のコマンドの影響がなければ、最後にとったポーズをとり続けます。
ただし、この仕様のため、間違って同行者にコマンドが適用された場合、高速でツッコミを入れるようなポーズでハマりになります。
また主人公で別途コマンド129でのロックがない場合、そもそもポーズ変更がうまくいかず類似のツッコミを入れるようなポーズをとります。 - 実際のポーズ変更処理はまた別のルーチンが担当しています。