コンテンツへスキップ

Lattice リファレンス · 4 分の 2

Block、コンテンツ、線形フロー ​

Block はフローが対象にできる最小の段落です。執筆メタデータ、可視コンテンツ、任意の連続性の注釈、そしてちょうど一つのフロー終端を組み合わせます。

Block 宣言 ​

text
block opening (
  title: "The warning",
  purpose: setup,
  summary: { Mara finds the signal source. },
  setup: [signal_arc],
  tags: [opening]
) {
  text: { A light wakes beneath the garden. };
  next -> answer;
}

すべての Block は次の規則をすべて満たさなければなりません。

  • ID が、インポートされたすべてのファイルを通じて一意である。
  • title と purpose が存在する。
  • 少なくとも一つの text または dialogue 項目が可視である。
  • コンテンツ項目が終端より前に現れる。
  • 終端がちょうど一つ存在し、選ばれたストーリー種別と文脈で許可されている。
  • 参照されるすべての対象が存在し、メインストーリーまたは現在の Module の中に留まる。

Block メタデータ ​

フィールド必須許可される値意味
titleはいテキスト読者 / 執筆者に見える段落タイトル
purposeはいpurpose 識別子Block のナラティブ上の機能
summaryいいえテキスト執筆者向けの簡潔なあらすじ
prose_targetいいえ正の整数再配分可能な局所的な草稿予算
setupいいえマーカー ID リストナラティブの約束を導入する
requiresいいえマーカー ID リスト以前の伏線の根拠を期待する
resolvesいいえマーカー ID リスト以前の伏線の根拠を回収する
tagsいいえテキストまたはリスト執筆上の分類

prose_target には完全な Story の本文ゴールが必要です。段階的な執筆を導きますが、それだけで Block を有効または無効にするものではありません。

許可される purpose の値は次のとおりです。

値典型的な用途
setup登場人物、状況、問い、約束を確立する
exposition読者に必要な文脈を伝える
development確立された筋を進める
transition場所、時間、段階の間を移る
turn出来事の方向や意味を変える
climax決定的な行動でストーリーの中心的な圧力を解決する
resolution中心的な対立の後の結果を示す
payoff約束された明かし、結果、感情的な回収を届ける

これらの値は検証と執筆ツールを支えますが、フローは作りません。

ナレーション ​

ナレーションは text、コロン、本文値、セミコロンを使います。

text
text: {
  The station clock kept perfect time.
  Mara watched the second hand cross midnight.
};

Block には、読む順に複数のナレーションと対話の項目を含められます。

text
text: { The rails begin to sing. };
dialogue ch_mara: { That train is a day early. };
text: { No one on the platform turns to answer. };

text は可視コンテンツです。公開検証は、注釈やフローだけを含む Block を拒否します。アウトライン検証は一時的にそれを許可し、本文を書く前に最終的な Block グラフ、要約、予算、連続性の関係を確認できるようにします。プレビューとエクスポートは、欠けている読者向けテキストを執筆者向けの要約で代用しません。

対話 ​

宣言の形は dialogue <character-id> (<metadata>): <prose>; です。

text
dialogue ch_mara (
  mode: whisper,
  emotion: cautious,
  expression: focused,
  pose: listening,
  position: left,
  stage_direction: { She leans toward the soil. }
): { Not again. };

話者は宣言された character を参照しなければなりません。対話のメタデータはすべて任意です。

フィールド許可される値意味
modespeech、thought、whisper、shout発話の種別
positionleft、center、right読者への提示位置
emotion識別子アセット向けの感情状態
expression識別子アセット向けの表情
pose識別子アセット向けの身体のポーズ
stage_directionテキスト別個の動作または舞台の覚書

提示フィールドはプレビュー / エクスポートのために保持されますが、Block のフロー、Guard、ランタイム State を変えることは決してありません。アセット識別子が欠けていてもストーリーの分岐は作りません。

軽量な連続性マーカー ​

Block メタデータは、ランタイムロジックを追加せずに伏線と回収を記述できます。

text
block warning (
  title: "The warning",
  purpose: setup,
  setup: [signal_arc]
) {
  text: { The key pulses whenever Mara faces north. };
  next -> crossing;
}

block crossing (
  title: "Crossing",
  purpose: development,
  requires: [signal_arc]
) {
  text: { She trusts the pulse and steps into the fog. };
  next -> answer;
}

block answer (
  title: "The answer",
  purpose: payoff,
  resolves: [signal_arc]
) {
  text: { The pulse spells her own name. };
  end;
}
  • setup はマーカーを導入します。
  • requires は、この Block がそのマーカーが導入済みであることを期待する、という意味です。
  • resolves は、この Block がそのマーカーを回収する、という意味です。

マーカー ID は執筆上の事実であり、宣言された State ではありません。Module を条件に適合させたり、Pool の終了を満たしたり、通常のプレイヤーの選択を記憶したりはできません。

構造化された連続性イベント ​

構造化された注釈は、ナレーションと対話の間に置きます。

text
foreshadowing fs_signal: event {
  subject: ch_mara,
  object: it_key,
  predicate: notices,
  time: "before dawn"
};

reveals rv_signal resolves fs_signal: event {
  subject: ch_mara,
  object: it_key,
  predicate: understands,
  time: "midnight"
};

foreshadowing 宣言は独自の ID を持ちます。reveals 宣言は独自の ID を持ち、回収する伏線を名指しします。

イベントには subject と predicate が必要です。object、place、time は任意です。イベントの値は識別子、文字列、数値、真偽値のいずれかです。これらの注釈はナラティブの根拠のみを記述します。そのタプルが CYOA の State に似ていても、その State を有効化または削除することは決してありません。

フロー終端 ​

すべての Block は、次のいずれかの形でちょうど一つ終わります。

終端形使用できる場所
自動継続next -> target;Linear と CYOA、同じストーリーまたは Module
結末end;Linear と CYOA、ストーリー全体を終える
プレイヤーの選択choice { option ... }CYOA、同じストーリーまたは Module
Pool に入るenter pool_id -> resume;CYOA のメインストーリーのみ
Module を完了するcomplete (...);CYOA の Module のみ

暗黙のフォールスルーはありません。ファイルや Scene で次の Block が実行されるのは、終端がそれを対象にしている場合だけです。

Linear story の規則 ​

Linear story が許可するのは next と end だけです。

text
next -> answer;
text
end;

choice、enter、complete、predicate、state、state group、pool、module、story.initial_state は、それらの宣言が正しくパースされても拒否します。

Story の entry は一つの有限の連鎖を始めなければなりません。

text
entry -> block -> block -> ... -> one ending

完全な検証は次を拒否します。

  • entry への入力エッジ。
  • ちょうど一つの入力エッジを持たない、entry 以外の Block。
  • 分岐または合流。
  • 到達不能 / 接続されていない Block。
  • 循環。
  • 結末がない、または複数の結末がある。

完全な Linear の例 ​

text
story main (
  title: "Signal Garden",
  language: "en",
  format: novel,
  entry: opening,
  beat_order: [opening, resolution]
);

entity character ch_mara (name: "Mara", role: protagonist);
entity location loc_garden (name: "Signal Garden");

scene garden (
  title: "The garden",
  beat: opening,
  pov: ch_mara,
  location: loc_garden
) {
  block opening (
    title: "The warning",
    purpose: setup,
    setup: [signal_arc]
  ) {
    text: { A light wakes beneath the garden. };
    dialogue ch_mara (
      mode: whisper,
      emotion: cautious
    ): { Not again. };
    next -> answer;
  }

  block answer (
    title: "The answer",
    purpose: resolution,
    resolves: [signal_arc]
  ) {
    text: { She follows the light home. };
    end;
  }
}

宣言の順序はこのソースを読みやすくしますが、読む順序を定義するのは entry、next、end だけです。連鎖にリンクせずに Block を追加すると、到達不能な Block が生まれます。

beat の順序は Block のフローではない ​

story.beat_order は、Scene の beat メタデータに期待される順序を与えます。対応する検証経路では、欠落した、未知の、順序の違う beat を診断できますが、Block をつなぐことは決してありません。Linear story を複数ファイルに分割するときは、意図した beat の順序と明示的な Block の対象の両方を保ってください。

次へ:CYOA の選択、State、Pool、Module。