マップスクリプト

Last-modified: 2018-11-21 (水) 21:09:12

マップスクリプトとは

マップに入った瞬間に特定のイベントを発生させるために設定されるスクリプト。
別名レベルスクリプト

発動させたいイベントを通常のイベントスクリプトとして作成し、
そのスクリプトのオフセットを特定の書式で記述したリストをマップヘッダーから指定する事で、マップに入った瞬間にスクリプトを実行する事ができる。

作成したマップスクリプトはマップヘッダーの0x8byte目でオフセットを指定する。
Advance Mapの場合は[設定]→[高度なヘッダーを表示する]にチェックを入れた状態で、「場所の設定」の「マップスクリプトオフセット」の項目から設定できる。

マップスクリプト個別解説

書式に記載される記号は以下の通り

記号説明詳細
SS SS SS SSイベントスクリプトのオフセット通常のイベントスクリプト
イベントスクリプトページ参照
MS MS MS MS変数比較設定のオフセットイベント変数と値、実行するのイベントスクリプトのリスト
詳細は後述

タイプによって実行できるイベントスクリプトが異なる模様。
各種比較、条件分岐スクリプトはどのタイプでも使用できるので、
イベント変数の指定が無いタイプのマップスクリプトでも実行スクリプト内で分岐させて発動制御する事ができる。

00:マップスクリプトの終了

00

マップスクリプトの処理を終了する。マップスクリプトの終端に必ず使用する必要がある。

マップ入場時に一切イベントを発生させない場合は00のみ記述する。
通常民家やフレンドリィショップなど、多くのマップで使用される。

01:マップタイル設定

01 [SS SS SS SS]

マップ入場直後に指定オフセットのスクリプトを実行する。イベント変数の指定はなく、無条件で動作する。

A2スクリプトを使ったマップタイルの変更にのみ使用する。
マップ描写前に実行されるのでSpecial0x8Eを実行する必要は無い。

02:通常イベント実行

02 [MS MS MS MS]

指定オフセットに記述されたリストをチェックし、イベント変数と値が一致した場合のみスクリプトを実行する。
マップ入場直後だけでなく、後からイベント変数が変更された場合にも実行される。
イベント変数と比較値の指定方法については後述。

ロックスクリプトを使った会話や移動を伴うイベントスクリプトに使用する。
実行可能なスクリプトに制限は無く、通常の床スクリプトと同じ感覚で使用可能。
ただしスクリプトの実行はワープが完了してから行われるので、マップタイル変更やBGM変更、オブジェクトの設定といった暗転中に処理しておきたいスクリプトは他のタイプで設定する。
指定したイベント変数とその値が一致している限り何度でも実行され続けるので、イベント中に指定したイベント変数の値を必ず変更する必要がある。

03:通常スクリプト設定

03 [SS SS SS SS]

マップ入場直後に指定オフセットのスクリプトを実行する。イベント変数の指定はなく、無条件で動作する。

フラグやオブジェクトの設定、BGM変更スクリプト等ロックの必要ないスクリプトの実行には一部の例外を除きこのタイプが使用される。
使用可能なスクリプト:34/42/63/65/9F/A7/D0等

04:オブジェクトの向き設定

04 [MS MS MS MS]

マップスクリプト02同様、指定オフセットに記述されたリストをチェックし、イベント変数と値が一致した場合のみスクリプトを実行する。
イベント変数と比較値の指定方法については後述。

5Bスクリプトを使ったオブジェクトの向き設定にのみ使用される。
(例外的にサイクリングロードのSpecial0x157の実行にも使用されている)

05:常時発動スクリプト設定

05 [SS SS SS SS]

マップ入場直後に指定オフセットのスクリプトを実行する他、戦闘後やメニューの開閉等画面切り替え時にも再度実行する。
イベント変数の指定はなく、無条件で動作する。

A6スクリプトの実行や、シンボルエンカウントポケモンのオブジェクトを戦闘終了直後に消去する等常時発動させるスクリプトに使用する。

06:詳細不明

詳細不明。設定したマップに入場すると暗転フリーズする?
FRでは使用されていない。

07:詳細不明

07 [SS SS SS SS]

詳細不明。戦闘後やメニューの開閉等画面切り替え時にのみ指定オフセットのスクリプトを実行する?
FRではトレーナータワー(2.10)とたんじょうのしま(2.56)でのみ使用されている。

02/04を使用する場合の変数比較設定

マップスクリプト02/04を使用する場合はイベント変数と比較値の指定、実行するスクリプトのリストが必要となる。
上記マップスクリプトの種類の項で記載したMSの書式は以下の通り。

[VA VA] [nn nn] [SS SS SS SS]

イベント変数VAの値がnnと一致する場合のみ、SSのアドレスに記述されたスクリプトを実行する。

上記書式は並列記載することで複数条件をチェックすることが可能である。

[VA VA] [nn nn] [SS SS SS SS] [VA VA] [nn nn] [SS SS SS SS] [VA VA] [nn nn] [SS SS SS SS] [00 00]

前方から順番に値を比較、実行されていき、最後の[00 00]に到達した時点で比較終了、後続のマップスクリプトの処理へと移る。
終端は必ず[00 00]で閉じる必要があり、入れ忘れるとフリーズしたりテスト用メッセージがループする等の不具合が発生する。

マップスクリプトの複数指定

マップスクリプトは異なる種類のものを複数個同時指定することができる。

02 [MS MS MS MS] 04 [MS MS MS MS] 03 [SS SS SS SS] 05 [SS SS SS SS] 00

終端は必ず00で閉じる必要がある。
マップスクリプトは前方から順番に処理されていき、最後の00に到達した時点で
「それ以上実行すべきマップスクリプトなし」と判断されて処理終了となる。

Advance Mapを使用する際の注意点

マップスクリプトの設定はAMでも可能だが、AMで追加した02/04マップスクリプトの比較設定は終了を示す[00 00]が終端に書き込まれない為不具合が発生してしまう。
設定後はバイナリエディタでスクリプトオフセットに移動し、比較設定の終端に手動で[00 00]を付け足す必要がある。

また、複数条件の設定を行う事はできず、複数条件が記述されていた場合でもマップスクリプトの項目には1つ目の項目しか表示されない。
この事から02/04スクリプトの設定を行う際はAMのマップスクリプト機能は使用せず、手動で設定した方が安全。