スキップしてメイン コンテンツに移動

最新の投稿

ファミコン版天地を喰らう 軍師キャラの隊列変更阻止について

 天地を喰らうシリーズは策略を使うにあたって「軍師」に任命された武将がいないと使用不能になるのですが、軍師に任命された武将は戦闘が開始されると隊列の一番後ろに配置され、隊列が6人以上になると直接戦闘に参加できなくなるというシステムになっています。これがいわゆる文官タイプ(武力や兵士数が低く知力が高い傾向の武将)であればまだいいのですが、劉備や馬謖や姜維のように文武両道の武将を軍師に任命する必要がある場合は事情が変わってきます。そこで、軍師に任命した武将がどのような処理で隊列の一番後ろに回されてしまうのか調べてみました。その結果、大まかに言うと「戦闘開始時にまず隊列の人数をチェックし、6人未満である場合は各武将の状態をチェックし、正常であれば隊列の位置そのまま、それ以外の状態の武将は隊列の最後尾に変更する。6人以上の場合は軍師を隊列の最後尾に移動させるが、負傷中の武将がいる場合は更に軍師の後ろに配置する」という処理内容でした。ここで言う武将の状態は「00=負傷中(戦闘不能)、40=軍師、80=正常、C0=正常かつ軍師」の4種類で、この処理内容を変更すれば軍師に任命した武将も隊列の変更がないまま戦闘に参加できそうです。つまり「隊列が6人以上でも6人未満でも武将が正常な状態であれば隊列の位置そのままを維持し、負傷中の武将のみ隊列の最後尾に変更する」とすればよいのではないでしょうか。この仮説を基に改変を行い、成功すればパッチとして公開する予定です。

第2次スーパーロボット大戦G イベントコード調査続報その3

 第2次Gのイベントコードを解析してみました。前回の内容にプラスして新たなコードがいくつか追加されています。また、解釈を誤っていたと思われるコードの解説も変更しています。調査中のコードに関しては詳細が判明次第内容を公開する予定です。



 0x0003 ウェイト。 03 xx yy

        xx yyは待ち時間。

指定した時間だけコントローラーの操作受付を禁止。


0x0004 指定アドレスにジャンプ。 04 xx yy

xx yyはROM(RAM)内のアドレス。

経過ターンによるイベント制御の際はEDと組み合わせて「ED zz 04 xx yy」となる。


0X0020 ??? 20 xx

        調査中。


0x0049 BGMの終了。 49 xx

xxはBGM番号。

指定したIDのBGMの再生を終了してF6で変更する前のBGMに戻す。


0x0060 ??? 60 xx

調査中。


0x0080 コントローラー操作を受け付け開始。 80

コントローラーによるボタン操作や十字キー操作などを受け付けるようにする。


0x0081 イベントページの終わり。 81

現在のイベントページの実行を終了して次のイベントフェイズに移行。

インターミッションであればマップイベント開始、

マップイベントであればアウターミッション、

アウターミッションであれば準備画面。


0x0084 パイロット参入。 84 xx yy

xxはパイロットID。yyはレベル。


0x0085 機体入手。 85 xx

xxは機体ID。


0x0086 パイロット離脱。 86 xx

xxはパイロットID。

SRAMから指定したパイロットを削除する。


0x0087 機体離脱。 87 xx

xxは機体ID。

SRAMから指定した機体を削除する。


0x0088 強制乗り換え 88 xx yy

xxはパイロットID、yyは機体ID。

指定したパイロットを指定した機体に乗せるコマンド。

ガンイージの様に同じ機体が複数ある場合は入手した順に乗り換える。

指定したパイロットや機体が存在しない場合は無効となりキャンセルされる。


0x0089 自軍にユニット(パイロット搭乗済みの機体)が参入。 89 xx yy zz

xxはパイロットのID、yyはパイロットのレベル、zzは機体のID。

設定したパイロットが設定したレベルで

        設定した機体に搭乗した状態でSRAMに登録される。


0x008A フラグONならば指定アドレスにジャンプ。 F2 XX YY 8A xx yy

xx yyはROM内のアドレス。「F2 XX YY」と組み合わせて使用。


0x008B フラグOFFならば指定アドレスにジャンプ。

F2 ww xx 8B yy zz、または9B 8B xx yy

xx yyはROM内のアドレス。「F2 XX YY」と組み合わせて使用。

択一イベントの場合は「9B」と組み合わせ。

選択肢の二番目を選ぶとxx yyにジャンプ。


0x008C 指定ターンになったら指定アドレスにジャンプ。 zz 8C xx yy

「ED」と組み合わせて使用。zzは指定ターン。xx yyは指定アドレスの座標。


0x0090 ユニット出現。 90 XX YY xx yy zz aa bb

XX YYは所属設定とX・Y座標、xxはパイロットID、yyはレベル、zzは機体ID、

aa bbはユニットの行動パターン。

マップ上にSRAMに登録されていないユニットを出現させる。

主に敵増援や味方NPCを出現させるためのコード。

XXは00~3FまでがX座標指定で+40で敵軍、+80で自軍NPC、

        +C0で説得可能な敵軍。

YYは00~3FまでがY座標指定で+60する(意味は不明)。

aaは行動開始ターン、bbは行動パターン設定と思われる。


0X0091 ユニット強制配置。 91 xx yy zz …FF FF

xx yyはマップ上のX座標及びY座標。zzはパイロットIDで、

そのパイロットが乗った機体が指定したX・Y座標に配置される。

必要な人数分だけ入力後、「FF FF」で命令終了。


0x0092 会話イベント開始。 92 xx yy zz

xxはパイロットID。yy zzはメッセージID。

指定したパイロットの顔アイコンを表示して指定したメッセージを表示。

指定パイロットがマップ上に存在する場合は

        その位置にカーソルがクローズアップされ、

        存在しない場合は味方母艦にカーソルがクローズアップされる。


0x0093 会話イベント開始。 93 xx yy zz

xxはパイロットID。yy zzはメッセージID。

指定したパイロットの顔アイコンを表示して指定したメッセージを表示。

直前に会話したパイロットの位置で続けて会話を発生させる?

        92との違いは今のところ不明。


0X0094 ??? 94

調査中。


0x0095 カーソルの座標指定。 95 xx yy

        xx yyはマップ上のX座標及びY座標。

指定したマップ上の座標にカーソルをクローズアップ。


0x0097 敵側パイロットの会話。 97 xx yy zz

xxはパイロットID、yy zzはメッセージID。

指定した敵パイロットにカーソルを合わせて会話イベントを開始。

指定パイロットがマップ上に存在する場合は

        その位置にカーソルがクローズアップされ、

        存在しない場合は味方母艦にカーソルがクローズアップされる。


0x0098 マップ上のその場にて会話イベント開始。 98 xx yy zz

        xxはパイロットID。yy zzはメッセージID。

        指定パイロットの顔アイコンが表示された状態で

        カーソルの位置にて会話イベントを開始する。


0x0099 命令終了。 99

        特定のコマンドコードの命令を終了する。


0x009A メッセージ呼び出し。 9A xx yy

        xx yyはメッセージID。

        顔アイコンのないメッセージを表示する。

        主に「敵増援部隊が出現しました」など。


0x009B 択一イベント開始。 9B 8B xx yy

        基本的に「8B xx yy」と一緒に使用。

選択肢の二番目を選ぶとxx yyにジャンプ。


0x009D 指定ユニットのマップ上での機体変更。 FD xx 9D yy

xxはパイロットID、yyは変更後の機体ID。

指定したパイロットが乗る機体をyyに変更する。

乗り換えではなくSRAM上の機体データを上書きするので変更前の機体は失われる。


0x009E ワールドMAPを呼び出してポインタを付ける。 9E ww xx yy zz

wwはワールドMAPのID、xxは地名ID、yy zzはMAP上の座標。


0x009F 指定座標にポインタを動かす。 9F xx yy zz

xxは地名ID、yy zzは目標座標。


0X00A0 出撃選択機体数、及び出撃座標指定。 A0 zz xx yy xx yy …FF FF

そのマップで出撃できる機体数を指定し、出撃順にマップ上に配置する。

zzは出撃選択できる機体数、xx yyは出撃した機体が配置される場所。

zzの数だけxx yyを入力し、規定数の分を入力したらFF FFで終了。


0x00A2 顔アイコンを表示。 A2 xx

xxはパイロットID。

画面中央に指定したパイロットの顔アイコンを表示。

主にドモンがキョウジの写真を見せるイベントで使用。


0x00A4 表示ウィンドウを消す。 A4

表示されている顔アイコンやメッセージウィンドウを消去する。


0x00C8 指定機体の改造引き継ぎ。 C8 xx yy

xxは引き継ぎ元の機体ID、yyは引き継ぎ先の機体ID。

指定した機体同士の武器、及び機体改造状態を引き継ぐ。


0x00C9 指定パイロットを出撃禁止にする。 C9 xx

        xxはパイロットID。

        「CA」で解除するまでそのパイロットは出撃準備画面に表示されなくなる。

        ついでに搭乗中の機体も乗り換えやパラメーター確認の対象外になる。


0x00CA 指定パイロットの出撃禁止を解除する。 CA xx

        xxはパイロットID。


0x00CE 次のシナリオの指定。 CE xx

xxはシナリオID。


0x00DD 指定ユニットを行動させて実行後に行動終了状態にする。

DD xx、またはFD xx DD FF

xxはパイロットID。

指定したパイロットの移動禁止状態を解除する。

「FD」と組み合わせる場合は指定したパイロットのユニットに

        移動系コマンドコードを実行させる。

行動させたユニットは行動終了状態となる。

「FF」の後に実行させたいコマンドコードを記述。


0x00DE 指定ユニットの移動を禁止する。 DE xx

xxはパイロットID。

指定したパイロットを移動禁止状態にする。「DD xx」で解除。


0x00DF 指定ユニットの自爆。 DF xx

xxはパイロットID。

指定したパイロットが乗るユニットを自爆させる。


0x00E0 指定ユニットの撤退。 E0 xx

xxはパイロットID。

指定したパイロットが搭乗するユニットをマップから撤退させる。


0x00E1 指定パイロットが経験値を取得。 E1 xx yy zz

        xxはパイロットID、yy zzは取得する経験値。


0x00E4 指定ユニットに重なる。 FD xx DD FF E4 yy 99

        xxは移動指定する側のパイロットID、yyは指定対象側のパイロットID。

指定したパイロットのユニットを、

        指定されたパイロットのユニットと同じマスに移動して重なる。

重なった側のユニットはマップから撤退扱いになる。

yyの後に「99」で命令終了。


0x00E6 指定ユニットの移動。 FD zz (DD FF) E6 xx yy XX YY 99

zzはパイロットID、xx yyとXX YYは移動先のX座標とY座標。

指定したパイロットのユニットをxx yyに移動させた後に

        XX YYの座標に移動させる。

        移動後に行動終了させたくなければ「DD FF」は不要。

移動先が一か所でいいのならばxx yyとXX YYは同じ座標でよい。

一旦特定の座標を経由してから目的地に到達させる場合は、

xx yyに経由させる座標、XX YYに目的地の座標を入力。

「99」で命令終了。


0X00E9 指定パイロットの存在の有無をチェック。

        E9 xx 8A XX YY、E9 xx 8B XX YY

xxはパイロットID。

指定したパイロットがマップ上に存在するかどうかをチェック。

後ろに8Aや8Bを追記する事で分岐条件(XX YYはジャンプ先のアドレス)となる。


0x00ED 経過ターンチェック。 ED  xx yy

現在のマップ上ターン数をチェックし、

        規定ターン数(zz)以外はxx yyの座標にジャンプ。

この後に「zz 8C xx yy」と続いていき、

        zzのターンになったらxx yyの座標にジャンプ。

最終イベントへのジャンプ命令は「zz 04 xx yy 」となり、

最後の規程zz 04ターンを超過した後は

        全て最初のED xx yyの座標にジャンプするようになる。


0x00F0 指定フラグをONにする。 F0 xx yy

        xx yyはフラグ番号。


0x00F1 指定フラグをOFFにする。 F1 xx yy

        xx yyはフラグ番号。


0x00F2 指定フラグを参照する。 F2 xx yy

        xx yyはフラグ番号。

        8A、8Bと組み合わせて「F2 xx yy 8A XX YY」や「F2 xx yy 8B XX YY」と記述し、

分岐条件チェック(条件を満たす、または満たさないとXX YYにジャンプ)

        として使用。


0x00F4 資金を入手。 F4 xx yy

資金を増やすイベント。

xx yyは入手する資金の額。


0x00F6 BGMの再生開始。 F6 xx

        xxはBGM番号。

指定したIDのBGMを再生開始。

        コード実行前に使用されていたBGMのIDは記憶されている。

BGMの番号+80hでBGMが1ループ分再生終了するまで操作受付を禁止

        (敵増援部隊登場時の演出に使用、0C+80h)。


0x00FD 指定ユニットを掴む。 FD xx

        xxはパイロットID。

指定したパイロットが搭乗するユニットにカーソルを合わせて掴む。

その後、他のコマンドコードと組み合わせて移動や攻撃などの命令を実行させる。

コメント

人気の投稿

キャプテン翼4 ファンベルグの「光るシュート」とオルミーガの「吹っ飛ばし補正」について

第4次スーパーロボット大戦 初期型ROMと後期型ROMの物理的な見分け方と入手方法

第4次スーパーロボット大戦 改造コスト&改造数値分岐パッチを公開しました