コマンドリファレンス
シナリオの @ で始まる行に書けるコマンド 121 個です。ラベル、条件分岐、変数の書き方はシナリオの書き方にあります。
本文とメッセージウィンドウ
@windowメッセージウィンドウを表示、または非表示にする@nvl画面全体に文章を重ねて表示する NVL モードにする、またはメッセージウィンドウに戻す(切り替えると文字は消える)@vertical本文を縦書き(右から左へ行が進む)にする、または横書きに戻す(切り替えると文字は消える)。メッセージウィンドウと NVL モードに効く。既定は liminalia.json の ui.message.vertical@balloon吹き出し表示にする(話しているキャラクターの立ち絵の上に本文を表示する)、またはメッセージウィンドウに戻す。話者の立ち絵が表示されていない台詞は、x と y を書けばその位置の吹き出し、書かなければメッセージウィンドウに表示する@clearメッセージウィンドウの文字を消す(NVL モードでは表示した文章をすべて消す)@text-speedテキスト速度を変える@text-speed-resetテキスト速度をコンフィグの値に戻す@text-sound本文の文字を表示するときに音を鳴らす(話者ごとに変えられる)@text-sound-off文字を表示するときの音を止める@wait-click本文を表示せずにクリックを待つ@layer-text前景レイヤーに文字を置く(章題や場所の表示など)。@free-image で消すまで残る@motion-text文字を一文字ずつアニメーションを付けて表示し、しばらく表示してから一文字ずつ消す@chat-openチャットアプリ風の画面を開く(@chat で吹き出しを追加する。@chat-close で閉じる)@chatチャットに吹き出しを追加し、クリックを待つ(バックログにも残す)@chat-closeチャットアプリ風の画面を閉じる@backlog-addバックログにテキストを追加する
背景と画像
@bg背景を切り替える@image前景レイヤーに画像を置く(図版など)。@free-image で消すまで残る@free-imageレイヤーに置いたものをすべて消す(name を書けばその名前の画像だけ)。base なら背景を消す@layer前景レイヤーの表示、不透明度、位置を変える。メッセージウィンドウの表示、非表示は @window で書く@bg-place背景を、位置と大きさを決めて切り替える(画面より大きい背景をあとで @anim で動かすときなど)@plane奥行きのある背景の絵を重ねる(遠くの空、山、手前の草など)。@camera で動かすと、奥のものほど小さく動く。同じ名前は置き換え、@bg で外れる@plane-hide@plane で重ねた絵を外す@bg-movie動画を背景(背景画像の上、立ち絵の下)で再生する。再生中に次を指定すると、今の動画が終わってから切り替わる@stop-bg-movie@bg-movie の動画を消す@wait-bg-movie@bg-movie の動画の繰り返しをやめ、最後まで再生し終わるのを待つ
立ち絵と顔
@chara立ち絵を表示する、または差し替える。表示中のキャラクターは、書かなかった差分、立ち絵セット、位置、反転を今のまま保つ(表示していなければ既定)@chara-hide立ち絵を消す@chara-hide-all立ち絵をすべて消す@chara-config立ち絵の振る舞いを設定する(話しているキャラクターを目立たせる、自動配置で並べ直す速さ)。書いた項目だけ変える@chara-move表示中の立ち絵の位置と大きさを変える(次に @chara するまで)@chara-shake立ち絵を揺らす(TyranoBuilder のキャラクター揺らし)。終わりを待たない@face顔ウィンドウの表情を決める(立ち絵を表示していないキャラクターの分。表示中は立ち絵の差分を使う)。立ち絵を消したときは、消す前の差分を引き継ぐ@tone立ち絵の色調を変える(時間帯や回想に合わせる)。キャラクターを書かなければすべての立ち絵(これから出すものも)。none で戻す
演出
@mask画面を一色で覆う(暗転)@mask-off画面の覆いを外す(明転)@quake画面を揺らす@quake-decayメッセージウィンドウも含めた画面全体を、だんだん弱まるように揺らす@camera画面全体をズーム、移動、回転させる@reset-cameraカメラを元に戻す@layer-camera一つのレイヤーだけをズーム、移動、回転させる(画面全体は @camera)@reset-layer-camera@layer-camera で動かしたレイヤーを元に戻す@wait-camera@camera と @layer-camera の動きが終わるまで待つ@transition@freeze で止めた画面から、組み替えたあとの画面へ切り替える@wait-transition@transition の切り替えが終わるまで待つ@effect画面効果をかける(wave 揺らぎ / glitch 映像の乱れ / chromatic 色ずれ / noise 粒子 / vignette 周辺を暗く / scanlines 走査線 / radial-blur 回転のぼかし / zoom-blur ズームのぼかし / mosaic モザイク / ripple 波紋 / shader 作品のシェーダー)。@effect-off で解除する@effect-off@effect でかけた画面効果を解除する@filterレイヤーに CSS のフィルタをかける(前のフィルタは置き換える)。@filter-off で解除するまで残る@filter-off@filter でかけたフィルタを解除する@blend画面全体に色か画像を合成モードで重ねる(メッセージウィンドウの下)。@blend-off で消すまで残る@blend-off@blend で重ねたものを消す。name を省くとすべて消す@blend-movie動画を画面全体に合成モードで重ねる(メッセージウィンドウの下)。@blend-off で消す@dof被写界深度。ピントを合わせるところを決め、ほかをぼかす(背景に合わせれば立ち絵と前景の画像、立ち絵に合わせれば背景と前景の画像)。none で戻す@particles雨、雪、桜、光の粒、ちりを降らせる(画像を降らせることもできる)。@particles-off で止める@particles-offパーティクルを止める@anim名前かレイヤーで選んだものの位置、大きさ、不透明度、文字色をアニメーションさせる。終わりは @wait-anim で待てる@stop-anim@anim のアニメーションをその場で止める(止めた位置のまま残る)@wait-anim@anim、@kanim(ループを除く)、@quake-decay のアニメーションがすべて終わるまで待つ@keyframe@kanim で使うアニメーションに名前を付けて定義する。キーフレームは「割合% 項目=値 …」を ; で区切って一行に並べる@kanim@keyframe で定義したアニメーションで、名前かレイヤーで選んだものを動かす(変形や CSS のプロパティ)@stop-kanim@kanim のアニメーションを止める。途中なら最後の状態にする@freeze今の画面(背景、立ち絵、前景)を静止させて表示したまま、その下で組み替えられるようにする。@transition で切り替える@vibrate端末を振動させる(Vibration API に対応した端末だけ。対応しなければ何もしない)。終わりを待たない@vibrate-stop端末の振動を止める@movie動画を全画面で再生し、終わるまで待つ@peekメッセージウィンドウを一時的に消し、クリックで元に戻す(本文は消さない)
音とボイス
@bgmBGM を鳴らす@stop-bgmBGM を止める@pause-bgmBGM を一時停止する@resume-bgm一時停止した BGM を再開する@bgm-volume鳴っている BGM の音量を変える@wait-bgmBGM が鳴り終わるまで待つ(繰り返す BGM は待たない)@se効果音を鳴らす@stop-se効果音を止める@pause-se効果音を一時停止する@resume-se一時停止した効果音を再開する@se-volume鳴っている効果音の音量を変える@wait-se効果音が鳴り終わるまで待つ(繰り返す効果音は待たない)@voice台詞のボイスを鳴らす(本文の行の前に書けば次の台詞で、本文の中に書けばその場で鳴らす)@voice-auto話者の台詞ごとに、連番のボイスを自動で再生する(@voice を書いた台詞はそちらが優先)。pattern を書くと設定し、書かなければ @voice-auto-off で止めたものを番号を保ったまま再開する(who も省略するとすべて)@voice-auto-off連番のボイスの自動再生を止める(番号は保ち、@voice-auto で再開できる)@stop-voice鳴っているボイスを止める@wait-voiceボイスが鳴り終わるまで待つ
進行と時間
@wait指定した時間だけ待つ@stopクリックでは進まない状態で止まる(ボタンや外部の操作を待つ)@sleep-game今の状態を記録して別のシーンへ移る(@awake-game で、このコマンドの次に戻る)@awake-game@sleep-game で記録した状態に戻る(記録した状態がなければ何もしない)@break-game@sleep-game で記録した状態を破棄する@checkpoint今の状態に名前を付けて記録する(@rollback でここへ戻れる)@rollback@checkpoint で記録した状態に戻る@clear-checkpoint@checkpoint で記録した状態を破棄する@clear-stack@call の戻り先をすべて破棄する(サブルーチンの途中からタイトルへ戻るときなど)@clear-vars変数をまとめて削除する
入力と持ち物
@text-input文字を入力してもらい、変数に入れる(決定するまで待つ)@dialog確認のダイアログを表示し、答えるまで待つ@item-add持ち物を足す(liminalia.json の items の名前)。式では item("名前") で数を読める@item-remove持ち物を減らす(count を省くとすべて)@item-select持ち物の画面を出して一つ選んでもらい、名前を変数に入れる(やめたら空の文字)。調べる場所で使う持ち物を選ばせるときに
システム画面
@autoオート(本文を自動で送る)を開始、または停止する@skipスキップを開始、または停止する@open-screenシステム画面を開き、閉じるまで待つ@menu-buttonメニューを開くボタンを表示、または非表示にする@shortcutsキーとマウスのショートカット(セーブ、スキップ、メニューなど)を有効、または無効にする@configコンフィグの値を変える(書いたものだけ)@fullscreenフルスクリーンとウィンドウを切り替える@quitゲームを終了する@title-screenプレイを終えてタイトル画面へ戻る(バッドエンドの後など)。ending を書くと、Studio のフローチャートにエンディングとして表示する@window-titleウィンドウ(タブ)のタイトルを変える@open-urlブラウザで URL を開く@autosaveオートセーブする(このコマンドの次から再開する)@autoloadオートセーブを読み込んで、そこから続ける@backlogバックログに本文を残すかを切り替える@presenceプレイ中の状況を Steam のリッチプレゼンスに表示する(デスクトップ版で Steam に接続しているとき)。空の文字列で消す
おまけと実績
@cg-unlockCG を解放する(おまけの CG で見られるようにする。表示はしない)@replay-unlock回想を解放する(おまけの回想で見られるようにする。再生はしない)@replay-end回想の再生をここで終えて、おまけへ戻る(回想の再生中でなければ何もしない)@glossary-unlock用語集の用語を解放する(本文に出た用語は自動で解放する)@achieve実績を解除する(はじめて解除したときだけ通知する。デスクトップ版は Steam の実績にも送る)
配布と購入
@check-updateアップデートを確認し、あればプレイヤーに尋ねて更新する(デスクトップ版で liminalia.json の build.update があるとき。ほかでは何もしない)@purchase商品を買う(スマホ版のアプリ内課金、デスクトップ版の店の DLC など)。店の画面が閉じるまで待ち、買えたら system.purchases.<商品> が true になる@restore-purchases購入を復元する(機種変更したときなど)。持っている商品の system.purchases.<商品> が true になる
選択肢
@choice選択肢。選択肢の行(- テキスト -> #ジャンプ先)を並べ、@end で閉じる
式で使える関数
| 関数 | パラメータ | 説明 |
|---|---|---|
random() | 0〜1 つ | random() は 0 以上 1 未満、random(n) は 0 以上 n 未満の整数 |
randint() | 2 つ | randint(a, b) は a 以上 b 以下の整数 |
pick() | 1 つ | pick(配列) は配列から一つ選ぶ(空なら null) |
shuffle() | 1 つ | shuffle(配列) は並びを混ぜた新しい配列 |
floor() | 1 つ | 切り捨て |
ceil() | 1 つ | 切り上げ |
round() | 1〜2 つ | round(x) は四捨五入、round(x, 桁) は小数第何位までにする |
min() | 1 つ以上 | いちばん小さい数 |
max() | 1 つ以上 | いちばん大きい数 |
abs() | 1 つ | 絶対値 |
clamp() | 3 つ | clamp(x, 下限, 上限) は範囲に収める |
sum() | 1 つ | sum(配列) は数の合計 |
len() | 1 つ | 文字列の文字数、配列の長さ |
includes() | 2 つ | includes(文字列か配列, 値) は含むか |
index() | 2 つ | index(文字列か配列, 値) は最初の位置(無ければ -1) |
slice() | 2〜3 つ | slice(文字列か配列, 始め, 終わり) は一部(終わりは含まない。省くと最後まで。負の数は後ろから) |
replace() | 3 つ | replace(文字列, 探す文字列, 置き換える文字列) はすべて置き換える |
upper() | 1 つ | 英字を大文字に |
lower() | 1 つ | 英字を小文字に |
trim() | 1 つ | 前後の空白を取る |
split() | 2 つ | split(文字列, 区切り) は配列に分ける |
join() | 1〜2 つ | join(配列, 区切り) は文字列につなぐ(区切りを省くと空) |
pad() | 2〜3 つ | pad(値, 桁, 埋める文字) は前を埋める(埋める文字を省くと 0) |
str() | 1 つ | 文字列にする |
num() | 1 つ | 数にする(数として読めなければ null) |
push() | 2 つ | push(配列, 値) は末尾に足した新しい配列 |
remove() | 2 つ | remove(配列, 値) はその値を除いた新しい配列 |
sort() | 1 つ | 並べ替えた新しい配列(数は小さい順、文字列は辞書の順) |
reverse() | 1 つ | 逆にした新しい配列 |
unique() | 1 つ | 重なりを除いた新しい配列 |
keys() | 1 つ | keys(オブジェクト) は名前の配列 |
has() | 2 つ | has(オブジェクト, 名前) はその名前があるか |
year() | 0 つ | 今の年(遊んでいる端末の時計) |
month() | 0 つ | 今の月(1〜12) |
day() | 0 つ | 今日の日(1〜31) |
hour() | 0 つ | 今の時(0〜23) |
minute() | 0 つ | 今の分(0〜59) |
weekday() | 0 つ | 今日の曜日(0 が日曜、6 が土曜) |
now() | 0 つ | 今の時刻(1970 年からのミリ秒) |
item() | 1 つ | 持ち物の数(item("key")。liminalia.json の items の名前。持っていなければ 0) |