スクリプト総まとめ
ERROR氏、他の様々なスクリプトサイトを参考に頑張ってまとめてみる
ある程度出来たら参考サイト載せる予定
飽きたら試合終了
その前に用語?の定義
用語 |
説明 |
byte |
1バイト分の値 |
word |
2バイト分の値 |
dword |
4バイト分の値 |
pointer |
dword。値はROMかRAMのオフセット |
variable |
変数。0x4000以上の値。範囲は察して |
flag |
フラグ。0か1か。 |
引数 |
そのスクリプトに渡す値の種類 |
00(nop)
何もしない
01(nop1)
何もしない
02(end)
スクリプト処理を終了する
03(return)
04(call)で飛んだ先の末尾に付ける
04(call)
引数:
pointer //目的地
指定したアドレスのスクリプトに行き、呼んだ場所に戻ってくる
終了時には03(return)を使って終了する。
スクリプトの限界は20。
そのためゲームでは規律を守るために、途中で05(goto)を使ってスクリプトを繋げている。
05(goto)
引数:
pointer //目的地
指定したアドレスのスクリプトに移動する
callとは違い戻ってこない
06(if1)
引数:
byte //条件(等しいかどうかとか)
pointer //目的地
21(compare)等で二つの値を比較した時に指定の条件が成り立っていれば目的地に飛ぶ。
これはスクリプトに飛ぶ(jump)、つまり飛んだ先は02で終了するものとする。
比較演算子は後述
07(if2)
引数:
byte //条件
pointer //目的地
21(compare)等で二つの値を比較した時に指定の条件が成り立っていれば目的地に飛ぶ。
これはスクリプトを呼ぶ(call)、つまり飛んだ先は03で終了するものとする。
比較演算子は後述
08(gotostd)
引数:
byte //関数
標準関数にジャンプする。
byteの値は関数のindex値
09(callstd)
引数:
byte //function
標準関数を呼ぶ。メッセージの処理で扱う。
byteの値は関数のindex値
0A(gotostdif)
引数:
byte //条件
byte //関数
条件が成り立っていれば、指定した関数にジャンプする(関数のbyteはindex値)。
主に21(compare)等と一緒に使う。
0B(callstdif)
引数:
byte //条件
byte //関数
条件が成り立っていれば、指定した関数を呼び出す(関数のbyteはindex値)。
主に21(compare)等と一緒に使う。
0C(jumpram)
元のRAMアドレス参照?
よくわかりゃん
0D(Killscript)
スクリプトの実行を終了して、スクリプトRAMのリセット?
これもよくわかりゃん
0E(setbyte)
引数:
byte //値
指定した値をdwordで置いて、dwordでアドレスに書き込む?
ちょっと意味がわかりゃん
0F(loadpointer)
引数:
bank //目的値
dword //値
指定されたアドレスに値を書き込む。
メッセージの処理に使える。
10(setbyte2)
引数:
bank //目的値
byte //値
指定されたアドレスに値を書き込む。
11(writebyteoffset)
引数:
byte //値
pointer //オフセット
指定したオフセットに値を書き込む
15(copybyte)
引数:
pointer //目的値
pointer //ソース
目的のアドレスにソースをコピーする
16(setvar)
引数:
variable //目的値
word //値
指定した変数に値を代入する。
17(addvar)
引数:
valiable //目的値
word //値
指定した変数に値を加算する。
オーバーフローは起きない(0xFFFF+1=0x0000)。
18(subvar)
引数:
variable //目的値
word-or-variable //値
指定した変数に値を減算する。
オーバーフローは起きない(0x0000-1=0xFFFF)。
19(copyvar)
引数:
variable //目的値
variable //値
目的の変数に変数の値を代入する。
1A(copyvarifnotzero)
引数:
variable //目的値
word-or-variable //ソース
ソースが変数の場合はcopyvarのように動き、そうでなければsetvarのように動く。
1B(comparebank)
引数:
bank //A
bank //B
スクリプトバンクAとBの値を比較する。
直後に06や07(if)を使って条件分岐する。
1C(comparebanktobyte)
引数:
bank //A
byte //B
スクリプトバンクAと固定値Bの値を比較する。
直後に06や07(if)を使って条件分岐する。
1D(comparebanktofarbyte)
引数:
bank //A
pointer //B
スクリプトバンクAとオフセットBの場所のbyte値を比較する。
1E(comparefarbytetobank)
引数:
pointer //A
bank //B
オフセットAにあるbyte値とスクリプトバンクBの最下位byte値を比較する。
1F(comparefarbytetobyte)
引数:
pointer //A
byte //B
オフセットAのbyte値とBを比較する。
20(comparefarbytes)
引数:
pointer //A
pointer //B
オフセットAにあるbyte値とオフセットBにあるbyte値を比較する。
21(compare)
引数:
variable //A
word //B
変数Aの値と値Bを比較する。
22(comparevars)
引数:
variable //A
variable //B
変数Aと変数Bを比較する。
23(callasm)
引数:
pointer //コード
アドレスに格納されているASMルーチンを呼び出す。
スクリプトはASMが戻るまで止まる(例:ポケセンPC)。
Thumbコード呼び出しには、オフセットに1を加算する必要がある。
24(cmd24)
引数:
pointer //ASMポインタ
ASMとスクリプトエンジンRAMをアドレス(ポインタ)に置き換える?
わかりゃん
25(special)
引数:
word //関数
特殊な機能を呼び出す。
つまり、特定のASMコードはこのスクリプト様に設計されていて、
テーブルにそのポインタがリストアップされている。
26(special2)
引数:
variable //出力先
word //関数
特殊機能を呼び出し、その結果を変数に出力する。
27(waitstate)
25や26(special)の処理が終了するまで待つ。
28(pause)
引数:
word(time)
スクリプトの処理を指定時間止める
時間はミリ秒なのかフレームなのか分かりゃん。
29(setflag)
引数:
flag-or-variable //bool
bool値に1をセットする。(Cではtrueに該当)
2A(clearflag)
引数:
flag-or-variable //bool
bool値に0をセットする。(Cではfalseに該当)
2B(checkflag)
引数:
flag-or-variable //bool
bool値と1を比較する。
2C(cmd2c)
FR/LGにおいて、このコマンドは00(nop)。
2D(checkdaolyflags)
FR/LGにおいて、このコマンドは00(nop)。
RSEではRTC(Real-Time-Clock)のフラグチェックに使う。
2E(resetvars)
0x8000、0x8001、0x8002の値をリセットする。
2F(sound)
引数:
word //効果音index
指定した効果音を鳴らす。
もし0x0000を指定した場合、流れている曲が全て止まる。
正常に再生するには、楽器の一致が無いようにしなければならない。
また古いverのVBAになると、このコマンドで指定した効果音が鳴るサウンドチャンネルが存在しないため聞こえない。
30(checksound)
2F(sound)コマンドで再生された曲が止まるまで待つ。
31(fanfare)
引数:
word-or-variavle //ファンファーレindex
指定したファンファーレを再生する。
(2F(sound)のように再生時間に限界があるみたい)
32(waitfanfare)
ファンファーレが再生し終わるまで待つ。
33(playsond)
引数:
word //曲index
byte //未知
指定した曲を再生する。
byteの詳細は不明だが、必ず0x00になっている。
34(playsond2)
引数:
word //曲index
指定された曲を再生する。
(playsong動作中には再生されない…?これは試したけどよくわかりゃん)
35(fadedafault)
マップの元の曲を現在再生されている曲にクロスフェードする。
(フェードスピードは指定できない)
36(fadesong)
引数:
word //曲index
指定した曲indexを現在再生されている曲にクロスフェードする。
(フェードスピードを指定できない)
37(fadeout)
引数:
byte //速さ
現在再生されている曲をフェードアウト(ミュート)にする。
バグなのか分からないが37(fadeout)の後に何処かで38(fadein)を付けずに39(warp)等でワープすると
ワープ先でのワープ(建物に入る等)をすると何故かブラックアウトする。
38(fadein)
引数:
byte //速さ
現在再生されている曲をフェードイン(元に戻す)する。
39(warp)
引数:
byte //bank
byte //map
byte //warp
byte-or-variable //X座標
byte-or-variable //Y座標
プレイヤーをワープさせる。もしwarpの値が0xFFであるのならば座標(X,Y)の指定ができる。
このコマンドではワープ時に効果音0x0009(Sappy上)が鳴る。
3A(warpmuted)
39(warp)と基本は同じ。
これは効果音が鳴らない。
3B(warpmuted)
39(warp)と基本は同じ。
これはワープするときに自動ドアの音が鳴る。
3C(warphole)
引数:
byte //bank
byte //map
指定したマップに落ちる。
移動後の座標は移動前のプレイヤーの座標と同じ座標に移る。
3D(warpteleport)
39(warp)と基本は同じ。
これはワープタイルでのワープに使われている。
3E(warp3)
39(warp)と基本は同じ。
サファリゾーンでサファリゲームが終了した時に、ゲートハウスに戻されるときに使われる。
このワープコマンドだけ特定のアドレスに0x010100を書き込むのだが、このコマンドには無い。
3F(setwarpplace)
引数:
byte //bank
byte //map
byte //warp
word //X座標
word //Y座標
入ってきたワープの場所を書き換える。
主にエレベータで使用される。
-
最終更新:2014年09月18日 20:32