KS(タグ記法)仕様書
Kaede Script の タグ記法(KS、.ks) の詳細仕様書です。TyranoScript / KAG 系の書き味に近い、@コマンド 属性="値" 形式でシーンを宣言的に描写します。
Kaede Script 全体像
kaedevn のスクリプト言語は 1 つ(Kaede Script)で、2 つの記法を提供します:
- タグ記法(KS、
.ks) — 本仕様書。宣言的でシーン描写向き- コード記法(KSC、
.ksc) — KSC 仕様書。手続き的で複雑なロジック向き概要は Kaede Script 概要 を参照してください。
処理方式: コンパイラ
KS は コンパイラ方式 で動作します。スクリプト全体を事前に Op[](命令配列)に変換してから実行します。
.ks スクリプト
|
v
Tokenizer ── 字句解析(行を分類)
| lineClassifier で COMMAND / TEXT / LABEL を判定
v
Parser ───── 構文解析(コマンドレジストリ参照)
| commandRegistry.ts が全コマンドの定義源
v
Transformer ─ 変換・最適化
v
Finalizer ── 検証 + Op[] 出力
| プラットフォーム非依存の命令列
v
OpRunner ─── 1命令ずつ実行、描画エンジンに委譲
コンパイル済みの Op[] はプラットフォームを問わず共通です。同じ命令列が Web ブラウザでも Nintendo Switch でも実行されます。
1. 構文の基礎
コマンドの2つの書き方
コマンド(タグ)は、行頭で @ を使う形式と、テキストの途中で [] を使う形式の2種類があります。
@bg id="room" fade=1000
[bg id="room" fade=1000]
コメントとラベル
; で始まる行はコメントとして無視されます。* で始まる行は、ジャンプ先として指定できるラベルになります。
; ここはメモ書きです
*scene_01
行分類
コンパイラはまず各行を以下のタイプに分類します:
- COMMAND —
@で始まる(例:@bg id="room") - LABEL —
*で始まる(例:*scene_01) - COMMENT —
;で始まる(例:; メモ) - VAR_SET —
変数 = 値(例:flag_a = 1) - CHOICE_START —
@choice(例:@choice text="はい" target="yes") - IF_START —
@if(例:@if (flag > 0)) - TEXT — 上記以外(例:
桜「おはよう」)
テキストとコマンドが同じ行にある場合(例: テキスト@l)は、別々のコマンドに分割されます。
2. コマンド・リファレンス(20種)
KS で使用可能な全コマンドの一覧です。すべてのコマンドは @ で始めるか、テキスト内で [ ] で囲んで記述します。
映像 (Visual) — 10コマンド
@bgid, fade— 背景画像を変更します@chname, pose, pos, fade— キャラクターを表示します。pos は L/C/R@ch_hidename, fade— 特定のキャラクターを消去します@ch_clearfade— 全キャラクターを消去します@overlayid, fade— オーバーレイ画像を重ねて表示します@overlay_hidefade— オーバーレイを消去します@showid— 要素を表示します@hideid— 要素を非表示にします@moveid, x, y, time— 移動アニメーションを実行します@fadeid, alpha, time— フェードアニメーションを実行します
音声 (Audio) — 4コマンド
@bgmid, vol, fade— BGM をループ再生します@bgm_stopfade— BGM を停止します@seid, vol— 効果音を一度だけ再生します@voiceid— ボイスを再生します
制御 (Control) — 5コマンド
@waittime(秒) — 指定秒数、進行を停止します@jumptarget(*ラベル名) — 指定したラベルへ移動します@choicetext, target— 選択肢を表示します。target にジャンプ先を指定@if(条件式)— 条件分岐を開始します@setvar, value— 変数に値を設定します
エフェクト (Effect) — 1コマンド
@screen_filtertype, intensity— 画面フィルターを適用します(46 種のフィルター)
インラインコマンド
@l— 行末クリック待ち@c— 改ページクリック待ち@r— 改行
3. メッセージと画面制御
テキスト表示
コマンド以外の行はそのままテキストとして表示されます。話者名は 名前「セリフ」 の形式で記述します。
桜「おはよう!今日もいい天気だね」
インラインコマンドの活用
テキストの途中にコマンドを埋め込めます。
桜「おはよう!」@l
桜「今日もいい天気だね」@c
@l— 行末でクリック待ち。テキストを消さずに次の行を追加表示@c— ページ全体をクリアして次のテキストを表示
4. 高度なフロー制御
ジャンプとコール
シナリオの流れを制御するための重要なコマンドです。
@jump: 指定したラベルへ移動します。
@jump target="*next_scene"
@call / @return: サブルーチンを呼び出します。共通の演出などを別ラベルに切り出す際に便利です。
@call target="*common_effect"
...
*common_effect
[se id="sparkle"]
[wait 500]
@return
選択肢
複数の @choice を連続して記述すると、プレイヤーに選択肢が表示されます。
*crossroad
@choice text="一緒に帰る" target="go_home"
@choice text="デートに誘う" target="date_event"
*go_home
桜「じゃあ、一緒に帰ろう!」
@jump target="*day_end"
*date_event
桜「えっ、デート!? 喜んで!」
@jump target="*day_end"
*day_end
; こうして一日が終わった。
5. 変数と演算
フラグ管理などに使用します。演算子(+=, -= 等)が使用可能です。
flag_a = 1
love_points += 10
if (love_points > 50) {
#sakura
「大好きだよ!」@l
} else {
#sakura
「またね」@l
}
Op 型(コンパイル出力)
コンパイラが出力する命令の種類は以下の通りです。同じ Op 配列が全プラットフォームで共通して実行されます。
- テキスト — TEXT_APPEND(話者名 + 本文)
- 映像 — BG_SET, CH_SET, CH_HIDE, CH_CLEAR, OVL_SET, OVL_HIDE, SHOW, HIDE, MOVE, FADE, SCREEN_FILTER
- 音声 — BGM_PLAY, BGM_STOP, SE_PLAY, VOICE_PLAY
- 制御 — CHOICE, JUMP, VAR_SET, IF(ネスト対応)
- 待機 — WAIT(click / timeout / voiceend)
サンプルシナリオ
; === 学園シーン ===
*scene_01
@bg id="classroom"
@ch name="sakura" pose="smile" pos="C"
桜「おはよう!今日もいい天気だね」@l
@ch name="sakura" pose="thinking" pos="C"
桜「放課後、どうする?」@c
@choice text="一緒に帰る" target="go_home"
@choice text="図書館で勉強" target="library"
*go_home
@ch name="sakura" pose="smile" pos="C"
桜「やったー!一緒に帰ろう」@l
love_points += 5
@jump target="*day_end"
*library
@ch name="sakura" pose="sad" pos="C"
桜「そっか...じゃあまたね」@l
@jump target="*day_end"
*day_end
@ch_hide name="sakura" fade=500
@bg id="sunset"
; こうして放課後が過ぎていった。
さらに詳細なロジックを組むには
TypeScript に近い構文で、より複雑なゲームシステム(バトル、インベントリ等)を構築したい場合は、KSC(Kaede Script Code)仕様書 を活用してください。KSC ではユーザー定義関数、型チェック、for/while ループなどの高度な機能が使えます。
関連ドキュメント
- KSC スクリプト仕様書 — 高度なロジック向けスクリプト
- ブロック型リファレンス — GUI ブロックの詳細
- エンジンの仕組み — コンパイラの処理パイプライン
- エディタ完全ガイド — エディタの使い方