ここではスクリプトの記述方法を説明します。 |
>> スクリプト記述のルール >> コメント >> 変数 >> 変数操作 >> 関数 >> 演算子 >> ラベル >> プリプロセッサ命令 >> 命令文とパラメータ >> ファイルの読み込み(検索優先順位) >> 処理の流れ >> メインスクリプトとサブスクリプト |
スクリプト記述のルール
このスクリプトはマルチステートメント(一行に複数の内容を記述する事)に対応していません。
よって一行に一つだけ内容を記述することになります。 この内容とは命令文や変数操作、ラベルになります。 命令文の前やパラメータの間などには半角スペースやタブを挿入することができます。 区切りごとに段を形成すればスクリプトが見やすくなります。
コメント
行の最初に / や ; をつけるとコメント行になります。
また、命令文などの後に // や ; をつけると以降行末までがコメントになります。 "WAIT",10 ; ウェイトをかける test+100 // testに100加算
変数
変数は値を保持したり計算するための入れ物です。
基本的に初期化は必要なく、変数に代入する時に変数の型やサイズが自動的に変更されます。 変数は以下の型があり、それぞれ保有できる値が違います。
変数名は32文字までで以下の文字が使用できます。 ただし一文字目に数字は使用できず、大文字と小文字は区別されません。 また、関数と同じ名前の変数は使用できません。
以下の変数は予め定義されています。 通常は各値の参照に使用してください。
グローバル変数は全体で共有される特殊な変数です。 スクリプト内での制御だけでなく、敵のイベントからも制御することができます。 この変数をうまく使えば敵データだけでは実現できなかった事ができるようになります。 (敵が敵を呼び出す、攻撃パターンを敵ファイルごとに分割する等)
変数操作
変数操作は基本的に以下のような形で記述します。
変数操作の演算子は数式の演算子と動作が異なります。 以下が変数操作で使用できる演算子とその動作になります。
以下は変数操作で利用できる特殊な記述方法や演算子とその動作です。
加算(test+1)とインクリメント(test+,test++)は実行結果は同じですが インクリメントは数式を無視するので少しだけ高速に処理されます。 test+1と記述した場合はインクリメント、test+(1)と記述した場合は加算に変換されます。 これらはデクリメント、リセットでも同様です。
関数
変数操作やパラメータなどの数式にはいくつかの関数が使用できます。
以下が使用できる関数とその動作になります。
演算子
このスクリプトの数式では以下の演算子が使用できます。
=,==,!,>,<,>=,<= は真=1、偽=0になります。
ラベル
ラベルは"GOTO"や"GOSUB"でジャンプするための目印です。
ラベルを記述する場合は必ず一文字目に * を付けてください。 最大文字数は * を含めて63文字までになります。 また、ラベル指定は""で囲む必要がありますがラベル自体には付けてはいけません。 "GOSUB", "*TEST_LABEL" "END" *TEST_LABEL // 飛び先の処理 "RETURN" ラベル指定はノーマルラベルとマルチラベルの2種類があります。 飛び先が一つの場合はノーマルラベル、複数の場合はマルチラベルになります。 例えば、次の場合は飛び先が *TEST_LABEL だけなのでノーマルラベルです。 "GOSUB", "*TEST_LABEL" 次の場合は飛び先が複数考えられるためマルチラベルになります。 "GOSUB", "*TEST_LABEL"+abc この場合、変数abcの値が0~2の範囲を取るならば *TEST_LABEL0 *TEST_LABEL1 *TEST_LABEL2 のいずれかに飛ぶことになります。 もし飛び先のラベルが存在しない場合はジャンプが行われません。 例外として"TIMEREND"でマルチラベルが見つからない場合はエラーを返しトライの処理を停止します。
命令文とパラメータ
命令文は命令内容を表す最初の文字を以下のように""で囲って記述します。
"FRAXY_TRY","str1",int2 "PLAYERFLAG",int1,int2,int3 命令を表す最初の文字列は大文字でも小文字でも構いません。 例えば "PLAYERFLAG" は "playerflag" や "PlayerFlag" と記述しても認識されます。 ただし例外として "FRAXY_TRY" だけは全て大文字で記述してください。 最初の文字列以降の内容はパラメータの指定になります。 パラメータはいくつかの型があり、型によって記述方法が異なります。 パラメータには以下の型があります。 int 整数値
整数や変数、数式を指定します。
パラメータ内で演算ができます。 例1: "WAIT", 10+5 例2: "WAIT", a*3+2 パラメータの内容説明に &1 や &2 のように & が記述されている場合、 それらの値を足して指定することで複数のフラグを指定できます。 例えば &1 と &2 の両方を指定する場合は 3 を指定します。 str 文字列
文字列を指定します。
文字列部分は""で囲って記述します。 パラメータ内で文字列を結合する事ができます。 例1: "MESSAGE","残り時間は"+_time+"です。",255,255,255,0 例2: "MESSAGE","AとBの合計は"+(a+b)+"です。",255,255,255,0 このスクリプトにはエスケープシーケンスがありません。 よって文字列には"を除く文字をそのまま記述できます。 文字列で"を使用したい場合は chr(34) を使用してください。 例: "MESSAGE","これは"+chr(34)+"コア"+chr(34)+"です。" var 変数
変数を指定します。
label ラベル
ラベル名を指定します。
ラベル名は先頭に * を付けて""で囲んでください。 例1: "GOSUB","*test" 例2: "GOSUB","*test"+"test" 例3: "GOSUB","*test"+abc 例2や3のようにラベル文字列を結合する場合、そのラベル指定はマルチラベル指定になります。 マルチラベルに関してはラベルの項目を参照してください。 パラメータを省略した場合は基本的に以下の値が自動で代入されます。
例外として一部のパラメータは省略すると定義値が自動で代入されます。 定義値がある場合はパラメータの説明欄に[-1]や[SizeX/2]、[ignore]のように記述されています。 [ignore]と記述されているパラメータを省略するとそのパラメータを適用せず無視します。
ファイルの読み込み(検索優先順位)
ファイルを読み込む場合、
その*.ftdがあるフォルダ、対応するデフォルトフォルダの順番に検索します。 見つからなかった場合は読み込まれません。 指定するファイル名は相対パスでフォルダ情報を加えることもできます。 例えば fraxy/try/sample/test.ftd から fraxy/try/sample/data/enemy.fed を読み込む場合は "data/enemy.fed" と指定します。
処理の流れ
上から一行ずつ順番に実行します。
基本的にトライの処理は連続して実行しますが、Break属性を持つ命令を実行するとトライの処理を停止してゲームの処理に戻ります。 以下の命令はBreak属性を持っています。 "END" "LIMIT" "WAIT" "BGMSTOP" "SESTOP" "CHOICES" "GAMEOVER" フリーズや無限ループ対策として1フレームに連続して実行できる回数が1024回に制限されています。 ゲームの処理に戻らずトライの処理を実行し続けるのは動作が遅くなるため推奨しません。
メインスクリプトとサブスクリプト
このスクリプトはメインスクリプトとサブスクリプトに分類されます。
"FRAXY_TRY"によって開始されたスクリプトはメインスクリプト、 "ADDSUBSCRIPT"によって開始されたスクリプトはサブスクリプトになります。 スクリプト仕様などは基本的に大きな違いはありません。 メインスクリプトはID=0として定義され、"DELSUBSCRIPT"で削除することができません。 サブスクリプトはIDが自動的に割り振られます。 登録できるサブスクリプトの最大数は15個までなのでIDは1〜15になります。 登録を削除して空いたIDは再利用されますがソートは行われません。 例えばID0,1,2,3を使用していて1を削除、ID0,2,3となった状態で"ADDSUBSCRIPT"を実行するとID1に追加されます。 処理の実行はID順に行われるため登録する順番に注意してください。 "LIMIT"と"WAIT"による停止はメインスクリプトとサブスクリプトでそれぞれ個別に管理しています。 メインスクリプトが停止中でもサブスクリプトは実行されるため独自のシステムを組み込みたい場合に有効です。 基本的に上記以外の要素はメインスクリプトと全てのサブスクリプトで共有します。 例えば、サブスクリプトで"CHOICES"を使用するとメインスクリプトも停止することになります。 変数やオブジェクトも共有するため、"CREATEOBJECT"などを使用するサブスクリプトを重複登録する場合は注意してください。 サブスクリプトはラベルが開始点になるため、以下のような構造のスクリプトが作れます。 // サブスクリプトをループさせ1フレーム毎に処理を実行する "ADDSUBSCRIPT","*sub1",sub1_id ... *sub1 // ここに処理を書く "WAIT",0 "GOTO","*sub1" // 処理を1回だけ実行し登録を削除する "ADDSUBSCRIPT","*sub1",sub1_id ... *sub1 // ここに処理を書く "DELSUBSCRIPT",-1 |