06. フラグと分岐

選択肢の結果を記録し、後のシーンやエンディングを変えるための変数と条件分岐を扱います。入門で使うのは主に setvar / addvar / if / #if です。

6.1 変数の基本(setvar / addvar)

シナリオ内の数値を、名前付きの変数に保存します。

setvar affection 0
addvar affection 2
addvar affection -1
命令意味
setvar 名前 値変数を指定値に設定
addvar 名前 値変数に加算(減算は負の数)
random 名前 最小 最大乱数を変数に入れる(例: random dice 1 6)
setvar と if の例
キャプチャ差し替え images/06_setvar_if.png

選択肢と変数の章(feature_demo *b_select)の実行画面

図6-1: 変数と if — 差し替え: images/06_setvar_if.png

6.2 条件でジャンプ(if)

条件が成立したときだけ、指定ラベルへ飛びます。

setvar demo_count 8
if demo_count >= 5 *high_route
	この行は demo_count が 5 より小さいときだけ表示されます。
jump *done

*high_route
	条件成立! high_route に来ました。

*done

書式: if 変数 演算子 値 *ラベル名(ラベルの * は付けても付けなくても動きます)

演算子例
== != < <= > >=if affection >= 8 *happy_end

行き先をランダムに選ぶときは randomjump *route_a *route_b と書きます。

6.3 条件ブロック(#if / #endif)

複数行をまとめて条件表示したいときは、ブロックの形を使います。

setvar route 1

#if "route == 1"
	route が 1 のときだけ、この行が表示されます。
#endif

#if "route == 2"
	このブロックは route が 2 のときだけ実行されます。
#endif

#else / #elif と、ブロックの入れ子も使えます。

setvar route 2

#if "route == 1"
	ルートA
#elif "route == 2"
	ルートB
#else
	その他
#endif
#if ブロック
キャプチャ差し替え images/06_if_block.png
図6-2: 条件ブロック — 差し替え: images/06_if_block.png

6.4 選択肢と変数を組み合わせる

03章の choice と変数を繋げると、ルート分岐の基本が作れます。

*talk_start
setvar affection 0
msgshow

name "ヒロイン"
	今日はどうしますか?

choice "一緒に散歩" *walk "別れる" *part

*walk
addvar affection 2
jump *after_choice

*part
jump *after_choice

*after_choice
if affection >= 2 *good_talk
jump *normal_talk

*good_talk
name "ヒロイン"
	うれしいな、また来てね。
jump *ending

*normal_talk
name "ヒロイン"
	またね。
jump *ending

*ending
end
選択肢と分岐
キャプチャ差し替え images/06_choice_route.png
図6-3: 選択肢ルート — 差し替え: images/06_choice_route.png

6.5 CG ギャラリー用フラグ(cg_flag)

イベント CG を見た記録を残すときに使います(ギャラリー画面と連携)。

evcg_show "smile" 600
cg_flag cg01 0
cg_flag
キャプチャ差し替え(任意) images/06_cg_flag.png
図6-4: CG フラグ(任意) — 差し替え: images/06_cg_flag.png

6.6 変数とフラグの使い分け

setvar の変数はセーブデータごとに残ります。どのセーブでも共通に残したい記録には、永続フラグを使います。クリア・システム・フローチャートのフラグは systemdata.dat に残ります。

仕組み残る場所用途シナリオでの書き方
変数セーブデータごと好感度・その場の分岐setvar route 1 / if route >= 5 *label
クリアフラグ全体に永続クリア状況setclearflag game_cleared 1
システムフラグ全体に永続解放・周回数などsetsysflag demo_visited 1 / addsysflag play_count 1
フローチャートフラグ全体に永続到達した場面(フローチャートの表示)setflowflag chapter_basic 1 / addflowflag route_a 1
CG フラグ全体に永続CG の閲覧記録cg_flag cg01 0(本章 6.5)
目安: まずは setvar / if で十分です。どのセーブでも共通に残したいもの(クリア・解放・到達)だけ、setclearflag などの永続フラグを使います。

フラグの仕様の詳細は 公式マニュアル 第6章(フラグ仕様)、および 第9章 システム API を参照してください。

6.7 デバッグのコツ