Kagari
キーワードを入力してドキュメントを検索します。

付録

クイックリファレンス

言語の要点を 1 ページにまとめます。各節から詳しい規則のある章へリンクしています。

関数種別

種別呼び出せるもの実行時に保持できるものステップ物語変数
fnfn、const fn。nav::start でエントリーシーンを開始何でも不可不可
#[scene] pushdown fn(シーン)シーン、即時手続き、const fn(定数または有限な引数)有限型可読み書き
pushdown fn(即時手続き)即時手続き、const fn。再帰なし、有界な for ループのみ有限型不可読み書き
const fnconst fn何でも不可不可

ステップの実行、シーンの呼び出し、rng_choose の呼び出しができるのはシーンだけです。pushdown がキーワードになるのは fn または Fn の直前だけで、scene はポインタ型 scene fn(…) -> … の中だけです。関数種別を参照してください。

ポインタ型指す先クロージャ型
fn(A) -> BfnFn(A) -> B
const fn(A) -> Bconst fn または何もキャプチャしないクロージャconst Fn(A) -> B
pushdown fn(A) -> B即時手続きpushdown Fn(A) -> B
scene fn(A) -> Bシーンなし

属性

属性対象意味
#[scene]pushdown fnシーン:ステップの実行、シーンの呼び出し、乱数の取得ができる
#[entry]引数型と戻り値型が有限で Text を含まない #[scene]システムがここから物語を開始できる
#[must_use]struct、enum値を捨てる、または完了させないと警告 W3023
#[shader_arg]シェーダーが読める型の名前付きフィールドを持つ structその構造体をシェーダーの引数にできる
#[builtin]関数、構造体、トレイトコンパイラとエンジンが実装する。標準ライブラリのみ

引数を取る属性はありません。属性を参照してください。

特別な型

型有限Eq備考
bool、()、Int<lo, hi>はいはいInt<lo, hi> は物語の整数型
Rust の整数、Rat、Decimalいいえはい0.5 は Decimal
Textはいはい文字列リテラルと t![…] の型
アセット型はいはい値はアセット定数
Option<T>、構造体、列挙型、タプル、配列すべての構成要素が有限ならすべての構成要素が Eq なら物語では再帰型は不可
scene fn、pushdown fn、const fn のポインタ、Renderはいはい(同一性)
fn のポインタいいえはい(同一性)
クロージャいいえいいえ物語では第二級
String、Vec<T>、Duration、Color、EntityIdいいえはい(Vec は T: Eq なら)定数としてなら物語でも使える
Screenいいえはいレンダーが変換する型
Setting<T>、Meta<T>、Narrative、Element、画面の部品いいえいいえ不透明なハンドルと値

ビルトイン型と言語トレイトを参照してください。

フォーム(.kix のみ)

区切り受け付けるもの
name!( … )属性、続いて決まった数の要素
name![ … ]要素のみ、任意の数
name!{ … }属性、続いて任意の数の要素

属性は key = expr の形で、要素より前に、それぞれ一度だけ書きます。要素はカンマで区切りますが、t![…] の項目だけは並べて書きます。

フォーム脱糖先値属性要素
s!(…)push_step(Say { … })()who、voice、render、historyt![…] を最大一つ
choice!{…}push_step(Choice { … })アームの値の型id(必須、文字列リテラル)、renderアーム t![…] => V と t![…] if cond => V
t![…]ruby、mono_ruby、effect、to_text の呼び出しを並べた concat([…])Textなし"…"、["基"]("よみ")、["漢字"]("かん"|"じ")、!["…"](effect)、{expr}
column![…]、row![…]、layer![…]ui::column、ui::row、ui::layerElementなし任意の数
text!(…)ui::textElementstyleちょうど一つ
image!(…)ui::imageElementfitちょうど一つ
game_screen!(…)ui::game_screenElementgame(必須)なし
button!{…}ui::buttonElementon_click、disabled、style任意の数
slider!{…}ui::sliderElementvalue(必須)、on_change、step、disabled、styleなし
toggle!{…}ui::toggleElementvalue(必須)、on_change、disabled、style任意の数
select!{…}ui::selectElementvalue(必須)、on_change、disabled、style任意の数

s! と choice! はシーンの中でのみ使えます。UI フォームは fn の関数を呼ぶので、fn のコードで使います。フォームとステップを参照してください。

物語のアイテム

アイテム書き方
シーン#[scene] pushdown fn Name(…) -> R { … }
エントリーシーン#[scene] #[entry] pub pushdown fn Main(…) -> Ending { … }
即時手続きpushdown fn name(…) -> R { … }
物語変数static mut NAME: FiniteType = constant;
設定static NAME: Setting<T> = setting(init);
メタフィールドstatic NAME: Meta<T> = meta(init);
アセットconst NAME: ImageAsset = asset("path");。AudioAsset、VoiceAsset、VideoAsset、FontAsset も同様
シェーダーconst NAME: ColorShader<Args> = asset("name.wgsl");。MixShader、TextureShader、MaskShader、LocalMotionShader、TransitionalMotionShader も同様。Args は () か #[shader_arg] 構造体
システムフォントconst NAME: FontAsset = system_font("path");
エンティティ IDconst NAME: EntityId = EntityId(n);。n は 1 以上(0 は BACKGROUND)
レンダーconst fn name(mut screen: Screen) -> Screen { …; screen }
プログラムルートモジュールの fn main() -> System { … }

物語の制御フロー

したいこと書き方
台詞を表示するs!(who = "Mio", t!["…"]);
質問するmatch choice!{id = "ask", t!["Yes"] => Answer::Yes, t!["No"] => Answer::No} { … }
アームを隠すt!["…"] if condition => V
シーンを呼ぶName(x); または let v = Name(x);
シーンを抜けるreturn; / return value;、またはブロックの最後の式
分岐するif、if let、match(網羅的。範囲とタプルが使える)
ハブや繰り返しの選択肢loop { match choice!{…} { … } } と break
有界な繰り返し定数の範囲で for i in 0..n
カウンターを変えるx += 1;(Int の範囲で飽和)
物語の状態から計算するconst fn を呼ぶ。有限な実行時引数は表化される
メタを書くMETA_FIELD.write(v);
乱数を引く(シーンのみ)rng_choose::<T>()。T はフィールドのない列挙型か Int<lo, hi>
物語を終えるエントリーシーンから戻る。値は nav::start の on_exit に渡る

よく使う std の呼び出し

したいこと呼び出し種別
時間ms(500)、secs(2)const fn
色rgb(200, 0, 0)、hex(0xC80000)、BLACK、WHITE、TRANSPARENTconst fn
位置point(640, 360)、offset(0, -20)const fn
背景を変えるscreen.background().change(BG_ROOF).apply_animation(fade(ms(500)));const fn
立ち絵を差し替えるscreen.entity(MIO).image().change(MIO_SMILE).apply_animation(cut());const fn
エンティティをフェードインするscreen.entity(MIO).opacity().change(1.0).apply_animation(tween(ms(300)));const fn
モーションを再生するscreen.entity(MIO).apply_animation(jump(20, ms(300)));const fn
キャラクターを表示するcharacter(MIO).show(&mut screen, MIO_SMILE, point(320, 0), tween(ms(300)));const fn
BGM を変えるscreen.music().change(looped(THEME)).apply_animation(crossfade(secs(1)));const fn
効果音を鳴らすscreen.play(sound(CHIME));const fn
レンダーの中で待つscreen.wait(ms(500));const fn
テキストを装飾するt![!["red"](color_text(rgb(200, 0, 0))) ![""](click_wait())]t![…] の中
整数を変換するx.into()、x.saturate()const fn
設定を読む・変えるMUSIC.get()、MUSIC.set(v)fn
メタを読むCLEARED.get()fn
物語を開始するnav::start(story::Main, (CLEARED.get(),), on_ending)fn
モードを切り替えるnav::call(Config)、nav::dialog(Confirm)、nav::back()、nav::goto(Title)、nav::load(slot)、nav::quit()fn
リアクティブな値let (count, set_count) = signal(0u32);fn

スタジオ自身の定数(BG_ROOF、MIO など)を除き、上の名前はプレリュードにあります。API の全体は STD Reference にあります。

最終更新日 2026年10月29日