RealLiveMax @ ウィキ

スクリプト命令

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

■分岐/ループ

条件分岐の使用方法:

IF (条件式) {
    // 条件が真の場合に実行される処理
}
ELSEIF (条件式) {
    // 条件が真ではない場合で、別の条件が真の場合に実行される処理
}
ELSE {
    // 上記の条件が全て偽の場合に実行されるデフォルト処理
}
 
≪使用例≫
IF (F[000] == 0) {
    // もし F[000] が 0 ならば、ここを実行}
ELSEIF (F[000] <= 100) {
    // 上記IF文ではない場合で、F[000] が 100 以下ならば、ここを実行}
ELSEIF (F[000] <= 1000) {
    // 上記IF/ELSEIF文ではない場合で、F[000] が 1000 以下ならば、ここを実行}
ELSE {
    // 上記のどれにも当てはまらない場合、ここを実行}
 

スイッチ分岐の使用方法:

SWITCH () {
    CASE ():
        // 値に一致する場合に実行される処理
        ...
    CASE ():
        // 値に一致する場合に実行される処理
        ...
    CASE ():
        // 値に一致する場合に実行される処理
        ...
    DEFAULT:
        // 上記のいずれのCASEにも一致しない場合のデフォルト処理
        ...
}
 
≪使用例≫
SWITCH (F[000]) {
    CASE (0):
        // F[000]が0と一致する場合に実行
        ...
    CASE (1):
        // F[000]が1と一致する場合に実行
        ...
    CASE (2):
        // F[000]が2と一致する場合に実行
        ...
    DEFAULT:
        // 上記のいずれのCASEにも一致しない場合のデフォルト処理
        ...
}
 
※DEFAULTは必ずしも必要ではありませんが、全てのCASEに一致しない場合でDEFAULTが無い場合は、SWITCH文の中を通らず下に抜けます。
 

ループの使用方法:

FOR (代入式, 条件式, 算術式) {
    // ループ内の処理
    ...
}
 
無限ループの使用方法:
 
FOR () {
    // 無限ループ内の処理
    ...
}
 
ループを抜ける方法:
 
BREAK		// ループを抜ける
 
≪使用例(100回ループ)≫
FOR (F[000]=0; F[000]<100; F[000]+=1) {
    // ループ内の処理
    ...
}
 
F[000]0 に初期化した後、F[000] をループするたびに 1 ずつ加算していきます。
F[000]100 になった時、ループを抜けます。
F[000]0 から 99 の間ループし続けるので、全部で100回ループします。
 
≪使用例(無限ループ)≫
FOR () {
    // 無限ループ内の処理
    ...
}
 
≪使用例(途中で抜ける)≫
FOR (F[000]=0; F[000]<100; F[000]+=1) {
    // ループ内の処理
    ...
    IF (F[001] == 1) {
        BREAK		// 処理中に F[001] が 1 になったらループを抜ける
    }
}
 
≪BREAK 補足≫
ループ中で BREAK するとループを抜けますが、1つだけループが抜けられます。
2重ループの場合は2BREAK を使用する必要があります。
 
FOR (F[000]=0; F[000]<100; F[000]+=1) {
    FOR (F[001]=0; F[001]<100; F[001]+=1) {
        IF (F[002] == 1) {
            BREAK		// 処理中に F[002] が 1 になったらループを抜ける
        }
    }
    IF (F[002] == 1) {
        BREAK		// 処理中に F[002] が 1 になったらループを抜ける
    }
}
 
3重や4重のループは煩雑になるため、そういった場合はGOTO文を使用して抜けることがあります。
 
FOR (F[000]=0; F[000]<100; F[000]+=1) {
    FOR (F[001]=0; F[001]<100; F[001]+=1) {
        FOR (F[002]=0; F[002]<100; F[002]+=1) {
            FOR (F[003]=0; F[003]<100; F[003]+=1) {
                IF (F[004] == 1) {
                    GOTO *LOOPOUT		// 処理中に F[004] が 1 になったら *LOOPOUT にジャンプする
                }
            }
        }
    }
}
*LOOPOUT
 

■ジャンプ/コール

ラベルとジャンプの使い方:

*LAVEL								// ラベル
 
GOTO *lavel							// ラベルジャンプ
 
GOSUB *lavel						// ラベルコール(FARCALL命令のコールスタック参照)
RETURN								// ラベルコールリターン(ラベルコールした場所に戻ります)
 
≪ラベルの使い方≫
無限ループの例です。
 
*START
    // ラベルの処理
    ...
    GOTO *START		// ラベル *START にジャンプしてループを繰り返す
 
※無限ループの場合、FOR文でも同様のことができます。
FOR () {
    // ループ内の処理
    ...
}
 

■シーンジャンプ/シーンコール

シーンジャンプとコールの使い方:

JUMP(SeenNo)						// シーンジャンプ(Z00)
JUMP(SeenNo, ZLavelNo)				// シーンジャンプ(Zラベル指定)
 
FARCALL(SeenNo)						// シーンコール(Z00)
FARCALL(SeenNo, ZLavelNo)			// シーンコール(Zラベル指定)
FARRETURN							// シーンコールリターン(シーンコールした場所に戻ります)
 
≪コールスタック≫
GOSUB系およびFARCALL命令は、ラベルもしくは別のシーンにジャンプします。
この時、システムはRETURNやFARRETURNで元の場所に戻る情報を自動的に記憶します。
これを「コールスタック」と呼びます。
コールスタックは最大で64個までしか記憶できません。
(※通常のスクリプトなら、3つも使えば十分に組めると思います。)
コールスタックはRETURNやFARRETURNすると、1つ元に戻ります。
また、64個以上コールした場合、システム的にエラーとなり、RETURNやFARRETURNできなくなります。
(※2005/04/21 最大256個から最大64個に減少しました。)
 
≪Zラベルについて≫
Zラベルは通常のラベルとしても使用できます。
Zラベルは、#Z00 - #Z99 の特殊なスクリプト記号を指します。
通常はシーンジャンプ/コールの第2パラメータとして使用しますが、通常のラベルとしても利用可能です。
 
≪シーンジャンプ/コール≫
JUMP(0010, 05)					// シーン10のZラベル5にシーンジャンプする。
FARCALL(0010, 05)				// シーン10のZラベル5にシーンコールする。
 
≪通常のラベルとして使用≫
GOTO #Z05						// Zラベル5にジャンプ
ONGOSUB(F[000]) {#Z01, #Z02, #Z03}	// 条件によって、Zラベル1から3にジャンプ

※コンパイルエラー時には「**SYSEXLV0000??」と出力されるので注意してください。
 

■コール/シーンコール(引数パラメータ付&返り値付)

*

返り値付きのラベルコール(GOSUBP命令):
 
Res = GOSUBP(Par0, Par1, Par2, …最大56個) *lavel
 
返り値付きラベルコールリターン(RETURNP命令):
 
RETURNP(Res)
 
省略可能ですが、その場合は0が帰ります。(通常のRETURNと同じ扱い)
 
シーンコール(FARCALL命令)の引数に返り値を含める場合:
 
Res = FARCALLP(SeenNo, ZLavelNo, Par0, Par1, Par2, …最大56個)
 
返り値付きシーンコールリターン(FARRETURNP命令):
 
FARRETURNP(Res)
 
省略可能ですが、その場合は0が帰ります。(通常のFARRETURNと同じ扱い)
 
≪説明≫
基本的な説明は、GOSUB / RETURN / FARCALL / FARRETURN を参照してください。
■リターン時の引数の受け渡し命令(RETURN_L_FLAG_SET / RETURN_K_FLAG_SET)
と組み合わせることで、より高度な引数の受け渡しが可能です。
 
≪引数パラメータについて Par0, Par1, Par2, …≫
引数は最大56個まで指定でき、省略可能です。
引数は自動的にコールフラグに代入され、コール先に引き継がれます。
参照する際は、L[???] もしくは K[???] と通常のフラグと同様に扱ってください。
ただし、L変数は最大40個、K変数は最大16個しか存在しません。
 
≪引数パラメータの制限事項≫
変数の引数パラメータは最大で40個までしか指定できません。
文字列の引数パラメータは最大で16個までしか指定できません。
それ以上指定した場合、コンパイルエラーになります。
文字数は最大で、全角30文字、半角なら60文字までです。
文字数オーバーはコンパイルエラーにはなりませんが、実行中に文字数オーバーの警告が出ます。
コールの際、K変数に引き継がれます。
 
≪引数パラメータに変数と文字列が混在する場合≫
引数パラメータには変数と文字列の両方を指定できますが、
(文字列A、文字列B、文字列C、変数A、変数B、変数C、…)のように指定した場合でも、
「変数A」は L[000] に引き継がれます。
指定した順番のフラグ番号に格納されるのではなく、各フラグごとに番号を詰めて引き継ぎます。
例.(変数A、文字列A、文字列B、変数B、変数C、文字列C、…)
L[000] = 変数A
L[001] = 変数B
L[002] = 変数C
K[000] = 文字列A
K[001] = 文字列B
K[002] = 文字列C
 
≪返り値について≫
Res = GOSUBP と Res = FARCALLP はどちらも返り値(Res)を持っていますが、
返り値を受け取るには、RETURNP(Res) または FARRETURNP(Res) でコールから戻る必要があります。
通常の RETURN または FARRETURN でも問題ありませんが、返り値は必ず0が返ります。
返り値は必ずしも受け取る必要はないため、Res = の部分は指定がなくても問題ありません。
 
≪FARCALLPの2つ目のパラメータについて Zラベル番号≫
通常の FARCALL の場合、省略した場合はZラベル0番を指定したことになりますが、
FARCALLP の場合、Zラベル番号は省略できません。
指定しないと、引数パラメータのつもりの引数がZ番号として扱われますので、ご注意ください。
 
≪コールフラグについて≫
このフラグは40個しかありませんが、コール(GOSUB / FARCALL)するたびにシステムが自動的に記憶します。
リターン(RETURN / FARRETURN)すると、コール前の状態に復元され、コール先で自由に使用できます。
また、コールの際に「引数」として渡すことも可能です。(GOSUBP / FARCALLP 参照)
L[00]~L[39]の40個しかありませんが、コールのたびに40個確保されるので、フラグ中最強の使い勝手があります。
関連命令は、GOSUBP / FARCALLP / RETURNP / FARRETURNP があります。
ビット分解もできるため、Lb[] L2b[] L4b[] L8b[] といった使い方も可能です。
 
≪変数(値: -21474836472147483647)≫
        L[0000] - L[0039]     ※40個しかありません!
 
≪文字列フラグ≫
        16個しかありません。
        各フラグが記憶できる文字数も最大で、全角30文字、半角なら60文字までです。
        コールでの取り扱いは上記のL変数と同様です。
        K[0000] - K[0015]     ※16個しかありません!
 

■リターン時の引数の受け渡し

*

RETURN_L_FLAG_SET(FlagNo, Nom): リターン時のL変数を設定
RETURN_K_FLAG_SET(FlagNo, Str): リターン時のK変数を設定
 
RETURN_L_FLAG_SETS((FlagNo, Nom), (FlagNo, Nom),): 複数設定バージョン
RETURN_K_FLAG_SETS((FlagNo, Str), (FlagNo, Nom),): 複数設定バージョン
 
≪説明≫
RETURN / FARRETURN / RETURNP / FARRETURNP で戻った際のコールフラグを設定する命令です。
コールフラグの詳細については、マニュアルの◆コールフラグをご参照ください。
または、GOSUBP / FARCALLP 命令の説明を確認してください。
 
≪注意点≫
「コールから戻った際のコールフラグを設定する」というのは、
「1つ前のコールフラグを設定する」と言い換えることができます。
1度もコール(GOSUB / FARCALL)していない場合は、自然に1つ前のコールフラグは存在しませんので、
この命令は無視されます。(無意味なため処理されません。)
 

■コールスタックの制御

*

INIT_CALLSTACK: コールスタックを初期化(クリア)
 
ADD_CALLSTACK: コールスタックを追加(1つ) ※追加したスタックはダミーです
ADD_CALLSTACK(Count): コールスタックを追加(Count 数追加) ※追加したスタックはダミーです
 
DEL_CALLSTACK: コールスタックを削減(1つ)
DEL_CALLSTACK(Count): コールスタックを削減(Count 数削減)
 
Res = GET_CALLSTACK: コールスタックを取得
SET_CALLSTACK(Count): コールスタックを設定(※現在のスタック値より大きな値は設定できません)
 

■特殊な制御命令

*

GOTOIF(条件式) *lavel: ラベルジャンプ(条件成立時にジャンプする)
GOTOUNIF(条件式) *lavel: ラベルジャンプ(条件否成立時にジャンプする)
 
GOSUBIF(条件式) *lavel: ラベルコール(条件成立時にコールする)
GOSUBUNIF(条件式) *lavel: ラベルコール(条件否成立時にコールする)
 
ONGOTO(){*lavel, *lavel, ・・・}: ラベルジャンプ(簡易分岐)
ONGOSUB(){*lavel, *lavel, ・・・}: ラベルコール(簡易分岐)
 
≪使用例≫
ONGOSUB(F[000]){*CASE00, *CASE01, *CASE02}
 
*CASE00: F[000] == 0
	…
	GOTO *CASEEND
*CASE01: F[000] == 1
	…
	GOTO *CASEEND
*CASE02: F[000] == 2
	…
	GOTO *CASEEND
 
*CASEEND
 
ONGOTOSWITCH(){()*lavel, ()*lavel, ・・・, ()*lavel}: ラベルジャンプ(スイッチ分岐)
ONGOSUBSWITCH(){()*lavel, ()*lavel, ・・・, ()*lavel}: ラベルコール(スイッチ分岐)
 
≪使用例≫
ONGOTOSWITCH(F[000]){(0)*CASE00, (10)*CASE00, (100)*CASE00, ()*CASEDEFAULT}
*CASE00: F[000] == 0
	…
	GOTO *CASEEND
*CASE01: F[000] == 10
	…
	GOTO *CASEEND
*CASE02: F[000] == 100
	…
	GOTO *CASEEND
*CASEDEFAULT: F[000] == (※ 0, 10, 100 以外はココにジャンプします。)
	…
	GOTO *CASEEND
*CASEEND
 
※最後の ()*LABEL は必須です。無いとコンパイルエラーになります。
※簡易命令の SWITCH の方が使い勝手が良いです。
 

●フラグ操作


■フラグの一括操作

*

FLAGSET(F[StartIndex], Num1, Num2, Num3, ...): フラグセット(インデックスを1づつ進める)
 
≪例/詳細≫
FLAGSET(F[000], 111, 222, 333):
	F[000]         = 111
	F[000 + 1]     = 222
	F[000 + 1 + 1] = 333
		↓
	F[000] = 111
	F[001] = 222
	F[002] = 333
 
FLAGSET_INDEX(F[StartIndex], Index, Num1, Num2, Num3, ...): フラグセット(インデックスを指定値づつ進める)
 
≪例/詳細≫
FLAGSET_INDEX(F[000], 10, 111, 222, 333):
	F[000]           = 111
	F[000 + 10]      = 222
	F[000 + 10 + 10] = 333
		↓
	F[000] = 111
	F[010] = 222
	F[020] = 333
 
ウィキ募集バナー