If分岐


投稿日:2015年6月10日 | 最終更新日:2024年5月15日

if分岐系のコマンドを使って、一定範囲のコマンドの処理をさせたりさせなかったりします。
ただし、テキスト処理やページ処理、シナリオ分岐に関わる部分では使うのは避けてください。

サンプル

リファレンス

Command 説明 Arg1 Arg2 Arg3 Arg4 Arg5 Arg6
If If文を開始 if判定の論理式
ElseIf ElseIf文を開始 if判定の論理式
Else Else文を開始
EndIf If文終了

If-ElseIf-Else-Endif

Ifで必ず始まり、EndIfで必ず終える必要があります。

Command Arg1 説明
If flag1
...任意のコマンド ... Ifの条件(falg1)がtrueだったら、実行される
...任意のコマンド コマンドは複数設定可能
ElseIf falg2
...任意のコマンド ... ElseIfの条件(falg2)がtrueだったら、実行される
...任意のコマンド コマンドは複数設定可能
Else
...任意のコマンド ... Ifの条件もElseIfの条件も満たされなかった場合、実行される
...任意のコマンド コマンドは複数設定可能
EndIf

このように、If系コマンドで囲んだコマンド郡の実行を条件分岐することができます。

if分岐は条件付きで非推奨

ifコマンドは以下の使用条件があります。

  • シナリオテキストを混ぜてはいけない(テキスト解析が正確にできなくなる)
  • 特にPageCtrlは使ってはいけない。
  • サブルーチンを使ってはいけない。

基本的にはテキスト処理やページ処理、シナリオ分岐に関わる部分では使うのは避けてください。
上記の書き方に反する使い方をしてしまっていても、インポート時にエラー出力がされません。
ifが絡むと、ページの区切りが不正確になるため、既読ページやPageCtrl、テキスト解析で不具合が起きるため、使用しないでください。
シナリオを分岐する場合は、JumpコマンドやIfコマンドに条件式を設定するやり方を推奨します。
「宴」のシナリオの書き方の性質上、キャラ表示とテキスト表示が不可分になってしまうことがあるので、「同じシナリオでも服装を変えたりしたい」という場合はConditionalを使うことを推奨します。

ifでPageCtrlを使ったエラーの例

ifを跨いだ形でPageCtrlを使うとテキストが正確に表示できなくなるほか、セーブ時のテキストなどにも不具合が生じます。
以下はエラーが出るシナリオのサンプルです。

ifとマクロの組み合わせ

テキストやシナリオの分岐の関係ないものはifコマンドを使っても問題ありません。
たとえば、Parmコマンドなどのパラメーター操作や、Bgコマンドなどのような表示系コマンドなどです。
さらに、マクロ機能と組み合わせれば、ParamIf(指定した条件でパラメーターを操作するコマンド)なども作成できます。